===============OPIS CZʦCI HTTP PROTOKOU GADU-GADU===============

Piotr Mach <pm@gadu-gadu.com> 

Opis powsta na podstawie analizy pakietw i rde ekg, opis dla wersji 
4.9.3 (0x18),  starsze klienty uywaj innych skryptw o podobnej funkcjonalnoci.


Spis treci:

  0. Wstp
  1. Szukanie osb w katalogu publicznym
      1.1 Wedug imi, nazwisko, nick, pe, miasto, rok ur.
      1.2 Wedug numerka
  2. Sprawdzanie/zmiana danych w kat publicznym
      2.1 Sprawdzenie
      2.2 Zmiana
  3. Rejestrowanie konta, usunicie i zmiana hasa dla konta
      3.1 Rejestracja
      3.2 Usunicie konta
      3.3 Zmiana hasa
  4. Operacje zwizane z przechowywaniem listy kontaktw na serwerze
      4.1 Wysanie
      4.2 Pobranie
      4.3 Usunicie
  5. Wysyanie hasa na email


0. WSTP

    Komunikacja z appmsg.gadu-gadu.pl metod GET HTTP 1.0 zostaa opisana w protocol.html,
    pozostae pakiety uywaj POST dla HTTP 1.1 i zostay opisane w tym dokumencie.

    Wszystkie zapytanie http metod post maj posta:

        POST $PATH HTTP/1.0
        Host: $HOST
        Content-Type: application/x-www-form-urlencoded
        User-Agent: $AGENT
        Content-Length: $LENGTH
        Pragma: no-cache

        $DATA

    AGENT to np: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)
    lub inne wymienione w protocol.html
    LENGTH oczywicie trzeba sobie wyliczy = strlen (DATA)

    Jeli bdzie mowa o wysyaniu danych do serwera to chodzi o cay
    powyszy pakiet, opisane zostan tylko: HOST, PATH, DATA
    Piszc 'wysyamy pola: pole1, pole2' mowa o DATA o wartoci pole1=aaa&pole2=bbb itp.
    Pamitaj e wypadaoby zastosowa urlencode przed wysaniem.
    Dla jasnoci, pakiet jest wysyany na hosta o IP
    odpowiadajcemu HOST na port 80.

    Odpowiedzi serwera na powysze zapytania maj mniej wicej posta:

        HTTP/1.1 200 OK
        Server: Microsoft-IIS/5.0
	Date: Mon, 01 Jul 2002 22:30:31 GMT        
        Connection: Keep-Alive
        Content-Length: $LENGTH
        Content-Type: text/html
        Set-Cookie: ASPSESSIONIDQQGGGLJC=CAEKMBGDJCFBEOKCELEFCNKH; path=/
        Cache-control: private

        $RESPONSE

    lub podobnie :), nagwki nie s dla nas wane, mona zauway
    tylko to e czasami ustawia Cookie. Piszc dalej e serwer "odpowie wartoci",
    mowa tylko o RESPONSE


1. Szukanie osb w katalogu publicznym

    1.1 Wedug imi, nazwisko, nick, pe, miasto, rok ur.

        HOST = pubdir.gadu-gadu.pl
        PATH = /appsvc/fmpubquery2.asp

        Wysyamy nastpujce pola:

        Mode            o wartoci '0'
        FirstName	imi      - moe by puste
        LastName        nazwisko  - moe by puste
        NickName        pseudo    - moe by puste
        Gender          pe      - '1'-kobieta, '2'-mezczyzna, '-1'-nieokrelone
        City            miasto    - moe by puste
        MinBirth        od rok ur.- '0' gdy nie podajemy
        MaxBirth        do rok ur.- '0' gdy nie podajemy
        ActiveOnly      Tylko dostpne '1'-tak, puste-nie
        start           uin od ktrego zacz szukanie, puste-brak

        PRZYKAD: Mode=0&FirstName=aga&LastName=&NickName=&Gender=1&City=wawa&MinBirth=1980&MaxBirth=1984&ActiveOnly=&start=

        Serwer odpowie:

        query_results:
        $REKORDY
        NextStart:$UIN

        UIN na kocu mwi na ktrym uin'ie zakoczono szukanie,
        mona to wykorzysta podajc nastpnym razem t warto w polu 'start'

        REKORDY to 0-50 kolejnych 8 linijkowych rekordw w formacie

        cyfra statusu  1-niedostepny, 2-zaraz wracam, 3-dostepny
        uin
        imi
        nazwisko
        nick
        rok ur
        cyfra pe     1-kobieta, 2-mezczyzma, 0-nieokreslone
        miasto

        PRZYKAD jednego rekordu:
        1
        1000
        jas
        fasola
        bean
        1900
        2
        warszawa

        Jeli ktrej danej brak, linia bdzie pusta.


    1.2 Wedug numerka

        HOST = pubdir.gadu-gadu.pl
        PATH = /appsvc/fmpubquery2.asp

        Wysyamy nastpujce pola:
        Mode 		o wartoci '3'
        UserId		uin
        start		uin od ktrego zacz szukanie, puste-brak

        PRZYKAD: Mode=3&UserId=1000&start=

        Odpowiedzi jest taki sam jak dla pkt 1.1 z tym
        ze bdzie to najwyej jeden 8 linijkowy rekord


