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

Piotr Mach <pm@gg.wha.la> 

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 i zmiana danych w kat publicznym
      2.1 Sprawdzenie
      2.2 Zmiana
  3. Rejestrowanie konta, usunicie i zmiana hasa
      3.1 Rejestracja
      3.2 Usunicie
      3.3 Zmiana hasa
  4. Operacje zwizane z przechowywaniem listy kontaktw na serwerze
      4.1 Wysanie
      4.2 Pobranie
      4.3 Usunicie
  5. Przypominanie 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.0 a w odpowiedzi 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 o zastosowaniu urlencode i zmianie kodowania na WIN-1250 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: $COOKIE
        Cache-control: private

        $RESPONSE

    lub podobnie :), nagwki nie s dla nas wane, mona zauway
    tylko to e czasami ustawia COOKIE np 'ASPSESSIONIDQQGGGLJC=CAEKMBGDJCFBEOKCELEFCNKH; path=/' 
    Piszc dalej e serwer "odpowie wartoci", mowa tylko o RESPONSE. 
    Kodowanie znakw w odpowiedzi to WIN-1250.


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 ('0' - pokazano wszystkie),
        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-dostepny, 3-zaraz wracam
        uin
        imi
        nazwisko
        nick
        rok ur
        cyfra pe     1-kobieta, 2-mczyzma, 0-nieokrelono
        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, pusta warto - 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
	a pole NextStart bedzie mie warto '0'

2. Sprawdzanie/zmiana danych w kat. publicznym

    2.1 Sprawdzenie

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

        Wysyamy nastpujce pola

        FmNum		uin
        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_success:

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       o wartoci '1'
        fmemail	     email podany przy rejestracji konta
	pwd          nowe przypadkowe haso ???
        email        deletedaccount@gadu.gadu.pl
        code         http hash liczony z email+pwd

        PRZYKLAD: fmnumber=4617436&fmpwd=haslo&delete=1&fmemail=moj@email.pl&pwd=%2D700963936&email=deletedaccount@gadu%2Dgadu.pl&code=477559883

        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
        fmemail	      stary email podany przy poprzedniej zmianie hasa lub rejestracji
	email         nowy email do przypominania hasa
        code          http hash liczony z email+pwd

        jeli si udao serwer odpowie:
        reg_success:$UIN
	
	a jeli fmemail jest bdny odpowie:
	bademail
	
4. Operacje zwizane z przechowywaniem listy kont. 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;

	ostatnie 3 pola zostaly dodane w wer. 4.9.3 i sa zwiazane z dzwikami.
        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. Przypominanie 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
