|
libgadu
1.11.2
|
Funkcje rozwiązywania nazw. Więcej...
Struktury danych | |
| struct | gg_resolver_fork_data |
Funkcje | |
| int | gg_gethostbyname_real (const char *hostname, struct in_addr **result, int *count, int pthread) |
| static int | gg_resolver_run (int fd, const char *hostname) |
| struct in_addr * | gg_gethostbyname (const char *hostname) |
| static int | gg_resolver_fork_start (int *fd, void **priv_data, const char *hostname) |
| static void | gg_resolver_fork_cleanup (void **priv_data, int force) |
| int | gg_session_set_resolver (struct gg_session *gs, gg_resolver_t type) |
| Ustawia sposób rozwiązywania nazw w sesji. | |
| gg_resolver_t | gg_session_get_resolver (struct gg_session *gs) |
| Zwraca sposób rozwiązywania nazw w sesji. | |
| int | gg_session_set_custom_resolver (struct gg_session *gs, int(*resolver_start)(int *, void **, const char *), void(*resolver_cleanup)(void **, int)) |
| Ustawia własny sposób rozwiązywania nazw w sesji. | |
| int | gg_http_set_resolver (struct gg_http *gh, gg_resolver_t type) |
| Ustawia sposób rozwiązywania nazw połączenia HTTP. | |
| gg_resolver_t | gg_http_get_resolver (struct gg_http *gh) |
| Zwraca sposób rozwiązywania nazw połączenia HTTP. | |
| int | gg_http_set_custom_resolver (struct gg_http *gh, int(*resolver_start)(int *, void **, const char *), void(*resolver_cleanup)(void **, int)) |
| Ustawia własny sposób rozwiązywania nazw połączenia HTTP. | |
| int | gg_global_set_resolver (gg_resolver_t type) |
| Ustawia sposób rozwiązywania nazw globalnie dla biblioteki. | |
| gg_resolver_t | gg_global_get_resolver (void) |
| Zwraca sposób rozwiązywania nazw globalnie dla biblioteki. | |
| int | gg_global_set_custom_resolver (int(*resolver_start)(int *, void **, const char *), void(*resolver_cleanup)(void **, int)) |
| Ustawia własny sposób rozwiązywania nazw globalnie dla biblioteki. | |
Zmienne | |
| static gg_resolver_t | gg_global_resolver_type = GG_RESOLVER_DEFAULT |
| Sposób rozwiązywania nazw serwerów. | |
| static int(* | gg_global_resolver_start )(int *fd, void **private_data, const char *hostname) |
| Funkcja rozpoczynająca rozwiązywanie nazwy. | |
| static void(* | gg_global_resolver_cleanup )(void **private_data, int force) |
| Funkcja zwalniająca zasoby po rozwiązaniu nazwy. | |
Funkcje rozwiązywania nazw.
| int gg_gethostbyname_real | ( | const char * | hostname, |
| struct in_addr ** | result, | ||
| int * | count, | ||
| int | pthread | ||
| ) |
Odpowiednik gethostbyname zapewniający współbieżność.
Jeśli dany system dostarcza gethostbyname_r, używa się tej wersji, jeśli nie, to zwykłej gethostbyname. Wynikiem jest tablica adresów zakończona wartością INADDR_NONE, którą należy zwolnić po użyciu.
| hostname | Nazwa serwera |
| result | Wskaźnik na wskaźnik z tablicą adresów zakończoną INADDR_NONE |
| count | Wskaźnik na zmienną, do ktorej zapisze się liczbę wyników |
| pthread | Flaga blokowania unicestwiania wątku podczas alokacji pamięci |
| static int gg_resolver_run | ( | int | fd, |
| const char * | hostname | ||
| ) | [static] |
Rozwiązuje nazwę i zapisuje wynik do podanego desktyptora.
| fd | Deskryptor |
| hostname | Nazwa serwera |
| struct in_addr* gg_gethostbyname | ( | const char * | hostname | ) | [read] |
Odpowiednik gethostbyname zapewniający współbieżność.
Jeśli dany system dostarcza gethostbyname_r, używa się tej wersji, jeśli nie, to zwykłej gethostbyname. Funkcja służy do zachowania zgodności ABI i służy do pobierania tylko pierwszego adresu -- pozostałe mogą zostać zignorowane przez aplikację.
| hostname | Nazwa serwera |
in_addr lub NULL w przypadku błędu. | static int gg_resolver_fork_start | ( | int * | fd, |
| void ** | priv_data, | ||
| const char * | hostname | ||
| ) | [static] |
Rozwiązuje nazwę serwera w osobnym procesie.
Połączenia asynchroniczne nie mogą blokować procesu w trakcie rozwiązywania nazwy serwera. W tym celu tworzony jest potok, nowy proces i dopiero w nim przeprowadzane jest rozwiązywanie nazwy. Deskryptor strony do odczytu zapisuje się w strukturze sieci i czeka na dane w postaci struktury in_addr. Jeśli nie znaleziono nazwy, zwracana jest INADDR_NONE.
| fd | Wskaźnik na zmienną, gdzie zostanie umieszczony deskryptor potoku |
| priv_data | Wskaźnik na zmienną, gdzie zostanie umieszczony wskaźnik do numeru procesu potomnego rozwiązującego nazwę |
| hostname | Nazwa serwera do rozwiązania |
| static void gg_resolver_fork_cleanup | ( | void ** | priv_data, |
| int | force | ||
| ) | [static] |
Usuwanie zasobów po procesie rozwiązywaniu nazwy.
Funkcja wywoływana po zakończeniu rozwiązanywania nazwy lub przy zwalnianiu zasobów sesji podczas rozwiązywania nazwy.
| priv_data | Wskaźnik na zmienną przechowującą wskaźnik do prywatnych danych |
| force | Flaga usuwania zasobów przed zakończeniem działania |
| int gg_session_set_resolver | ( | struct gg_session * | gs, |
| gg_resolver_t | type | ||
| ) |
Ustawia sposób rozwiązywania nazw w sesji.
| gs | Struktura sesji |
| type | Sposób rozwiązywania nazw (patrz Rozwiązywanie nazw) |
| gg_resolver_t gg_session_get_resolver | ( | struct gg_session * | gs | ) |
Zwraca sposób rozwiązywania nazw w sesji.
| gs | Struktura sesji |
| int gg_session_set_custom_resolver | ( | struct gg_session * | gs, |
| int(*)(int *, void **, const char *) | resolver_start, | ||
| void(*)(void **, int) | resolver_cleanup | ||
| ) |
Ustawia własny sposób rozwiązywania nazw w sesji.
| gs | Struktura sesji |
| resolver_start | Funkcja rozpoczynająca rozwiązywanie nazwy |
| resolver_cleanup | Funkcja zwalniająca zasoby |
Parametry funkcji rozpoczynającej rozwiązywanie nazwy wyglądają następująco:
"int *fd" — wskaźnik na zmienną, gdzie zostanie umieszczony deskryptor potoku"void **priv_data" — wskaźnik na zmienną, gdzie można umieścić wskaźnik do prywatnych danych na potrzeby rozwiązywania nazwy"const char *name" — nazwa serwera do rozwiązaniaParametry funkcji zwalniającej zasoby wyglądają następująco:
"void **priv_data" — wskaźnik na zmienną przechowującą wskaźnik do prywatnych danych, należy go ustawić na NULL po zakończeniu"int force" — flaga mówiąca o tym, że zasoby są zwalniane przed zakończeniem rozwiązywania nazwy, np. z powodu zamknięcia sesji.Własny kod rozwiązywania nazwy powinien stworzyć potok, parę gniazd lub inny deskryptor pozwalający na co najmniej jednostronną komunikację i przekazać go w parametrze fd. Po zakończeniu rozwiązywania nazwy, powinien wysłać otrzymany adres IP w postaci sieciowej (big-endian) do deskryptora. Jeśli rozwiązywanie nazwy się nie powiedzie, należy wysłać INADDR_NONE. Następnie zostanie wywołana funkcja zwalniająca zasoby z parametrem force równym 0. Gdyby sesja została zakończona przed rozwiązaniem nazwy, np. za pomocą funkcji gg_logoff(), funkcja zwalniająca zasoby zostanie wywołana z parametrem force równym 1.
| int gg_http_set_resolver | ( | struct gg_http * | gh, |
| gg_resolver_t | type | ||
| ) |
Ustawia sposób rozwiązywania nazw połączenia HTTP.
| gh | Struktura połączenia |
| type | Sposób rozwiązywania nazw (patrz Rozwiązywanie nazw) |
| gg_resolver_t gg_http_get_resolver | ( | struct gg_http * | gh | ) |
Zwraca sposób rozwiązywania nazw połączenia HTTP.
| gh | Struktura połączenia |
| int gg_http_set_custom_resolver | ( | struct gg_http * | gh, |
| int(*)(int *, void **, const char *) | resolver_start, | ||
| void(*)(void **, int) | resolver_cleanup | ||
| ) |
Ustawia własny sposób rozwiązywania nazw połączenia HTTP.
| gh | Struktura sesji |
| resolver_start | Funkcja rozpoczynająca rozwiązywanie nazwy |
| resolver_cleanup | Funkcja zwalniająca zasoby |
| int gg_global_set_resolver | ( | gg_resolver_t | type | ) |
Ustawia sposób rozwiązywania nazw globalnie dla biblioteki.
| type | Sposób rozwiązywania nazw (patrz Rozwiązywanie nazw) |
| gg_resolver_t gg_global_get_resolver | ( | void | ) |
Zwraca sposób rozwiązywania nazw globalnie dla biblioteki.
| int gg_global_set_custom_resolver | ( | int(*)(int *, void **, const char *) | resolver_start, |
| void(*)(void **, int) | resolver_cleanup | ||
| ) |
Ustawia własny sposób rozwiązywania nazw globalnie dla biblioteki.
| resolver_start | Funkcja rozpoczynająca rozwiązywanie nazwy |
| resolver_cleanup | Funkcja zwalniająca zasoby |
Patrz gg_session_set_custom_resolver.
Sposób rozwiązywania nazw serwerów.
int(* gg_global_resolver_start)(int *fd, void **private_data, const char *hostname) [static] |
Funkcja rozpoczynająca rozwiązywanie nazwy.
void(* gg_global_resolver_cleanup)(void **private_data, int force) [static] |
Funkcja zwalniająca zasoby po rozwiązaniu nazwy.
1.7.6.1