Siemka, w oparciu o
http://libgadu.net/protocol/ chciałem napisać własną blibliotekę gg , ale coś nie trybi, nie chce się zalogować. Kod:
<?php
class GG {
const P_LOGIN80 = 0x0031;
const P_HEADER_L = 8; // DLUGOSC HEADERA PAKIETU
const GG_VERSION = 'Gadu-Gadu Client build 10.0.0.10450';
function __construct($NUMER, $HASLO) {
// ZAPISUJEMY NUMER I HASLO
$this->NUMER = $NUMER;
$this->HASLO = $HASLO;
// POBIERANIE ADRESU I PORTU SERWERA GG
$odpowiedz = file_get_contents('http://appmsg.gadu-gadu.pl/appsvc/appmsg.asp?fmnumber='.$this->NUMER.'&version=8.0.0.7669'); preg_match('/\s([^\s]*?):(.*?)\s/', $odpowiedz, $wynik); $this->ADRES = $wynik[1];
$this->PORT = $wynik[2];
}
private function PobierzPakiet() {
$odpowiedz = fread($this->POLACZENIE, self::P_HEADER_L);
$wynik_headera = unpack('Vtyp/Vrozmiar', $odpowiedz);
$wynik_docelowy = fread($this->POLACZENIE, $wynik_headera['rozmiar']);
return $wynik_docelowy;
}
private function WyslijPakiet($id, $pakiet) {
$DlugoscPakietu = strlen($pakiet); $OstatecznyPakiet = pack('VVa'.$DlugoscPakietu, $id, $DlugoscPakietu, $pakiet); fwrite($this->POLACZENIE, $OstatecznyPakiet); }
function ZakodujHaslo2($haslo, $klucz)
{
$x0=0;
$x1=0;
$y0=0;
$y1=0;
$z=0;
$tmp=0;
$y0 = ($klucz << 16) >> 16;
$y1 = $klucz >> 16 ;
for ($i=0; $i<strlen($haslo); $i++)
{
$x0 = ($x0 & 0xFF00) | ord($haslo[$i]); $x1 &= 0xFFFF;
$y0 ^= $x0; $y1 ^= $x1;
$y0 += $x0; $y1 += $x1;
$x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
$y0 ^= $x0; $y1 ^= $x1;
$x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
$y0 -= $x0; $y1 -= $x1;
$x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
$y0 ^= $x0; $y1 ^= $x1;
$z = $y0 & 0x1F;
$y0 &= 0xFFFF; $y1 &= 0xFFFF;
if ( $z <= 16 )
{
$tmp= ($y1 << $z) | ($y0 >> (16-$z));
$y0 = ($y1 >> (16-$z)) | ($y0 << $z);
$y1 = $tmp;
}
else
{
$tmp= $y0 << ($z-16);
$y0 = ($y0 >> (32-$z)) | ( (($y1 << $z) >> $z) << ($z-16) );
$y1 = ($y1 >> (32-$z)) | $tmp;
}
$y0 &= 0xFFFF; $y1 &= 0xFFFF;
}
return $hash;
}
public function Loguj() {
// LACZYMY SIE Z SERWEREM GG
$this->POLACZENIE = fsockopen($this->ADRES, $this->PORT);
$odpowiedz = $this->PobierzPakiet();
$ziarno = unpack('Vziarno', $odpowiedz);
$ZakodowaneHaslo = $this->ZakodujHaslo2($this->HASLO, $ziarno['ziarno']);
$pakiet = pack('Va2ca64VVVVvVvccVa23V', $this->NUMER,
'pl',
0x01,
$ZakodowaneHaslo,
0x0002,
0,
0x00000007,
0,
0,
0,
0,
100,
0x64,
0x23,
'Gadu-Gadu Client build 10.0.0.10450',
0
);
$this->WyslijPakiet(self::P_LOGIN80, $pakiet);
$wiad = 'czesc';
$this->WyslijPakiet(0x002d
, pack('VVVVVa'.strlen($wiad).'cc', 895868
, time(), 0x0008
, 20
, 20
+strlen($wiad), $wiad, 0
, 0
)); }
}
Pomoże ktoś bardziej ogarnięty?