protokól gg

0

Witam,
Mam pytanie odnośnie protokołu gg , czy jeśli tą strukturę do logowania się wyślę np źle "wypełnioną"( w sensie jakieś bity w polach po zmieniam czy np błędnie wersje gg podam to czy od serwera otrzymam jakąś odpowiedź o błedzie czy po prostu nic nie otrzymam - pytam się , gdyż wydaje mi się, że wysyłam paczki do serwera gg z numerem gg itp( --ziarno jakoś wcześniej odbieram) ,ale nie otrzymuje żadnej odpowiedzi od serwera.(korzystam z wxWidgets ( wxSocketClient z metody Write do wysyłania )
z góry dziękuję za pomoc ( jak trzeba będzie to wkleję kod);

0

Jakąś odpowiedź powinieneś dostać. Według tego powinno być GG_LOGIN80_OK lub GG_LOGIN_FAILED.

0

Sprawdziłem paczki snifferem i to wygląda w ten sposób że gdy wysyłam ten gg_header z informacją że zaraz wyśle paczkę z numerem gg itp serwer zwraca pusty pakiet( chyba tak jak powinno być) potem wysyłam tą paczkę i wtedy otrzymuje dwa pakiety kolejny pusty i jeszcze jeden z flaga FIN(zamyka połączenie). Czy to oznacza ze mam źle wypełniona structurę gg_login??- tak mi się wydaje, chcę tylko upwenić

0

to wygląda w ten sposób że gdy wysyłam ten gg_header z informacją że zaraz wyśle paczkę z numerem gg
Nie rozumiem, jaki pakiet? Po połączeniu powinieneś odebrać GG_WELCOME z seedem, a później wysłać GG_LOGIN80 i czekać na GG_LOGIN80_OK/GG_LOGIN_FAILED (w każdym razie tak rozumiem opis protokołu).

0

Przepraszam że pisze 2 posty pod rząd , ale
już nie wiem czy ja coś źle w wxWidgets pisze czy to wina żle działajacej struktury
więć tu jest mały wycinek kodu ( z serwerm http sie łacze, pózniej odbieram seed i jest ok ale przy logowaniu jest problem nie wiem gdzie-zamiast otrzymać choćby informacje o nie zalogowaniu się dostaje pustą paczke):

struct gg_login80 {
        int uin;              /* numer Gadu-Gadu */
        char language[2];     /* język: "pl" */
        char hash_type;       /* rodzaj funkcji skrótu hasła */
        char hash[64];        /* skrót hasła dopełniony \0 */
        int status;           /* początkowy status połączenia */
        int flags;            /* flagi (przeznaczenie nieznane) */
        int features;         /* opcje protokołu (0x00000007)*/
        int local_ip;         /* lokalny adres połączeń bezpośrednich (nieużywany) */
        short local_port;     /* lokalny port połączeń bezpośrednich (nieużywany) */
        int external_ip;      /* zewnętrzny adres (nieużywany) */
        short external_port;  /* zewnętrzny port (nieużywany) */
        char image_size;      /* maksymalny rozmiar grafiki w KB */
        char unknown2;        /* 0x64 */
        int version_len;      /* długość ciągu z wersją (0x21) */
        char version[0x21];       /* "Gadu-Gadu Client build 8.0.0.7669" (bez \0) */
        int description_size; /* rozmiar opisu */

};
	//parensacie wierszy wyżej^^^^^

		wxString temp=WxEdit2->GetValue(); ///<- tu jest hasło 
            int hash=this->gg_login_hash((char*)temp.mb_str(wxConvUTF8),welcome.seed);

  
            //2) wypełnianie paczki

            gg_login80 gg_login={wxAtoi( WxEdit1->GetValue() ),'p',GG_LOGIN_HASH_GG32,'0',GG_STATUS_AVAIL,0,0x00000007,0,0,0,0,0x64,0,0x21,'G',0};;
          
           char* ee="Gadu-Gadu Client build 8.0.0.7669";
           wxString t2 = wxString::Format(wxT("%d"),hash);
            strcpy(gg_login.hash, (const char*) t2.mb_str(wxConvUTF8)  );
            strcpy(gg_login.version, ee);
            gg_login.language[1]='l';


            header=new gg_header;
            header->type=GG_LOGIN80;
            header->length = sizeof(gg_login);
            this->connection->Write(header, sizeof(*header));
            this->connection->Write(&gg_login,header->length);

            header=new gg_header;
            this->connection->Read(header,sizeof(*header));

            if(header->type == GG_LOGIN80_OK ) wxMessageBox("zalogowano");  else if(header->type ==GG_LOGIN_FAILED)wxMessageBox("Nie zalogowano");  else wxMessageBox("nie wiem");

Prosze o pomoc, z góry dzięki :)

0

dostaje pustą paczke

Pustą paczkę czyli co?


PS 1. przy GG_LOGIN80_OK powinieneś odebrać gg_login80_ok.
PS 2. zakładam, że sockety masz ustawione na wxSOCKET_WAITALL.

0

pusta paczka czyli buffer jest pusty ale jak snifferem sprawdzam to otrzymuje paczki/pakiety (tcp/ip czyli ten cały header tcp (odsyłam do wikipedii) ale o wartosci 0000=> czyli buffer jest pusty)

0

Hmm, jeśli przerywa ci połączenie, to z dużym prawdopodobieństwem masz coś nie tak z tą strukturą. Czy aby na pewno gg_login80 (i całą reszta) jest wyrównana do jednego bajta?

0

Mnie tez się tak wydaje , Już nie wiem może źle konwertuje dane wxWidgetsowe;, jeśli mógłby ktoś sprawdzić(czyt. porównać ze specyfikacja protokołu) czy dobrze to robię byłbym wdzięczny

0

Pytałem się, czy wszystkie struktury gg_xxx masz wyrównane do jednego bajta. Jeśli nie wiesz o co pytam, patrz 1.1. Format pakietów i konwencje.

Bez odpowiedzi na to pytanie nie ma sensu dalej drążyć tego tematu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1