phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

FAQFAQ - PIERWSZA POMOC!!  regulaminREGULAMIN  SzukajSZUKAJ  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload  katalog Forów DyskusyjnychKatalog Forów   FAQ Video tutoriale

Poprzedni temat «» Następny temat
Przesunięty przez: arcy
23-01-2009, 11:30
[Problem] Gadu-Gadu na forum - POPRAWKA DO WERSJI 1.12.6p2
Autor Wiadomość
joli
Yollien +Styler



Pomógł: 2988 razy
Posty: 16981
Wysłany: 05-12-2008, 22:33   [Problem] Gadu-Gadu na forum - POPRAWKA DO WERSJI 1.12.6p2

Jesli mamy problemy z GG, warto skorzystać z poprawki

http://www.przemo.org/php...p=405999#405999
_________________
Walczę z warezami. Więc jak masz forum warezowe, nie proś mnie o pomoc i nie wchodź pod rękę, bo zniszczę.
Nie pisz do mnie na GG i PW,(chyba że proszę) bo nie odpowiem, a Ty dostaniesz bonusik. Masz forum do zadawania pytań!!! Poza forum pomagam TYLKO odpłatnie.
liberte d'expression pour tout le monde... OFICJALNY DOWNLOAD STYLÓW - style ogólnodostępne i na zamówienie - PORTFOLIO JOLI
Ostatnio zmieniony przez lui754 06-06-2009, 12:55, w całości zmieniany 4 razy  
 
     
Gadatliwa Kasia 

   
Kubos

Posty: 97
Wysłany: 19-12-2008, 16:22   [Problem] Gadu-Gadu na forum

Witam. Kiedy chcę wysłać przez forum wiadomość gg, to wyskakuje mi taki błąd po kliknięciu "Wyślij":
Kod:
PROBLEM Z POLACZENIEM: 110 - Przekroczony czas oczekiwania na połączenie

Wie ktoś co trzeba pozmieniać, żeby to działało?
 
     
MagicalFire


Pomógł: 980 razy
Posty: 4353
Wysłany: 19-12-2008, 16:27   

to ze twój serwer nie ma takiej opcji
zmienić hosting
a poza tym masz ustawione dane w panelu ??
_________________
nie za takie Przemo walczyliśmy
 
     
Kubos

Posty: 97
Wysłany: 19-12-2008, 17:47   

MagicalFire napisał/a:
zmienić hosting

Hehe, to się obejdzie bez gg ;]
MagicalFire napisał/a:
a poza tym masz ustawione dane w panelu ??

No podałem mój nr. gg i hasło.
 
     
MagicalFire


Pomógł: 980 razy
Posty: 4353
Wysłany: 19-12-2008, 17:48   

Kubos, no to hosting nie obsługuje
_________________
nie za takie Przemo walczyliśmy
 
     
Petermechanic


Posty: 18
Wysłany: 19-12-2008, 18:09   

Nigdy się nie wyśle, GG zmieniło IP serwerów. Aby naprawić:
Cytat:

->Otwórz includes/functions_gg,php
->Znajdź:
Kod:

        $ip = array(85, 86, 88, 89);
        $host = '217.17.41.'.$ip[rand(0,sizeof($ip)-1)];

->Zamień na:
Kod:

        $ip = array(24, 33, 6, 7, 4, 5);
        $host = '91.197.13.'.$ip[rand(0,sizeof($ip)-1)];

->Otwórz includes/functions_gg_notice,php
->Znajdź:
Kod:

        $ip = array(85, 86, 88, 89);
        $host = '217.17.41.'.$ip[rand(0,sizeof($ip)-1)];

->Zamień na:
Kod:

        $ip = array(24, 33, 6, 7, 4, 5);
        $host = '91.197.13.'.$ip[rand(0,sizeof($ip)-1)];

->Zapisz i zamknij wszystkie pliki

Pozdrawiam
_________________
Pozdrawiam, Petermechanic.
 
     
Kaito

Posty: 1
Wysłany: 01-01-2009, 23:24   

@up Witam. Po zmianie adresów ip wyskakuje mi taki błąd
Kod:
Warning:unpack() [function.unpack]: Type V: not enough input, need 4, have 1 in /.../..../ftp/includes/functions_gg.php on line 177


Oczywiście wiąże się to z komunikatem iż wiadomość nie została wysłana proszę spróbować puźniej ;]
 
     
redox

