icq klasse

anyany

Mitglied
[erledigt]icq klasse

hallo ich hab ein problem, die entsprechende klasse gibs hier
ich will folgendes tun:
PHP:
$icq->recv($flap,$wait);
die funktion ist wiefolgt aufgebaut:
PHP:
function recv(&$flap,$wait=NULL){
		if(!$this->connected()){
			trigger_error(trigger_message('Not connected'),E_USER_WARNING);
			return false;
		}
		if($wait===false){
			$rec_blocking=$this->blocking;
			$this->set_blocking(false);
		}
		elseif($wait!==NULL){
			$rec_timeout=$this->timeout;
			$this->set_timeout($wait);
		}
		$res=$this->_recv($flap,$wait);
		if($wait===false){
			$this->set_blocking($rec_blocking);
		}
		elseif($wait!==NULL){
			$this->set_timeout($rec_timeout);
		}
		if(
			$res!==false&&
			$flap->channel==4&&
			!$flap->obj->error
		){
			$this->close($this->sck);
			if($this->cookie!=NULL&&$this->server!=NULL)$this->_connect();
		}
		return $res;
	}
so und folgendes gibt er mir dann über var_dump($flap); aus:
PHP:
object(icq_flap)#4 (6) { ["id"]=>  int(42) ["channel"]=>  int(2) ["sequence"]=>  int(42894) ["length"]=>  int(14) ["data"]=>  string(14) "????–Mì§???" ["obj"]=>  object(icq_snac)#2 (6) { ["family"]=>  int(11) ["command"]=>  int(2) ["flags"]=>  int(0) ["reference"]=>  int(38477) ["data"]=>  string(4) "???" ["obj"]=>  object(icq_unknown)#7 (0) { } } }

wie komm ich jetzt dadran was ich zugeschickt bekommen hab, wird wahrscheinlich "data" sein aber ihr seh ja selber was raus kommt
 
Zuletzt bearbeitet:
Moin,

soweit ich das den Skripten entnehme, dient die Funktion hecho() der Umwandlung des Nachrichtentextes in ein lesbares Format und dessen direkter Ausgabe.
 
ah ok danke ich guck mir das mal genauer an

EDIT 1:
hab jetzt mal hallo eingegeben und das hab ich durch hecho vom script zurueckbekommen 00 0b 00 02 00 00 98 8d 9e 81 00 1e 00 00

kann jemand was damit anfangen?
 
Zuletzt bearbeitet:
na die klasse is halt da um icq über php zu steuern
die funktion $icq->recv(...) is dafuer da um die nachrichten die ich bekommen hab auszulesen

hecho() macht folgendes:
PHP:
function hecho($str){
	echo "<pre>\n";
	for($i=0;$i<strlen($str);$i++){
		echo (ord(substr($str,$i,1))<16?"0":"").dechex(ord(substr($str,$i,1)))." ";
		if(($i+1)%8==0)echo ' ';
		if(($i+1)%16==0)echo "\n";
	};
	echo "</pre>\n";
}

edit1:
ich hab gerade mal bissel weiter gegooglt und dabei das gefunden http://iserverd.khstu.ru/oscar/ da steht was flaps sind, hab ich mich wohl getaeuscht, gibs denn ne andere moeglichkeit nachrichten zu empfangen?

edit2:
hab jetzt ne neue funktion gefunden:
PHP:
function get_srv_recvmsg($str){
		$obj=new icq_srv_recvmsg;
		$pos=0;
		$obj->time=substr($str,$pos,4);
		$pos+=4;
		$obj->id=substr($str,$pos,4);
		$pos+=4;
		$obj->type=bytesint(substr($str,$pos,2));
		$pos+=2;
		$uinlen=byteint(substr($str,$pos,1));
		$pos++;
		$obj->uin=substr($str,$pos,$uinlen);
		$pos+=$uinlen;
		$obj->warning=bytesint(substr($str,$pos,2));
		$pos+=2;
		$count=$obj->count=bytesint(substr($str,$pos,2));
		$pos+=2;
		while($pos<strlen($str)){
			$tlv=$this->extract_tlv($str,$pos);
			switch($tlv->type){
				case 6:$obj->status=$tlv;break;
				case 2:
					$obj->message=new icq_sub_msg_type1;
					$str2=$tlv->data;
					$pos2=0;
					while($pos2<strlen($str2)){
						if($obj->type==1){
							$tlv=$this->extract_tlv($str2,$pos2);
							switch($tlv->type){
								case 1281:
									$obj->message->capabilities=$tlv->data;
									break;
								case 257:
									$obj->message->encoding=bytesint(substr($tlv->data,0,2));
									$obj->message->message=$obj->messagetext=substr($tlv->data,4);
									break;
							}
						}
					}
					break;
				case 5:
					if($obj->type==2){
					}
					elseif($obj->type==4){
						$obj->message=new icq_sub_msg_type4;
						$message=&$obj->message;
						$str2=$tlv->data;
						$pos2=0;
						$message->uin=$this->get_dwordl(substr($str2,$pos2,4));
						$pos2+=4;
						$message->msgtype=$this->get_wordl(substr($str2,$pos2,2));
						$pos2+=2;
						$message->message=$this->extract_lnts(&$str2,$pos2);
						switch($message->msgtype){
							case 4:
								$split=explode(chr(254),$message->message);
								$message->obj=new icq_sub_url;
								$message->obj->description=$split[0];
								$message->obj->url=$split[1];
								break;
							case 19:
								$contacts=array();
								$split=explode(chr(254),$message->message);
								for($j=1,$l=count($split)-1;$j<$l;$j+=2)$contacts[$split[$j+1]]=$split[$j];
								$message->obj=$contacts;
								break;
						}
					}
					break;
			}
		}
		return $obj;
	}

die klasse:

class icq_srv_recvmsg{
	var $time;
	var $id;
	var $type;
	var $uin;
	var $warning;
	var $count;
	var $status;
	var $message;
	var $messagetext;
}
 
Zuletzt bearbeitet:
push, niemand ne idee? hat denn damit ueberhaupt schon jemand gearbeitet von euch?

EDIT: hab jetzt ne andere klasse gefunden die es in sich hat
bei bedarf pm an mich
 
Zuletzt bearbeitet:
Zurück