forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			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; | ||
|  | 	} | ||
|  | } |