Pomógł: 4 razy
Posty: 16
Wysłany: 02-01-2009, 13:42   

A mi nadal pisze to co na początku ;/ co zrobiC?
 
     
bomber

Posty: 8
Wysłany: 12-01-2009, 13:50   

mam ten sam komunikat

Kod:

[<a href='function.unpack'>function.unpack</a>]: Type V: not enough input, need 4, have 1 in ../public_html/forum/includes/functions_gg.php on line 179
 
     
MagicalFire


Pomógł: 980 razy
Posty: 4353
Wysłany: 12-01-2009, 13:52   

bomber, daj tu plik functions_gg.php
_________________
nie za takie Przemo walczyliśmy
 
     
bomber

Posty: 8
Wysłany: 12-01-2009, 14:08   

1.12.5
1.12.5 functions_gg.php

myslalem ze stara wersja i to tego wina wiec zamienilem na plik z 1.12.6

1.12.6
1.12.6 functions_gg.php

serwery podmienione, wiem ze do firewalla sa dopisane ipki gg
poniewaz zwykla bramka http://bikeforum.opole.pl/forum/gg/ dziala
jej gg to 11068948 jakby co ;) [pisze ze nie wysyla ale wiadomosci dochodza]
 
     
MagicalFire


Pomógł: 980 razy
Posty: 4353
Wysłany: 12-01-2009, 14:30   

bomber napisał/a:
myslalem ze stara wersja i to tego wina wiec zamienilem na plik z 1.12.6

te pliki sa takie same w tych wersjach
_________________
nie za takie Przemo walczyliśmy
 
     
bomber

Posty: 8
Wysłany: 12-01-2009, 14:45   

co nie zmienia faktu ze nie tylko mi to nie dziala :)

[ Dodano: 13-01-2009, 12:13 ]
Hm. Przyszlo mi cos jeszcze do glowy. phpbb2 korzysta z www2gg 2.2 a ta bramka ktora wkleilem wczesniej to www2gg 2.2.1. I to i to stoi na tym samym serwerze. Wersja php na dmkproject to 5.2.3.
Podejrzewam wiec ze www2gg 2.2 ma na niektorych serwerach problem? A 2.2.1 go nie ma?
Czy ktos jeszcze ma tutaj podobny problem na dmk?

[ Dodano: 20-01-2009, 10:55 ]
częsciowa poprawka

functions_gg.php

Kod:

        function odbierz_dane()
        {
                if ( !$data = fread($this->fp, 8) ) return FALSE;
                $tab = unpack("Vtyp/Vrozmiar", $data);

                while ($tab['typ'] == 0x0011 || $tab['typ'] == 0x0002)
                {
                        $data = @fread($this->fp, $tab['rozmiar']);

                        switch($tab['typ'])
                        {
                                case 0x0002:
                                case 0x0011:
                                        $tab = unpack("Vuin/Vstatus", $data);
                                break;
                        }

                        $data = @fread($this->fp, 8);
                        $tab = unpack("Vtyp/Vrozmiar", $data);
                }

                if ( !$data = @fread($this->fp, $tab['rozmiar']) ) return FALSE;

                if ( $tab['typ'] == 0x0005 )
                {
                        $tab = unpack("Vstatus/Vadresat/Vseq", $data);
                        $this->status_dostarczenia[$tab['seq']] = $tab['status'];
                }
                else if ( $tab['typ'] == 0x000e )
                {
                        $tab = unpack("Cunknown/Vczas/A*results", $data);
                        $this->wyniki_szukania = $tab['results'];
                }

                return TRUE;
        }


zamienic na:
Kod:

        function odbierz_dane($auto_odpowiedz = "")
        {
                if ( !$data = fread($this->fp, 8) ) return FALSE;
                $tab = unpack("Vtyp/Vrozmiar", $data);

                while ($tab['typ'] == 0x0011 || $tab['typ'] == 0x0002)
                {
                        $data = @fread($this->fp, $tab['rozmiar']);

                        switch($tab['typ'])
                        {
                                case 0x0002:
                                case 0x0011:
                                $tab = unpack("Vuin/Vstatus", $data);

                                    $this->Debug("Otrzymano wiadomosc ", $tab);
                                    if ($auto_odpowiedz)
                                    $this->wyslij_wiadomosc($tab['nadawca'], $auto_odpowiedz, FALSE); //bez potwierdzen
                                    array_push($this->wiadomosci, $tab);

                                break;
                        }

                        $data = @fread($this->fp, 8);
                        $tab = unpack("Vtyp/Vrozmiar", $data);
                }

                if ( !$data = @fread($this->fp, $tab['rozmiar']) ) return FALSE;

                if ( $tab['typ'] == 0x0005 )
                {
                        $tab = unpack("Vstatus/Vadresat/Vseq", $data);
                        $this->status_dostarczenia[$tab['seq']] = $tab['status'];
                }
                else if ( $tab['typ'] == 0x000e )
                {
                        $tab = unpack("Cunknown/Vczas/A*results", $data);
                        $this->wyniki_szukania = $tab['results'];
                }

                return TRUE;
        }


