Struktury danych | |
| struct | gg_dcc7 |
| Połączenie bezpośrednie od wersji Gadu-Gadu 7.x. Więcej... | |
Funkcje | |
| 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) |
| struct gg_dcc7 * | gg_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_dcc7 * | gg_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_event * | gg_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. | |
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.
Do zrobienia:
| 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] |
Tylko do użytku wewnętrznego.
Rozpoczyna wysyłanie pliku.
Funkcja jest wykorzystywana przez gg_dcc7_send_file() oraz gg_dcc_send_file_fd().
| 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() |
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.
| 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) |
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] |
Tylko do użytku wewnętrznego.
Rozpoczyna wysyłanie pliku o danym deskryptorze.
| 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 |
gg_dcc7 lub NULL w przypadku błędu | int gg_dcc7_accept | ( | struct gg_dcc7 * | dcc, | |
| unsigned int | offset | |||
| ) |
Potwierdza chęć odebrania pliku.
| dcc | Struktura połączenia | |
| offset | Początkowy offset przy wznawianiu przesyłania pliku |
lseek() lub podobną.| int gg_dcc7_reject | ( | struct gg_dcc7 * | dcc, | |
| int | reason | |||
| ) |
Odrzuca próbę przesłania pliku.
| dcc | Struktura połączenia | |
| reason | Powód odrzucenia |
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().
| dcc | Struktura połączenia |
NULL jeśli wystąpił błąd | void gg_dcc7_free | ( | struct gg_dcc7 * | dcc | ) |
Zwalnia zasoby używane przez połączenie bezpośrednie.
| dcc | Struktura połączenia |
1.7.1