230 lines
4.7 KiB
PHP
230 lines
4.7 KiB
PHP
|
<?php
|
||
|
|
||
|
//The following class was created June 30th 2004 by Jeremy(pickle)
|
||
|
//This class is designed to handle a direct connection
|
||
|
|
||
|
class Dconnect
|
||
|
{
|
||
|
var $sock;
|
||
|
var $lastReceived;
|
||
|
var $lastMessage;
|
||
|
var $connected;
|
||
|
var $cookie;
|
||
|
var $type=2;
|
||
|
var $connectedTo;
|
||
|
|
||
|
|
||
|
function Dconnect($ip,$port)
|
||
|
{
|
||
|
if(!$this->connect($ip,$port))
|
||
|
{
|
||
|
sEcho("Connection failed constructor");
|
||
|
$this->connected=false;
|
||
|
}
|
||
|
else
|
||
|
$this->connected=true;
|
||
|
|
||
|
$this->lastMessage="";
|
||
|
$this->lastReceived="";
|
||
|
}
|
||
|
|
||
|
function readDIM()
|
||
|
{
|
||
|
/*
|
||
|
if(!$this->stuffToRead())
|
||
|
{
|
||
|
sEcho("Nothing to read");
|
||
|
$this->lastMessage=$this->lastReceived="";
|
||
|
return false;
|
||
|
}
|
||
|
*/
|
||
|
$head=fread($this->sock,6);
|
||
|
if(strlen($head)<=0)
|
||
|
{
|
||
|
sEcho("The direct connection has been closed");
|
||
|
return false;
|
||
|
}
|
||
|
$minihead=unpack("a4ver/nsize",$head);
|
||
|
if($minihead['size'] <=0)
|
||
|
return;
|
||
|
$headerinfo=unpack("nchan/nsix/nzero/a6cookie/Npt1/Npt2/npt3/Nlen/Npt/npt0/ntype/Nzerom/a*sn",fread($this->sock,($minihead['size']-6)));
|
||
|
$allheader=array_merge($minihead,$headerinfo);
|
||
|
sEcho($allheader);
|
||
|
if($allheader['len']>0 && $allheader['len'] <= MAX_DIM_SIZE)
|
||
|
{
|
||
|
$left=$allheader['len'];
|
||
|
$stuff="";
|
||
|
$nonin=0;
|
||
|
while(strlen($stuff) < $allheader['len'] && $nonin<3)
|
||
|
{
|
||
|
$stuffg=fread($this->sock,$left);
|
||
|
if(strlen($stuffg)<0)
|
||
|
{
|
||
|
$nonin++;
|
||
|
continue;
|
||
|
}
|
||
|
$left=$left - strlen($stuffg);
|
||
|
$stuff.=$stuffg;
|
||
|
}
|
||
|
$data=unpack("a*decoded",$stuff);
|
||
|
}
|
||
|
|
||
|
else if($allheader['len'] > MAX_DIM_SIZE)
|
||
|
{
|
||
|
$data['decoded']="too big";
|
||
|
}
|
||
|
|
||
|
else
|
||
|
$data['decoded']="";
|
||
|
$all=array_merge($allheader,$data);
|
||
|
|
||
|
$this->lastReceived=$all;
|
||
|
$this->lastMessage=$all['decoded'];
|
||
|
|
||
|
//$function=$this->DimInf . "(\$all);";
|
||
|
//eval($function);
|
||
|
|
||
|
return $all;
|
||
|
}
|
||
|
|
||
|
function sendMessage($message,$sn)
|
||
|
{
|
||
|
//Make the "mini header"
|
||
|
$minihead=pack("a4n","ODC2",76);
|
||
|
$header=pack("nnna6NNnNNnnNa*",1,6,0,$this->cookie,0,0,0,strlen($message),0,0,96,0,$sn);
|
||
|
$bighead=$minihead . $header;
|
||
|
while(strlen($bighead)<76)
|
||
|
$bighead.=pack("c",0);
|
||
|
|
||
|
$tosend=$bighead . pack("a*",$message);
|
||
|
$w=array($this->sock);
|
||
|
stream_select($r=NULL,$w,$e=NULL,NULL);
|
||
|
//Now send it all
|
||
|
fputs($this->sock,$tosend,strlen($tosend));
|
||
|
}
|
||
|
function stuffToRead()
|
||
|
{
|
||
|
//$info=stream_get_meta_data($this->sock);
|
||
|
//sEcho($info);
|
||
|
$s=array($this->sock);
|
||
|
$changed=stream_select($s,$fds=NULL,$m=NULL,0,20000);
|
||
|
return ($changed>0);
|
||
|
}
|
||
|
|
||
|
function close()
|
||
|
{
|
||
|
$this->connected=false;
|
||
|
return fclose($this->sock);
|
||
|
}
|
||
|
|
||
|
function connect($ip,$port)
|
||
|
{
|
||
|
$this->sock=fsockopen($ip,$port,$en,$es,3);
|
||
|
if(!$this->sock)
|
||
|
{ sEcho("Connection failed");
|
||
|
$this->sock=null;
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
class FileSendConnect
|
||
|
{
|
||
|
var $sock;
|
||
|
var $lastReceived;
|
||
|
var $lastMessage;
|
||
|
var $connected;
|
||
|
var $cookie;
|
||
|
var $tpye=3;
|
||
|
|
||
|
|
||
|
function FileSendConnect($ip,$port)
|
||
|
{
|
||
|
if(!$this->connect($ip,$port))
|
||
|
{
|
||
|
sEcho("Connection failed constructor");
|
||
|
$this->connected=false;
|
||
|
}
|
||
|
else
|
||
|
$this->connected=true;
|
||
|
|
||
|
$this->lastMessage="";
|
||
|
$this->lastReceived="";
|
||
|
}
|
||
|
|
||
|
function readDIM()
|
||
|
{
|
||
|
|
||
|
if(!$this->stuffToRead())
|
||
|
{
|
||
|
sEcho("Nothing to read");
|
||
|
$this->lastMessage=$this->lastReceived="";
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$minihead=unpack("a4ver/nsize",fread($this->sock,6));
|
||
|
if($minihead['size'] <=0)
|
||
|
return;
|
||
|
$headerinfo=unpack("nchan/nsix/nzero/a6cookie/Npt1/Npt2/npt3/Nlen/Npt/npt0/ntype/Nzerom/a*sn",fread($this->sock,($minihead['size']-6)));
|
||
|
$allheader=array_merge($minihead,$headerinfo);
|
||
|
sEcho($allheader);
|
||
|
if($allheader['len']>0)
|
||
|
$data=unpack("a*decoded",fread($this->sock,$allheader['len']));
|
||
|
else
|
||
|
$data['decoded']="";
|
||
|
$all=array_merge($allheader,$data);
|
||
|
|
||
|
$this->lastReceived=$all;
|
||
|
$this->lastMessage=$all['decoded'];
|
||
|
|
||
|
//$function=$this->DimInf . "(\$all);";
|
||
|
//eval($function);
|
||
|
|
||
|
return $all;
|
||
|
}
|
||
|
|
||
|
function sendMessage($message,$sn)
|
||
|
{
|
||
|
//Make the "mini header"
|
||
|
$minihead=pack("a4n","ODC2",76);
|
||
|
$header=pack("nnna6NNnNNnnNa*",1,6,0,$this->cookie,0,0,0,strlen($message),0,0,96,0,$sn);
|
||
|
$bighead=$minihead . $header;
|
||
|
while(strlen($bighead)<76)
|
||
|
$bighead.=pack("c",0);
|
||
|
|
||
|
$tosend=$bighead . pack("a*",$message);
|
||
|
|
||
|
//Now send it all
|
||
|
fwrite($this->sock,$tosend,strlen($tosend));
|
||
|
}
|
||
|
function stuffToRead()
|
||
|
{
|
||
|
//$info=stream_get_meta_data($this->sock);
|
||
|
//sEcho($info);
|
||
|
$s=array($this->sock);
|
||
|
$changed=stream_select($s,$fds=NULL,$m=NULL,1);
|
||
|
return ($changed>0);
|
||
|
}
|
||
|
|
||
|
function close()
|
||
|
{
|
||
|
$this->connected=false;
|
||
|
fclose($this->sock);
|
||
|
unset($this->sock);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
function connect($ip,$port)
|
||
|
{
|
||
|
$this->sock=fsockopen($ip,$port,$en,$es,3);
|
||
|
if(!$this->sock)
|
||
|
{ sEcho("Connection failed to" . $ip . ":" . $port);
|
||
|
$this->sock=null;
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
}
|