2. Sprawdzanie/zmiana danych w kat. publicznym

    2.1 Sprawdzenie

        HOST = pubdir.gadu-gadu.pl
        PATH = /appsvc/fmpubdetails3.asp

        Wysyamy nastpujce pola

        FmNum		numerek
        Pass		haso, plain-text (sic!)

        PRZYKAD:FmNum=1000&Pass=sekret

        Jeli haso jest prawidowe serwer powinien odpowiedzie:
        query_result:
        imie
        nazwisko
        nick
        rok
        pe
        miasto

    2.2 Zmiana

        HOST = pubdir.gadu-gadu.pl
        PATH = /appsvc/fmpubreg2.asp

        Wysyamy pola:

        FmNum          uin
        Pass           haslo uin'a, plain text
        FirstName      imi     - moe by puste
        LastName       nazwisko - moe by puste
        NickName       nick     - moe by puste
        BirthYear      rok ur.  - moe by puste
        Gender         pe - wartoci jak w pkt 1.1
        City           miasto   - moe by puste

        PRZYKAD: FmNum=1000&Pass=sekret&FirstName=imie&LastName=nazwisko&NickName=nick&BirthYear=1000&Gender=1&City=miasto

        Jeli si udao serwer odpowie:
        reg_sucess:

3. Rejestrowanie konta, usunicie i zmiana hasa dla konta

    3.1 Rejestracja

        HOST = register.gadu-gadu.pl
        PATH = /appsvc/fmregister.asp

        Wysyamy pola:
        pwd         haso dla nowego uin'a
        email       email do przypominania hasa
        code        hash http liczony z email+pwd
                    (algorytmu szukaj w rdach EKG lib/common.c)

        PRZYKAD: pwd=sekret&email=moj@adres.email.pl&code=1104465363

        Jeli wszystko przepiego poprawnie serwer odpowie:
        reg_success:$UIN

        UIN - nowy uin, ktry wanie otrzymalimy

    3.2 Usunicie konta

        HOST = register.gadu-gadu.pl
        PATH = /appsvc/fmregister.asp

        Wysyamy pola:

        fmnumber     $UIN
        fmpwd        haslo, plain text
        delete       1
        pwd          nowe przypadkowe haso ???
        email        deletedaccount@gadu.gadu.pl
        code         http hash liczony z email+pwd

        PRZYKLAD: fmnumber=1400545&fmpwd=sekret&delete=1&pwd=1400460480&email=deletedaccount@gadu%2Dgadu.pl&code=335674957

        Jeli si udao serwer odpowie:
        reg_success:$UIN

        UIN - uin ktry wanie skasowalimy

    3.3 Zmiana hasa

        HOST = register.gadu-gadu.pl
        PATH = /appsvc/fmregister.asp

        Wysyamy pola:

        fmnumber      $UIN
        fmpwd         stare haslo, plain text
        pwd           nowe haslo, plain text
        email         nowy email do przypominania hasa
        code          http hash liczony z  email+pwd

        jeli si udao serwer odpowie:
        reg_success:$UIN

4. Operacje zwizane z przechowywaniem listy kontaktw na serwerze

    4.1 Wysanie list kont.

        HOST = pubdir.gadu-gadu.pl
        PATH = /appsvc/fmcontactsput.asp

        Wysyamy pola:
        FmNum       nasz uin
        Pass        haslo uin'a
        Contacts    dowolna ilo rekordw z kontaktami rozdzielone "\r\n"
                    format pojedynczego rekordu:

        imie;nazwisko;pseudo;wyswietlane;telefon;grupa;uin;adres@email;0;;0;

        PRZYKLAD: FmNum=1000&Pass=sekret&Contacts=imie;nazwisko;pseudo;wyswietlane;+48123123123;grupa1;1000;adres@email.pl;0;;0;

        Jeli si udao serwer odpowie
        put_success:

    4.2 Pobranie listy kont.

        HOST = pubdir.gadu-gadu.pl
        PATH = /appsvc/fmcontactsget.asp

        Wysyamy pola:
        FmNum      nasz uin
        Pass       haslo uin'a

        PRZYKAD:  FmNum=1000&Pass=sekret

        Jeli si udao serwer odpowie
        get_results:rekord_1
        rekord_2
        rekord_N

        rekord ma taki sam format jak w pkt 4.1

    4.3 Usunicie listy kont. z serwera

        HOST = pubdir.gadu-gadu.pl
        PATH = /appsvc/fmcontactsput.asp

        Wysyamy pola:
        FmNum       o wartoci uin
        Pass        haslo, plain text
        Delete      o wartoci '1'

        PRZYKLAD:   FmNum=1000&Pass=sekret&Delete=1

        Jeli si udao serwer odpowie
        put_success:

5. Wysyanie hasa na email

        HOST = retr.gadu-gadu.pl
        PATH = /appsvc/fmsendpwd.asp

        Wysyamy dwa pola:
        userid      uin
        code        hash_http liczony z uin'a jako string

        Jeli si udao serwer odpowie

        pwdsend_success

	
