Połączenia bezpośrednie od wersji Gadu-Gadu 7.x
[Połączenia bezpośrednie między klientami]


Data Structures

struct  gg_dcc7
 Połączenie bezpośrednie od wersji Gadu-Gadu 7.x. More...

Functions

static struct gg_dcc7gg_dcc7_send_file_common (struct gg_session *sess, uin_t rcpt, int fd, size_t size, const char *filename1250, const char *hash, int seek)
struct gg_dcc7gg_dcc7_send_file (struct gg_session *sess, uin_t rcpt, const char *filename, const char *filename1250, const char *hash)
 Rozpoczyna wysyłanie pliku o danej nazwie.
struct gg_dcc7gg_dcc7_send_file_fd (struct gg_session *sess, uin_t rcpt, int fd, size_t size, const char *filename1250, const char *hash)
int gg_dcc7_accept (struct gg_dcc7 *dcc, unsigned int offset)
 Potwierdza chęć odebrania pliku.
int gg_dcc7_reject (struct gg_dcc7 *dcc, int reason)
 Odrzuca próbę przesłania pliku.
struct gg_eventgg_dcc7_watch_fd (struct gg_dcc7 *dcc)
 Funkcja wywoływana po zaobserwowaniu zmian na deskryptorze połączenia.
void gg_dcc7_free (struct gg_dcc7 *dcc)
 Zwalnia zasoby używane przez połączenie bezpośrednie.

Detailed Description

Przesyłanie plików zgodne z Gadu-Gadu 7.x jest znacznie prostsze niż w wersji 6.x. Podobnie jak poprzednio, każde połączenie jest opisane przez strukturę gg_dcc7. Nie ma konieczności otwierania gniazda nasłuchującego, ponieważ jest tworzone dla każdego połączenia osobno.

Gdy chcemy wysłać plik, wywołujemy gg_dcc7_send_file() i obserwujemy zdarzenia zarówno z gg_session, jak i gg_dcc7. Parametry funkcji to struktura sesji, numer odbiorcy, nazwa pliku, nazwa pliku w kodowaniu CP1250 (jeśli NULL to brana jest oryginalna nazwa) i skrót pliku wyznaczony algorytmem SHA1 (jeśli NULL to biblioteka liczy, blokując na ten czas działanie aplikacji). Wysyłanie jest praktycznie bezobsługowe, wystarczy zareagować na zdarzenie GG_EVENT_DCC7_DONE i GG_EVENT_DCC7_ERROR w gg_dcc7 oraz GG_EVENT_DCC7_REJECTED i GG_EVENT_DCC7_ERROR w gg_session, żeby wiedzieć, kiedy zwolnić zasoby funkcją gg_dcc7_free().

Jeśli ktoś do nas wysyła plik, otrzymamy zdarzenie GG_EVENT_DCC7_NEW z sesji. Należy przygotować deskryptor otwarty do zapisu, wpisać jego wartość do pola file_fd struktury gg_dcc7 i wywołać gg_dcc7_accept() albo od razu wywołać gg_dcc7_reject(), jeśli nie chcemy połączenia. Tak samo jak przy wysyłaniu, wystarczy obsłużyć GG_EVENT_DCC7_DONE w strukturze gg_dcc7 i GG_EVENT_DCC7_ERROR w strukturach gg_session i gg_dcc7.

Deskryptor połączenia (pole fd struktury gg_dcc7) może zmienić się po wywołaniu funkcji gg_dcc7_accept() lub otrzymaniu jednego ze zdarzeń: GG_EVENT_DCC7_CONNECTED, GG_EVENT_DCC7_ACCEPT, GG_EVENT_DCC7_PENDING.

Opcje połączeń

Ponieważ jedna ze stron odbiera połączenie bezpośrednie, konieczne jest nasłuchiwanie na porcie TCP. Domyślne ustawienia pozwalają na poprawną pracę jeśli co najmniej jedna ze stron połączenia ma bezpośredni dostęp do sieci, bez translacji adresów i/lub portów. Pole client_addr struktury gg_login_params mówi na jakim adresie należy nasłuchiwać. Domyślna wartość 0.0.0.0 powoduje nasłuchiwanie na wszystkich dostępnych interfejsach komputera. Pole client_port mówi na którym porcie należy nasłuchiwać. Domyślna wartość 0 powoduje nasłuchiwanie na losowym dostępnym porcie. Należy zwrócić uwagę, że jeśli jedno połączenie będzie nasłuchiwać na danym porcie, inne już nie będzie w stanie, co spowoduje błąd.

