forked from GNUsocial/gnu-social
		
	
		
			
				
	
	
		
			230 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			230 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?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;
 | |
| 	}
 | |
| }
 |