[c++] GG Lista Kontaktow

0

Witam. Mam problem z pobraniem listy kontaktow z serwera gg. Wysylam do serwera odpowiednia strukture UserList_Request o typie 0x02. Serwer odpowiada mi nastepujaco: jezeli lista kontaktow jest mala to przysyla mi tylko jedna strukture typu UserList_Reply w ktorej zmienna typ ma wartosc 0x06, jednak jezeli lista kontaktow jest dluga to najpierw serwer przesyla kilka struktur UserList_Reply o zmiennej wartosci type 0x04 (struktury te maja rozne rozmiary, serwer nie dzieli rowno rozmarow pakietow listy kontaktow !!) a na koncu strukture UserList_Reply jednak o wartosci 0x06 ktora sygnalizuje ostatnia czesc pakietow listy kontaktow. Wszystko cacy tylko ze przy pobieraniu listy z serwera nie zawsze chce mi sie ona pobrac do mojego programu, a jezeli nawet uda sie ja pobrac to wtedy ostatni pakiet listy kontaktow zawiera uszkodzony pierwszy wpis osoby w zmiennej char request[]. Nie mam pojecia dlaczego tak sie dzieje... ????

Ponizej sa fragmenty kodu mojego programu:


#define GG_USERLIST_GET                          0x02
#define GG_USERLIST_GET_MORE_REPLY      0x04
#define GG_USERLIST_GET_REPLY                0x06
#define GG_USERLIST_REQUEST                0x0016
#define GG_USERLIST_REPLY                    0x0010

struct gg_userlist_reply {
    char type;      /* rodzaj zapytania */
    char request[2049];    /* treść, nie musi wystąpić */
};

struct gg_userlist_request {
    char type;      /* rodzaj zapytania */
    char request[];     /* treść, nie musi wystąpić */
};

struct gg_userlist_request UserList_Request;
struct gg_userlist_reply UserList_Reply;
while(1)
{

recv(Sock1, (char *)&Header, sizeof(Header), 0);

    switch(Header.type)
    {

           case GG_LOGIN_OK:

         //.........
         //tutaj wysylam pakiet z prosba o przeslanie listy kontaktow
         Header.type = GG_USERLIST_REQUEST;
          Header.length = sizeof(UserList_Request);

        UserList_Request.type = GG_USERLIST_GET;

       send(Sock1, (char *)&Header, sizeof(Header), 0);
       send(Sock1, (char *)&UserList_Request, sizeof(UserList_Request), 0);
         //...........
        break;

         case GG_USERLIST_REPLY:
         //tutaj odbierana jest lista kontaktow z serwera i wyswietlana w konsoli
           int g = 0;

             for(g; g < Header.length; g = g + strlen(UserList_Reply.request))
            {

            recv(Sock1, (char *)&UserList_Reply, sizeof(UserList_Reply), 0);
            for(int b = 0; b < strlen(UserList_Reply.request); b++)
            cout << UserList_Reply.request[b];          

              }

         break;

         }

}

Sa to glowne fragmenty mojego programu, jezeli ktos nie rozumie (nie jest w temacie) to niech sie nie pyta co i jak [!!!] Lepiej niech tutaj zerknie: <url>dev.null.pl/ekg/docs/protocol.html</url&gt;

PS. Probowalem zmieniac rozmiar tablicy request np na [5000] albo w ogóle nie podawac go [] jednak zawsze mam ten sam blad z ostatnim pakietem listy kontaktow :|

0

Temat juz jest w sumie nieaktualny [!!!] [!!!] Okazalo sie ze wszystko jest dobrze, blad w ostatnim pakiecie byl z winy komunikatora TLEN (przynajmniej tak mi sie wydaje), ktory blednie eksportowal liste kontaktow na serwer gg... :|

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