Druga para ustawień dotyczy publicznego adresu i portu. Ta strona połączenia, która nasłuchuje na porcie TCP wysyła do drugiej strony swój adres i numer portu. Pole external_addr mówi jaki adres zostanie wysłany. Domyślna wartość 0.0.0.0 powoduje wysłanie adresu IP, z którego sesja łączy się z serwerem. Pole external_port mówi jaki port zostanie wysłany. Domyślna wartość 0 powoduje wysłane portu, na którym połączenie nasłuchuje.

Do zrobienia


Function Documentation

static struct gg_dcc7* gg_dcc7_send_file_common ( struct gg_session sess,
uin_t  rcpt,
int  fd,
size_t  size,
const char *  filename1250,
const char *  hash,
int  seek 
) [static, read]

For internal use only.

Rozpoczyna wysyłanie pliku.

Funkcja jest wykorzystywana przez gg_dcc7_send_file() oraz gg_dcc_send_file_fd().

Parameters:
sess Struktura sesji
rcpt Numer odbiorcy
fd Deskryptor pliku
size Rozmiar pliku
filename1250 Nazwa pliku w kodowaniu CP-1250
hash Skrót SHA-1 pliku
seek Flaga mówiąca, czy można używać lseek()
Returns:
Struktura gg_dcc7 lub NULL w przypadku błędu

struct gg_dcc7* gg_dcc7_send_file ( struct gg_session sess,
uin_t  rcpt,
const char *  filename,
const char *  filename1250,
const char *  hash 
) [read]

Rozpoczyna wysyłanie pliku o danej nazwie.

Parameters:
sess Struktura sesji
rcpt Numer odbiorcy
filename Nazwa pliku w lokalnym systemie plików
filename1250 Nazwa pliku w kodowaniu CP-1250
hash Skrót SHA-1 pliku (lub NULL jeśli ma być wyznaczony)
Returns:
Struktura gg_dcc7 lub NULL w przypadku błędu

struct gg_dcc7* gg_dcc7_send_file_fd ( struct gg_session sess,
uin_t  rcpt,
int  fd,
size_t  size,
const char *  filename1250,
const char *  hash 
) [read]

For internal use only.

Rozpoczyna wysyłanie pliku o danym deskryptorze.

Note:
Wysyłanie pliku nie będzie działać poprawnie, jeśli deskryptor źródłowy jest w trybie nieblokującym i w pewnym momencie zabraknie danych.
Parameters:
sess Struktura sesji
rcpt Numer odbiorcy
fd Deskryptor pliku
size Rozmiar pliku
filename1250 Nazwa pliku w kodowaniu CP-1250
hash Skrót SHA-1 pliku
Returns:
Struktura gg_dcc7 lub NULL w przypadku błędu

int gg_dcc7_accept ( struct gg_dcc7 dcc,
unsigned int  offset 
)

Potwierdza chęć odebrania pliku.

Parameters:
dcc Struktura połączenia
offset Początkowy offset przy wznawianiu przesyłania pliku
Note:
Biblioteka nie zmienia położenia w odbieranych plikach. Jeśli offset początkowy jest różny od zera, należy ustawić go funkcją lseek() lub podobną.
Returns:
0 jeśli się powiodło, -1 w przypadku błędu

int gg_dcc7_reject ( struct gg_dcc7 dcc,
int  reason 
)

Odrzuca próbę przesłania pliku.

Parameters:
dcc Struktura połączenia
reason Powód odrzucenia
Returns:
0 jeśli się powiodło, -1 w przypadku błędu

struct gg_event* gg_dcc7_watch_fd ( struct gg_dcc7 dcc  )  [read]

Funkcja wywoływana po zaobserwowaniu zmian na deskryptorze połączenia.

Funkcja zwraca strukturę zdarzenia gg_event. Jeśli rodzaj zdarzenia to GG_EVENT_NONE, nie wydarzyło się jeszcze nic wartego odnotowania. Strukturę zdarzenia należy zwolnić funkcja gg_event_free().

Parameters:
dcc Struktura połączenia
Returns:
Struktura zdarzenia lub NULL jeśli wystąpił błąd

void gg_dcc7_free ( struct gg_dcc7 dcc  ) 

Zwalnia zasoby używane przez połączenie bezpośrednie.

Parameters:
dcc Struktura połączenia


Generated on Sat Feb 4 03:01:16 2012 for libgadu by  doxygen 1.5.6