libgadu.h   libgadu.h 
skipping to change at line 34 skipping to change at line 34
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
* USA. * USA.
*/ */
/** /**
* \file libgadu.h * \file libgadu.h
* *
* \brief Główny plik nagłówkowy biblioteki * \brief Główny plik nagłówkowy biblioteki
*/ */
#ifndef __GG_LIBGADU_H #ifndef LIBGADU_LIBGADU_H
#define __GG_LIBGADU_H #define LIBGADU_LIBGADU_H
#ifdef __cplusplus
#ifdef _WIN32 #ifdef _WIN32
#pragma pack(push, 1) #pragma pack(push, 1)
#endif #endif
#ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <sys/types.h> #include <sys/types.h>
#include <stdio.h> #include <stdio.h>
#include <stdarg.h> #include <stdarg.h>
/** \cond ignore */ /** \cond ignore */
/* Defined if libgadu was compiled for bigendian machine. */ /* Defined if libgadu was compiled for bigendian machine. */
/* #undef GG_CONFIG_BIGENDIAN */ /* #undef GG_CONFIG_BIGENDIAN */
/* Defined if this machine has gethostbyname_r(). */ /* Defined if this machine has gethostbyname_r(). */
#define GG_CONFIG_HAVE_GETHOSTBYNAME_R /**/ #define GG_CONFIG_HAVE_GETHOSTBYNAME_R /**/
/* Defined if libgadu was compiled and linked with fork support. */
#define GG_CONFIG_HAVE_FORK /**/
/* Defined if libgadu was compiled and linked with pthread support. */ /* Defined if libgadu was compiled and linked with pthread support. */
#define GG_CONFIG_HAVE_PTHREAD /**/ #define GG_CONFIG_HAVE_PTHREAD /**/
/* Defined if pthread resolver is the default one. */ /* Defined if pthread resolver is the default one. */
/* #undef GG_CONFIG_PTHREAD_DEFAULT */ /* #undef GG_CONFIG_PTHREAD_DEFAULT */
/* Defined if this machine has C99-compiliant vsnprintf(). */ /* Defined if this machine has C99-compiliant vsnprintf(). */
#define GG_CONFIG_HAVE_C99_VSNPRINTF /**/ #define GG_CONFIG_HAVE_C99_VSNPRINTF /**/
/* Defined if this machine has va_copy(). */ /* Defined if this machine has va_copy(). */
skipping to change at line 84 skipping to change at line 88
/* Defined if libgadu was compiled and linked with GnuTLS support. */ /* Defined if libgadu was compiled and linked with GnuTLS support. */
#define GG_CONFIG_HAVE_GNUTLS /**/ #define GG_CONFIG_HAVE_GNUTLS /**/
/* Defined if libgadu was compiled and linked with OpenSSL support. */ /* Defined if libgadu was compiled and linked with OpenSSL support. */
/* #undef GG_CONFIG_HAVE_OPENSSL */ /* #undef GG_CONFIG_HAVE_OPENSSL */
/* Defined if libgadu was compiled and linked with zlib support. */ /* Defined if libgadu was compiled and linked with zlib support. */
#define GG_CONFIG_HAVE_ZLIB /**/ #define GG_CONFIG_HAVE_ZLIB /**/
/* Defined if uintX_t types are defined in <stdint.h>. */ /* Defined if uintX_t types are defined in <stdint.h>. */
#define GG_CONFIG_HAVE_STDINT_H /**/ /* #undef GG_CONFIG_HAVE_STDINT_H */
/* Defined if uintX_t types are defined in <inttypes.h>. */ /* Defined if uintX_t types are defined in <inttypes.h>. */
/* #undef GG_CONFIG_HAVE_INTTYPES_H */ #define GG_CONFIG_HAVE_INTTYPES_H /**/
/* Defined if uintX_t types are defined in <sys/inttypes.h>. */ /* Defined if uintX_t types are defined in <sys/inttypes.h>. */
/* #undef GG_CONFIG_HAVE_SYS_INTTYPES_H */ /* #undef GG_CONFIG_HAVE_SYS_INTTYPES_H */
/* Defined if uintX_t types are defined in <sys/int_types.h>. */ /* Defined if uintX_t types are defined in <sys/int_types.h>. */
/* #undef GG_CONFIG_HAVE_SYS_INT_TYPES_H */ /* #undef GG_CONFIG_HAVE_SYS_INT_TYPES_H */
/* Defined if uintX_t types are defined in <sys/types.h>. */ /* Defined if uintX_t types are defined in <sys/types.h>. */
/* #undef GG_CONFIG_HAVE_SYS_TYPES_H */ /* #undef GG_CONFIG_HAVE_SYS_TYPES_H */
/* Defined if this machine has uint64_t. */
#define GG_CONFIG_HAVE_UINT64_T /**/
/* Defined if libgadu is GPL compliant (was not linked with OpenSSL or any
other non-GPL compliant library support). */
#define GG_CONFIG_IS_GPL_COMPLIANT /**/
#ifdef GG_CONFIG_HAVE_OPENSSL #ifdef GG_CONFIG_HAVE_OPENSSL
#include <openssl/ssl.h> #include <openssl/ssl.h>
#endif #endif
#ifdef GG_CONFIG_HAVE_STDINT_H #ifdef GG_CONFIG_HAVE_STDINT_H
#include <stdint.h> #include <stdint.h>
#else #else
# ifdef GG_CONFIG_HAVE_INTTYPES_H # ifdef GG_CONFIG_HAVE_INTTYPES_H
# include <inttypes.h> # include <inttypes.h>
# else # else
# ifdef GG_CONFIG_HAVE_SYS_INTTYPES_H # ifdef GG_CONFIG_HAVE_SYS_INTTYPES_H
# include <sys/inttypes.h> # include <sys/inttypes.h>
# else # else
# ifdef GG_CONFIG_HAVE_SYS_INT_TYPES_H # ifdef GG_CONFIG_HAVE_SYS_INT_TYPES_H
# include <sys/int_types.h> # include <sys/int_types.h>
# else # else
# ifdef GG_CONFIG_HAVE_SYS_TYPES_H # ifdef GG_CONFIG_HAVE_SYS_TYPES_H
# include <sys/types.h> # include <sys/types.h>
# else # else
#ifndef __AC_STDINT_H
#define __AC_STDINT_H
/* ISO C 9X: 7.18 Integer types <stdint.h> */ /* ISO C 9X: 7.18 Integer types <stdint.h> */
typedef unsigned char uint8_t; typedef unsigned char uint8_t;
typedef unsigned short uint16_t; typedef unsigned short uint16_t;
typedef unsigned int uint32_t; typedef unsigned int uint32_t;
#ifndef __CYGWIN__
#define __int8_t_defined
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
#endif
#endif /* __AC_STDINT_H */
# endif # endif
# endif # endif
# endif # endif
# endif # endif
#endif #endif
#ifndef GG_CONFIG_HAVE_UINT64_T
typedef unsigned long long uint64_t;
#endif
#ifdef _MSC_VER
#include <BaseTsd.h>
typedef SSIZE_T ssize_t;
#endif
#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__
> 4))
# define GG_GNUC_PRINTF(format_idx, arg_idx) \
__attribute__((format (printf, (format_idx), (arg_idx))))
#else
# define GG_GNUC_PRINTF(format_idx, arg_idx)
#endif
/** \endcond */ /** \endcond */
/** /**
* Numer Gadu-Gadu. * Numer Gadu-Gadu.
*/ */
typedef uint32_t uin_t; typedef uint32_t uin_t;
/** /**
* Identyfikator połączenia bezpośredniego Gadu-Gadu 7.x. * Identyfikator połączenia bezpośredniego Gadu-Gadu 7.x.
*/ */
skipping to change at line 191 skipping to change at line 206
struct gg_common { struct gg_common {
gg_common_head(struct gg_common) gg_common_head(struct gg_common)
}; };
struct gg_image_queue; struct gg_image_queue;
struct gg_dcc7; struct gg_dcc7;
struct gg_dcc7_relay; struct gg_dcc7_relay;
struct gg_session_private;
/** /**
* Sposób rozwiązywania nazw serwerów. * Sposób rozwiązywania nazw serwerów.
*/ */
typedef enum { typedef enum {
GG_RESOLVER_DEFAULT = 0, /**< Domyślny sposób rozwiązywani a nazw (jeden z poniższych) */ GG_RESOLVER_DEFAULT = 0, /**< Domyślny sposób rozwiązywani a nazw (jeden z poniższych) */
GG_RESOLVER_FORK, /**< RozwiÄ…zywanie nazw bazujÄ…ce n a procesach */ GG_RESOLVER_FORK, /**< RozwiÄ…zywanie nazw bazujÄ…ce n a procesach */
GG_RESOLVER_PTHREAD, /**< RozwiÄ…zywanie nazw bazujÄ…ce n a wÄ…tkach */ GG_RESOLVER_PTHREAD, /**< RozwiÄ…zywanie nazw bazujÄ…ce n a wÄ…tkach */
GG_RESOLVER_CUSTOM, /**< Funkcje rozwiÄ…zywania nazw dos tarczone przed aplikacjÄ™ */ GG_RESOLVER_CUSTOM, /**< Funkcje rozwiÄ…zywania nazw dos tarczone przed aplikacjÄ™ */
GG_RESOLVER_WIN32, /**< RozwiÄ…zywanie nazw bazujÄ…ce n a wÄ…tkach Win32 */
GG_RESOLVER_INVALID = -1 /**< Nieprawidłowy sposób rozwiąz ywania nazw (wynik \c gg_session_get_resolver) */ GG_RESOLVER_INVALID = -1 /**< Nieprawidłowy sposób rozwiąz ywania nazw (wynik \c gg_session_get_resolver) */
} gg_resolver_t; } gg_resolver_t;
/** /**
* Rodzaj kodowania znaków. * Rodzaj kodowania znaków.
*/ */
typedef enum { typedef enum {
GG_ENCODING_CP1250 = 0, /**< Kodowanie CP1250 */ GG_ENCODING_CP1250 = 0, /**< Kodowanie CP1250 */
GG_ENCODING_UTF8, /**< Kodowanie UTF-8 */ GG_ENCODING_UTF8, /**< Kodowanie UTF-8 */
GG_ENCODING_INVALID = -1 /**< Nieprawidłowe kodowanie */ GG_ENCODING_INVALID = -1 /**< Nieprawidłowe kodowanie */
} gg_encoding_t; } gg_encoding_t;
/** /**
* Stopień kompatybilności ze starymi wersjami API.
*/
typedef enum {
GG_COMPAT_LEGACY = 0, /**< Całkowita kompatybilność (nie wyłą
cza żadnych funkcji) */
GG_COMPAT_1_12_0 = 1 /**< Wyłącza: dostarczanie eventów GG_EVE
NT_ACK, stary format konferencji */
} gg_compat_t;
/**
* Flaga połączenia szyfrowanego.
*
* \ingroup login
*/
typedef enum {
GG_SSL_DISABLED = 0, /**< Połączenie SSL wyłączone */
GG_SSL_ENABLED, /**< Połączenie SSL włączone gdy dostęp
ne. Błędny certyfikat serwera nie powoduje odrzucenia połączenia. */
GG_SSL_REQUIRED /**< Połączenie SSL wymagane. Błędny cer
tyfikat serwera powoduje odrzucenie połączenia. */
} gg_ssl_t;
/**
* Sesja Gadu-Gadu. * Sesja Gadu-Gadu.
* *
* Tworzona przez funkcjÄ™ \c gg_login(), zwalniana przez \c gg_free_sessio n(). * Tworzona przez funkcjÄ™ \c gg_login(), zwalniana przez \c gg_free_sessio n().
* *
* \ingroup login * \ingroup login
*/ */
struct gg_session { struct gg_session {
gg_common_head(struct gg_session) gg_common_head(struct gg_session)
int async; /**< Flaga połączenia asynchronicznego */ int async; /**< Flaga połączenia asynchronicznego */
skipping to change at line 248 skipping to change at line 285
uint32_t external_addr; /**< Publiczny adres dla połączeń bezpoś rednich */ uint32_t external_addr; /**< Publiczny adres dla połączeń bezpoś rednich */
uint16_t external_port; /**< Publiczny port dla połączeń bezpośr ednich */ uint16_t external_port; /**< Publiczny port dla połączeń bezpośr ednich */
uin_t uin; /**< WÅ‚asny numer Gadu-Gadu */ uin_t uin; /**< WÅ‚asny numer Gadu-Gadu */
char *password; /**< Hasło (zwalniane po użyciu) */ char *password; /**< Hasło (zwalniane po użyciu) */
int initial_status; /**< PoczÄ…tkowy status */ int initial_status; /**< PoczÄ…tkowy status */
int status; /**< Aktualny status */ int status; /**< Aktualny status */
char *recv_buf; /**< Bufor na odbierany pakiety */ char *recv_buf; /**< Bufor na odbierane pakiety. Wskaźnik z awsze maksymalnie wyrównany, tak jak w wyniku działania \c malloc(). */
int recv_done; /**< Liczba wczytanych bajtów pakietu */ int recv_done; /**< Liczba wczytanych bajtów pakietu */
int recv_left; /**< Liczba pozostałych do wczytania bajtó w pakietu */ int recv_left; /**< Liczba pozostałych do wczytania bajtó w pakietu */
int protocol_version; /**< Wersja protokołu (bez flag) */ int protocol_version; /**< Wersja protokołu (bez flag) */
char *client_version; /**< Wersja klienta */ char *client_version; /**< Wersja klienta */
int last_sysmsg; /**< Numer ostatniej wiadomości systemowej */ int last_sysmsg; /**< Numer ostatniej wiadomości systemowej */
char *initial_descr; /**< PoczÄ…tkowy opis statusu */ char *initial_descr; /**< PoczÄ…tkowy opis statusu */
void *resolver; /**< Dane prywatne procesu lub wÄ…tku rozwiÄ …zujÄ…cego nazwÄ™ serwera */ void *resolver; /**< Dane prywatne procesu lub wÄ…tku rozwiÄ …zujÄ…cego nazwÄ™ serwera */
char *header_buf; /**< Bufor na początek nagłówka pakietu * #ifndef DOXYGEN
/ char *header_buf; /**< Bufor na początek nagłówka pakietu (
unsigned int header_done; /**< Liczba wczytanych bajtów nagł nieaktualne) */
ówka pakietu */ unsigned int header_done; /**< Liczba wczytanych bajtów nagł
ówka pakietu (nieaktualne) */
#endif
#ifdef GG_CONFIG_HAVE_OPENSSL #ifdef GG_CONFIG_HAVE_OPENSSL
SSL *ssl; /**< Struktura TLS */ SSL *ssl; /**< Struktura TLS */
SSL_CTX *ssl_ctx; /**< Kontekst sesji TLS */ SSL_CTX *ssl_ctx; /**< Kontekst sesji TLS */
#else #else
void *ssl; /**< Struktura TLS */ void *ssl; /**< Struktura TLS */
void *ssl_ctx; /**< Kontekst sesji TLS */ void *ssl_ctx; /**< Kontekst sesji TLS */
#endif #endif
int image_size; /**< Maksymalny rozmiar obsługiwanych obraz ków w KiB */ int image_size; /**< Maksymalny rozmiar obsługiwanych obraz ków w KiB */
skipping to change at line 299 skipping to change at line 338
gg_encoding_t encoding; /**< Rodzaj kodowania znaków */ gg_encoding_t encoding; /**< Rodzaj kodowania znaków */
gg_resolver_t resolver_type; /**< Sposób rozwiązywania nazw ser werów */ gg_resolver_t resolver_type; /**< Sposób rozwiązywania nazw ser werów */
int (*resolver_start)(int *fd, void **private_data, const char *host name); /**< Funkcja rozpoczynajÄ…ca rozwiÄ…zywanie nazwy */ int (*resolver_start)(int *fd, void **private_data, const char *host name); /**< Funkcja rozpoczynajÄ…ca rozwiÄ…zywanie nazwy */
void (*resolver_cleanup)(void **private_data, int force); /**< Funkcja zwalniajÄ…ca zasoby po rozwiÄ…zaniu nazwy */ void (*resolver_cleanup)(void **private_data, int force); /**< Funkcja zwalniajÄ…ca zasoby po rozwiÄ…zaniu nazwy */
int protocol_features; /**< Opcje protokołu */ int protocol_features; /**< Opcje protokołu */
int status_flags; /**< Flagi statusu */ int status_flags; /**< Flagi statusu */
int recv_msg_count; /**< Liczba odebranych wiadomości */ int recv_msg_count; /**< Liczba odebranych wiadomości */
const char *resolver_host; /**< Nazwa do rozwiÄ…zania *
/
struct in_addr *resolver_result; /**< Wynik rozwiÄ…zywania na
zwy */
unsigned int resolver_index; /**< Indeks aktualnie obsłu
giwanego wyniku rozwiÄ…zywania nazwy */
unsigned int resolver_count; /**< Liczba wyników rozwią
zywania nazwy */
uint16_t connect_port[2]; /**< Lista portów do połą
czenia */
unsigned int connect_index; /**< Indeks aktualnie obsłu
giwanego portu */
char *connect_host; /**< Adres serwera Gadu-Gadu
, z którym się łączymy */
gg_ssl_t ssl_flag; /**< Flaga połączenia szyf
rowanego */
struct gg_session_private *private_data; /**< Prywatne dane s
esji, nie udostępnione w API */
}; };
/** /**
* Połączenie HTTP. * Połączenie HTTP.
* *
* Tworzone przez \c gg_http_connect(), zwalniane przez \c gg_http_free(). * Tworzone przez \c gg_http_connect(), zwalniane przez \c gg_http_free().
* *
* \ingroup http * \ingroup http
*/ */
struct gg_http { struct gg_http {
skipping to change at line 559 skipping to change at line 611
GG_STATE_READING_ID, /**< Odebranie identyfikatora połą czenia bezpośredniego */ GG_STATE_READING_ID, /**< Odebranie identyfikatora połą czenia bezpośredniego */
GG_STATE_SENDING_ID, /**< Wysłano identyfikator połącz enia bezpośredniego */ GG_STATE_SENDING_ID, /**< Wysłano identyfikator połącz enia bezpośredniego */
GG_STATE_RESOLVING_GG, /**< Oczekiwanie na rozwiÄ…zanie naz wy serwera Gadu-Gadu */ GG_STATE_RESOLVING_GG, /**< Oczekiwanie na rozwiÄ…zanie naz wy serwera Gadu-Gadu */
GG_STATE_RESOLVING_RELAY, /**< Oczekiwanie na rozwiązanie naz wy serwera pośredniczącego */ GG_STATE_RESOLVING_RELAY, /**< Oczekiwanie na rozwiązanie naz wy serwera pośredniczącego */
GG_STATE_CONNECTING_RELAY, /**< Oczekiwanie na połączenie z s erwerem pośredniczącym */ GG_STATE_CONNECTING_RELAY, /**< Oczekiwanie na połączenie z s erwerem pośredniczącym */
GG_STATE_READING_RELAY, /**< Odbieranie danych */ GG_STATE_READING_RELAY, /**< Odbieranie danych */
GG_STATE_DISCONNECTING, /**< Oczekiwanie na potwierdzenie ro złączenia */ GG_STATE_DISCONNECTING, /**< Oczekiwanie na potwierdzenie ro złączenia */
GG_STATE_CONNECT_HUB, /**< Nawiązanie połączenia z hube
m */
GG_STATE_CONNECT_PROXY_HUB,
GG_STATE_CONNECT_GG, /**< Nawiązanie połączenia z serw
erem */
GG_STATE_CONNECT_PROXY_GG,
GG_STATE_CONNECTING_PROXY_HUB,
GG_STATE_CONNECTING_PROXY_GG,
GG_STATE_RESOLVE_HUB_SYNC,
GG_STATE_RESOLVE_HUB_ASYNC,
GG_STATE_RESOLVE_PROXY_HUB_SYNC,
GG_STATE_RESOLVE_PROXY_HUB_ASYNC,
GG_STATE_RESOLVE_PROXY_GG_SYNC,
GG_STATE_RESOLVE_PROXY_GG_ASYNC,
GG_STATE_RESOLVE_GG_SYNC,
GG_STATE_RESOLVE_GG_ASYNC,
GG_STATE_RESOLVING_HUB,
GG_STATE_RESOLVING_PROXY_HUB,
GG_STATE_RESOLVING_PROXY_GG,
GG_STATE_SEND_HUB,
GG_STATE_SEND_PROXY_HUB,
GG_STATE_SEND_PROXY_GG,
GG_STATE_SENDING_HUB,
GG_STATE_SENDING_PROXY_HUB,
GG_STATE_SENDING_PROXY_GG,
GG_STATE_READING_HUB,
GG_STATE_READING_PROXY_HUB,
GG_STATE_READING_PROXY_GG,
}; };
/** /**
* Informacja o tym, czy biblioteka chce zapisywać i/lub czytać * Informacja o tym, czy biblioteka chce zapisywać i/lub czytać
* z deskryptora. Maska bitowa. * z deskryptora. Maska bitowa.
* *
* \ingroup events * \ingroup events
*/ */
enum gg_check_t { enum gg_check_t {
GG_CHECK_NONE = 0, /**< Nie sprawdzaj niczego */ GG_CHECK_NONE = 0, /**< Nie sprawdzaj niczego */
GG_CHECK_WRITE = 1, /**< Sprawdź możliwość zapisu */ GG_CHECK_WRITE = 1, /**< Sprawdź możliwość zapisu */
GG_CHECK_READ = 2 /**< Sprawdź możliwość odczytu * / GG_CHECK_READ = 2 /**< Sprawdź możliwość odczytu * /
}; };
/** /**
* Flaga połączenia szyfrowanego. * Metody nawiązywania połączeń TCP/TLS.
* *
* \ingroup login * \ingroup socketmanager
*/ */
typedef enum { typedef enum {
GG_SSL_DISABLED = 0, /**< Połączenie SSL wyłączone */ GG_SOCKET_MANAGER_TYPE_INTERNAL = 0, /**< Wewnętrzna obsługa gniaz
GG_SSL_ENABLED, /**< Połączenie SSL włączone gdy dostęp d (domyślne). */
ne */ GG_SOCKET_MANAGER_TYPE_TCP, /**< Dostarczona przez aplikacjÄ™ - tylk
GG_SSL_REQUIRED /**< Połączenie SSL wymagane */ o obsługa TCP. */
} gg_ssl_t; GG_SOCKET_MANAGER_TYPE_TLS /**< Dostarczona przez aplikację - obsł
uga zarówno TCP, jak i TLS. */
} gg_socket_manager_type_t;
/**
* Funkcja dostarczona przez aplikacjÄ™, tworzÄ…ca nowe gniazdo TCP/TLS.
*
* Po nawiązaniu połączenia aplikacja musi wywołać gg_socket_manager_c
onnected.
* Jeżeli połączenie jest asynchroniczne, wywołanie musi nastąpić po
wyjściu z
* kontekstu tej funkcji. Dla połączeń synchronicznych z kolei, musi nas
tąpić
* jeszcze przed wyjściem z kontekstu.
*
* \param cb_data Dane prywatne aplikacji
* \param host Nazwa hosta
* \param port Numer portu
* \param is_tls Flaga określająca, czy ma zostać nawiązane połączeni
e TLS
* \param is_async Flaga określająca połączenie asynchroniczne (patrz s
zczegóły powyżej)
* \param priv Dane prywatne biblioteki libgadu (do przekazania do gg_socke
t_manager_connected)
*
* \return Uchwyt gniazda
*
* \ingroup socketmanager
*/
typedef void* (*gg_socket_manager_connect_cb_t)(void *cb_data, const char *
host, int port, int is_tls, int is_async, void *priv);
/**
* Niszczy gniazdo i zwalnia wszystkie powiÄ…zane z nim zasoby.
*
* \param cb_data Dane prywatne aplikacji
* \param handle Uchwyt gniazda
*
* \ingroup socketmanager
*/
typedef void (*gg_socket_manager_close_cb_t)(void *cb_data, void *handle);
/**
* Odbiera z gniazda dane binarne.
*
* Funkcja powinna zajmować się obsługą TLS, jeżeli gniazdo jest w tak
im trybie.
*
* \param cb_data Dane prywatne aplikacji
* \param handle Uchwyt gniazda
* \param buffer Bufor do zapisu danych
* \param bufsize Rozmiar bufora
*
* \return Ilość zapisanych danych, lub -1 (oraz ustawiony errno) w przyp
adku niepowodzenia
*
* \ingroup socketmanager
*/
typedef ssize_t (*gg_socket_manager_read_cb_t)(void *cb_data, void *handle,
unsigned char *buffer, size_t bufsize);
/**
* Wysyła przez gniazdo dane binarne.
*
* Funkcja powinna zajmować się obsługą TLS, jeżeli gniazdo jest w tak
im trybie.
*
* \param cb_data Dane prywatne aplikacji
* \param handle Uchwyt gniazda
* \param data Dane do wysłania
* \param length Rozmiar danych
*
* \return Ilość wysłanych danych, lub -1 (oraz ustawiony errno) w przyp
adku niepowodzenia
*
* \ingroup socketmanager
*/
typedef ssize_t (*gg_socket_manager_write_cb_t)(void *cb_data, void *handle
, const unsigned char *data, size_t length);
/**
* Struktura opisująca funkcje zarządzające gniazdami, jeżeli aplikacja
sama je
* obsługuje.
*
* \ingroup socketmanager
*/
typedef struct {
void *cb_data; /**< Dane prywatne aplikacji */
gg_socket_manager_connect_cb_t connect_cb; /**< Funkcja tworzÄ…ca no
we gniazdo */
gg_socket_manager_close_cb_t close_cb; /**< Funkcja niszczÄ…ca gniaz
do */
gg_socket_manager_read_cb_t read_cb; /**< Funkcja odczytujÄ…ca dane
z gniazda */
gg_socket_manager_write_cb_t write_cb; /**< Funkcja wysyłająca dan
e przez gniazdo */
#ifndef DOXYGEN
void *reserved1;
void *reserved2;
void *reserved3;
void *reserved4;
#endif
} gg_socket_manager_t;
int gg_socket_manager_connected(void *handle, void *priv, int fd);
/** /**
* Parametry połączenia z serwerem Gadu-Gadu. Parametry zostały przenies ione * Parametry połączenia z serwerem Gadu-Gadu. Parametry zostały przenies ione
* do struktury, by uniknąć zmian API po rozszerzeniu protokołu i dodani u * do struktury, by uniknąć zmian API po rozszerzeniu protokołu i dodani u
* kolejnych opcji połączenia. Część parametrów, które nie są już aktualne * kolejnych opcji połączenia. Część parametrów, które nie są już aktualne
* lub nie mają znaczenia, została usunięta z dokumentacji. * lub nie mają znaczenia, została usunięta z dokumentacji.
* *
* \ingroup login * \ingroup login
*/ */
struct gg_login_params { struct gg_login_params {
skipping to change at line 619 skipping to change at line 783
int image_size; /**< Maksymalny rozmiar obsługiwany ch obrazków w kilobajtach */ int image_size; /**< Maksymalny rozmiar obsługiwany ch obrazków w kilobajtach */
#ifndef DOXYGEN #ifndef DOXYGEN
int era_omnix; /**< Flaga udawania klienta Era Omni x (nieaktualna) */ int era_omnix; /**< Flaga udawania klienta Era Omni x (nieaktualna) */
#endif #endif
int hash_type; /**< Rodzaj skrótu hasła (\c GG_LO GIN_HASH_GG32 lub \c GG_LOGIN_HASH_SHA1, domyślnie SHA1) */ int hash_type; /**< Rodzaj skrótu hasła (\c GG_LO GIN_HASH_GG32 lub \c GG_LOGIN_HASH_SHA1, domyślnie SHA1) */
gg_encoding_t encoding; /**< Rodzaj kodowania używanego w s esji (domyślnie CP1250) */ gg_encoding_t encoding; /**< Rodzaj kodowania używanego w s esji (domyślnie CP1250) */
gg_resolver_t resolver; /**< Sposób rozwiązywania nazw (pa trz \ref build-resolver) */ gg_resolver_t resolver; /**< Sposób rozwiązywania nazw (pa trz \ref build-resolver) */
int protocol_features; /**< Opcje protokołu (flagi GG_FEAT URE_*). */ int protocol_features; /**< Opcje protokołu (flagi GG_FEAT URE_*). */
int status_flags; /**< Flagi statusu (flagi GG_STATUS_ FLAG_*, patrz \ref status). */ int status_flags; /**< Flagi statusu (flagi GG_STATUS_ FLAG_*, patrz \ref status). */
#ifndef DOXYGEN unsigned int struct_size; /**< Rozmiar struktury. To pole powi
char dummy[1 * sizeof(int)]; /**< \internal Miejsce na kilka kole nno być inicjowane wartością sizeof(struct gg_login_params) - w przeciwn
jnych ym przypadku pola za nim nie będą obsługiwane. Pozwala na rozszerzanie s
parametrów, żeby wraz z dodawani truktury bez łamania ABI. */
em kolejnych
parametrów nie zmieniał się roz gg_compat_t compatibility; /**< Stopień kompatybilności ze st
miar struktury */ arym API. */
#endif
char *connect_host; /**< Nazwa hosta (oraz opcjonalnie p
ort, podany po dwukropku) serwera Gadu-Gadu (domyślnie pobierany automatyc
znie) (patrz pole struct_size). */
gg_socket_manager_type_t socket_manager_type; /**< Wybrana metoda na
wiązywania połączeń TCP/TLS (domyślnie wewnętrzna) */
gg_socket_manager_t socket_manager; /**< Jeżeli wybrano metodę zew
nętrzną - konfiguracja jej */
char **host_white_list; /**< Lista zakończona wskaźnikiem
NULL, domen akceptowanych w odpowiedziach od huba (domyślnie wszystkie do
tej pory znane). Używane tylko przy GG_SSL_REQUIRED. Pusta lista wyłącza
sprawdzanie. */
}; };
#ifdef GG_CONFIG_IS_GPL_COMPLIANT
int gg_is_gpl_compliant(void);
#endif
struct gg_session *gg_login(const struct gg_login_params *p); struct gg_session *gg_login(const struct gg_login_params *p);
void gg_free_session(struct gg_session *sess); void gg_free_session(struct gg_session *sess);
void gg_logoff(struct gg_session *sess); void gg_logoff(struct gg_session *sess);
int gg_change_status(struct gg_session *sess, int status); int gg_change_status(struct gg_session *sess, int status);
int gg_change_status_descr(struct gg_session *sess, int status, const char *descr); int gg_change_status_descr(struct gg_session *sess, int status, const char *descr);
int gg_change_status_descr_time(struct gg_session *sess, int status, const char *descr, int time); int gg_change_status_descr_time(struct gg_session *sess, int status, const char *descr, int time);
int gg_change_status_flags(struct gg_session *sess, int flags); int gg_change_status_flags(struct gg_session *sess, int flags);
int gg_send_message(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message); int gg_send_message(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message);
int gg_send_message_richtext(struct gg_session *sess, int msgclass, uin_t r ecipient, const unsigned char *message, const unsigned char *format, int fo rmatlen); int gg_send_message_richtext(struct gg_session *sess, int msgclass, uin_t r ecipient, const unsigned char *message, const unsigned char *format, int fo rmatlen);
int gg_send_message_html(struct gg_session *sess, int msgclass, uin_t recip ient, const unsigned char *html_message);
int gg_send_message_confer(struct gg_session *sess, int msgclass, int recip ients_count, uin_t *recipients, const unsigned char *message); int gg_send_message_confer(struct gg_session *sess, int msgclass, int recip ients_count, uin_t *recipients, const unsigned char *message);
int gg_send_message_confer_richtext(struct gg_session *sess, int msgclass, int recipients_count, uin_t *recipients, const unsigned char *message, cons t unsigned char *format, int formatlen); int gg_send_message_confer_richtext(struct gg_session *sess, int msgclass, int recipients_count, uin_t *recipients, const unsigned char *message, cons t unsigned char *format, int formatlen);
int gg_send_message_confer_html(struct gg_session *sess, int msgclass, int recipients_count, uin_t *recipients, const unsigned char *html_message);
int gg_send_message_ctcp(struct gg_session *sess, int msgclass, uin_t recip ient, const unsigned char *message, int message_len); int gg_send_message_ctcp(struct gg_session *sess, int msgclass, uin_t recip ient, const unsigned char *message, int message_len);
int gg_ping(struct gg_session *sess); int gg_ping(struct gg_session *sess);
int gg_userlist_request(struct gg_session *sess, char type, const char *req uest); int gg_userlist_request(struct gg_session *sess, char type, const char *req uest);
int gg_userlist100_request(struct gg_session *sess, char type, unsigned int version, char format_type, const char *request); int gg_userlist100_request(struct gg_session *sess, char type, unsigned int version, char format_type, const char *request);
int gg_image_request(struct gg_session *sess, uin_t recipient, int size, ui nt32_t crc32); int gg_image_request(struct gg_session *sess, uin_t recipient, int size, ui nt32_t crc32);
int gg_image_reply(struct gg_session *sess, uin_t recipient, const char *fi lename, const char *image, int size); int gg_image_reply(struct gg_session *sess, uin_t recipient, const char *fi lename, const char *image, int size);
int gg_typing_notification(struct gg_session *sess, uin_t recipient, int le ngth); int gg_typing_notification(struct gg_session *sess, uin_t recipient, int le ngth);
uint32_t gg_crc32(uint32_t crc, const unsigned char *buf, int len); uint32_t gg_crc32(uint32_t crc, const unsigned char *buf, int len);
skipping to change at line 662 skipping to change at line 835
int gg_http_set_resolver(struct gg_http *gh, gg_resolver_t type); int gg_http_set_resolver(struct gg_http *gh, gg_resolver_t type);
gg_resolver_t gg_http_get_resolver(struct gg_http *gh); gg_resolver_t gg_http_get_resolver(struct gg_http *gh);
int gg_http_set_custom_resolver(struct gg_http *gh, int (*resolver_start)(i nt*, void**, const char*), void (*resolver_cleanup)(void**, int)); int gg_http_set_custom_resolver(struct gg_http *gh, int (*resolver_start)(i nt*, void**, const char*), void (*resolver_cleanup)(void**, int));
int gg_global_set_resolver(gg_resolver_t type); int gg_global_set_resolver(gg_resolver_t type);
gg_resolver_t gg_global_get_resolver(void); gg_resolver_t gg_global_get_resolver(void);
int gg_global_set_custom_resolver(int (*resolver_start)(int*, void**, const char*), void (*resolver_cleanup)(void**, int)); int gg_global_set_custom_resolver(int (*resolver_start)(int*, void**, const char*), void (*resolver_cleanup)(void**, int));
int gg_multilogon_disconnect(struct gg_session *gs, gg_multilogon_id_t conn _id); int gg_multilogon_disconnect(struct gg_session *gs, gg_multilogon_id_t conn _id);
int gg_chat_create(struct gg_session *gs);
int gg_chat_invite(struct gg_session *gs, uint64_t id, uin_t *participants,
unsigned int participants_count);
int gg_chat_leave(struct gg_session *gs, uint64_t id);
int gg_chat_send_message(struct gg_session *gs, uint64_t id, const char *me
ssage, int is_html);
/** /**
* Rodzaj zdarzenia. * Rodzaj zdarzenia.
* *
* \ingroup events * \ingroup events
*/ */
enum gg_event_t { enum gg_event_t {
GG_EVENT_NONE = 0, /**< Nie wydarzyło się nic wartego uwagi */ GG_EVENT_NONE = 0, /**< Nie wydarzyło się nic wartego uwagi */
GG_EVENT_MSG, /**< \brief Otrzymano wiadomość. P rzekazuje również wiadomości systemowe od numeru 0. */ GG_EVENT_MSG, /**< \brief Otrzymano wiadomość. P rzekazuje również wiadomości systemowe od numeru 0. */
GG_EVENT_NOTIFY, /**< \brief Informacja o statusach o sób z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać, jeśli planuje się używać protokołu w wersji starszej niż domyślna. Ostatni element tablicy zawiera uin równy 0, a pozostałe pola są niezainicjowan e. */ GG_EVENT_NOTIFY, /**< \brief Informacja o statusach o sób z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać, jeśli planuje się używać protokołu w wersji starszej niż domyślna. Ostatni element tablicy zawiera uin równy 0, a pozostałe pola są niezainicjowan e. */
GG_EVENT_NOTIFY_DESCR, /**< \brief Informacja o statusie op isowym osoby z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać , jeśli planuje się używać protokołu w wersji starszej niż domyślna. */ GG_EVENT_NOTIFY_DESCR, /**< \brief Informacja o statusie op isowym osoby z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać , jeśli planuje się używać protokołu w wersji starszej niż domyślna. */
skipping to change at line 717 skipping to change at line 895
GG_EVENT_XML_EVENT, /**< Otrzymano komunikat systemowy ( 7.7) */ GG_EVENT_XML_EVENT, /**< Otrzymano komunikat systemowy ( 7.7) */
GG_EVENT_DISCONNECT_ACK, /**< \brief Potwierdzenie zakoÅ„czen ia sesji. Informuje o tym, że zmiana stanu na niedostÄ™pny z opisem dotarÅ ‚a do serwera i można zakoÅ„czyć poÅ‚Ä…czenie TCP. */ GG_EVENT_DISCONNECT_ACK, /**< \brief Potwierdzenie zakoÅ„czen ia sesji. Informuje o tym, że zmiana stanu na niedostÄ™pny z opisem dotarÅ ‚a do serwera i można zakoÅ„czyć poÅ‚Ä…czenie TCP. */
GG_EVENT_TYPING_NOTIFICATION, /**< Powiadomienie o pisaniu */ GG_EVENT_TYPING_NOTIFICATION, /**< Powiadomienie o pisaniu */
GG_EVENT_USER_DATA, /**< Informacja o kontaktach */ GG_EVENT_USER_DATA, /**< Informacja o kontaktach */
GG_EVENT_MULTILOGON_MSG, /**< Wiadomość wysłana z innej se sji multilogowania */ GG_EVENT_MULTILOGON_MSG, /**< Wiadomość wysłana z innej se sji multilogowania */
GG_EVENT_MULTILOGON_INFO, /**< Informacja o innych sesjach mul tilogowania */ GG_EVENT_MULTILOGON_INFO, /**< Informacja o innych sesjach mul tilogowania */
GG_EVENT_USERLIST100_VERSION, /**< Otrzymano numer wersji listy ko ntaktów na serwerze (10.0) */ GG_EVENT_USERLIST100_VERSION, /**< Otrzymano numer wersji listy ko ntaktów na serwerze (10.0) */
GG_EVENT_USERLIST100_REPLY, /**< Wynik importu lub eksportu list y kontaktów (10.0) */ GG_EVENT_USERLIST100_REPLY, /**< Wynik importu lub eksportu list y kontaktów (10.0) */
GG_EVENT_IMTOKEN, /**< Otrzymano ciÄ…g IMTOKEN (11.0)
*/
GG_EVENT_PONG110, /**< \brief Utrzymanie połączenia
(11.0). Może służyć do synchronizacji czasu z serwerem. */
GG_EVENT_JSON_EVENT, /**< Otrzymano komunikat systemowy (
11.0) */
GG_EVENT_ACK110, /**< Potwierdzenie wysłania wiadomo
ści (11.0) */
GG_EVENT_CHAT_INFO, /**< Otrzymano informacjÄ™ o konfere
ncji (11.0). */
GG_EVENT_CHAT_INFO_GOT_ALL, /**< \brief Informacje o wszystkich
konferencjach zostały już wysłane (11.0). Otrzymywany po ostatnim pakiec
ie \c GG_EVENT_CHAT_INFO */
GG_EVENT_CHAT_INFO_UPDATE, /**< \brief Aktualizacja informacji
o konferencji (11.0). Dodanie, usunięcie jednego z uczestników. */
GG_EVENT_CHAT_CREATED, /**< Potwierdzenie utworzenia konfer
encji (11.0) */
GG_EVENT_CHAT_INVITE_ACK, /**< Potwierdzenie wysłania zaprosz
enia do konferencji (11.0) */
}; };
#define GG_EVENT_SEARCH50_REPLY GG_EVENT_PUBDIR50_SEARCH_REPLY #define GG_EVENT_SEARCH50_REPLY GG_EVENT_PUBDIR50_SEARCH_REPLY
/** /**
* Powód nieudanego połączenia. * Powód nieudanego połączenia.
*/ */
enum gg_failure_t { enum gg_failure_t {
GG_FAILURE_RESOLVING = 1, /**< Nie znaleziono serwera */ GG_FAILURE_RESOLVING = 1, /**< Nie znaleziono serwera */
GG_FAILURE_CONNECTING, /**< Błąd połączenia */ GG_FAILURE_CONNECTING, /**< Błąd połączenia */
skipping to change at line 738 skipping to change at line 927
GG_FAILURE_READING, /**< Zerwano połączenie podczas od czytu */ GG_FAILURE_READING, /**< Zerwano połączenie podczas od czytu */
GG_FAILURE_WRITING, /**< Zerwano połączenie podczas za pisu */ GG_FAILURE_WRITING, /**< Zerwano połączenie podczas za pisu */
GG_FAILURE_PASSWORD, /**< Nieprawidłowe hasło */ GG_FAILURE_PASSWORD, /**< Nieprawidłowe hasło */
GG_FAILURE_404, /**< Nieużywane */ GG_FAILURE_404, /**< Nieużywane */
GG_FAILURE_TLS, /**< Błąd negocjacji szyfrowanego połączenia */ GG_FAILURE_TLS, /**< Błąd negocjacji szyfrowanego połączenia */
GG_FAILURE_NEED_EMAIL, /**< Serwer rozłączył nas z proś bą o zmianę adresu e-mail */ GG_FAILURE_NEED_EMAIL, /**< Serwer rozłączył nas z proś bą o zmianę adresu e-mail */
GG_FAILURE_INTRUDER, /**< Zbyt wiele prób połączenia z nieprawidłowym hasłem */ GG_FAILURE_INTRUDER, /**< Zbyt wiele prób połączenia z nieprawidłowym hasłem */
GG_FAILURE_UNAVAILABLE, /**< Serwery są wyłączone */ GG_FAILURE_UNAVAILABLE, /**< Serwery są wyłączone */
GG_FAILURE_PROXY, /**< Błąd serwera pośrednicząceg o */ GG_FAILURE_PROXY, /**< Błąd serwera pośrednicząceg o */
GG_FAILURE_HUB, /**< Błąd połączenia z hubem */ GG_FAILURE_HUB, /**< Błąd połączenia z hubem */
GG_FAILURE_INTERNAL, /**< Błąd wewnętrzny */
}; };
/** /**
* Kod błędu danej operacji. * Kod błędu danej operacji.
* *
* Nie zawiera przesadnie szczegółowych informacji o powodach błędów, by nie * Nie zawiera przesadnie szczegółowych informacji o powodach błędów, by nie
* komplikować ich obsługi. Jeśli wymagana jest większa dokładność, należy * komplikować ich obsługi. Jeśli wymagana jest większa dokładność, należy
* sprawdzić zawartość zmiennej systemowej \c errno. * sprawdzić zawartość zmiennej systemowej \c errno.
*/ */
enum gg_error_t { enum gg_error_t {
skipping to change at line 804 skipping to change at line 994
* informacje są dostępne za pomocą funkcji \c gg_pubdir50_* * informacje są dostępne za pomocą funkcji \c gg_pubdir50_*
*/ */
typedef struct gg_pubdir50_s *gg_pubdir50_t; typedef struct gg_pubdir50_s *gg_pubdir50_t;
/** /**
* Opis zdarzeń \c GG_EVENT_MSG i \c GG_EVENT_MULTILOGON_MSG. * Opis zdarzeń \c GG_EVENT_MSG i \c GG_EVENT_MULTILOGON_MSG.
*/ */
struct gg_event_msg { struct gg_event_msg {
uin_t sender; /**< Numer nadawcy/odbiorcy */ uin_t sender; /**< Numer nadawcy/odbiorcy */
int msgclass; /**< Klasa wiadomości */ int msgclass; /**< Klasa wiadomości */
#ifndef _WIN32
time_t time; /**< Czas nadania */ time_t time; /**< Czas nadania */
#else
uint32_t time; /**< Czas nadania */
#endif
unsigned char *message; /**< Treść wiadomości */ unsigned char *message; /**< Treść wiadomości */
int recipients_count; /**< Liczba odbiorców konferencji */ int recipients_count; /**< Liczba odbiorców konferencji */
uin_t *recipients; /**< Odbiorcy konferencji */ uin_t *recipients; /**< Odbiorcy konferencji */
int formats_length; /**< Długość informacji o formatowaniu te kstu */ int formats_length; /**< Długość informacji o formatowaniu te kstu */
void *formats; /**< Informacje o formatowaniu tekstu */ void *formats; /**< Informacje o formatowaniu tekstu */
uint32_t seq; /**< Numer sekwencyjny wiadomości */ uint32_t seq; /**< Numer sekwencyjny wiadomości */
char *xhtml_message; /**< Treść wiadomości w formacie XHTML (m char *xhtml_message; /**< Treść wiadomości w formacie XHTML */
oże być równe \c NULL, jeśli wiadomość nie zawiera treści XHTML) */
uint64_t chat_id; /**< Identyfikator konferencji lub 0, jeżel
i jest to zwykła wiadomość (11.0) */
uint64_t flags; /**< Flagi wiadomości (11.0) */
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_NOTIFY_DESCR. * Opis zdarzenia \c GG_EVENT_NOTIFY_DESCR.
*/ */
struct gg_event_notify_descr { struct gg_event_notify_descr {
struct gg_notify_reply *notify; /**< Informacje o liście kontaktów */ struct gg_notify_reply *notify; /**< Informacje o liście kontaktów */
char *descr; /**< Opis status */ char *descr; /**< Opis status */
}; };
skipping to change at line 845 skipping to change at line 1042
* Opis zdarzenia \c GG_EVENT_STATUS60. * Opis zdarzenia \c GG_EVENT_STATUS60.
*/ */
struct gg_event_status60 { struct gg_event_status60 {
uin_t uin; /**< Numer Gadu-Gadu */ uin_t uin; /**< Numer Gadu-Gadu */
int status; /**< Nowy status */ int status; /**< Nowy status */
uint32_t remote_ip; /**< Adres IP dla połączeń bezpośrednich */ uint32_t remote_ip; /**< Adres IP dla połączeń bezpośrednich */
uint16_t remote_port; /**< Port dla połączeń bezpośrednich */ uint16_t remote_port; /**< Port dla połączeń bezpośrednich */
int version; /**< Wersja protokołu */ int version; /**< Wersja protokołu */
int image_size; /**< Maksymalny rozmiar obsługiwanych obraz ków w KiB */ int image_size; /**< Maksymalny rozmiar obsługiwanych obraz ków w KiB */
char *descr; /**< Opis statusu */ char *descr; /**< Opis statusu */
#ifndef _WIN32
time_t time; /**< Czas powrotu */ time_t time; /**< Czas powrotu */
#else
uint32_t time; /**< Czas powrotu */
#endif
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_NOTIFY_REPLY60. * Opis zdarzenia \c GG_EVENT_NOTIFY_REPLY60.
*/ */
struct gg_event_notify60 { struct gg_event_notify60 {
uin_t uin; /**< Numer Gadu-Gadu. W ostatnim elemencie j est równy 0, a pozostałe pola są niezainicjowane. */ uin_t uin; /**< Numer Gadu-Gadu. W ostatnim elemencie j est równy 0, a pozostałe pola są niezainicjowane. */
int status; /**< Nowy status */ int status; /**< Nowy status */
uint32_t remote_ip; /**< Adres IP dla połączeń bezpośrednich */ uint32_t remote_ip; /**< Adres IP dla połączeń bezpośrednich */
uint16_t remote_port; /**< Port dla połączeń bezpośrednich */ uint16_t remote_port; /**< Port dla połączeń bezpośrednich */
int version; /**< Wersja protokołu */ int version; /**< Wersja protokołu */
int image_size; /**< Maksymalny rozmiar obsługiwanych obraz ków w KiB */ int image_size; /**< Maksymalny rozmiar obsługiwanych obraz ków w KiB */
char *descr; /**< Opis statusu */ char *descr; /**< Opis statusu */
#ifndef _WIN32
time_t time; /**< Czas powrotu */ time_t time; /**< Czas powrotu */
#else
uint32_t time; /**< Czas powrotu */
#endif
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_ACK. * Opis zdarzenia \c GG_EVENT_ACK.
*/ */
struct gg_event_ack { struct gg_event_ack {
uin_t recipient; /**< Numer odbiorcy */ uin_t recipient; /**< Numer odbiorcy */
int status; /**< Status doręczenia */ int status; /**< Status doręczenia */
int seq; /**< Numer sekwencyjny wiadomości */ int seq; /**< Numer sekwencyjny wiadomości */
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_ACK110.
*/
struct gg_event_ack110 {
uint8_t msg_type; /**< Rodzaj wiadomości (0x01 - zwykła, 0x0
2 - konferencja) */
uint32_t seq; /**< Numer sekwencyjny */
uint32_t time; /**< Czas zdarzenia */
};
/**
* Opis zdarzenia \c GG_EVENT_USERLIST. * Opis zdarzenia \c GG_EVENT_USERLIST.
*/ */
struct gg_event_userlist { struct gg_event_userlist {
char type; /**< Rodzaj odpowiedzi */ char type; /**< Rodzaj odpowiedzi */
char *reply; /**< Treść odpowiedzi */ char *reply; /**< Treść odpowiedzi */
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_DCC_VOICE_DATA. * Opis zdarzenia \c GG_EVENT_DCC_VOICE_DATA.
*/ */
skipping to change at line 915 skipping to change at line 1129
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_XML_EVENT. * Opis zdarzenia \c GG_EVENT_XML_EVENT.
*/ */
struct gg_event_xml_event { struct gg_event_xml_event {
char *data; /**< Bufor z komunikatem */ char *data; /**< Bufor z komunikatem */
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_JSON_EVENT.
*/
struct gg_event_json_event {
char *data; /**< Bufor z komunikatem */
char *type; /**< Bufor z typem komunikatu */
};
/**
* Opis zdarzenia \c GG_EVENT_DCC7_CONNECTED. * Opis zdarzenia \c GG_EVENT_DCC7_CONNECTED.
*/ */
struct gg_event_dcc7_connected { struct gg_event_dcc7_connected {
struct gg_dcc7 *dcc7; /**< Struktura połączenia */ struct gg_dcc7 *dcc7; /**< Struktura połączenia */
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_DCC7_PENDING. * Opis zdarzenia \c GG_EVENT_DCC7_PENDING.
*/ */
struct gg_event_dcc7_pending { struct gg_event_dcc7_pending {
skipping to change at line 997 skipping to change at line 1219
/** /**
* Struktura opisujÄ…ca sesjÄ™ multilogowania. * Struktura opisujÄ…ca sesjÄ™ multilogowania.
*/ */
struct gg_multilogon_session { struct gg_multilogon_session {
gg_multilogon_id_t id; /**< Identyfikator sesji */ gg_multilogon_id_t id; /**< Identyfikator sesji */
char *name; /**< Nazwa sesji (podana w \c gg_log in_params.client_version) */ char *name; /**< Nazwa sesji (podana w \c gg_log in_params.client_version) */
uint32_t remote_addr; /**< Adres sesji */ uint32_t remote_addr; /**< Adres sesji */
int status_flags; /**< Flagi statusu sesji */ int status_flags; /**< Flagi statusu sesji */
int protocol_features; /**< Opcje protokolu sesji */ int protocol_features; /**< Opcje protokolu sesji */
#ifndef _WIN32
time_t logon_time; /**< Czas zalogowania */ time_t logon_time; /**< Czas zalogowania */
#else
uint32_t logon_time; /**< Czas zalogowania */
#endif
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_MULTILOGON_INFO. * Opis zdarzenia \c GG_EVENT_MULTILOGON_INFO.
*/ */
struct gg_event_multilogon_info { struct gg_event_multilogon_info {
int count; /**< Liczba sesji */ int count; /**< Liczba sesji */
struct gg_multilogon_session *sessions; /** Lista sesji */ struct gg_multilogon_session *sessions; /** Lista sesji */
}; };
skipping to change at line 1026 skipping to change at line 1252
* Opis zdarzenia \c GG_EVENT_USERLIST100_REPLY. * Opis zdarzenia \c GG_EVENT_USERLIST100_REPLY.
*/ */
struct gg_event_userlist100_reply { struct gg_event_userlist100_reply {
char type; /**< Rodzaj odpowiedzi */ char type; /**< Rodzaj odpowiedzi */
uint32_t version; /**< Aktualna wersja listy kontaktó w na serwerze */ uint32_t version; /**< Aktualna wersja listy kontaktó w na serwerze */
char format_type; /**< Typ formatu listy kontaktów (Å ¼Ä…dany w \c gg_userlist100_request.format_type) */ char format_type; /**< Typ formatu listy kontaktów (Å ¼Ä…dany w \c gg_userlist100_request.format_type) */
char *reply; /**< Treść listy kontaktów w prze syłanej wersji i formacie */ char *reply; /**< Treść listy kontaktów w prze syłanej wersji i formacie */
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_IMTOKEN.
*/
struct gg_event_imtoken {
char *imtoken; /**< Wartość IMTOKEN */
};
/**
* Opis zdarzenia \c GG_EVENT_PONG110.
*/
struct gg_event_pong110 {
#ifndef _WIN32
time_t time; /**< Aktualny czas na serwerze */
#else
uint32_t time; /**< Aktualny czas na serwerze */
#endif
};
/**
* Opis zdarzenia \c GG_EVENT_CHAT_INFO.
*/
struct gg_event_chat_info {
uint64_t id; /**< Identyfikator konferencji */
uint32_t version; /**< Wersja informacji o konferencji
*/
uint32_t participants_count; /**< Ilość uczestników */
uin_t *participants; /**< Lista uczestników */
};
/**
* Opis zdarzenia \c GG_EVENT_CHAT_INFO_UPDATE.
*/
struct gg_event_chat_info_update {
uint64_t id; /**< Identyfikator konferencji */
uint32_t type; /**< Typ aktualizacji (\c GG_CHAT_IN
FO_UPDATE_*) */
uin_t participant; /**< Uczestnik, którego dotyczy akt
ualizacja */
uin_t inviter; /**< Uczestnik inicjujÄ…cy aktualiza
cjÄ™ (zapraszajÄ…cy) */
uint32_t version; /**< Wersja informacji o konferencji
*/
uint32_t time; /**< Czas zdarzenia */
};
/**
* Opis zdarzenia \c GG_EVENT_CHAT_CREATED.
*/
struct gg_event_chat_created {
uint64_t id; /**< Identyfikator konferencji */
uint32_t seq; /**< Numer sekwencyjny */
};
/**
* Opis zdarzenia \c GG_EVENT_CHAT_INVITE_ACK.
*/
struct gg_event_chat_invite_ack {
uint64_t id; /**< Identyfikator konferencji */
uint32_t seq; /**< Numer sekwencyjny */
};
/**
* Unia wszystkich zdarzeń zwracanych przez funkcje \c gg_watch_fd(), * Unia wszystkich zdarzeń zwracanych przez funkcje \c gg_watch_fd(),
* \c gg_dcc_watch_fd() i \c gg_dcc7_watch_fd(). * \c gg_dcc_watch_fd() i \c gg_dcc7_watch_fd().
* *
* \ingroup events * \ingroup events
*/ */
union gg_event_union { union gg_event_union {
enum gg_failure_t failure; /**< Błąd połączenia (\c GG_EVEN T_CONN_FAILED) */ enum gg_failure_t failure; /**< Błąd połączenia (\c GG_EVEN T_CONN_FAILED) */
struct gg_notify_reply *notify; /**< Zmiana statusu kontaktów (\c G G_EVENT_NOTIFY) */ struct gg_notify_reply *notify; /**< Zmiana statusu kontaktów (\c G G_EVENT_NOTIFY) */
struct gg_event_notify_descr notify_descr; /**< Zmiana statusu kontaktów (\c GG_EVENT_NOTIFY_DESCR) */ struct gg_event_notify_descr notify_descr; /**< Zmiana statusu kontaktów (\c GG_EVENT_NOTIFY_DESCR) */
struct gg_event_status status; /**< Zmiana statusu kontaktów (\c G G_EVENT_STATUS) */ struct gg_event_status status; /**< Zmiana statusu kontaktów (\c G G_EVENT_STATUS) */
struct gg_event_status60 status60; /**< Zmiana statusu kontaktà ³w (\c GG_EVENT_STATUS60) */ struct gg_event_status60 status60; /**< Zmiana statusu kontaktà ³w (\c GG_EVENT_STATUS60) */
struct gg_event_notify60 *notify60; /**< Zmiana statusu kontaktà ³w (\c GG_EVENT_NOTIFY60) */ struct gg_event_notify60 *notify60; /**< Zmiana statusu kontaktà ³w (\c GG_EVENT_NOTIFY60) */
struct gg_event_msg msg; /**< Otrzymano wiadomość (\c GG_EV ENT_MSG) */ struct gg_event_msg msg; /**< Otrzymano wiadomość (\c GG_EV ENT_MSG) */
struct gg_event_ack ack; /**< Potwierdzenie wiadomości (\c G G_EVENT_ACK) */ struct gg_event_ack ack; /**< Potwierdzenie wiadomości (\c G G_EVENT_ACK) */
struct gg_event_ack110 ack110; /**< Potwierdzenie wysłania wiadomo ści (11.0) (\c GG_EVENT_ACK110) */
struct gg_event_image_request image_request; /**< Żądanie wysł ania obrazka (\c GG_EVENT_IMAGE_REQUEST) */ struct gg_event_image_request image_request; /**< Żądanie wysł ania obrazka (\c GG_EVENT_IMAGE_REQUEST) */
struct gg_event_image_reply image_reply; /**< Odpowiedź z ob razkiem (\c GG_EVENT_IMAGE_REPLY) */ struct gg_event_image_reply image_reply; /**< Odpowiedź z ob razkiem (\c GG_EVENT_IMAGE_REPLY) */
struct gg_event_userlist userlist; /**< Odpowiedź listy kontak tów (\c GG_EVENT_USERLIST) */ struct gg_event_userlist userlist; /**< Odpowiedź listy kontak tów (\c GG_EVENT_USERLIST) */
gg_pubdir50_t pubdir50; /**< Odpowiedź katalogu publicznego (\c GG_ EVENT_PUBDIR50_*) */ gg_pubdir50_t pubdir50; /**< Odpowiedź katalogu publicznego (\c GG_ EVENT_PUBDIR50_*) */
struct gg_event_xml_event xml_event; /**< Zdarzenie systemowe (\c GG_EVENT_XML_EVENT) */ struct gg_event_xml_event xml_event; /**< Zdarzenie systemowe (\c GG_EVENT_XML_EVENT) */
struct gg_event_json_event json_event; /**< Zdarzenie systemowe (\c GG_EVENT_JSON_EVENT) */
struct gg_dcc *dcc_new; /**< Nowe połączenie bezpośrednie (\c GG_ EVENT_DCC_NEW) */ struct gg_dcc *dcc_new; /**< Nowe połączenie bezpośrednie (\c GG_ EVENT_DCC_NEW) */
enum gg_error_t dcc_error; /**< Błąd połączenia bezpośredn iego (\c GG_EVENT_DCC_ERROR) */ enum gg_error_t dcc_error; /**< Błąd połączenia bezpośredn iego (\c GG_EVENT_DCC_ERROR) */
struct gg_event_dcc_voice_data dcc_voice_data; /**< Dane połączen ia głosowego (\c GG_EVENT_DCC_VOICE_DATA) */ struct gg_event_dcc_voice_data dcc_voice_data; /**< Dane połączen ia głosowego (\c GG_EVENT_DCC_VOICE_DATA) */
struct gg_dcc7 *dcc7_new; /**< Nowe połączenie bezpośrednie (\c GG_EVENT_DCC7_NEW) */ struct gg_dcc7 *dcc7_new; /**< Nowe połączenie bezpośrednie (\c GG_EVENT_DCC7_NEW) */
enum gg_error_t dcc7_error; /**< Błąd połączenia bezpośredn iego (\c GG_EVENT_DCC7_ERROR) */ enum gg_error_t dcc7_error; /**< Błąd połączenia bezpośredn iego (\c GG_EVENT_DCC7_ERROR) */
struct gg_event_dcc7_connected dcc7_connected; /**< Informacja o ze stawieniu połączenia bezpośredniego (\c GG_EVENT_DCC7_CONNECTED) */ struct gg_event_dcc7_connected dcc7_connected; /**< Informacja o ze stawieniu połączenia bezpośredniego (\c GG_EVENT_DCC7_CONNECTED) */
struct gg_event_dcc7_pending dcc7_pending; /**< Trwa próba poÅ ‚Ä…czenia bezpoÅ›redniego (\c GG_EVENT_DCC7_PENDING) */ struct gg_event_dcc7_pending dcc7_pending; /**< Trwa próba poÅ ‚Ä…czenia bezpoÅ›redniego (\c GG_EVENT_DCC7_PENDING) */
struct gg_event_dcc7_reject dcc7_reject; /**< Odrzucono poÅ‚Ä …czenia bezpoÅ›redniego (\c GG_EVENT_DCC7_REJECT) */ struct gg_event_dcc7_reject dcc7_reject; /**< Odrzucono poÅ‚Ä …czenia bezpoÅ›redniego (\c GG_EVENT_DCC7_REJECT) */
struct gg_event_dcc7_accept dcc7_accept; /**< Zaakceptowano p ołączenie bezpośrednie (\c GG_EVENT_DCC7_ACCEPT) */ struct gg_event_dcc7_accept dcc7_accept; /**< Zaakceptowano p ołączenie bezpośrednie (\c GG_EVENT_DCC7_ACCEPT) */
struct gg_event_dcc7_done dcc7_done; /**< Zakończono połączeni e bezpośrednie (\c GG_EVENT_DCC7_DONE) */ struct gg_event_dcc7_done dcc7_done; /**< Zakończono połączeni e bezpośrednie (\c GG_EVENT_DCC7_DONE) */
struct gg_event_typing_notification typing_notification; /**< Powiadomienie o pisaniu */ struct gg_event_typing_notification typing_notification; /**< Powiadomienie o pisaniu */
struct gg_event_user_data user_data; /**< Informacje o kontaktach */ struct gg_event_user_data user_data; /**< Informacje o kontaktach */
struct gg_event_msg multilogon_msg; /**< Inna sesja wysłała wi adomość (\c GG_EVENT_MULTILOGON_MSG) */ struct gg_event_msg multilogon_msg; /**< Inna sesja wysłała wi adomość (\c GG_EVENT_MULTILOGON_MSG) */
struct gg_event_multilogon_info multilogon_info; /**< Informa cja o innych sesjach multilogowania (\c GG_EVENT_MULTILOGON_INFO) */ struct gg_event_multilogon_info multilogon_info; /**< Informa cja o innych sesjach multilogowania (\c GG_EVENT_MULTILOGON_INFO) */
struct gg_event_userlist100_version userlist100_version; /**< Informacja o numerze wersji listy kontaktów na serwerze (\c GG_EVENT_USER LIST100_VERSION) */ struct gg_event_userlist100_version userlist100_version; /**< Informacja o numerze wersji listy kontaktów na serwerze (\c GG_EVENT_USER LIST100_VERSION) */
struct gg_event_userlist100_reply userlist100_reply; /**< Odpowie dź listy kontaktów (10.0) (\c GG_EVENT_USERLIST100_REPLY) */ struct gg_event_userlist100_reply userlist100_reply; /**< Odpowie dź listy kontaktów (10.0) (\c GG_EVENT_USERLIST100_REPLY) */
struct gg_event_imtoken imtoken; /**< CiÄ…g IMTOKEN (11.0) (\
c GG_EVENT_IMTOKEN) */
struct gg_event_pong110 pong110; /**< Utrzymanie połączenia
(11.0) (\c GG_EVENT_PONG110) */
struct gg_event_chat_info chat_info; /**< Informacje o konferencj
i (11.0) (\c GG_EVENT_CHAT_INFO) */
struct gg_event_chat_info_update chat_info_update; /**< Aktuali
zacja informacji o konferencji (11.0) (\c GG_EVENT_CHAT_INFO_UPDATE) */
struct gg_event_chat_created chat_created; /**< Potwierdzenie u
tworzenia konferencji (11.0) (\c GG_EVENT_CHAT_CREATED) */
struct gg_event_chat_invite_ack chat_invite_ack; /**< Potwier
dzenie wysłania zaproszenia do konferencji (11.0) (\c GG_EVENT_CHAT_INVITE
_ACK) */
}; };
/** /**
* Opis zdarzenia. * Opis zdarzenia.
* *
* Zwracany przez funkcje \c gg_watch_fd(), \c gg_dcc_watch_fd() * Zwracany przez funkcje \c gg_watch_fd(), \c gg_dcc_watch_fd()
* i \c gg_dcc7_watch_fd(). Po przeanalizowaniu należy zwolnić * i \c gg_dcc7_watch_fd(). Po przeanalizowaniu należy zwolnić
* za pomocÄ… \c gg_event_free(). * za pomocÄ… \c gg_event_free().
* *
* \ingroup events * \ingroup events
skipping to change at line 1177 skipping to change at line 1467
* *
* Wartość pola GG_PUBDIR50_ACTIVE. * Wartość pola GG_PUBDIR50_ACTIVE.
*/ */
enum { enum {
GG_PUBDIR50_ACTIVE_TRUE, /**< Wyszukaj tylko osoby dostępne */ GG_PUBDIR50_ACTIVE_TRUE, /**< Wyszukaj tylko osoby dostępne */
}; };
#endif /* DOXYGEN */ #endif /* DOXYGEN */
/** /**
* Powód błędu operacji na katalogu publicznym.
*
* \ingroup http
*/
typedef enum {
GG_PUBDIR_ERROR_NONE = 0, /**< Brak błędu */
GG_PUBDIR_ERROR_OTHER, /**< Nieznany błąd */
GG_PUBDIR_ERROR_TOKEN, /**< Błędny token */
GG_PUBDIR_ERROR_OLD_PASSWORD, /**< Niepoprawne stare hasło */
GG_PUBDIR_ERROR_NEW_PASSWORD, /**< Niepoprawne nowe hasło */
} gg_pubdir_error_t;
/**
* Wynik operacji na katalogu publicznym. * Wynik operacji na katalogu publicznym.
* *
* \ingroup http * \ingroup http
*/ */
struct gg_pubdir { struct gg_pubdir {
int success; /**< Flaga powodzenia operacji */ int success; /**< Flaga powodzenia operacji */
uin_t uin; /**< Otrzymany numer lub 0 w przypadku błę du */ uin_t uin; /**< Otrzymany numer lub 0 w przypadku błę du */
gg_pubdir_error_t error; /**< Powód błędu */
}; };
int gg_pubdir_watch_fd(struct gg_http *f); int gg_pubdir_watch_fd(struct gg_http *f);
void gg_pubdir_free(struct gg_http *f); void gg_pubdir_free(struct gg_http *f);
/** /**
* Token autoryzacji niektórych operacji HTTP. * Token autoryzacji niektórych operacji HTTP.
* *
* \ingroup token * \ingroup token
*/ */
skipping to change at line 1278 skipping to change at line 1582
/** /**
* \ingroup debug * \ingroup debug
* @{ * @{
*/ */
#define GG_DEBUG_NET 1 /**< Rejestracja zdarzeń związanych z siec ią */ #define GG_DEBUG_NET 1 /**< Rejestracja zdarzeń związanych z siec ią */
#define GG_DEBUG_TRAFFIC 2 /**< Rejestracja ruchu sieciowego */ #define GG_DEBUG_TRAFFIC 2 /**< Rejestracja ruchu sieciowego */
#define GG_DEBUG_DUMP 4 /**< Rejestracja zawartoÅ›ci pakietà ³w */ #define GG_DEBUG_DUMP 4 /**< Rejestracja zawartoÅ›ci pakietà ³w */
#define GG_DEBUG_FUNCTION 8 /**< Rejestracja wywołań funkcji */ #define GG_DEBUG_FUNCTION 8 /**< Rejestracja wywołań funkcji */
#define GG_DEBUG_MISC 16 /**< Rejestracja różnych informacji */ #define GG_DEBUG_MISC 16 /**< Rejestracja różnych informacji */
#define GG_DEBUG_VERBOSE 32 /**< Rejestracja informacji szczegółowych
*/
#define GG_DEBUG_WARNING 64 /**< Rejestracja ostrzeżeń */
#define GG_DEBUG_ERROR 128 /**< Rejestracja błędów krytycznych */
/** @} */ /** @} */
const char *gg_debug_state(enum gg_state_t state);
const char *gg_debug_event(enum gg_event_t event);
#ifdef GG_DEBUG_DISABLE #ifdef GG_DEBUG_DISABLE
#define gg_debug(x, y...) do { } while(0) #define gg_debug(...) do { } while (0)
#define gg_debug_session(z, x, y...) do { } while(0) #define gg_debug_session(...) do { } while (0)
#else #else
void gg_debug(int level, const char *format, ...); void gg_debug(int level, const char *format, ...) GG_GNUC_PRINTF(2, 3);
void gg_debug_session(struct gg_session *sess, int level, const char *forma void gg_debug_session(struct gg_session *sess, int level, const char *forma
t, ...); t, ...) GG_GNUC_PRINTF(3, 4);
#endif #endif
const char *gg_libgadu_version(void); const char *gg_libgadu_version(void);
/** /**
* Lista funkcji biblioteki, które zależą od zewnętrznych bibliotek. * Lista funkcji biblioteki, które zależą od zewnętrznych bibliotek.
* *
* \ingroup version * \ingroup version
*/ */
typedef enum { typedef enum {
skipping to change at line 1444 skipping to change at line 1754
struct gg_http *gg_userlist_remove(uin_t uin, const char *password, int asy nc) GG_DEPRECATED; struct gg_http *gg_userlist_remove(uin_t uin, const char *password, int asy nc) GG_DEPRECATED;
int gg_userlist_remove_watch_fd(struct gg_http *f) GG_DEPRECATED; int gg_userlist_remove_watch_fd(struct gg_http *f) GG_DEPRECATED;
void gg_userlist_remove_free(struct gg_http *f) GG_DEPRECATED; void gg_userlist_remove_free(struct gg_http *f) GG_DEPRECATED;
int gg_pubdir50_handle_reply(struct gg_event *e, const char *packet, int le ngth) GG_DEPRECATED; int gg_pubdir50_handle_reply(struct gg_event *e, const char *packet, int le ngth) GG_DEPRECATED;
/** \endcond */ /** \endcond */
int gg_file_hash_sha1(int fd, uint8_t *result) GG_DEPRECATED; int gg_file_hash_sha1(int fd, uint8_t *result) GG_DEPRECATED;
#ifdef __GNUC__ char *gg_saprintf(const char *format, ...) GG_GNUC_PRINTF(1, 2) GG_DEPRECAT
char *gg_saprintf(const char *format, ...) __attribute__ ((format (printf, ED;
1, 2))) GG_DEPRECATED;
#else
char *gg_saprintf(const char *format, ...) GG_DEPRECATED;
#endif
char *gg_vsaprintf(const char *format, va_list ap) GG_DEPRECATED; char *gg_vsaprintf(const char *format, va_list ap) GG_DEPRECATED;
#define gg_alloc_sprintf gg_saprintf #define gg_alloc_sprintf gg_saprintf
char *gg_get_line(char **ptr) GG_DEPRECATED; char *gg_get_line(char **ptr) GG_DEPRECATED;
int gg_connect(void *addr, int port, int async) GG_DEPRECATED; int gg_connect(void *addr, int port, int async) GG_DEPRECATED;
struct in_addr *gg_gethostbyname(const char *hostname) GG_DEPRECATED; struct in_addr *gg_gethostbyname(const char *hostname) GG_DEPRECATED;
char *gg_read_line(int sock, char *buf, int length) GG_DEPRECATED; char *gg_read_line(int sock, char *buf, int length) GG_DEPRECATED;
void gg_chomp(char *line) GG_DEPRECATED; void gg_chomp(char *line) GG_DEPRECATED;
skipping to change at line 1490 skipping to change at line 1795
*/ */
struct gg_image_queue { struct gg_image_queue {
uin_t sender; /**< Nadawca obrazka */ uin_t sender; /**< Nadawca obrazka */
uint32_t size; /**< Rozmiar obrazka */ uint32_t size; /**< Rozmiar obrazka */
uint32_t crc32; /**< Suma kontrolna CRC32 */ uint32_t crc32; /**< Suma kontrolna CRC32 */
char *filename; /**< Nazwa pliku */ char *filename; /**< Nazwa pliku */
char *image; /**< Bufor z odebranymi danymi */ char *image; /**< Bufor z odebranymi danymi */
uint32_t done; /**< Rozmiar odebranych danych */ uint32_t done; /**< Rozmiar odebranych danych */
struct gg_image_queue *next; /**< Kolejny element listy */ struct gg_image_queue *next; /**< Kolejny element listy */
uint32_t packet_type; /**< \brief Rodzaj odbieranych pakie
tów. W niektórych przypadkach (przy multilogowaniu) serwer wysyła nam dw
ie kopie obrazka jako dwa różne typy pakietów */
} GG_DEPRECATED; } GG_DEPRECATED;
int gg_dcc7_handle_id(struct gg_session *sess, struct gg_event *e, const vo id *payload, int len) GG_DEPRECATED; int gg_dcc7_handle_id(struct gg_session *sess, struct gg_event *e, const vo id *payload, int len) GG_DEPRECATED;
int gg_dcc7_handle_new(struct gg_session *sess, struct gg_event *e, const v oid *payload, int len) GG_DEPRECATED; int gg_dcc7_handle_new(struct gg_session *sess, struct gg_event *e, const v oid *payload, int len) GG_DEPRECATED;
int gg_dcc7_handle_info(struct gg_session *sess, struct gg_event *e, const void *payload, int len) GG_DEPRECATED; int gg_dcc7_handle_info(struct gg_session *sess, struct gg_event *e, const void *payload, int len) GG_DEPRECATED;
int gg_dcc7_handle_accept(struct gg_session *sess, struct gg_event *e, cons t void *payload, int len) GG_DEPRECATED; int gg_dcc7_handle_accept(struct gg_session *sess, struct gg_event *e, cons t void *payload, int len) GG_DEPRECATED;
int gg_dcc7_handle_reject(struct gg_session *sess, struct gg_event *e, cons t void *payload, int len) GG_DEPRECATED; int gg_dcc7_handle_reject(struct gg_session *sess, struct gg_event *e, cons t void *payload, int len) GG_DEPRECATED;
#define GG_APPMSG_HOST "appmsg.gadu-gadu.pl" #define GG_APPMSG_HOST "appmsg.gadu-gadu.pl"
#define GG_APPMSG_PORT 80 #define GG_APPMSG_PORT 80
skipping to change at line 1513 skipping to change at line 1820
#define GG_REGISTER_PORT 80 #define GG_REGISTER_PORT 80
#define GG_REMIND_HOST "retr.gadu-gadu.pl" #define GG_REMIND_HOST "retr.gadu-gadu.pl"
#define GG_REMIND_PORT 80 #define GG_REMIND_PORT 80
#define GG_RELAY_HOST "relay.gadu-gadu.pl" #define GG_RELAY_HOST "relay.gadu-gadu.pl"
#define GG_RELAY_PORT 80 #define GG_RELAY_PORT 80
#define GG_DEFAULT_PORT 8074 #define GG_DEFAULT_PORT 8074
#define GG_HTTPS_PORT 443 #define GG_HTTPS_PORT 443
#define GG_HTTP_USERAGENT "Mozilla/4.7 [en] (Win98; I)" #define GG_HTTP_USERAGENT "Mozilla/4.7 [en] (Win98; I)"
#define GG_DEFAULT_CLIENT_VERSION "10.1.0.11070" #define GG_PROTOCOL_VERSION_100 0x2e
#define GG_DEFAULT_PROTOCOL_VERSION 0x2e #define GG_PROTOCOL_VERSION_110 0x40
/* GG_DEPRECATED */
#define GG_DEFAULT_CLIENT_VERSION "-"
#define GG_DEFAULT_PROTOCOL_VERSION GG_PROTOCOL_VERSION_110
#define GG_DEFAULT_TIMEOUT 30 #define GG_DEFAULT_TIMEOUT 30
#define GG_HAS_AUDIO_MASK 0x40000000 #define GG_HAS_AUDIO_MASK 0x40000000
#define GG_HAS_AUDIO7_MASK 0x20000000 #define GG_HAS_AUDIO7_MASK 0x20000000
#define GG_ERA_OMNIX_MASK 0x04000000 #define GG_ERA_OMNIX_MASK 0x04000000
#define GG_LIBGADU_VERSION "1.11.4" #define GG_LIBGADU_VERSION "1.12.0"
#ifndef DOXYGEN #ifndef DOXYGEN
#define GG_FEATURE_MSG77 0x0001 #define GG_FEATURE_MSG77 0x0001
#define GG_FEATURE_STATUS77 0x0002 #define GG_FEATURE_STATUS77 0x0002
#define GG_FEATURE_UNKNOWN_4 0x0004 #define GG_FEATURE_UNKNOWN_4 0x0004
#define GG_FEATURE_UNKNOWN_8 0x0008 #define GG_FEATURE_UNKNOWN_8 0x0008
#define GG_FEATURE_DND_FFC 0x0010 #define GG_FEATURE_DND_FFC 0x0010
#define GG_FEATURE_IMAGE_DESCR 0x0020 #define GG_FEATURE_IMAGE_DESCR 0x0020
#define GG_FEATURE_UNKNOWN_40 0x0040 #define GG_FEATURE_UNKNOWN_40 0x0040
skipping to change at line 1669 skipping to change at line 1981
#define GG_STATUS_AVAIL 0x0002 #define GG_STATUS_AVAIL 0x0002
#define GG_STATUS_AVAIL_DESCR 0x0004 #define GG_STATUS_AVAIL_DESCR 0x0004
#define GG_STATUS_BUSY 0x0003 #define GG_STATUS_BUSY 0x0003
#define GG_STATUS_BUSY_DESCR 0x0005 #define GG_STATUS_BUSY_DESCR 0x0005
#define GG_STATUS_DND 0x0021 #define GG_STATUS_DND 0x0021
#define GG_STATUS_DND_DESCR 0x0022 #define GG_STATUS_DND_DESCR 0x0022
#define GG_STATUS_INVISIBLE 0x0014 #define GG_STATUS_INVISIBLE 0x0014
#define GG_STATUS_INVISIBLE_DESCR 0x0016 #define GG_STATUS_INVISIBLE_DESCR 0x0016
#define GG_STATUS_BLOCKED 0x0006 #define GG_STATUS_BLOCKED 0x0006
#define GG_STATUS_GGPLUS 0x0020
#define GG_STATUS_NOT_SET 0x0023
#define GG_STATUS_UNKNOWN 0x0025
#define GG_STATUS_IMAGE_MASK 0x0100 #define GG_STATUS_IMAGE_MASK 0x0100
#define GG_STATUS_DESCR_MASK 0x4000 #define GG_STATUS_DESCR_MASK 0x4000
#define GG_STATUS_FRIENDS_MASK 0x8000 #define GG_STATUS_FRIENDS_MASK 0x8000
#define GG_STATUS_FLAG_UNKNOWN 0x00000001 #define GG_STATUS_FLAG_UNKNOWN 0x00000001
#define GG_STATUS_FLAG_VIDEO 0x00000002 #define GG_STATUS_FLAG_VIDEO 0x00000002
#define GG_STATUS_FLAG_INHERIT 0x00000020
#define GG_STATUS_FLAG_MOBILE 0x00100000 #define GG_STATUS_FLAG_MOBILE 0x00100000
#define GG_STATUS_FLAG_SPAM 0x00800000 #define GG_STATUS_FLAG_SPAM 0x00800000
#else #else
/** /**
* Rodzaje statusów użytkownika. * Rodzaje statusów użytkownika.
* *
* \ingroup status * \ingroup status
*/ */
skipping to change at line 1699 skipping to change at line 2016
GG_STATUS_FFC_DESCR, /**< PoGGadaj ze mnÄ… z opisem */ GG_STATUS_FFC_DESCR, /**< PoGGadaj ze mnÄ… z opisem */
GG_STATUS_AVAIL, /**< Dostępny */ GG_STATUS_AVAIL, /**< Dostępny */
GG_STATUS_AVAIL_DESCR, /**< Dostępny z opisem */ GG_STATUS_AVAIL_DESCR, /**< Dostępny z opisem */
GG_STATUS_BUSY, /**< Zajęty */ GG_STATUS_BUSY, /**< Zajęty */
GG_STATUS_BUSY_DESCR, /**< Zajęty z opisem */ GG_STATUS_BUSY_DESCR, /**< Zajęty z opisem */
GG_STATUS_DND, /**< Nie przeszkadzać */ GG_STATUS_DND, /**< Nie przeszkadzać */
GG_STATUS_DND_DESCR, /**< Nie przeszakdzać z opisem */ GG_STATUS_DND_DESCR, /**< Nie przeszakdzać z opisem */
GG_STATUS_INVISIBLE, /**< Niewidoczny (tylko własny stat us) */ GG_STATUS_INVISIBLE, /**< Niewidoczny (tylko własny stat us) */
GG_STATUS_INVISIBLE_DESCR, /**< Niewidoczny z opisem (tylko wł asny status) */ GG_STATUS_INVISIBLE_DESCR, /**< Niewidoczny z opisem (tylko wł asny status) */
GG_STATUS_BLOCKED, /**< Zablokowany (tylko status innyc h) */ GG_STATUS_BLOCKED, /**< Zablokowany (tylko status innyc h) */
GG_STATUS_GGPLUS, /**< Status "Korzystam z GG Plus" */
GG_STATUS_NOT_SET, /**< Status nie ustawiony (przy logo
waniu siÄ™ do sieci) */
GG_STATUS_IMAGE_MASK, /**< Flaga bitowa oznaczająca opis graficzny (tylko jeśli wybrano \c GG_FEATURE_IMAGE_DESCR) */ GG_STATUS_IMAGE_MASK, /**< Flaga bitowa oznaczająca opis graficzny (tylko jeśli wybrano \c GG_FEATURE_IMAGE_DESCR) */
GG_STATUS_DESCR_MASK, /**< Flaga bitowa oznaczająca statu s z opisem (tylko jeśli wybrano \c GG_FEATURE_IMAGE_DESCR) */ GG_STATUS_DESCR_MASK, /**< Flaga bitowa oznaczająca statu s z opisem (tylko jeśli wybrano \c GG_FEATURE_IMAGE_DESCR) */
GG_STATUS_FRIENDS_MASK, /**< Flaga bitowa dostępności tylk o dla znajomych */ GG_STATUS_FRIENDS_MASK, /**< Flaga bitowa dostępności tylk o dla znajomych */
}; };
/** /**
* Rodzaje statusów użytkownika. Mapa bitowa. * Rodzaje statusów użytkownika. Mapa bitowa.
* *
* \ingroup status * \ingroup status
*/ */
enum { enum {
GG_STATUS_FLAG_UNKNOWN, /**< Przeznaczenie nieznane, ale wys tępuje zawsze */ GG_STATUS_FLAG_UNKNOWN, /**< Przeznaczenie nieznane, ale wys tępuje zawsze */
GG_STATUS_FLAG_VIDEO, /**< Klient obsługuje wideorozmowy */ GG_STATUS_FLAG_VIDEO, /**< Klient obsługuje wideorozmowy */
GG_STATUS_FLAG_INHERIT, /**< Synchronizacja statusu do innyc h klientów (przy logowaniu się do sieci) */
GG_STATUS_FLAG_MOBILE, /**< Klient mobilny (ikona telefonu komórkowego) */ GG_STATUS_FLAG_MOBILE, /**< Klient mobilny (ikona telefonu komórkowego) */
GG_STATUS_FLAG_SPAM, /**< Klient chce otrzymywać linki o d nieznajomych */ GG_STATUS_FLAG_SPAM, /**< Klient chce otrzymywać linki o d nieznajomych */
}; };
#endif /* DOXYGEN */ #endif /* DOXYGEN */
/** /**
* \ingroup status * \ingroup status
* *
* Flaga bitowa dostepnosci informujaca ze mozemy voipowac * Flaga bitowa dostepnosci informujaca ze mozemy voipowac
skipping to change at line 2168 skipping to change at line 2488
GG_USERLIST100_FORMAT_TYPE_NONE, /**< Brak treści listy kont aktów. */ GG_USERLIST100_FORMAT_TYPE_NONE, /**< Brak treści listy kont aktów. */
GG_USERLIST100_FORMAT_TYPE_GG70, /**< Format listy kontaktów zgodny z Gadu-Gadu 7.0. */ GG_USERLIST100_FORMAT_TYPE_GG70, /**< Format listy kontaktów zgodny z Gadu-Gadu 7.0. */
GG_USERLIST100_FORMAT_TYPE_GG100, /**< Format listy kontaktów zgodny z Gadu-Gadu 10.0. */ GG_USERLIST100_FORMAT_TYPE_GG100, /**< Format listy kontaktów zgodny z Gadu-Gadu 10.0. */
}; };
#endif /* DOXYGEN */ #endif /* DOXYGEN */
#ifndef DOXYGEN #ifndef DOXYGEN
#define GG_USERLIST100_REPLY_LIST 0x00 #define GG_USERLIST100_REPLY_LIST 0x00
#define GG_USERLIST100_REPLY_UPTODATE 0x01
#define GG_USERLIST100_REPLY_ACK 0x10 #define GG_USERLIST100_REPLY_ACK 0x10
#define GG_USERLIST100_REPLY_REJECT 0x12 #define GG_USERLIST100_REPLY_REJECT 0x12
#else #else
/** /**
* \ingroup importexport * \ingroup importexport
* *
* Typ odpowiedzi listy kontaktów (10.0). * Typ odpowiedzi listy kontaktów (10.0).
*/ */
enum { enum {
GG_USERLIST100_REPLY_LIST, /**< W odpowiedzi znajduje się aktu alna lista kontaktów na serwerze. */ GG_USERLIST100_REPLY_LIST, /**< W odpowiedzi znajduje się aktu alna lista kontaktów na serwerze. */
GG_USERLIST100_REPLY_UPTODATE, /**< Komunikat o tym, że lista kont aktów jest już zsynchronizowana. */
GG_USERLIST100_REPLY_ACK, /**< Potwierdzenie odebrania nowej w ersji listy kontaktów. W polu \c gg_userlist100_reply.version znajduje siÄ ™ numer nowej wersji listy kontaktów. */ GG_USERLIST100_REPLY_ACK, /**< Potwierdzenie odebrania nowej w ersji listy kontaktów. W polu \c gg_userlist100_reply.version znajduje siÄ ™ numer nowej wersji listy kontaktów. */
GG_USERLIST100_REPLY_REJECT, /**< Odmowa przyjęcia nowej wersji listy kontaktów. W polu \c gg_userlist100_reply.version znajduje się nume r wersji listy kontaktów aktualnie przechowywanej przez serwer. */ GG_USERLIST100_REPLY_REJECT, /**< Odmowa przyjęcia nowej wersji listy kontaktów. W polu \c gg_userlist100_reply.version znajduje się nume r wersji listy kontaktów aktualnie przechowywanej przez serwer. */
}; };
#endif /* DOXYGEN */ #endif /* DOXYGEN */
struct gg_dcc_tiny_packet { struct gg_dcc_tiny_packet {
uint8_t type; /* rodzaj pakietu */ uint8_t type; /* rodzaj pakietu */
} GG_PACKED; } GG_PACKED;
skipping to change at line 2249 skipping to change at line 2571
#define GG_DCC7_ACCEPT 0x21 #define GG_DCC7_ACCEPT 0x21
struct gg_dcc7_accept { struct gg_dcc7_accept {
uint32_t uin; /* numer przyjmującego połączenie */ uint32_t uin; /* numer przyjmującego połączenie */
gg_dcc7_id_t id; /* identyfikator połączenia */ gg_dcc7_id_t id; /* identyfikator połączenia */
uint32_t offset; /* offset przy wznawianiu transmisji */ uint32_t offset; /* offset przy wznawianiu transmisji */
uint32_t dunno1; /* 0x00000000 */ uint32_t dunno1; /* 0x00000000 */
} GG_PACKED; } GG_PACKED;
// XXX API /* XXX API */
#define GG_DCC7_TYPE_P2P 0x00000001 /**< Połączenie bezpośrednie */ #define GG_DCC7_TYPE_P2P 0x00000001 /**< Połączenie bezpośrednie */
#define GG_DCC7_TYPE_SERVER 0x00000002 /**< Połączenie przez serwer */ #define GG_DCC7_TYPE_SERVER 0x00000002 /**< Połączenie przez serwer */
#define GG_DCC7_REJECT 0x22 #define GG_DCC7_REJECT 0x22
struct gg_dcc7_reject { struct gg_dcc7_reject {
uint32_t uin; /**< Numer odrzucającego połączen ie */ uint32_t uin; /**< Numer odrzucającego połączen ie */
gg_dcc7_id_t id; /**< Identyfikator połączenia */ gg_dcc7_id_t id; /**< Identyfikator połączenia */
uint32_t reason; /**< Powód rozłączenia */ uint32_t reason; /**< Powód rozłączenia */
} GG_PACKED; } GG_PACKED;
// XXX API /* XXX API */
#define GG_DCC7_REJECT_BUSY 0x00000001 /**< Połączenie bezpośrednie już trwa, nie umiem obsłużyć więcej */ #define GG_DCC7_REJECT_BUSY 0x00000001 /**< Połączenie bezpośrednie już trwa, nie umiem obsłużyć więcej */
#define GG_DCC7_REJECT_USER 0x00000002 /**< Użytkownik odrzucił połącze nie */ #define GG_DCC7_REJECT_USER 0x00000002 /**< Użytkownik odrzucił połącze nie */
#define GG_DCC7_REJECT_VERSION 0x00000006 /**< Druga strona ma wersję klienta nieobsługującą połączeń bezpośrednich tego typu */ #define GG_DCC7_REJECT_VERSION 0x00000006 /**< Druga strona ma wersję klienta nieobsługującą połączeń bezpośrednich tego typu */
#define GG_DCC7_ID_REQUEST 0x23 #define GG_DCC7_ID_REQUEST 0x23
struct gg_dcc7_id_request { struct gg_dcc7_id_request {
uint32_t type; /**< Rodzaj tranmisji */ uint32_t type; /**< Rodzaj tranmisji */
} GG_PACKED; } GG_PACKED;
// XXX API /* XXX API */
#define GG_DCC7_TYPE_VOICE 0x00000001 /**< Transmisja głosu */ #define GG_DCC7_TYPE_VOICE 0x00000001 /**< Transmisja głosu */
#define GG_DCC7_TYPE_FILE 0x00000004 /**< transmisja pliku */ #define GG_DCC7_TYPE_FILE 0x00000004 /**< transmisja pliku */
#define GG_DCC7_ID_REPLY 0x23 #define GG_DCC7_ID_REPLY 0x23
struct gg_dcc7_id_reply { struct gg_dcc7_id_reply {
uint32_t type; /** Rodzaj transmisji */ uint32_t type; /** Rodzaj transmisji */
gg_dcc7_id_t id; /** Przyznany identyfikator */ gg_dcc7_id_t id; /** Przyznany identyfikator */
} GG_PACKED; } GG_PACKED;
#define GG_DCC7_DUNNO1 0x24 #define GG_DCC7_DUNNO1 0x24
struct gg_dcc7_dunno1 {
// XXX
} GG_PACKED;
#define GG_DCC7_TIMEOUT_CONNECT 10 /* 10 sekund */ #define GG_DCC7_TIMEOUT_CONNECT 10 /* 10 sekund */
#define GG_DCC7_TIMEOUT_SEND 1800 /* 30 minut */ #define GG_DCC7_TIMEOUT_SEND 1800 /* 30 minut */
#define GG_DCC7_TIMEOUT_GET 1800 /* 30 minut */ #define GG_DCC7_TIMEOUT_GET 1800 /* 30 minut */
#define GG_DCC7_TIMEOUT_FILE_ACK 300 /* 5 minut */ #define GG_DCC7_TIMEOUT_FILE_ACK 300 /* 5 minut */
#define GG_DCC7_TIMEOUT_VOICE_ACK 300 /* 5 minut */ #define GG_DCC7_TIMEOUT_VOICE_ACK 300 /* 5 minut */
#define GG_CHAT_INFO_UPDATE_ENTERED 0x01
#define GG_CHAT_INFO_UPDATE_EXITED 0x03
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif
#ifdef _WIN32 #ifdef _WIN32
#pragma pack(pop) #pragma pack(pop)
#endif #endif
#endif
#endif /* __GG_LIBGADU_H */ #endif /* LIBGADU_LIBGADU_H */
/* /*
* Local variables: * Local variables:
* c-indentation-style: k&r * c-indentation-style: k&r
* c-basic-offset: 8 * c-basic-offset: 8
* indent-tabs-mode: notnil * indent-tabs-mode: notnil
* End: * End:
* *
* vim: shiftwidth=8: * vim: shiftwidth=8:
*/ */
 End of changes. 67 change blocks. 
63 lines changed or deleted 458 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/