]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Aim/extlib/phptoclib/dconnection.php
Create IM plugin, Pluginize XMPP, Create AIM plugin
[quix0rs-gnu-social.git] / plugins / Aim / extlib / phptoclib / dconnection.php
diff --git a/plugins/Aim/extlib/phptoclib/dconnection.php b/plugins/Aim/extlib/phptoclib/dconnection.php
new file mode 100755 (executable)
index 0000000..c6be25f
--- /dev/null
@@ -0,0 +1,229 @@
+<?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;
+       }
+}