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