gg_login() zwracającą strukturę gg_session, opisującą dane połączenie. Funkcja gg_login() za parametr przyjmuje wskaźnik strukturę zawierającą listę parametrów połączenia. Przykładowy kod rozpoczynający łączenie wygląda następująco:
struct gg_session *sesja; struct gg_login_params parametry; struct gg_event *zdarzenie; memset(¶metry, 0, sizeof(parametry)); parametry.uin = 12345; parametry.password = "hasło"; parametry.async = 1; parametry.status = GG_STATUS_INVISIBLE; sesja = gg_login(¶metry); if (!sesja) { błąd("Nie można się połączyć"); exit(1); } // ...
Lista wszystkich parametrów połączenia znajduje się w opisie struktury gg_login_params. W zależności od tego, czy łączymy się synchronicznie czy asynchronicznie (jak w przykładzie), funkcja gg_login() zwróci wskaźnik dopiero po udanym połączeniu lub zaraz po rozpoczęciu procedury łączenia. Dokładny opis dalszej obsługi połączenia znajduje się w sekcji poświęconej obsłudze zdarzeń.
Aby łączyć się z użyciem serwera pośredniczącego (ang. proxy), należy przed połączeniem ustawić zmienne globalne gg_proxy_enabled , gg_proxy_host , gg_proxy_port i inne.
Do korzystania z połączeń bezpośrednich wersji 6.x, konieczne jest przed połączeniem ustawienie zmiennych globalnych gg_dcc_ip i gg_dcc_port.
appmsg.gadu-gadu.pl
Wszystkimi etapami zajmuje się funkcja gg_login() w przypadku połączenia synchronicznego lub gg_login() i gg_watch_fd() dla połączeń asynchronicznych. Możliwe jest pominięcie pierwszych czterech kroków, związanych z połączeniem z serwerem rozdzielającym, przez ręczne podanie adresu i portu właściwego serwera w polach server_addr i server_port struktury gg_login_params. Jest to przydatne w sytuacjach, gdy serwer rozdzielający jest przeciążony lub niedostępny, albo gdy zwraca nieprawidłowy adres właściwego serwera.
Rozwiązywanie nazwy w systemach zgodnych z normą POSIX jest operacją synchroniczną. Z tego powodu w trybie asynchronicznym konieczne jest utworzenie dodatkowego procesu lub wątku (w zależności od opcji kompilacji), który w tle dokona rozwiązania nazwy i zwróci wynik do procesu lub wątku nadrzędnego.
wait() lub podobnej do prawidłowego zakończenia życia procesu potomnego. W przeciwnym wypadku, w zależności od zachowania systemu operacyjnego, mogą powstawać procesy zombie.gg_ping().gg_logoff(), a następnie zwolnić zasoby związane z sesją za pomocą funkcji gg_free_session(). Aby ustawić status z opisem, należy wcześniej wywołać funkcję gg_change_status_descr().
Struktury danych | |
| struct | gg_session |
| Sesja Gadu-Gadu. Więcej... | |
| struct | gg_login_params |
| Parametry połączenia z serwerem Gadu-Gadu. Więcej... | |
Funkcje | |
| struct gg_session * | gg_login (const struct gg_login_params *p) |
| Łączy się z serwerem Gadu-Gadu. | |
| int | gg_ping (struct gg_session *sess) |
| Wysyła do serwera pakiet utrzymania połączenia. | |
| void | gg_logoff (struct gg_session *sess) |
| Kończy połączenie z serwerem. | |
| void | gg_free_session (struct gg_session *sess) |
| Zwalnia zasoby używane przez połączenie z serwerem. | |
| struct gg_session* gg_login | ( | const struct gg_login_params * | p | ) | [read] |
Łączy się z serwerem Gadu-Gadu.
Przy połączeniu synchronicznym funkcja zakończy działanie po nawiązaniu połączenia lub gdy wystąpi błąd. Po udanym połączeniu należy wywoływać funkcję gg_watch_fd(), która odbiera informacje od serwera i zwraca informacje o zdarzeniach.
Przy połączeniu asynchronicznym funkcja rozpocznie procedurę połączenia i zwróci zaalokowaną strukturę. Pole fd struktury gg_session zawiera deskryptor, który należy obserwować funkcją select, poll lub za pomocą mechanizmów użytej pętli zdarzeń (Glib, Qt itp.). Pole check jest maską bitową mówiącą, czy biblioteka chce być informowana o możliwości odczytu danych (GG_CHECK_READ) czy zapisu danych (GG_CHECK_WRITE). Po zaobserwowaniu zmian na deskryptorze należy wywołać funkcję gg_watch_fd(). Podczas korzystania z połączeń asynchronicznych, w trakcie połączenia może zostać stworzony dodatkowy proces rozwiązujący nazwę serwera -- z tego powodu program musi poprawnie obsłużyć sygnał SIGCHLD.
gg_notify() lub gg_notify_ex().| p | Struktura opisująca parametry połączenia. Wymagane pola: uin, password, async. |
gg_session lub NULL w przypadku błędu. | int gg_ping | ( | struct gg_session * | sess | ) |
Wysyła do serwera pakiet utrzymania połączenia.
Klient powinien regularnie co minutę wysyłać pakiet utrzymania połączenia, inaczej serwer uzna, że klient stracił łączność z siecią i zerwie połączenie.
| sess | Struktura sesji |
| void gg_logoff | ( | struct gg_session * | sess | ) |
Kończy połączenie z serwerem.
Funkcja nie zwalnia zasobów, więc po jej wywołaniu należy użyć gg_free_session(). Jeśli chce się ustawić opis niedostępności, należy wcześniej wywołać funkcję gg_change_status_descr() lub gg_change_status_descr_time().
| sess | Struktura sesji |
| void gg_free_session | ( | struct gg_session * | sess | ) |
Zwalnia zasoby używane przez połączenie z serwerem.
Funkcję należy wywołać po zamknięciu połączenia z serwerem, by nie doprowadzić do wycieku zasobów systemowych.
| sess | Struktura sesji |
1.5.6