libgadu  1.12.2
Funkcje | Zmienne
Dokumentacja pliku resolver.c

Funkcje rozwiązywania nazw. Więcej...

Wykres zależności załączania dla resolver.c:

Funkcje

int gg_gethostbyname_real (const char *hostname, struct in_addr **result, unsigned int *count, int pthread)
 
static int gg_resolver_run (int fd, const char *hostname, int pthread)
 
struct in_addr * gg_gethostbyname (const char *hostname)
 
int gg_session_set_resolver (struct gg_session *gs, gg_resolver_t type)
 Ustawia sposób rozwiązywania nazw w sesji. Więcej...
 
gg_resolver_t gg_session_get_resolver (struct gg_session *gs)
 Zwraca sposób rozwiązywania nazw w sesji. Więcej...
 
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. Więcej...
 
int gg_http_set_resolver (struct gg_http *gh, gg_resolver_t type)
 Ustawia sposób rozwiązywania nazw połączenia HTTP. Więcej...
 
gg_resolver_t gg_http_get_resolver (struct gg_http *gh)
 Zwraca sposób rozwiązywania nazw połączenia HTTP. Więcej...
 
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. Więcej...
 
int gg_global_set_resolver (gg_resolver_t type)
 Ustawia sposób rozwiązywania nazw globalnie dla biblioteki. Więcej...
 
gg_resolver_t gg_global_get_resolver (void)
 Zwraca sposób rozwiązywania nazw globalnie dla biblioteki. Więcej...
 
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. Więcej...
 
int gg_resolver_recv (int fd, void *buf, size_t len)
 Odczytuje dane z procesu/wątku rozwiązywania nazw. Więcej...
 

Zmienne

static gg_resolver_t gg_global_resolver_type = GG_RESOLVER_DEFAULT
 Sposób rozwiązywania nazw serwerów. Więcej...
 
static int(* gg_global_resolver_start )(int *fd, void **private_data, const char *hostname)
 Funkcja rozpoczynająca rozwiązywanie nazwy. Więcej...
 
static void(* gg_global_resolver_cleanup )(void **private_data, int force)
 Funkcja zwalniająca zasoby po rozwiązaniu nazwy. Więcej...
 

Opis szczegółowy

Funkcje rozwiązywania nazw.

Dokumentacja funkcji

◆ gg_gethostbyname_real()

int gg_gethostbyname_real ( const char *  hostname,
struct in_addr **  result,
unsigned 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.

Parametry
hostnameNazwa serwera
resultWskaźnik na wskaźnik z tablicą adresów zakończoną INADDR_NONE
countWskaźnik na zmienną, do ktorej zapisze się liczbę wyników
pthreadFlaga blokowania unicestwiania wątku podczas alokacji pamięci
Zwraca
0 jeśli się powiodło, -1 w przypadku błędu

◆ gg_resolver_run()

static int gg_resolver_run ( int  fd,
const char *  hostname,
int  pthread 
)
static

Rozwiązuje nazwę i zapisuje wynik do podanego gniazda.

Nota
Użycie logowania w tej funkcji może mieć negatywny wpływ na aplikacje jednowątkowe korzystające.
Parametry
fdDeskryptor gniazda
hostnameNazwa serwera
pthreadFlaga blokowania unicestwiania wątku podczas alokacji pamięci
Zwraca
0 jeśli się powiodło, -1 w przypadku błędu

◆ gg_gethostbyname()

struct in_addr* gg_gethostbyname ( const char *  hostname)

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ę.

Parametry
hostnameNazwa serwera
Zwraca
Zaalokowana struktura in_addr lub NULL w przypadku błędu.

◆ gg_session_set_resolver()

int gg_session_set_resolver ( struct gg_session gs,
gg_resolver_t  type 
)

Ustawia sposób rozwiązywania nazw w sesji.

Parametry
gsStruktura sesji
typeSposób rozwiązywania nazw (patrz Rozwiązywanie nazw)
Zwraca
0 jeśli się powiodło, -1 w przypadku błędu

◆ gg_session_get_resolver()

gg_resolver_t gg_session_get_resolver ( struct gg_session gs)

Zwraca sposób rozwiązywania nazw w sesji.

Parametry
gsStruktura sesji
Zwraca
Sposób rozwiązywania nazw

◆ gg_session_set_custom_resolver()

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.

Parametry
gsStruktura sesji
resolver_startFunkcja rozpoczynająca rozwiązywanie nazwy
resolver_cleanupFunkcja 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 gniazda
  • "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ązania

Parametry 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 odbiór danych i przekazać go w parametrze fd. Na platformie Windows możliwe jest przekazanie jedynie deskryptora gniazda. 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.

Zwraca
0 jeśli się powiodło, -1 w przypadku błędu

◆ gg_http_set_resolver()

int gg_http_set_resolver ( struct gg_http gh,
gg_resolver_t  type 
)

Ustawia sposób rozwiązywania nazw połączenia HTTP.

Parametry
ghStruktura połączenia
typeSposób rozwiązywania nazw (patrz Rozwiązywanie nazw)
Zwraca
0 jeśli się powiodło, -1 w przypadku błędu

◆ gg_http_get_resolver()

gg_resolver_t gg_http_get_resolver ( struct gg_http gh)

Zwraca sposób rozwiązywania nazw połączenia HTTP.

Parametry
ghStruktura połączenia
Zwraca
Sposób rozwiązywania nazw

◆ gg_http_set_custom_resolver()

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.

Parametry
ghStruktura sesji
resolver_startFunkcja rozpoczynająca rozwiązywanie nazwy
resolver_cleanupFunkcja zwalniająca zasoby
Zwraca
0 jeśli się powiodło, -1 w przypadku błędu

◆ gg_global_set_resolver()

int gg_global_set_resolver ( gg_resolver_t  type)

Ustawia sposób rozwiązywania nazw globalnie dla biblioteki.

Parametry
typeSposób rozwiązywania nazw (patrz Rozwiązywanie nazw)
Zwraca
0 jeśli się powiodło, -1 w przypadku błędu

◆ gg_global_get_resolver()

gg_resolver_t gg_global_get_resolver ( void  )

Zwraca sposób rozwiązywania nazw globalnie dla biblioteki.

Zwraca
Sposób rozwiązywania nazw

◆ gg_global_set_custom_resolver()

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.

Parametry
resolver_startFunkcja rozpoczynająca rozwiązywanie nazwy
resolver_cleanupFunkcja zwalniająca zasoby

Patrz gg_session_set_custom_resolver.

Zwraca
0 jeśli się powiodło, -1 w przypadku błędu

◆ gg_resolver_recv()

int gg_resolver_recv ( int  fd,
void *  buf,
size_t  len 
)

Odczytuje dane z procesu/wątku rozwiązywania nazw.

Parametry
fdDeskryptor
bufWskaźnik na bufor
lenDługość bufora
Zwraca
Patrz recv() i read().

Dokumentacja zmiennych

◆ gg_global_resolver_type

gg_resolver_t gg_global_resolver_type = GG_RESOLVER_DEFAULT
static

Sposób rozwiązywania nazw serwerów.

◆ gg_global_resolver_start

int(* gg_global_resolver_start) (int *fd, void **private_data, const char *hostname) ( int *  fd,
void **  private_data,
const char *  hostname 
)
static

Funkcja rozpoczynająca rozwiązywanie nazwy.

◆ gg_global_resolver_cleanup

void(* gg_global_resolver_cleanup) (void **private_data, int force) ( void **  private_data,
int  force 
)
static

Funkcja zwalniająca zasoby po rozwiązaniu nazwy.