oraz

Kod:

                        case 0x0003:
                                if ( $seq = $this->wyslij_wiadomosc($adresat, $tresc) )
                                {
                                        if ( $this->odbierz_dane() ) $this->logoff("");
                                        return $seq;
                                }
                                else
                                {
                                        $this->debug("Polaczenie zerwane po zalogowaniu");
                                        break;
                                }


zamienic na:
Kod:

                        case 0x0003:
                            if ($this->wyslij_liste_kontaktow ($adresat)) {
                                if ( $seq = $this->wyslij_wiadomosc($adresat, $tresc) )
                                        if ($this->odbierz_dane($this->auto_odpowiedz))  // czy wysylac odp. ze bramka
                                $this->logoff($this->OPIS_W_STATUSIE_PO_WYLOGOWANIU);
                                        return $seq;
                                }
                                else
                                {
                                        $this->debug("Polaczenie zerwane po zalogowaniu");
//                                      break;
                                }


Umozliwy to wysylanie wiadomosci do innych uzytkownikow. [Dziala prawie zawsze ;P mimo blednego komunikatu]
Powiadomienia uzytkownikow/adminow wciaz nie dzialaja. [functions_gg_notice.php nie poprawione]
 
     
Krzyś Kaspruk

Pomógł: 1 raz
Posty: 2
Wysłany: 23-01-2009, 11:27   

bomber napisał/a:
(...) częsciowa poprawka (...)
poprawka wygląda na robioną na zasadzie "wstawię w losowym miejscu wywołanie losowej metody i zobaczę czy działa".

Gadu-Gadu nieznacznie zmodyfikowało protokół, a w zasadzie wykorzystało niedokładną implementację tegoż w bramce gg. Od teraz klient po zalogowaniu dostaje pakiet GG_LOGIN_OK o długości 1 z polem o wartości 0x1F o nieznanym przeznaczeniu (nawet dla wersji GG starszych od 6.0 Build 140). Niestety nasza bramka była na tyle niechlujnie napisana, że nie fatygowała się sprawdzać jakichkolwiek długości pakietów, co skwapliwie wykorzystała firma Gadu-Gadu, i dlatego dopiero w późniejszej części kodu ta wartość była odczytywana ze strumienia (i stąd ten błąd z funkcją unpack). Poprawka tego niedociągnięcia wygląda następująco:
w pliku functions_gg.php w funkcji login fragment
Kod:
                if ( !$data1 = fread($this->fp, 8) ) return 0x000B;
                $tab = unpack("Vlogin_status/Vrozmiar", $data1);

                return $tab['login_status'];
zamieniamy na:
Kod:
                if ( !$data1 = fread($this->fp, 8) ) return 0x000B;

                $tab = unpack("Vlogin_status/Vrozmiar", $data1);
                if ($tab['rozmiar']>0)
                        $dummy = fread($this->fp, $tab['rozmiar']);

                return $tab['login_status'];
Następnym problemem - zauważonym przez mojego przedmówcę - jest fakt, że serwery GG oczekują albo na listę kontaktów (pakiety typu GG_NOTIFY_FIRST bądź GG_NOTIFY_LAST), albo na informację o pustej liście (pakiet GG_LIST_EMPTY). Przedmówca zaproponował wysłać listę kontaktów z jednym kontaktem - adresatem wiadomości, ja proponuję zamiast tego wysłać pustą listę. W tym celu w pliku functions_gg.php, w klasie GaduGadu, np. pod funkcją function wyslij_liste_kontaktow ($uin), należy zdefiniować funkcję pusta_lista_kontaktow w następujący sposób:
Kod:
        function pusta_lista_kontaktow ()
        {
                $data = pack ("VV",0x0012, 0);
                return @fwrite($this->fp,$data);
        }
