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 |