libgadu
1.12.1
|
Obsługa połączeń bezpośrednich do wersji Gadu-Gadu 6.x. Więcej...
Definicje | |
#define | gg_dcc_read(fd, buf, size) |
#define | gg_dcc_write(fd, buf, size) |
Funkcje | |
static void | gg_dcc_debug_data (const char *prefix, int fd, const void *buf, unsigned int size) |
int | gg_dcc_request (struct gg_session *sess, uin_t uin) |
Wysyła żądanie zwrotnego połączenia bezpośredniego. | |
static void | gg_dcc_fill_filetime (uint32_t ut, uint32_t *ft) |
int | gg_dcc_fill_file_info (struct gg_dcc *d, const char *filename) |
Wypełnia pola struktury gg_dcc niezbędne do wysłania pliku. | |
int | gg_dcc_fill_file_info2 (struct gg_dcc *d, const char *filename, const char *local_filename) |
Wypełnia pola struktury gg_dcc niezbędne do wysłania pliku. | |
static struct gg_dcc * | gg_dcc_transfer (uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin, int type) |
struct gg_dcc * | gg_dcc_get_file (uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin) |
Rozpoczyna odbieranie pliku przez zwrotne połączenie bezpośrednie. | |
struct gg_dcc * | gg_dcc_send_file (uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin) |
Rozpoczyna wysyłanie pliku. | |
struct gg_dcc * | gg_dcc_voice_chat (uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin) |
Rozpoczyna połączenie głosowe. | |
void | gg_dcc_set_type (struct gg_dcc *d, int type) |
Ustawia typ przychodzącego połączenia bezpośredniego. | |
static int | gg_dcc_callback (struct gg_dcc *d) |
struct gg_dcc * | gg_dcc_socket_create (uin_t uin, uint16_t port) |
Tworzy gniazdo nasłuchujące dla połączeń bezpośrednich. | |
int | gg_dcc_voice_send (struct gg_dcc *d, char *buf, int length) |
Wysyła ramkę danych połączenia głosowego. | |
struct gg_event * | gg_dcc_watch_fd (struct gg_dcc *h) |
Funkcja wywoływana po zaobserwowaniu zmian na deskryptorze połączenia. | |
void | gg_dcc_free (struct gg_dcc *d) |
Zwalnia zasoby używane przez połączenie bezpośrednie. |
Obsługa połączeń bezpośrednich do wersji Gadu-Gadu 6.x.
#define gg_dcc_read | ( | fd, | |
buf, | |||
size | |||
) |
{ \ int _tmp = recv(fd, buf, size, 0); \ \ if (_tmp < (int) size) { \ if (_tmp == -1) { \ gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() recv() failed " \ "(errno=%d, %s)\n", errno, strerror(errno)); \ } else if (_tmp == 0) { \ gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() recv() failed, " \ "connection broken\n"); \ } else { \ gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() recv() failed " \ "(%d bytes, %" GG_SIZE_FMT " needed)\n", \ _tmp, size); \ } \ e->type = GG_EVENT_DCC_ERROR; \ e->event.dcc_error = GG_ERROR_DCC_HANDSHAKE; \ return e; \ } \ gg_dcc_debug_data("read", fd, buf, size); \ }
Odbiera dane z połączenia bezpośredniego z obsługą błędów.
fd | Deskryptor gniazda |
buf | Bufor na dane |
size | Rozmiar bufora na dane |
#define gg_dcc_write | ( | fd, | |
buf, | |||
size | |||
) |
{ \ int write_res; \ gg_dcc_debug_data("write", fd, buf, size); \ write_res = send(fd, buf, size, 0); \ if (write_res < (int) size) { \ if (write_res == -1) { \ gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() send() " \ "failed (errno=%d, %s)\n", errno, strerror(errno)); \ } else { \ gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() send() " \ "failed (%" GG_SIZE_FMT " needed, %d done)\n", \ size, write_res); \ } \ e->type = GG_EVENT_DCC_ERROR; \ e->event.dcc_error = GG_ERROR_DCC_HANDSHAKE; \ return e; \ } \ }
Wysyła dane do połączenia bezpośredniego z obsługą błędów.
fd | Deskryptor gniazda |
buf | Bufor z danymi |
size | Rozmiar bufora z danymi |
static void gg_dcc_debug_data | ( | const char * | prefix, |
int | fd, | ||
const void * | buf, | ||
unsigned int | size | ||
) | [static] |
Przekazuje zawartość pakietu do odpluskwiania.
prefix | Prefiks informacji |
fd | Deskryptor gniazda |
buf | Bufor z danumi |
size | Rozmiar bufora z danymi |
static void gg_dcc_fill_filetime | ( | uint32_t | ut, |
uint32_t * | ft | ||
) | [static] |
Zamienia znacznik czasu w postaci uniksowej na format API WIN32.
long
long
.ut | Czas w postaci uniksowej |
ft | Czas w postaci API WIN32 |
static struct gg_dcc* gg_dcc_transfer | ( | uint32_t | ip, |
uint16_t | port, | ||
uin_t | my_uin, | ||
uin_t | peer_uin, | ||
int | type | ||
) | [static, read] |
Rozpoczyna połączenie bezpośrednie z danym klientem.
ip | Adres IP odbiorcy |
port | Port odbiorcy |
my_uin | Własny numer |
peer_uin | Numer odbiorcy |
type | Rodzaj połączenia (GG_SESSION_DCC_SEND lub GG_SESSION_DCC_GET ) |
gg_dcc
lub NULL
w przypadku błędu static int gg_dcc_callback | ( | struct gg_dcc * | d | ) | [static] |
Funkcja zwrotna połączenia bezpośredniego.
Pole callback
struktury gg_dcc
zawiera wskaźnik do tej funkcji. Wywołuje ona gg_dcc_watch_fd()
i zachowuje wynik w polu event
.
d | Struktura połączenia |