Następnie, by informacja o pustej liście kontaktów została wysłana tuż po zalogowaniu, należy w funkcji wiadomosc (znajdującej się w klasie www2gg zamienić następujący fragment:
Kod:
                list ($host, $port) = $this->znajdz_serwer($this->numer);

                switch ($this->login($this->numer, $this->haslo, $host, $port, ""))
                {
                        case 0x0003:
                                if ( $seq = $this->wyslij_wiadomosc($adresat, $tresc) )
na:
Kod:
                list ($host, $port) = $this->znajdz_serwer($this->numer);

                switch ($this->login($this->numer, $this->haslo, $host, $port, ""))
                {
                        case 0x0003:
                                $this->pusta_lista_kontaktow();
                                if ( $seq = $this->wyslij_wiadomosc($adresat, $tresc) )
Ponowna próba wysłania wiadomości wewnątrz metody odbierz_dane i w dodatku w rozgałęzieniu dotyczącym powiadomienia o statusie osób z naszej listy kontaktów (tak jak to zrobił mój przedmówca) wydaje mi się nieporozumieniem.

Po tych zmianach należy jeszcze ustawić starszą wersję protokołu wykorzystywanego przez skrypt - w sygnaturze funkcji login w klasie GaduGadu trzeba zmniejszyć nr wersji o 1 - czyli było:
Kod:
function login($numer, $haslo, $host, $port, $opis = "", $wersja = 0x22)
a powinno być:
Kod:
function login($numer, $haslo, $host, $port, $opis = "", $wersja = 0x21)
Czemu przy nowszej wersji protokołu nie chce działać, nie chciało mi się sprawdzać.


Teraz kolej na functions_gg_notice.php. W ciele funkcji wiadomosc_gg zmieniamy początkową wartość zmiennej $wersja na 0x21 (analogicznie jak poprzednio), czyli: to:
Kod:
        $wersja = 0x22;
zmieniamy na:
Kod:
        $wersja = 0x21;
Analogicznie jak poprzednio należy również przed wysłaniem wiadomości wysłać na serwer listę kontaktów bądź pakiet informujący o jej braku - fragment
Kod:
        @fwrite($fp, @pack("VVVVVVvVvVvCCa".strlen($opis), 0x0015, 0x20 + strlen($opis), $numer, $hash, ($opis)?0x0004:0x0014, $wersja, 0, 0, 0, 0, 0, 0x14, 0xbe , $opis ));

        if ( is_array($list_addressats) )
        {
                for($i = 0; $i < count($list_addressats); $i++)
zamieniamy na:
Kod:
        @fwrite($fp, @pack("VVVVVVvVvVvCCa".strlen($opis), 0x0015, 0x20 + strlen($opis), $numer, $hash, ($opis)?0x0004:0x0014, $wersja, 0, 0, 0, 0, 0, 0x14, 0xbe , $opis ));

        @fwrite($fp, @pack("VV", 0x0012, 0));
        if ( is_array($list_addressats) )
        {
                for($i = 0; $i < count($list_addressats); $i++)
Po takich poprawkach - o ile o niczym nie zapomniałem - (+ oczywiście poprawki dotyczące adresów IP - bramka powinna chyba nie mieć adresów na sztywno, tylko je odczytywać z odpowiedzi serwera?) powiadamianie oraz bramka wydają się działać.
Ostatnio zmieniony przez Przemo 02-02-2009, 00:36, w całości zmieniany 3 razy  
 
     
Gadatliwa Kasia 

   
Przemo



Pomógł: 210 razy
Posty: 3147
Wysłany: 01-02-2009, 18:12   

Krzyś Kaspruk, wielkie dzięki za poprawke, działa !!
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Kopiowanie wszelkich treści zawartych na forum, modyfikacji oraz instrukcji bez zgody administracji i autorów tematów/postów zabronione!

Powered by phpBB modified by Przemo © 2003 phpBB
Strona wygenerowana w 0,11 sekundy. Zapytań do SQL: 14
Polecane serwisy

Najlepsze oprogramowanie do prowadzenia sklepu internetowegoNajlepszy program do sklepu firmowany przez Przem'a

Sklep z gadżetami

mediaclick.pl

serwis laptopów

phpbb

Polisy Ubezpieczeniowe TU Europa

Design Cart - Tworzenie sklepu internetowego

dnirozwoju.pl

Ranking Hostingów HostingOnline.pl

• Zamów reklamę