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 = read(fd, buf, size); \ \ if (tmp < (int) size) { \ if (tmp == -1) { \ gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() read() failed (errno=%d, %s)\n", errno, strerror(errno)); \ } else if (tmp == 0) { \ gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() read() failed, connection broken\n"); \ } else { \ gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() read() failed (%d bytes, %d 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); \ }
Tylko do użytku wewnętrznego.
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 tmp; \ gg_dcc_debug_data("write", fd, buf, size); \ tmp = write(fd, buf, size); \ if (tmp < (int) size) { \ if (tmp == -1) { \ gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() write() failed (errno=%d, %s)\n", errno, strerror(errno)); \ } else { \ gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() write() failed (%d needed, %d done)\n", size, tmp); \ } \ e->type = GG_EVENT_DCC_ERROR; \ e->event.dcc_error = GG_ERROR_DCC_HANDSHAKE; \ return e; \ } \ }
Tylko do użytku wewnętrznego.
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] |
Tylko do użytku wewnętrznego.
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] |
Tylko do użytku wewnętrznego.
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] |
Tylko do użytku wewnętrznego.
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] |
Tylko do użytku wewnętrznego.
Funkcja zwrotna połączenia bezpośredniego.
Pole callback
struktury gg_dcc
zawiera wskaźnik do tej funkcji. Wywołuje ona gg_watch_fd()
i zachowuje wynik w polu event
.
d | Struktura połączenia |