123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- <?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;
- }
- }
|