Frameworks/libpurple.framework/Versions/0.5.6/Headers/libgadu-ppc.h
branchadium-1.3
changeset 350 708bedafdc3a
parent 349 17ef128722b7
child 351 b01ab9b157f9
     1.1 --- a/Frameworks/libpurple.framework/Versions/0.5.6/Headers/libgadu-ppc.h	Sun Jun 21 22:04:11 2009 -0400
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,1393 +0,0 @@
     1.4 -/* include/libgadu.h.  Generated from libgadu.h.in by configure.  */
     1.5 -/* $Id: libgadu.h.in,v 1.5.2.1 2007-04-21 23:44:25 wojtekka Exp $ */
     1.6 -
     1.7 -/*
     1.8 - *  (C) Copyright 2001-2003 Wojtek Kaniewski <wojtekka@irc.pl>
     1.9 - *                          Robert J. Woźny <speedy@ziew.org>
    1.10 - *                          Arkadiusz Miśkiewicz <arekm@pld-linux.org>
    1.11 - *                          Tomasz Chiliński <chilek@chilan.com>
    1.12 - *                          Piotr Wysocki <wysek@linux.bydg.org>
    1.13 - *                          Dawid Jarosz <dawjar@poczta.onet.pl>
    1.14 - *
    1.15 - *  This program is free software; you can redistribute it and/or modify
    1.16 - *  it under the terms of the GNU Lesser General Public License Version
    1.17 - *  2.1 as published by the Free Software Foundation.
    1.18 - *
    1.19 - *  This program is distributed in the hope that it will be useful,
    1.20 - *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    1.21 - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    1.22 - *  GNU Lesser General Public License for more details.
    1.23 - *
    1.24 - *  You should have received a copy of the GNU Lesser General Public
    1.25 - *  License along with this program; if not, write to the Free Software
    1.26 - *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
    1.27 - *  USA.
    1.28 - */
    1.29 -
    1.30 -#ifndef __GG_LIBGADU_H
    1.31 -#define __GG_LIBGADU_H
    1.32 -
    1.33 -#ifdef __cplusplus
    1.34 -#ifdef _WIN32
    1.35 -#pragma pack(push, 1)
    1.36 -#endif
    1.37 -extern "C" {
    1.38 -#endif
    1.39 -
    1.40 -#include <sys/types.h>
    1.41 -#include <stdio.h>
    1.42 -#include <stdarg.h>
    1.43 -
    1.44 -/* Defined if libgadu was compiled for bigendian machine. */
    1.45 -#define GG_CONFIG_BIGENDIAN 
    1.46 -
    1.47 -/* Defined if this machine has gethostbyname_r(). */
    1.48 -/* #undef GG_CONFIG_HAVE_GETHOSTBYNAME_R */
    1.49 -
    1.50 -/* Defined if libgadu was compiled and linked with pthread support. */
    1.51 -/* #undef GG_CONFIG_HAVE_PTHREAD */
    1.52 -
    1.53 -/* Defined if this machine has C99-compiliant vsnprintf(). */
    1.54 -#define GG_CONFIG_HAVE_C99_VSNPRINTF 
    1.55 -
    1.56 -/* Defined if this machine has va_copy(). */
    1.57 -#define GG_CONFIG_HAVE_VA_COPY 
    1.58 -
    1.59 -/* Defined if this machine has __va_copy(). */
    1.60 -#define GG_CONFIG_HAVE___VA_COPY 
    1.61 -
    1.62 -/* Defined if this machine supports long long. */
    1.63 -#define GG_CONFIG_HAVE_LONG_LONG 
    1.64 -
    1.65 -/* Defined if libgadu was compiled and linked with TLS support. */
    1.66 -#define GG_CONFIG_HAVE_OPENSSL 
    1.67 -
    1.68 -/* Defined if uintX_t types are defined in <stdint.h>. */
    1.69 -#define GG_CONFIG_HAVE_STDINT_H 
    1.70 -
    1.71 -/* Defined if uintX_t types are defined in <inttypes.h>. */
    1.72 -/* #undef GG_CONFIG_HAVE_INTTYPES_H */
    1.73 -
    1.74 -/* Defined if uintX_t types are defined in <sys/inttypes.h>. */
    1.75 -/* #undef GG_CONFIG_HAVE_SYS_INTTYPES_H */
    1.76 -
    1.77 -/* Defined if uintX_t types are defined in <sys/int_types.h>. */
    1.78 -/* #undef GG_CONFIG_HAVE_SYS_INT_TYPES_H */
    1.79 -
    1.80 -/* Defined if uintX_t types are defined in <sys/types.h>. */
    1.81 -/* #undef GG_CONFIG_HAVE_SYS_TYPES_H */
    1.82 -
    1.83 -#ifdef GG_CONFIG_HAVE_OPENSSL
    1.84 -#include <openssl/ssl.h>
    1.85 -#endif
    1.86 -
    1.87 -#ifdef GG_CONFIG_HAVE_STDINT_H
    1.88 -#include <stdint.h>
    1.89 -#else
    1.90 -#  ifdef GG_CONFIG_HAVE_INTTYPES_H
    1.91 -#  include <inttypes.h>
    1.92 -#  else
    1.93 -#    ifdef GG_CONFIG_HAVE_SYS_INTTYPES_H
    1.94 -#    include <sys/inttypes.h>
    1.95 -#    else
    1.96 -#      ifdef GG_CONFIG_HAVE_SYS_INT_TYPES_H
    1.97 -#      include <sys/int_types.h>
    1.98 -#      else
    1.99 -#        ifdef GG_CONFIG_HAVE_SYS_TYPES_H
   1.100 -#        include <sys/types.h>
   1.101 -#        else
   1.102 -
   1.103 -#ifndef __AC_STDINT_H
   1.104 -#define __AC_STDINT_H
   1.105 -
   1.106 -/* ISO C 9X: 7.18 Integer types <stdint.h> */
   1.107 -
   1.108 -typedef unsigned char   uint8_t;
   1.109 -typedef unsigned short uint16_t;
   1.110 -typedef unsigned int   uint32_t;
   1.111 -
   1.112 -#ifndef __CYGWIN__
   1.113 -#define __int8_t_defined
   1.114 -typedef   signed char    int8_t;
   1.115 -typedef   signed short  int16_t;
   1.116 -typedef   signed int    int32_t;
   1.117 -#endif
   1.118 -
   1.119 -#endif /* __AC_STDINT_H */
   1.120 -
   1.121 -#        endif
   1.122 -#      endif
   1.123 -#    endif
   1.124 -#  endif
   1.125 -#endif
   1.126 -
   1.127 -/*
   1.128 - * typedef uin_t
   1.129 - *
   1.130 - * typ reprezentujący numer osoby.
   1.131 - */
   1.132 -typedef uint32_t uin_t;
   1.133 -
   1.134 -/*
   1.135 - * ogólna struktura opisująca różne sesje. przydatna w klientach.
   1.136 - */
   1.137 -#define gg_common_head(x) \
   1.138 -	int fd;			/* podglądany deskryptor */ \
   1.139 -	int check;		/* sprawdzamy zapis czy odczyt */ \
   1.140 -	int state;		/* aktualny stan maszynki */ \
   1.141 -	int error;		/* kod błędu dla GG_STATE_ERROR */ \
   1.142 -	int type;		/* rodzaj sesji */ \
   1.143 -	int id;			/* identyfikator */ \
   1.144 -	int timeout;		/* sugerowany timeout w sekundach */ \
   1.145 -	int (*callback)(x*); 	/* callback przy zmianach */ \
   1.146 -	void (*destroy)(x*); 	/* funkcja niszczenia */
   1.147 -
   1.148 -struct gg_common {
   1.149 -	gg_common_head(struct gg_common)
   1.150 -};
   1.151 -
   1.152 -struct gg_image_queue;
   1.153 -
   1.154 -/*
   1.155 - * struct gg_session
   1.156 - *
   1.157 - * struktura opisująca daną sesję. tworzona przez gg_login(), zwalniana
   1.158 - * przez gg_free_session().
   1.159 - */
   1.160 -struct gg_session {
   1.161 -	gg_common_head(struct gg_session)
   1.162 -
   1.163 -	int async;      	/* czy połączenie jest asynchroniczne */
   1.164 -	int pid;        	/* pid procesu resolvera */
   1.165 -	int port;       	/* port, z którym się łączymy */
   1.166 -	int seq;        	/* numer sekwencyjny ostatniej wiadomości */
   1.167 -	int last_pong;  	/* czas otrzymania ostatniego ping/pong */
   1.168 -	int last_event;		/* czas otrzymania ostatniego pakietu */
   1.169 -
   1.170 -	struct gg_event *event;	/* zdarzenie po ->callback() */
   1.171 -
   1.172 -	uint32_t proxy_addr;	/* adres proxy, keszowany */
   1.173 -	uint16_t proxy_port;	/* port proxy */
   1.174 -
   1.175 -	uint32_t hub_addr;	/* adres huba po resolvnięciu */
   1.176 -	uint32_t server_addr;	/* adres serwera, od huba */
   1.177 -
   1.178 -	uint32_t client_addr;	/* adres klienta */
   1.179 -	uint16_t client_port;	/* port, na którym klient słucha */
   1.180 -
   1.181 -	uint32_t external_addr;	/* adres zewnetrzny klienta */
   1.182 -	uint16_t external_port;	/* port zewnetrzny klienta */
   1.183 -
   1.184 -	uin_t uin;		/* numerek klienta */
   1.185 -	char *password;		/* i jego hasło. zwalniane automagicznie */
   1.186 -
   1.187 -	int initial_status;	/* początkowy stan klienta */
   1.188 -	int status;		/* aktualny stan klienta */
   1.189 -
   1.190 -	char *recv_buf;		/* bufor na otrzymywane pakiety */
   1.191 -	int recv_done;		/* ile już wczytano do bufora */
   1.192 -	int recv_left;		/* i ile jeszcze trzeba wczytać */
   1.193 -
   1.194 -	int protocol_version;	/* wersja używanego protokołu */
   1.195 -	char *client_version;	/* wersja używanego klienta */
   1.196 -	int last_sysmsg;	/* ostatnia wiadomość systemowa */
   1.197 -
   1.198 -	char *initial_descr;	/* początkowy opis stanu klienta */
   1.199 -
   1.200 -	void *resolver;		/* wskaźnik na informacje resolvera */
   1.201 -
   1.202 -	char *header_buf;	/* bufor na początek nagłówka */
   1.203 -	unsigned int header_done;/* ile już mamy */
   1.204 -
   1.205 -#ifdef GG_CONFIG_HAVE_OPENSSL
   1.206 -	SSL *ssl;		/* sesja TLS */
   1.207 -	SSL_CTX *ssl_ctx;	/* kontekst sesji? */
   1.208 -#else
   1.209 -	void *ssl;		/* zachowujemy ABI */
   1.210 -	void *ssl_ctx;
   1.211 -#endif
   1.212 -
   1.213 -	int image_size;		/* maksymalny rozmiar obrazków w KiB */
   1.214 -
   1.215 -	char *userlist_reply;	/* fragment odpowiedzi listy kontaktów */
   1.216 -
   1.217 -	int userlist_blocks;	/* na ile kawałków podzielono listę kontaktów */
   1.218 -
   1.219 -	struct gg_image_queue *images;	/* aktualnie wczytywane obrazki */
   1.220 -};
   1.221 -
   1.222 -/*
   1.223 - * struct gg_http
   1.224 - *
   1.225 - * ogólna struktura opisująca stan wszystkich operacji HTTP. tworzona
   1.226 - * przez gg_http_connect(), zwalniana przez gg_http_free().
   1.227 - */
   1.228 -struct gg_http {
   1.229 -	gg_common_head(struct gg_http)
   1.230 -
   1.231 -	int async;              /* czy połączenie asynchroniczne */
   1.232 -	int pid;                /* pid procesu resolvera */
   1.233 -	int port;               /* port, z którym się łączymy */
   1.234 -
   1.235 -	char *query;            /* bufor zapytania http */
   1.236 -	char *header;           /* bufor nagłówka */
   1.237 -	int header_size;        /* rozmiar wczytanego nagłówka */
   1.238 -	char *body;             /* bufor otrzymanych informacji */
   1.239 -	unsigned int body_size; /* oczekiwana ilość informacji */
   1.240 -
   1.241 -	void *data;             /* dane danej operacji http */
   1.242 -
   1.243 -	char *user_data;	/* dane użytkownika, nie są zwalniane przez gg_http_free() */
   1.244 -
   1.245 -	void *resolver;		/* wskaźnik na informacje resolvera */
   1.246 -
   1.247 -	unsigned int body_done;	/* ile już treści odebrano? */
   1.248 -};
   1.249 -
   1.250 -#ifdef __GNUC__
   1.251 -#define GG_PACKED __attribute__ ((packed))
   1.252 -#else
   1.253 -#define GG_PACKED
   1.254 -#endif
   1.255 -
   1.256 -#define GG_MAX_PATH 276
   1.257 -
   1.258 -/*
   1.259 - * struct gg_file_info
   1.260 - *
   1.261 - * odpowiednik windowsowej struktury WIN32_FIND_DATA niezbędnej przy
   1.262 - * wysyłaniu plików.
   1.263 - */
   1.264 -struct gg_file_info {
   1.265 -	uint32_t mode;			/* dwFileAttributes */
   1.266 -	uint32_t ctime[2];		/* ftCreationTime */
   1.267 -	uint32_t atime[2];		/* ftLastAccessTime */
   1.268 -	uint32_t mtime[2];		/* ftLastWriteTime */
   1.269 -	uint32_t size_hi;		/* nFileSizeHigh */
   1.270 -	uint32_t size;			/* nFileSizeLow */
   1.271 -	uint32_t reserved0;		/* dwReserved0 */
   1.272 -	uint32_t reserved1;		/* dwReserved1 */
   1.273 -	unsigned char filename[GG_MAX_PATH - 14];	/* cFileName */
   1.274 -	unsigned char short_filename[14];		/* cAlternateFileName */
   1.275 -} GG_PACKED;
   1.276 -
   1.277 -/*
   1.278 - * struct gg_dcc
   1.279 - *
   1.280 - * struktura opisująca nasłuchujące gniazdo połączeń między klientami.
   1.281 - * tworzona przez gg_dcc_socket_create(), zwalniana przez gg_dcc_free().
   1.282 - */
   1.283 -struct gg_dcc {
   1.284 -	gg_common_head(struct gg_dcc)
   1.285 -
   1.286 -	struct gg_event *event;	/* opis zdarzenia */
   1.287 -
   1.288 -	int active;		/* czy to my się łączymy? */
   1.289 -	int port;		/* port, na którym siedzi */
   1.290 -	uin_t uin;		/* uin klienta */
   1.291 -	uin_t peer_uin;		/* uin drugiej strony */
   1.292 -	int file_fd;		/* deskryptor pliku */
   1.293 -	unsigned int offset;	/* offset w pliku */
   1.294 -	unsigned int chunk_size;/* rozmiar kawałka */
   1.295 -	unsigned int chunk_offset;/* offset w aktualnym kawałku */
   1.296 -	struct gg_file_info file_info;
   1.297 -				/* informacje o pliku */
   1.298 -	int established;	/* połączenie ustanowione */
   1.299 -	char *voice_buf;	/* bufor na pakiet połączenia głosowego */
   1.300 -	int incoming;		/* połączenie przychodzące */
   1.301 -	char *chunk_buf;	/* bufor na kawałek danych */
   1.302 -	uint32_t remote_addr;	/* adres drugiej strony */
   1.303 -	uint16_t remote_port;	/* port drugiej strony */
   1.304 -};
   1.305 -
   1.306 -/*
   1.307 - * enum gg_session_t
   1.308 - *
   1.309 - * rodzaje sesji.
   1.310 - */
   1.311 -enum gg_session_t {
   1.312 -	GG_SESSION_GG = 1,	/* połączenie z serwerem gg */
   1.313 -	GG_SESSION_HTTP,	/* ogólna sesja http */
   1.314 -	GG_SESSION_SEARCH,	/* szukanie */
   1.315 -	GG_SESSION_REGISTER,	/* rejestrowanie */
   1.316 -	GG_SESSION_REMIND,	/* przypominanie hasła */
   1.317 -	GG_SESSION_PASSWD,	/* zmiana hasła */
   1.318 -	GG_SESSION_CHANGE,	/* zmiana informacji o sobie */
   1.319 -	GG_SESSION_DCC,		/* ogólne połączenie DCC */
   1.320 -	GG_SESSION_DCC_SOCKET,	/* nasłuchujący socket */
   1.321 -	GG_SESSION_DCC_SEND,	/* wysyłanie pliku */
   1.322 -	GG_SESSION_DCC_GET,	/* odbieranie pliku */
   1.323 -	GG_SESSION_DCC_VOICE,	/* rozmowa głosowa */
   1.324 -	GG_SESSION_USERLIST_GET,	/* pobieranie userlisty */
   1.325 -	GG_SESSION_USERLIST_PUT,	/* wysyłanie userlisty */
   1.326 -	GG_SESSION_UNREGISTER,	/* usuwanie konta */
   1.327 -	GG_SESSION_USERLIST_REMOVE,	/* usuwanie userlisty */
   1.328 -	GG_SESSION_TOKEN,	/* pobieranie tokenu */
   1.329 -
   1.330 -	GG_SESSION_USER0 = 256,	/* zdefiniowana dla użytkownika */
   1.331 -	GG_SESSION_USER1,	/* j.w. */
   1.332 -	GG_SESSION_USER2,	/* j.w. */
   1.333 -	GG_SESSION_USER3,	/* j.w. */
   1.334 -	GG_SESSION_USER4,	/* j.w. */
   1.335 -	GG_SESSION_USER5,	/* j.w. */
   1.336 -	GG_SESSION_USER6,	/* j.w. */
   1.337 -	GG_SESSION_USER7	/* j.w. */
   1.338 -};
   1.339 -
   1.340 -/*
   1.341 - * enum gg_state_t
   1.342 - *
   1.343 - * opisuje stan asynchronicznej maszyny.
   1.344 - */
   1.345 -enum gg_state_t {
   1.346 -		/* wspólne */
   1.347 -	GG_STATE_IDLE = 0,		/* nie powinno wystąpić. */
   1.348 -	GG_STATE_RESOLVING,             /* wywołał gethostbyname() */
   1.349 -	GG_STATE_CONNECTING,            /* wywołał connect() */
   1.350 -	GG_STATE_READING_DATA,		/* czeka na dane http */
   1.351 -	GG_STATE_ERROR,			/* wystąpił błąd. kod w x->error */
   1.352 -
   1.353 -		/* gg_session */
   1.354 -	GG_STATE_CONNECTING_HUB,	/* wywołał connect() na huba */
   1.355 -	GG_STATE_CONNECTING_GG,         /* wywołał connect() na serwer */
   1.356 -	GG_STATE_READING_KEY,           /* czeka na klucz */
   1.357 -	GG_STATE_READING_REPLY,         /* czeka na odpowiedź */
   1.358 -	GG_STATE_CONNECTED,             /* połączył się */
   1.359 -
   1.360 -		/* gg_http */
   1.361 -	GG_STATE_SENDING_QUERY,		/* wysyła zapytanie http */
   1.362 -	GG_STATE_READING_HEADER,	/* czeka na nagłówek http */
   1.363 -	GG_STATE_PARSING,               /* przetwarza dane */
   1.364 -	GG_STATE_DONE,                  /* skończył */
   1.365 -
   1.366 -		/* gg_dcc */
   1.367 -	GG_STATE_LISTENING,		/* czeka na połączenia */
   1.368 -	GG_STATE_READING_UIN_1,		/* czeka na uin peera */
   1.369 -	GG_STATE_READING_UIN_2,		/* czeka na swój uin */
   1.370 -	GG_STATE_SENDING_ACK,		/* wysyła potwierdzenie dcc */
   1.371 -	GG_STATE_READING_ACK,		/* czeka na potwierdzenie dcc */
   1.372 -	GG_STATE_READING_REQUEST,	/* czeka na komendę */
   1.373 -	GG_STATE_SENDING_REQUEST,	/* wysyła komendę */
   1.374 -	GG_STATE_SENDING_FILE_INFO,	/* wysyła informacje o pliku */
   1.375 -	GG_STATE_READING_PRE_FILE_INFO,	/* czeka na pakiet przed file_info */
   1.376 -	GG_STATE_READING_FILE_INFO,	/* czeka na informacje o pliku */
   1.377 -	GG_STATE_SENDING_FILE_ACK,	/* wysyła potwierdzenie pliku */
   1.378 -	GG_STATE_READING_FILE_ACK,	/* czeka na potwierdzenie pliku */
   1.379 -	GG_STATE_SENDING_FILE_HEADER,	/* wysyła nagłówek pliku */
   1.380 -	GG_STATE_READING_FILE_HEADER,	/* czeka na nagłówek */
   1.381 -	GG_STATE_GETTING_FILE,		/* odbiera plik */
   1.382 -	GG_STATE_SENDING_FILE,		/* wysyła plik */
   1.383 -	GG_STATE_READING_VOICE_ACK,	/* czeka na potwierdzenie voip */
   1.384 -	GG_STATE_READING_VOICE_HEADER,	/* czeka na rodzaj bloku voip */
   1.385 -	GG_STATE_READING_VOICE_SIZE,	/* czeka na rozmiar bloku voip */
   1.386 -	GG_STATE_READING_VOICE_DATA,	/* czeka na dane voip */
   1.387 -	GG_STATE_SENDING_VOICE_ACK,	/* wysyła potwierdzenie voip */
   1.388 -	GG_STATE_SENDING_VOICE_REQUEST,	/* wysyła żądanie voip */
   1.389 -	GG_STATE_READING_TYPE,		/* czeka na typ połączenia */
   1.390 -
   1.391 -	/* nowe. bez sensu jest to API. */
   1.392 -	GG_STATE_TLS_NEGOTIATION	/* negocjuje połączenie TLS */
   1.393 -};
   1.394 -
   1.395 -/*
   1.396 - * enum gg_check_t
   1.397 - *
   1.398 - * informuje, co proces klienta powinien sprawdzić na deskryptorze danego
   1.399 - * połączenia.
   1.400 - */
   1.401 -enum gg_check_t {
   1.402 -	GG_CHECK_NONE = 0,		/* nic. nie powinno wystąpić */
   1.403 -	GG_CHECK_WRITE = 1,		/* sprawdzamy możliwość zapisu */
   1.404 -	GG_CHECK_READ = 2		/* sprawdzamy możliwość odczytu */
   1.405 -};
   1.406 -
   1.407 -/*
   1.408 - * struct gg_login_params
   1.409 - *
   1.410 - * parametry gg_login(). przeniesiono do struktury, żeby uniknąć problemów
   1.411 - * z ciągłymi zmianami API, gdy dodano coś nowego do protokołu.
   1.412 - */
   1.413 -struct gg_login_params {
   1.414 -	uin_t uin;			/* numerek */
   1.415 -	char *password;			/* hasło */
   1.416 -	int async;			/* asynchroniczne sockety? */
   1.417 -	int status;			/* początkowy status klienta */
   1.418 -	char *status_descr;		/* opis statusu */
   1.419 -	uint32_t server_addr;		/* adres serwera gg */
   1.420 -	uint16_t server_port;		/* port serwera gg */
   1.421 -	uint32_t client_addr;		/* adres dcc klienta */
   1.422 -	uint16_t client_port;		/* port dcc klienta */
   1.423 -	int protocol_version;		/* wersja protokołu */
   1.424 -	char *client_version;		/* wersja klienta */
   1.425 -	int has_audio;			/* czy ma dźwięk? */
   1.426 -	int last_sysmsg;		/* ostatnia wiadomość systemowa */
   1.427 -	uint32_t external_addr;		/* adres widziany na zewnatrz */
   1.428 -	uint16_t external_port;		/* port widziany na zewnatrz */
   1.429 -	int tls;			/* czy łączymy po TLS? */
   1.430 -	int image_size;			/* maksymalny rozmiar obrazka w KiB */
   1.431 -	int era_omnix;			/* czy udawać klienta era omnix? */
   1.432 -
   1.433 -	char dummy[6 * sizeof(int)];	/* miejsce na kolejnych 6 zmiennych,
   1.434 -					 * żeby z dodaniem parametru nie
   1.435 -					 * zmieniał się rozmiar struktury */
   1.436 -};
   1.437 -
   1.438 -struct gg_session *gg_login(const struct gg_login_params *p);
   1.439 -void gg_free_session(struct gg_session *sess);
   1.440 -void gg_logoff(struct gg_session *sess);
   1.441 -int gg_change_status(struct gg_session *sess, int status);
   1.442 -int gg_change_status_descr(struct gg_session *sess, int status, const char *descr);
   1.443 -int gg_change_status_descr_time(struct gg_session *sess, int status, const char *descr, int time);
   1.444 -int gg_send_message(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message);
   1.445 -int gg_send_message_richtext(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message, const unsigned char *format, int formatlen);
   1.446 -int gg_send_message_confer(struct gg_session *sess, int msgclass, int recipients_count, uin_t *recipients, const unsigned char *message);
   1.447 -int gg_send_message_confer_richtext(struct gg_session *sess, int msgclass, int recipients_count, uin_t *recipients, const unsigned char *message, const unsigned char *format, int formatlen);
   1.448 -int gg_send_message_ctcp(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message, int message_len);
   1.449 -int gg_ping(struct gg_session *sess);
   1.450 -int gg_userlist_request(struct gg_session *sess, char type, const char *request);
   1.451 -int gg_image_request(struct gg_session *sess, uin_t recipient, int size, uint32_t crc32);
   1.452 -int gg_image_reply(struct gg_session *sess, uin_t recipient, const char *filename, const char *image, int size);
   1.453 -
   1.454 -uint32_t gg_crc32(uint32_t crc, const unsigned char *buf, int len);
   1.455 -
   1.456 -struct gg_image_queue {
   1.457 -	uin_t sender;			/* nadawca obrazka */
   1.458 -	uint32_t size;			/* rozmiar */
   1.459 -	uint32_t crc32;			/* suma kontrolna */
   1.460 -	char *filename;			/* nazwa pliku */
   1.461 -	char *image;			/* bufor z obrazem */
   1.462 -	uint32_t done;			/* ile już wczytano */
   1.463 -
   1.464 -	struct gg_image_queue *next;	/* następny na liście */
   1.465 -};
   1.466 -
   1.467 -/*
   1.468 - * enum gg_event_t
   1.469 - *
   1.470 - * rodzaje zdarzeń.
   1.471 - */
   1.472 -enum gg_event_t {
   1.473 -	GG_EVENT_NONE = 0,		/* nic się nie wydarzyło */
   1.474 -	GG_EVENT_MSG,			/* otrzymano wiadomość */
   1.475 -	GG_EVENT_NOTIFY,		/* ktoś się pojawił */
   1.476 -	GG_EVENT_NOTIFY_DESCR,		/* ktoś się pojawił z opisem */
   1.477 -	GG_EVENT_STATUS,		/* ktoś zmienił stan */
   1.478 -	GG_EVENT_ACK,			/* potwierdzenie wysłania wiadomości */
   1.479 -	GG_EVENT_PONG,			/* pakiet pong */
   1.480 -	GG_EVENT_CONN_FAILED,		/* połączenie się nie udało */
   1.481 -	GG_EVENT_CONN_SUCCESS,		/* połączenie się powiodło */
   1.482 -	GG_EVENT_DISCONNECT,		/* serwer zrywa połączenie */
   1.483 -
   1.484 -	GG_EVENT_DCC_NEW,		/* nowe połączenie między klientami */
   1.485 -	GG_EVENT_DCC_ERROR,		/* błąd połączenia między klientami */
   1.486 -	GG_EVENT_DCC_DONE,		/* zakończono połączenie */
   1.487 -	GG_EVENT_DCC_CLIENT_ACCEPT,	/* moment akceptacji klienta */
   1.488 -	GG_EVENT_DCC_CALLBACK,		/* klient się połączył na żądanie */
   1.489 -	GG_EVENT_DCC_NEED_FILE_INFO,	/* należy wypełnić file_info */
   1.490 -	GG_EVENT_DCC_NEED_FILE_ACK,	/* czeka na potwierdzenie pliku */
   1.491 -	GG_EVENT_DCC_NEED_VOICE_ACK,	/* czeka na potwierdzenie rozmowy */
   1.492 -	GG_EVENT_DCC_VOICE_DATA, 	/* ramka danych rozmowy głosowej */
   1.493 -
   1.494 -	GG_EVENT_PUBDIR50_SEARCH_REPLY,	/* odpowiedz wyszukiwania */
   1.495 -	GG_EVENT_PUBDIR50_READ,		/* odczytano własne dane z katalogu */
   1.496 -	GG_EVENT_PUBDIR50_WRITE,	/* wpisano własne dane do katalogu */
   1.497 -
   1.498 -	GG_EVENT_STATUS60,		/* ktoś zmienił stan w GG 6.0 */
   1.499 -	GG_EVENT_NOTIFY60,		/* ktoś się pojawił w GG 6.0 */
   1.500 -	GG_EVENT_USERLIST,		/* odpowiedź listy kontaktów w GG 6.0 */
   1.501 -	GG_EVENT_IMAGE_REQUEST,		/* prośba o wysłanie obrazka GG 6.0 */
   1.502 -	GG_EVENT_IMAGE_REPLY,		/* podesłany obrazek GG 6.0 */
   1.503 -	GG_EVENT_DCC_ACK		/* potwierdzenie transmisji */
   1.504 -};
   1.505 -
   1.506 -#define GG_EVENT_SEARCH50_REPLY GG_EVENT_PUBDIR50_SEARCH_REPLY
   1.507 -
   1.508 -/*
   1.509 - * enum gg_failure_t
   1.510 - *
   1.511 - * określa powód nieudanego połączenia.
   1.512 - */
   1.513 -enum gg_failure_t {
   1.514 -	GG_FAILURE_RESOLVING = 1,	/* nie znaleziono serwera */
   1.515 -	GG_FAILURE_CONNECTING,		/* nie można się połączyć */
   1.516 -	GG_FAILURE_INVALID,		/* serwer zwrócił nieprawidłowe dane */
   1.517 -	GG_FAILURE_READING,		/* zerwano połączenie podczas odczytu */
   1.518 -	GG_FAILURE_WRITING,		/* zerwano połączenie podczas zapisu */
   1.519 -	GG_FAILURE_PASSWORD,		/* nieprawidłowe hasło */
   1.520 -	GG_FAILURE_404, 		/* XXX nieużywane */
   1.521 -	GG_FAILURE_TLS,			/* błąd negocjacji TLS */
   1.522 -	GG_FAILURE_NEED_EMAIL, 		/* serwer rozłączył nas z prośbą o zmianę emaila */
   1.523 -	GG_FAILURE_INTRUDER,		/* za dużo prób połączenia się z nieprawidłowym hasłem */
   1.524 -	GG_FAILURE_UNAVAILABLE		/* serwery są wyłączone */
   1.525 -};
   1.526 -
   1.527 -/*
   1.528 - * enum gg_error_t
   1.529 - *
   1.530 - * określa rodzaj błędu wywołanego przez daną operację. nie zawiera
   1.531 - * przesadnie szczegółowych informacji o powodzie błędu, by nie komplikować
   1.532 - * obsługi błędów. jeśli wymagana jest większa dokładność, należy sprawdzić
   1.533 - * zawartość zmiennej errno.
   1.534 - */
   1.535 -enum gg_error_t {
   1.536 -	GG_ERROR_RESOLVING = 1,		/* błąd znajdowania hosta */
   1.537 -	GG_ERROR_CONNECTING,		/* błąd łaczenia się */
   1.538 -	GG_ERROR_READING,		/* błąd odczytu */
   1.539 -	GG_ERROR_WRITING,		/* błąd wysyłania */
   1.540 -
   1.541 -	GG_ERROR_DCC_HANDSHAKE,		/* błąd negocjacji */
   1.542 -	GG_ERROR_DCC_FILE,		/* błąd odczytu/zapisu pliku */
   1.543 -	GG_ERROR_DCC_EOF,		/* plik się skończył? */
   1.544 -	GG_ERROR_DCC_NET,		/* błąd wysyłania/odbierania */
   1.545 -	GG_ERROR_DCC_REFUSED 		/* połączenie odrzucone przez usera */
   1.546 -};
   1.547 -
   1.548 -/*
   1.549 - * struktury dotyczące wyszukiwania w GG 5.0. NIE NALEŻY SIĘ DO NICH
   1.550 - * ODWOŁYWAĆ BEZPOŚREDNIO! do dostępu do nich służą funkcje gg_pubdir50_*()
   1.551 - */
   1.552 -struct gg_pubdir50_entry {
   1.553 -	int num;
   1.554 -	char *field;
   1.555 -	char *value;
   1.556 -};
   1.557 -
   1.558 -struct gg_pubdir50_s {
   1.559 -	int count;
   1.560 -	uin_t next;
   1.561 -	int type;
   1.562 -	uint32_t seq;
   1.563 -	struct gg_pubdir50_entry *entries;
   1.564 -	int entries_count;
   1.565 -};
   1.566 -
   1.567 -/*
   1.568 - * typedef gg_pubdir_50_t
   1.569 - *
   1.570 - * typ opisujący zapytanie lub wynik zapytania katalogu publicznego
   1.571 - * z protokołu GG 5.0. nie należy się odwoływać bezpośrednio do jego
   1.572 - * pól -- służą do tego funkcje gg_pubdir50_*()
   1.573 - */
   1.574 -typedef struct gg_pubdir50_s *gg_pubdir50_t;
   1.575 -
   1.576 -/*
   1.577 - * struct gg_event
   1.578 - *
   1.579 - * struktura opisująca rodzaj zdarzenia. wychodzi z gg_watch_fd() lub
   1.580 - * z gg_dcc_watch_fd()
   1.581 - */
   1.582 -struct gg_event {
   1.583 -	int type;	/* rodzaj zdarzenia -- gg_event_t */
   1.584 -	union {		/* @event */
   1.585 -		struct gg_notify_reply *notify;	/* informacje o liście kontaktów -- GG_EVENT_NOTIFY */
   1.586 -
   1.587 -		enum gg_failure_t failure;	/* błąd połączenia -- GG_EVENT_FAILURE */
   1.588 -
   1.589 -		struct gg_dcc *dcc_new;		/* nowe połączenie bezpośrednie -- GG_EVENT_DCC_NEW */
   1.590 -
   1.591 -		int dcc_error;			/* błąd połączenia bezpośredniego -- GG_EVENT_DCC_ERROR */
   1.592 -
   1.593 -		gg_pubdir50_t pubdir50;		/* wynik operacji związanej z katalogiem publicznym -- GG_EVENT_PUBDIR50_* */
   1.594 -
   1.595 -		struct {			/* @msg odebrano wiadomość -- GG_EVENT_MSG */
   1.596 -			uin_t sender;		/* numer nadawcy */
   1.597 -			int msgclass;		/* klasa wiadomości */
   1.598 -			time_t time;		/* czas nadania */
   1.599 -			unsigned char *message;	/* treść wiadomości */
   1.600 -
   1.601 -			int recipients_count;	/* ilość odbiorców konferencji */
   1.602 -			uin_t *recipients;	/* odbiorcy konferencji */
   1.603 -
   1.604 -			int formats_length;	/* długość informacji o formatowaniu tekstu */
   1.605 -			void *formats;		/* informacje o formatowaniu tekstu */
   1.606 -		} msg;
   1.607 -
   1.608 -		struct {			/* @notify_descr informacje o liście kontaktów z opisami stanu -- GG_EVENT_NOTIFY_DESCR */
   1.609 -			struct gg_notify_reply *notify;	/* informacje o liście kontaktów */
   1.610 -			char *descr;		/* opis stanu */
   1.611 -		} notify_descr;
   1.612 -
   1.613 -		struct {			/* @status zmiana stanu -- GG_EVENT_STATUS */
   1.614 -			uin_t uin;		/* numer */
   1.615 -			uint32_t status;	/* nowy stan */
   1.616 -			char *descr;		/* opis stanu */
   1.617 -		} status;
   1.618 -
   1.619 -		struct {			/* @status60 zmiana stanu -- GG_EVENT_STATUS60 */
   1.620 -			uin_t uin;		/* numer */
   1.621 -			int status;	/* nowy stan */
   1.622 -			uint32_t remote_ip;	/* adres ip */
   1.623 -			uint16_t remote_port;	/* port */
   1.624 -			int version;	/* wersja klienta */
   1.625 -			int image_size;	/* maksymalny rozmiar grafiki w KiB */
   1.626 -			char *descr;		/* opis stanu */
   1.627 -			time_t time;		/* czas powrotu */
   1.628 -		} status60;
   1.629 -
   1.630 -		struct {			/* @notify60 informacja o liście kontaktów -- GG_EVENT_NOTIFY60 */
   1.631 -			uin_t uin;		/* numer */
   1.632 -			int status;	/* stan */
   1.633 -			uint32_t remote_ip;	/* adres ip */
   1.634 -			uint16_t remote_port;	/* port */
   1.635 -			int version;	/* wersja klienta */
   1.636 -			int image_size;	/* maksymalny rozmiar grafiki w KiB */
   1.637 -			char *descr;		/* opis stanu */
   1.638 -			time_t time;		/* czas powrotu */
   1.639 -		} *notify60;
   1.640 -
   1.641 -		struct {			/* @ack potwierdzenie wiadomości -- GG_EVENT_ACK */
   1.642 -			uin_t recipient;	/* numer odbiorcy */
   1.643 -			int status;		/* stan doręczenia wiadomości */
   1.644 -			int seq;		/* numer sekwencyjny wiadomości */
   1.645 -		} ack;
   1.646 -
   1.647 -		struct {			/* @dcc_voice_data otrzymano dane dźwiękowe -- GG_EVENT_DCC_VOICE_DATA */
   1.648 -			uint8_t *data;		/* dane dźwiękowe */
   1.649 -			int length;		/* ilość danych dźwiękowych */
   1.650 -		} dcc_voice_data;
   1.651 -
   1.652 -		struct {			/* @userlist odpowiedź listy kontaktów serwera */
   1.653 -			char type;		/* rodzaj odpowiedzi */
   1.654 -			char *reply;		/* treść odpowiedzi */
   1.655 -		} userlist;
   1.656 -
   1.657 -		struct {			/* @image_request prośba o obrazek */
   1.658 -			uin_t sender;		/* nadawca prośby */
   1.659 -			uint32_t size;		/* rozmiar obrazka */
   1.660 -			uint32_t crc32;		/* suma kontrolna */
   1.661 -		} image_request;
   1.662 -
   1.663 -		struct {			/* @image_reply odpowiedź z obrazkiem */
   1.664 -			uin_t sender;		/* nadawca odpowiedzi */
   1.665 -			uint32_t size;		/* rozmiar obrazka */
   1.666 -			uint32_t crc32;		/* suma kontrolna */
   1.667 -			char *filename;		/* nazwa pliku */
   1.668 -			char *image;		/* bufor z obrazkiem */
   1.669 -		} image_reply;
   1.670 -	} event;
   1.671 -};
   1.672 -
   1.673 -struct gg_event *gg_watch_fd(struct gg_session *sess);
   1.674 -void gg_event_free(struct gg_event *e);
   1.675 -#define gg_free_event gg_event_free
   1.676 -
   1.677 -/*
   1.678 - * funkcje obsługi listy kontaktów.
   1.679 - */
   1.680 -int gg_notify_ex(struct gg_session *sess, uin_t *userlist, char *types, int count);
   1.681 -int gg_notify(struct gg_session *sess, uin_t *userlist, int count);
   1.682 -int gg_add_notify_ex(struct gg_session *sess, uin_t uin, char type);
   1.683 -int gg_add_notify(struct gg_session *sess, uin_t uin);
   1.684 -int gg_remove_notify_ex(struct gg_session *sess, uin_t uin, char type);
   1.685 -int gg_remove_notify(struct gg_session *sess, uin_t uin);
   1.686 -
   1.687 -/*
   1.688 - * funkcje obsługi http.
   1.689 - */
   1.690 -struct gg_http *gg_http_connect(const char *hostname, int port, int async, const char *method, const char *path, const char *header);
   1.691 -int gg_http_watch_fd(struct gg_http *h);
   1.692 -void gg_http_stop(struct gg_http *h);
   1.693 -void gg_http_free(struct gg_http *h);
   1.694 -void gg_http_free_fields(struct gg_http *h);
   1.695 -#define gg_free_http gg_http_free
   1.696 -
   1.697 -/*
   1.698 - * struktury opisująca kryteria wyszukiwania dla gg_search(). nieaktualne,
   1.699 - * zastąpione przez gg_pubdir50_t. pozostawiono je dla zachowania ABI.
   1.700 - */
   1.701 -struct gg_search_request {
   1.702 -	int active;
   1.703 -	unsigned int start;
   1.704 -	char *nickname;
   1.705 -	char *first_name;
   1.706 -	char *last_name;
   1.707 -	char *city;
   1.708 -	int gender;
   1.709 -	int min_birth;
   1.710 -	int max_birth;
   1.711 -	char *email;
   1.712 -	char *phone;
   1.713 -	uin_t uin;
   1.714 -};
   1.715 -
   1.716 -struct gg_search {
   1.717 -	int count;
   1.718 -	struct gg_search_result *results;
   1.719 -};
   1.720 -
   1.721 -struct gg_search_result {
   1.722 -	uin_t uin;
   1.723 -	char *first_name;
   1.724 -	char *last_name;
   1.725 -	char *nickname;
   1.726 -	int born;
   1.727 -	int gender;
   1.728 -	char *city;
   1.729 -	int active;
   1.730 -};
   1.731 -
   1.732 -#define GG_GENDER_NONE 0
   1.733 -#define GG_GENDER_FEMALE 1
   1.734 -#define GG_GENDER_MALE 2
   1.735 -
   1.736 -/*
   1.737 - * funkcje wyszukiwania.
   1.738 - */
   1.739 -struct gg_http *gg_search(const struct gg_search_request *r, int async);
   1.740 -int gg_search_watch_fd(struct gg_http *f);
   1.741 -void gg_free_search(struct gg_http *f);
   1.742 -#define gg_search_free gg_free_search
   1.743 -
   1.744 -const struct gg_search_request *gg_search_request_mode_0(char *nickname, char *first_name, char *last_name, char *city, int gender, int min_birth, int max_birth, int active, int start);
   1.745 -const struct gg_search_request *gg_search_request_mode_1(char *email, int active, int start);
   1.746 -const struct gg_search_request *gg_search_request_mode_2(char *phone, int active, int start);
   1.747 -const struct gg_search_request *gg_search_request_mode_3(uin_t uin, int active, int start);
   1.748 -void gg_search_request_free(struct gg_search_request *r);
   1.749 -
   1.750 -/*
   1.751 - * funkcje obsługi katalogu publicznego zgodne z GG 5.0. tym razem funkcje
   1.752 - * zachowują pewien poziom abstrakcji, żeby uniknąć zmian ABI przy zmianach
   1.753 - * w protokole.
   1.754 - *
   1.755 - * NIE NALEŻY SIĘ ODWOŁYWAĆ DO PÓL gg_pubdir50_t BEZPOŚREDNIO!
   1.756 - */
   1.757 -uint32_t gg_pubdir50(struct gg_session *sess, gg_pubdir50_t req);
   1.758 -gg_pubdir50_t gg_pubdir50_new(int type);
   1.759 -int gg_pubdir50_add(gg_pubdir50_t req, const char *field, const char *value);
   1.760 -int gg_pubdir50_seq_set(gg_pubdir50_t req, uint32_t seq);
   1.761 -const char *gg_pubdir50_get(gg_pubdir50_t res, int num, const char *field);
   1.762 -int gg_pubdir50_type(gg_pubdir50_t res);
   1.763 -int gg_pubdir50_count(gg_pubdir50_t res);
   1.764 -uin_t gg_pubdir50_next(gg_pubdir50_t res);
   1.765 -uint32_t gg_pubdir50_seq(gg_pubdir50_t res);
   1.766 -void gg_pubdir50_free(gg_pubdir50_t res);
   1.767 -
   1.768 -#define GG_PUBDIR50_UIN "FmNumber"
   1.769 -#define GG_PUBDIR50_STATUS "FmStatus"
   1.770 -#define GG_PUBDIR50_FIRSTNAME "firstname"
   1.771 -#define GG_PUBDIR50_LASTNAME "lastname"
   1.772 -#define GG_PUBDIR50_NICKNAME "nickname"
   1.773 -#define GG_PUBDIR50_BIRTHYEAR "birthyear"
   1.774 -#define GG_PUBDIR50_CITY "city"
   1.775 -#define GG_PUBDIR50_GENDER "gender"
   1.776 -#define GG_PUBDIR50_GENDER_FEMALE "1"
   1.777 -#define GG_PUBDIR50_GENDER_MALE "2"
   1.778 -#define GG_PUBDIR50_GENDER_SET_FEMALE "2"
   1.779 -#define GG_PUBDIR50_GENDER_SET_MALE "1"
   1.780 -#define GG_PUBDIR50_ACTIVE "ActiveOnly"
   1.781 -#define GG_PUBDIR50_ACTIVE_TRUE "1"
   1.782 -#define GG_PUBDIR50_START "fmstart"
   1.783 -#define GG_PUBDIR50_FAMILYNAME "familyname"
   1.784 -#define GG_PUBDIR50_FAMILYCITY "familycity"
   1.785 -
   1.786 -int gg_pubdir50_handle_reply(struct gg_event *e, const char *packet, int length);
   1.787 -
   1.788 -/*
   1.789 - * struct gg_pubdir
   1.790 - *
   1.791 - * operacje na katalogu publicznym.
   1.792 - */
   1.793 -struct gg_pubdir {
   1.794 -	int success;		/* czy się udało */
   1.795 -	uin_t uin;		/* otrzymany numerek. 0 jeśli błąd */
   1.796 -};
   1.797 -
   1.798 -/* ogólne funkcje, nie powinny być używane */
   1.799 -int gg_pubdir_watch_fd(struct gg_http *f);
   1.800 -void gg_pubdir_free(struct gg_http *f);
   1.801 -#define gg_free_pubdir gg_pubdir_free
   1.802 -
   1.803 -struct gg_token {
   1.804 -	int width;		/* szerokość obrazka */
   1.805 -	int height;		/* wysokość obrazka */
   1.806 -	int length;		/* ilość znaków w tokenie */
   1.807 -	char *tokenid;		/* id tokenu */
   1.808 -};
   1.809 -
   1.810 -/* funkcje dotyczące tokenów */
   1.811 -struct gg_http *gg_token(int async);
   1.812 -int gg_token_watch_fd(struct gg_http *h);
   1.813 -void gg_token_free(struct gg_http *h);
   1.814 -
   1.815 -/* rejestracja nowego numerka */
   1.816 -struct gg_http *gg_register(const char *email, const char *password, int async);
   1.817 -struct gg_http *gg_register2(const char *email, const char *password, const char *qa, int async);
   1.818 -struct gg_http *gg_register3(const char *email, const char *password, const char *tokenid, const char *tokenval, int async);
   1.819 -#define gg_register_watch_fd gg_pubdir_watch_fd
   1.820 -#define gg_register_free gg_pubdir_free
   1.821 -#define gg_free_register gg_pubdir_free
   1.822 -
   1.823 -struct gg_http *gg_unregister(uin_t uin, const char *password, const char *email, int async);
   1.824 -struct gg_http *gg_unregister2(uin_t uin, const char *password, const char *qa, int async);
   1.825 -struct gg_http *gg_unregister3(uin_t uin, const char *password, const char *tokenid, const char *tokenval, int async);
   1.826 -#define gg_unregister_watch_fd gg_pubdir_watch_fd
   1.827 -#define gg_unregister_free gg_pubdir_free
   1.828 -
   1.829 -/* przypomnienie hasła e-mailem */
   1.830 -struct gg_http *gg_remind_passwd(uin_t uin, int async);
   1.831 -struct gg_http *gg_remind_passwd2(uin_t uin, const char *tokenid, const char *tokenval, int async);
   1.832 -struct gg_http *gg_remind_passwd3(uin_t uin, const char *email, const char *tokenid, const char *tokenval, int async);
   1.833 -#define gg_remind_passwd_watch_fd gg_pubdir_watch_fd
   1.834 -#define gg_remind_passwd_free gg_pubdir_free
   1.835 -#define gg_free_remind_passwd gg_pubdir_free
   1.836 -
   1.837 -/* zmiana hasła */
   1.838 -struct gg_http *gg_change_passwd(uin_t uin, const char *passwd, const char *newpasswd, const char *newemail, int async);
   1.839 -struct gg_http *gg_change_passwd2(uin_t uin, const char *passwd, const char *newpasswd, const char *email, const char *newemail, int async);
   1.840 -struct gg_http *gg_change_passwd3(uin_t uin, const char *passwd, const char *newpasswd, const char *qa, int async);
   1.841 -struct gg_http *gg_change_passwd4(uin_t uin, const char *email, const char *passwd, const char *newpasswd, const char *tokenid, const char *tokenval, int async);
   1.842 -#define gg_change_passwd_free gg_pubdir_free
   1.843 -#define gg_free_change_passwd gg_pubdir_free
   1.844 -
   1.845 -/*
   1.846 - * struct gg_change_info_request
   1.847 - *
   1.848 - * opis żądania zmiany informacji w katalogu publicznym.
   1.849 - */
   1.850 -struct gg_change_info_request {
   1.851 -	char *first_name;	/* imię */
   1.852 -	char *last_name;	/* nazwisko */
   1.853 -	char *nickname;		/* pseudonim */
   1.854 -	char *email;		/* email */
   1.855 -	int born;		/* rok urodzenia */
   1.856 -	int gender;		/* płeć */
   1.857 -	char *city;		/* miasto */
   1.858 -};
   1.859 -
   1.860 -struct gg_change_info_request *gg_change_info_request_new(const char *first_name, const char *last_name, const char *nickname, const char *email, int born, int gender, const char *city);
   1.861 -void gg_change_info_request_free(struct gg_change_info_request *r);
   1.862 -
   1.863 -struct gg_http *gg_change_info(uin_t uin, const char *passwd, const struct gg_change_info_request *request, int async);
   1.864 -#define gg_change_pubdir_watch_fd gg_pubdir_watch_fd
   1.865 -#define gg_change_pubdir_free gg_pubdir_free
   1.866 -#define gg_free_change_pubdir gg_pubdir_free
   1.867 -
   1.868 -/*
   1.869 - * funkcje dotyczące listy kontaktów na serwerze.
   1.870 - */
   1.871 -struct gg_http *gg_userlist_get(uin_t uin, const char *password, int async);
   1.872 -int gg_userlist_get_watch_fd(struct gg_http *f);
   1.873 -void gg_userlist_get_free(struct gg_http *f);
   1.874 -
   1.875 -struct gg_http *gg_userlist_put(uin_t uin, const char *password, const char *contacts, int async);
   1.876 -int gg_userlist_put_watch_fd(struct gg_http *f);
   1.877 -void gg_userlist_put_free(struct gg_http *f);
   1.878 -
   1.879 -struct gg_http *gg_userlist_remove(uin_t uin, const char *password, int async);
   1.880 -int gg_userlist_remove_watch_fd(struct gg_http *f);
   1.881 -void gg_userlist_remove_free(struct gg_http *f);
   1.882 -
   1.883 -
   1.884 -
   1.885 -/*
   1.886 - * funkcje dotyczące komunikacji między klientami.
   1.887 - */
   1.888 -extern int gg_dcc_port;			/* port, na którym nasłuchuje klient */
   1.889 -extern unsigned long gg_dcc_ip;		/* adres, na którym nasłuchuje klient */
   1.890 -
   1.891 -int gg_dcc_request(struct gg_session *sess, uin_t uin);
   1.892 -
   1.893 -struct gg_dcc *gg_dcc_send_file(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin);
   1.894 -struct gg_dcc *gg_dcc_get_file(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin);
   1.895 -struct gg_dcc *gg_dcc_voice_chat(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin);
   1.896 -void gg_dcc_set_type(struct gg_dcc *d, int type);
   1.897 -int gg_dcc_fill_file_info(struct gg_dcc *d, const char *filename);
   1.898 -int gg_dcc_fill_file_info2(struct gg_dcc *d, const char *filename, const char *local_filename);
   1.899 -int gg_dcc_voice_send(struct gg_dcc *d, char *buf, int length);
   1.900 -
   1.901 -#define GG_DCC_VOICE_FRAME_LENGTH 195
   1.902 -#define GG_DCC_VOICE_FRAME_LENGTH_505 326
   1.903 -
   1.904 -struct gg_dcc *gg_dcc_socket_create(uin_t uin, uint16_t port);
   1.905 -#define gg_dcc_socket_free gg_free_dcc
   1.906 -#define gg_dcc_socket_watch_fd gg_dcc_watch_fd
   1.907 -
   1.908 -struct gg_event *gg_dcc_watch_fd(struct gg_dcc *d);
   1.909 -
   1.910 -void gg_dcc_free(struct gg_dcc *c);
   1.911 -#define gg_free_dcc gg_dcc_free
   1.912 -
   1.913 -/*
   1.914 - * jeśli chcemy sobie podebugować, wystarczy ustawić `gg_debug_level'.
   1.915 - * niestety w miarę przybywania wpisów `gg_debug(...)' nie chciało mi
   1.916 - * się ustawiać odpowiednich leveli, więc większość szła do _MISC.
   1.917 - */
   1.918 -extern int gg_debug_level;	/* poziom debugowania. mapa bitowa stałych GG_DEBUG_* */
   1.919 -
   1.920 -/*
   1.921 - * można podać wskaźnik do funkcji obsługującej wywołania gg_debug().
   1.922 - * nieoficjalne, nieudokumentowane, może się zmienić. jeśli ktoś jest
   1.923 - * zainteresowany, niech da znać na ekg-devel.
   1.924 - */
   1.925 -extern void (*gg_debug_handler)(int level, const char *format, va_list ap);
   1.926 -extern void (*gg_debug_handler_session)(struct gg_session *sess, int level, const char *format, va_list ap);
   1.927 -
   1.928 -/*
   1.929 - * można podać plik, do którego będą zapisywane teksty z gg_debug().
   1.930 - */
   1.931 -extern FILE *gg_debug_file;
   1.932 -
   1.933 -#define GG_DEBUG_NET 1
   1.934 -#define GG_DEBUG_TRAFFIC 2
   1.935 -#define GG_DEBUG_DUMP 4
   1.936 -#define GG_DEBUG_FUNCTION 8
   1.937 -#define GG_DEBUG_MISC 16
   1.938 -
   1.939 -#ifdef GG_DEBUG_DISABLE
   1.940 -#define gg_debug(x, y...) do { } while(0)
   1.941 -#define gg_debug_session(z, x, y...) do { } while(0)
   1.942 -#else
   1.943 -void gg_debug(int level, const char *format, ...);
   1.944 -void gg_debug_session(struct gg_session *sess, int level, const char *format, ...);
   1.945 -#endif
   1.946 -
   1.947 -const char *gg_libgadu_version(void);
   1.948 -
   1.949 -/*
   1.950 - * konfiguracja http proxy.
   1.951 - */
   1.952 -extern int gg_proxy_enabled;		/* włącza obsługę proxy */
   1.953 -extern char *gg_proxy_host;		/* określa adres serwera proxy */
   1.954 -extern int gg_proxy_port;		/* określa port serwera proxy */
   1.955 -extern char *gg_proxy_username;		/* określa nazwę użytkownika przy autoryzacji serwera proxy */
   1.956 -extern char *gg_proxy_password;		/* określa hasło użytkownika przy autoryzacji serwera proxy */
   1.957 -extern int gg_proxy_http_only;		/* włącza obsługę proxy wyłącznie dla usług HTTP */
   1.958 -
   1.959 -
   1.960 -/*
   1.961 - * adres, z którego ślemy pakiety (np łączymy się z serwerem)
   1.962 - * używany przy gg_connect()
   1.963 - */
   1.964 -extern unsigned long gg_local_ip;
   1.965 -/*
   1.966 - * -------------------------------------------------------------------------
   1.967 - * poniżej znajdują się wewnętrzne sprawy biblioteki. zwykły klient nie
   1.968 - * powinien ich w ogóle ruszać, bo i nie ma po co. wszystko można załatwić
   1.969 - * procedurami wyższego poziomu, których definicje znajdują się na początku
   1.970 - * tego pliku.
   1.971 - * -------------------------------------------------------------------------
   1.972 - */
   1.973 -
   1.974 -#ifdef GG_CONFIG_HAVE_PTHREAD
   1.975 -int gg_resolve_pthread(int *fd, void **resolver, const char *hostname);
   1.976 -void gg_resolve_pthread_cleanup(void *resolver, int kill);
   1.977 -#endif
   1.978 -
   1.979 -#ifdef _WIN32
   1.980 -int gg_thread_socket(int thread_id, int socket);
   1.981 -#endif
   1.982 -
   1.983 -int gg_resolve(int *fd, int *pid, const char *hostname);
   1.984 -
   1.985 -#ifdef __GNUC__
   1.986 -char *gg_saprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
   1.987 -#else
   1.988 -char *gg_saprintf(const char *format, ...);
   1.989 -#endif
   1.990 -
   1.991 -char *gg_vsaprintf(const char *format, va_list ap);
   1.992 -
   1.993 -#define gg_alloc_sprintf gg_saprintf
   1.994 -
   1.995 -char *gg_get_line(char **ptr);
   1.996 -
   1.997 -int gg_connect(void *addr, int port, int async);
   1.998 -struct in_addr *gg_gethostbyname(const char *hostname);
   1.999 -char *gg_read_line(int sock, char *buf, int length);
  1.1000 -void gg_chomp(char *line);
  1.1001 -char *gg_urlencode(const char *str);
  1.1002 -int gg_http_hash(const char *format, ...);
  1.1003 -int gg_read(struct gg_session *sess, char *buf, int length);
  1.1004 -int gg_write(struct gg_session *sess, const char *buf, int length);
  1.1005 -void *gg_recv_packet(struct gg_session *sess);
  1.1006 -int gg_send_packet(struct gg_session *sess, int type, ...);
  1.1007 -unsigned int gg_login_hash(const unsigned char *password, unsigned int seed);
  1.1008 -uint32_t gg_fix32(uint32_t x);
  1.1009 -uint16_t gg_fix16(uint16_t x);
  1.1010 -#define fix16 gg_fix16
  1.1011 -#define fix32 gg_fix32
  1.1012 -char *gg_proxy_auth(void);
  1.1013 -char *gg_base64_encode(const char *buf);
  1.1014 -char *gg_base64_decode(const char *buf);
  1.1015 -int gg_image_queue_remove(struct gg_session *s, struct gg_image_queue *q, int freeq);
  1.1016 -
  1.1017 -#define GG_APPMSG_HOST "appmsg.gadu-gadu.pl"
  1.1018 -#define GG_APPMSG_PORT 80
  1.1019 -#define GG_PUBDIR_HOST "pubdir.gadu-gadu.pl"
  1.1020 -#define GG_PUBDIR_PORT 80
  1.1021 -#define GG_REGISTER_HOST "register.gadu-gadu.pl"
  1.1022 -#define GG_REGISTER_PORT 80
  1.1023 -#define GG_REMIND_HOST "retr.gadu-gadu.pl"
  1.1024 -#define GG_REMIND_PORT 80
  1.1025 -
  1.1026 -#define GG_DEFAULT_PORT 8074
  1.1027 -#define GG_HTTPS_PORT 443
  1.1028 -#define GG_HTTP_USERAGENT "Mozilla/4.7 [en] (Win98; I)"
  1.1029 -
  1.1030 -#define GG_DEFAULT_CLIENT_VERSION "6, 1, 0, 158"
  1.1031 -#define GG_DEFAULT_PROTOCOL_VERSION 0x24
  1.1032 -#define GG_DEFAULT_TIMEOUT 30
  1.1033 -#define GG_HAS_AUDIO_MASK 0x40000000
  1.1034 -#define GG_ERA_OMNIX_MASK 0x04000000
  1.1035 -#define GG_LIBGADU_VERSION "CVS"
  1.1036 -
  1.1037 -#define GG_DEFAULT_DCC_PORT 1550
  1.1038 -
  1.1039 -struct gg_header {
  1.1040 -	uint32_t type;			/* typ pakietu */
  1.1041 -	uint32_t length;		/* długość reszty pakietu */
  1.1042 -} GG_PACKED;
  1.1043 -
  1.1044 -#define GG_WELCOME 0x0001
  1.1045 -#define GG_NEED_EMAIL 0x0014
  1.1046 -
  1.1047 -struct gg_welcome {
  1.1048 -	uint32_t key;			/* klucz szyfrowania hasła */
  1.1049 -} GG_PACKED;
  1.1050 -
  1.1051 -#define GG_LOGIN 0x000c
  1.1052 -
  1.1053 -struct gg_login {
  1.1054 -	uint32_t uin;			/* mój numerek */
  1.1055 -	uint32_t hash;			/* hash hasła */
  1.1056 -	uint32_t status;		/* status na dzień dobry */
  1.1057 -	uint32_t version;		/* moja wersja klienta */
  1.1058 -	uint32_t local_ip;		/* mój adres ip */
  1.1059 -	uint16_t local_port;		/* port, na którym słucham */
  1.1060 -} GG_PACKED;
  1.1061 -
  1.1062 -#define GG_LOGIN_EXT 0x0013
  1.1063 -
  1.1064 -struct gg_login_ext {
  1.1065 -	uint32_t uin;			/* mój numerek */
  1.1066 -	uint32_t hash;			/* hash hasła */
  1.1067 -	uint32_t status;		/* status na dzień dobry */
  1.1068 -	uint32_t version;		/* moja wersja klienta */
  1.1069 -	uint32_t local_ip;		/* mój adres ip */
  1.1070 -	uint16_t local_port;		/* port, na którym słucham */
  1.1071 -	uint32_t external_ip;		/* zewnętrzny adres ip */
  1.1072 -	uint16_t external_port;		/* zewnętrzny port */
  1.1073 -} GG_PACKED;
  1.1074 -
  1.1075 -#define GG_LOGIN60 0x0015
  1.1076 -
  1.1077 -struct gg_login60 {
  1.1078 -	uint32_t uin;			/* mój numerek */
  1.1079 -	uint32_t hash;			/* hash hasła */
  1.1080 -	uint32_t status;		/* status na dzień dobry */
  1.1081 -	uint32_t version;		/* moja wersja klienta */
  1.1082 -	uint8_t dunno1;			/* 0x00 */
  1.1083 -	uint32_t local_ip;		/* mój adres ip */
  1.1084 -	uint16_t local_port;		/* port, na którym słucham */
  1.1085 -	uint32_t external_ip;		/* zewnętrzny adres ip */
  1.1086 -	uint16_t external_port;		/* zewnętrzny port */
  1.1087 -	uint8_t image_size;		/* maksymalny rozmiar grafiki w KiB */
  1.1088 -	uint8_t dunno2;			/* 0xbe */
  1.1089 -} GG_PACKED;
  1.1090 -
  1.1091 -#define GG_LOGIN_OK 0x0003
  1.1092 -
  1.1093 -#define GG_LOGIN_FAILED 0x0009
  1.1094 -
  1.1095 -#define GG_PUBDIR50_REQUEST 0x0014
  1.1096 -
  1.1097 -#define GG_PUBDIR50_WRITE 0x01
  1.1098 -#define GG_PUBDIR50_READ 0x02
  1.1099 -#define GG_PUBDIR50_SEARCH 0x03
  1.1100 -#define GG_PUBDIR50_SEARCH_REQUEST GG_PUBDIR50_SEARCH
  1.1101 -#define GG_PUBDIR50_SEARCH_REPLY 0x05
  1.1102 -
  1.1103 -struct gg_pubdir50_request {
  1.1104 -	uint8_t type;			/* GG_PUBDIR50_* */
  1.1105 -	uint32_t seq;			/* czas wysłania zapytania */
  1.1106 -} GG_PACKED;
  1.1107 -
  1.1108 -#define GG_PUBDIR50_REPLY 0x000e
  1.1109 -
  1.1110 -struct gg_pubdir50_reply {
  1.1111 -	uint8_t type;			/* GG_PUBDIR50_* */
  1.1112 -	uint32_t seq;			/* czas wysłania zapytania */
  1.1113 -} GG_PACKED;
  1.1114 -
  1.1115 -#define GG_NEW_STATUS 0x0002
  1.1116 -
  1.1117 -#define GG_STATUS_NOT_AVAIL 0x0001		/* niedostępny */
  1.1118 -#define GG_STATUS_NOT_AVAIL_DESCR 0x0015	/* niedostępny z opisem (4.8) */
  1.1119 -#define GG_STATUS_AVAIL 0x0002			/* dostępny */
  1.1120 -#define GG_STATUS_AVAIL_DESCR 0x0004		/* dostępny z opisem (4.9) */
  1.1121 -#define GG_STATUS_BUSY 0x0003			/* zajęty */
  1.1122 -#define GG_STATUS_BUSY_DESCR 0x0005		/* zajęty z opisem (4.8) */
  1.1123 -#define GG_STATUS_INVISIBLE 0x0014		/* niewidoczny (4.6) */
  1.1124 -#define GG_STATUS_INVISIBLE_DESCR 0x0016	/* niewidoczny z opisem (4.9) */
  1.1125 -#define GG_STATUS_BLOCKED 0x0006		/* zablokowany */
  1.1126 -
  1.1127 -#define GG_STATUS_FRIENDS_MASK 0x8000		/* tylko dla znajomych (4.6) */
  1.1128 -
  1.1129 -#define GG_STATUS_DESCR_MAXSIZE 70
  1.1130 -
  1.1131 -/*
  1.1132 - * makra do łatwego i szybkiego sprawdzania stanu.
  1.1133 - */
  1.1134 -
  1.1135 -/* GG_S_F() tryb tylko dla znajomych */
  1.1136 -#define GG_S_F(x) (((x) & GG_STATUS_FRIENDS_MASK) != 0)
  1.1137 -
  1.1138 -/* GG_S() stan bez uwzględnienia trybu tylko dla znajomych */
  1.1139 -#define GG_S(x) ((x) & ~GG_STATUS_FRIENDS_MASK)
  1.1140 -
  1.1141 -/* GG_S_A() dostępny */
  1.1142 -#define GG_S_A(x) (GG_S(x) == GG_STATUS_AVAIL || GG_S(x) == GG_STATUS_AVAIL_DESCR)
  1.1143 -
  1.1144 -/* GG_S_NA() niedostępny */
  1.1145 -#define GG_S_NA(x) (GG_S(x) == GG_STATUS_NOT_AVAIL || GG_S(x) == GG_STATUS_NOT_AVAIL_DESCR)
  1.1146 -
  1.1147 -/* GG_S_B() zajęty */
  1.1148 -#define GG_S_B(x) (GG_S(x) == GG_STATUS_BUSY || GG_S(x) == GG_STATUS_BUSY_DESCR)
  1.1149 -
  1.1150 -/* GG_S_I() niewidoczny */
  1.1151 -#define GG_S_I(x) (GG_S(x) == GG_STATUS_INVISIBLE || GG_S(x) == GG_STATUS_INVISIBLE_DESCR)
  1.1152 -
  1.1153 -/* GG_S_D() stan opisowy */
  1.1154 -#define GG_S_D(x) (GG_S(x) == GG_STATUS_NOT_AVAIL_DESCR || GG_S(x) == GG_STATUS_AVAIL_DESCR || GG_S(x) == GG_STATUS_BUSY_DESCR || GG_S(x) == GG_STATUS_INVISIBLE_DESCR)
  1.1155 -
  1.1156 -/* GG_S_BL() blokowany lub blokujący */
  1.1157 -#define GG_S_BL(x) (GG_S(x) == GG_STATUS_BLOCKED)
  1.1158 -
  1.1159 -struct gg_new_status {
  1.1160 -	uint32_t status;			/* na jaki zmienić? */
  1.1161 -} GG_PACKED;
  1.1162 -
  1.1163 -#define GG_NOTIFY_FIRST 0x000f
  1.1164 -#define GG_NOTIFY_LAST 0x0010
  1.1165 -
  1.1166 -#define GG_NOTIFY 0x0010
  1.1167 -
  1.1168 -struct gg_notify {
  1.1169 -	uint32_t uin;				/* numerek danej osoby */
  1.1170 -	uint8_t dunno1;				/* rodzaj wpisu w liście */
  1.1171 -} GG_PACKED;
  1.1172 -
  1.1173 -#define GG_USER_OFFLINE 0x01	/* będziemy niewidoczni dla użytkownika */
  1.1174 -#define GG_USER_NORMAL 0x03	/* zwykły użytkownik */
  1.1175 -#define GG_USER_BLOCKED 0x04	/* zablokowany użytkownik */
  1.1176 -
  1.1177 -#define GG_LIST_EMPTY 0x0012
  1.1178 -
  1.1179 -#define GG_NOTIFY_REPLY 0x000c	/* tak, to samo co GG_LOGIN */
  1.1180 -
  1.1181 -struct gg_notify_reply {
  1.1182 -	uint32_t uin;			/* numerek */
  1.1183 -	uint32_t status;		/* status danej osoby */
  1.1184 -	uint32_t remote_ip;		/* adres ip delikwenta */
  1.1185 -	uint16_t remote_port;		/* port, na którym słucha klient */
  1.1186 -	uint32_t version;		/* wersja klienta */
  1.1187 -	uint16_t dunno2;		/* znowu port? */
  1.1188 -} GG_PACKED;
  1.1189 -
  1.1190 -#define GG_NOTIFY_REPLY60 0x0011
  1.1191 -
  1.1192 -struct gg_notify_reply60 {
  1.1193 -	uint32_t uin;			/* numerek plus flagi w MSB */
  1.1194 -	uint8_t status;			/* status danej osoby */
  1.1195 -	uint32_t remote_ip;		/* adres ip delikwenta */
  1.1196 -	uint16_t remote_port;		/* port, na którym słucha klient */
  1.1197 -	uint8_t version;		/* wersja klienta */
  1.1198 -	uint8_t image_size;		/* maksymalny rozmiar grafiki w KiB */
  1.1199 -	uint8_t dunno1;			/* 0x00 */
  1.1200 -} GG_PACKED;
  1.1201 -
  1.1202 -#define GG_STATUS60 0x000f
  1.1203 -
  1.1204 -struct gg_status60 {
  1.1205 -	uint32_t uin;			/* numerek plus flagi w MSB */
  1.1206 -	uint8_t status;			/* status danej osoby */
  1.1207 -	uint32_t remote_ip;		/* adres ip delikwenta */
  1.1208 -	uint16_t remote_port;		/* port, na którym słucha klient */
  1.1209 -	uint8_t version;		/* wersja klienta */
  1.1210 -	uint8_t image_size;		/* maksymalny rozmiar grafiki w KiB */
  1.1211 -	uint8_t dunno1;			/* 0x00 */
  1.1212 -} GG_PACKED;
  1.1213 -
  1.1214 -#define GG_ADD_NOTIFY 0x000d
  1.1215 -#define GG_REMOVE_NOTIFY 0x000e
  1.1216 -
  1.1217 -struct gg_add_remove {
  1.1218 -	uint32_t uin;			/* numerek */
  1.1219 -	uint8_t dunno1;			/* bitmapa */
  1.1220 -} GG_PACKED;
  1.1221 -
  1.1222 -#define GG_STATUS 0x0002
  1.1223 -
  1.1224 -struct gg_status {
  1.1225 -	uint32_t uin;			/* numerek */
  1.1226 -	uint32_t status;		/* nowy stan */
  1.1227 -} GG_PACKED;
  1.1228 -
  1.1229 -#define GG_SEND_MSG 0x000b
  1.1230 -
  1.1231 -#define GG_CLASS_QUEUED 0x0001
  1.1232 -#define GG_CLASS_OFFLINE GG_CLASS_QUEUED
  1.1233 -#define GG_CLASS_MSG 0x0004
  1.1234 -#define GG_CLASS_CHAT 0x0008
  1.1235 -#define GG_CLASS_CTCP 0x0010
  1.1236 -#define GG_CLASS_ACK 0x0020
  1.1237 -#define GG_CLASS_EXT GG_CLASS_ACK	/* kompatybilność wstecz */
  1.1238 -
  1.1239 -#define GG_MSG_MAXSIZE 2000
  1.1240 -
  1.1241 -struct gg_send_msg {
  1.1242 -	uint32_t recipient;
  1.1243 -	uint32_t seq;
  1.1244 -	uint32_t msgclass;
  1.1245 -} GG_PACKED;
  1.1246 -
  1.1247 -struct gg_msg_richtext {
  1.1248 -	uint8_t flag;
  1.1249 -	uint16_t length;
  1.1250 -} GG_PACKED;
  1.1251 -
  1.1252 -struct gg_msg_richtext_format {
  1.1253 -	uint16_t position;
  1.1254 -	uint8_t font;
  1.1255 -} GG_PACKED;
  1.1256 -
  1.1257 -struct gg_msg_richtext_image {
  1.1258 -	uint16_t unknown1;
  1.1259 -	uint32_t size;
  1.1260 -	uint32_t crc32;
  1.1261 -} GG_PACKED;
  1.1262 -
  1.1263 -#define GG_FONT_BOLD 0x01
  1.1264 -#define GG_FONT_ITALIC 0x02
  1.1265 -#define GG_FONT_UNDERLINE 0x04
  1.1266 -#define GG_FONT_COLOR 0x08
  1.1267 -#define GG_FONT_IMAGE 0x80
  1.1268 -
  1.1269 -struct gg_msg_richtext_color {
  1.1270 -	uint8_t red;
  1.1271 -	uint8_t green;
  1.1272 -	uint8_t blue;
  1.1273 -} GG_PACKED;
  1.1274 -
  1.1275 -struct gg_msg_recipients {
  1.1276 -	uint8_t flag;
  1.1277 -	uint32_t count;
  1.1278 -} GG_PACKED;
  1.1279 -
  1.1280 -struct gg_msg_image_request {
  1.1281 -	uint8_t flag;
  1.1282 -	uint32_t size;
  1.1283 -	uint32_t crc32;
  1.1284 -} GG_PACKED;
  1.1285 -
  1.1286 -struct gg_msg_image_reply {
  1.1287 -	uint8_t flag;
  1.1288 -	uint32_t size;
  1.1289 -	uint32_t crc32;
  1.1290 -	/* char filename[]; */
  1.1291 -	/* char image[]; */
  1.1292 -} GG_PACKED;
  1.1293 -
  1.1294 -#define GG_SEND_MSG_ACK 0x0005
  1.1295 -
  1.1296 -#define GG_ACK_BLOCKED 0x0001
  1.1297 -#define GG_ACK_DELIVERED 0x0002
  1.1298 -#define GG_ACK_QUEUED 0x0003
  1.1299 -#define GG_ACK_MBOXFULL 0x0004
  1.1300 -#define GG_ACK_NOT_DELIVERED 0x0006
  1.1301 -
  1.1302 -struct gg_send_msg_ack {
  1.1303 -	uint32_t status;
  1.1304 -	uint32_t recipient;
  1.1305 -	uint32_t seq;
  1.1306 -} GG_PACKED;
  1.1307 -
  1.1308 -#define GG_RECV_MSG 0x000a
  1.1309 -
  1.1310 -struct gg_recv_msg {
  1.1311 -	uint32_t sender;
  1.1312 -	uint32_t seq;
  1.1313 -	uint32_t time;
  1.1314 -	uint32_t msgclass;
  1.1315 -} GG_PACKED;
  1.1316 -
  1.1317 -#define GG_PING 0x0008
  1.1318 -
  1.1319 -#define GG_PONG 0x0007
  1.1320 -
  1.1321 -#define GG_DISCONNECTING 0x000b
  1.1322 -
  1.1323 -#define GG_USERLIST_REQUEST 0x0016
  1.1324 -
  1.1325 -#define GG_USERLIST_PUT 0x00
  1.1326 -#define GG_USERLIST_PUT_MORE 0x01
  1.1327 -#define GG_USERLIST_GET 0x02
  1.1328 -
  1.1329 -struct gg_userlist_request {
  1.1330 -	uint8_t type;
  1.1331 -} GG_PACKED;
  1.1332 -
  1.1333 -#define GG_USERLIST_REPLY 0x0010
  1.1334 -
  1.1335 -#define GG_USERLIST_PUT_REPLY 0x00
  1.1336 -#define GG_USERLIST_PUT_MORE_REPLY 0x02
  1.1337 -#define GG_USERLIST_GET_REPLY 0x06
  1.1338 -#define GG_USERLIST_GET_MORE_REPLY 0x04
  1.1339 -
  1.1340 -struct gg_userlist_reply {
  1.1341 -	uint8_t type;
  1.1342 -} GG_PACKED;
  1.1343 -
  1.1344 -/*
  1.1345 - * pakiety, stałe, struktury dla DCC
  1.1346 - */
  1.1347 -
  1.1348 -struct gg_dcc_tiny_packet {
  1.1349 -	uint8_t type;		/* rodzaj pakietu */
  1.1350 -} GG_PACKED;
  1.1351 -
  1.1352 -struct gg_dcc_small_packet {
  1.1353 -	uint32_t type;		/* rodzaj pakietu */
  1.1354 -} GG_PACKED;
  1.1355 -
  1.1356 -struct gg_dcc_big_packet {
  1.1357 -	uint32_t type;		/* rodzaj pakietu */
  1.1358 -	uint32_t dunno1;		/* niewiadoma */
  1.1359 -	uint32_t dunno2;		/* niewiadoma */
  1.1360 -} GG_PACKED;
  1.1361 -
  1.1362 -/*
  1.1363 - * póki co, nie znamy dokładnie protokołu. nie wiemy, co czemu odpowiada.
  1.1364 - * nazwy są niepoważne i tymczasowe.
  1.1365 - */
  1.1366 -#define GG_DCC_WANT_FILE 0x0003		/* peer chce plik */
  1.1367 -#define GG_DCC_HAVE_FILE 0x0001		/* więc mu damy */
  1.1368 -#define GG_DCC_HAVE_FILEINFO 0x0003	/* niech ma informacje o pliku */
  1.1369 -#define GG_DCC_GIMME_FILE 0x0006	/* peer jest pewny */
  1.1370 -#define GG_DCC_CATCH_FILE 0x0002	/* wysyłamy plik */
  1.1371 -
  1.1372 -#define GG_DCC_FILEATTR_READONLY 0x0020
  1.1373 -
  1.1374 -#define GG_DCC_TIMEOUT_SEND 1800	/* 30 minut */
  1.1375 -#define GG_DCC_TIMEOUT_GET 1800		/* 30 minut */
  1.1376 -#define GG_DCC_TIMEOUT_FILE_ACK 300	/* 5 minut */
  1.1377 -#define GG_DCC_TIMEOUT_VOICE_ACK 300	/* 5 minut */
  1.1378 -
  1.1379 -#ifdef __cplusplus
  1.1380 -}
  1.1381 -#ifdef _WIN32
  1.1382 -#pragma pack(pop)
  1.1383 -#endif
  1.1384 -#endif
  1.1385 -
  1.1386 -#endif /* __GG_LIBGADU_H */
  1.1387 -
  1.1388 -/*
  1.1389 - * Local variables:
  1.1390 - * c-indentation-style: k&r
  1.1391 - * c-basic-offset: 8
  1.1392 - * indent-tabs-mode: notnil
  1.1393 - * End:
  1.1394 - *
  1.1395 - * vim: shiftwidth=8:
  1.1396 - */