Frameworks/libpurple.framework/Versions/0.6.2/Headers/libgadu-ppc.h
author Zachary West <zacw@adium.im>
Fri Aug 21 13:25:11 2009 -0700 (2009-08-21)
changeset 2592 e8d15275025e
parent 1739 Frameworks/libpurple.framework/Versions/0.6.0/Headers/libgadu-ppc.h@8b0daad9656c
permissions -rw-r--r--
im.pidgin.adium.1-4 at 267c6165e02e34318a1823960bd04c0639952f73
Evan@653
     1
/* include/libgadu.h.  Generated from libgadu.h.in by configure.  */
Evan@653
     2
/* $Id: libgadu.h.in,v 1.5.2.1 2007-04-21 23:44:25 wojtekka Exp $ */
Evan@653
     3
Evan@653
     4
/*
Evan@653
     5
 *  (C) Copyright 2001-2003 Wojtek Kaniewski <wojtekka@irc.pl>
Evan@653
     6
 *                          Robert J. Wo�ny <speedy@ziew.org>
Evan@653
     7
 *                          Arkadiusz Mi�kiewicz <arekm@pld-linux.org>
Evan@653
     8
 *                          Tomasz Chili� <chilek@chilan.com>
Evan@653
     9
 *                          Piotr Wysocki <wysek@linux.bydg.org>
Evan@653
    10
 *                          Dawid Jarosz <dawjar@poczta.onet.pl>
Evan@653
    11
 *
Evan@653
    12
 *  This program is free software; you can redistribute it and/or modify
Evan@653
    13
 *  it under the terms of the GNU Lesser General Public License Version
Evan@653
    14
 *  2.1 as published by the Free Software Foundation.
Evan@653
    15
 *
Evan@653
    16
 *  This program is distributed in the hope that it will be useful,
Evan@653
    17
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
Evan@653
    18
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Evan@653
    19
 *  GNU Lesser General Public License for more details.
Evan@653
    20
 *
Evan@653
    21
 *  You should have received a copy of the GNU Lesser General Public
Evan@653
    22
 *  License along with this program; if not, write to the Free Software
Evan@653
    23
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
Evan@653
    24
 *  USA.
Evan@653
    25
 */
Evan@653
    26
Evan@653
    27
#ifndef __GG_LIBGADU_H
Evan@653
    28
#define __GG_LIBGADU_H
Evan@653
    29
Evan@653
    30
#ifdef __cplusplus
Evan@653
    31
#ifdef _WIN32
Evan@653
    32
#pragma pack(push, 1)
Evan@653
    33
#endif
Evan@653
    34
extern "C" {
Evan@653
    35
#endif
Evan@653
    36
Evan@653
    37
#include <sys/types.h>
Evan@653
    38
#include <stdio.h>
Evan@653
    39
#include <stdarg.h>
Evan@653
    40
Evan@653
    41
/* Defined if libgadu was compiled for bigendian machine. */
Evan@653
    42
#define GG_CONFIG_BIGENDIAN 
Evan@653
    43
Evan@653
    44
/* Defined if this machine has gethostbyname_r(). */
Evan@653
    45
/* #undef GG_CONFIG_HAVE_GETHOSTBYNAME_R */
Evan@653
    46
Evan@653
    47
/* Defined if libgadu was compiled and linked with pthread support. */
Evan@653
    48
/* #undef GG_CONFIG_HAVE_PTHREAD */
Evan@653
    49
Evan@653
    50
/* Defined if this machine has C99-compiliant vsnprintf(). */
Evan@653
    51
#define GG_CONFIG_HAVE_C99_VSNPRINTF 
Evan@653
    52
Evan@653
    53
/* Defined if this machine has va_copy(). */
Evan@653
    54
#define GG_CONFIG_HAVE_VA_COPY 
Evan@653
    55
Evan@653
    56
/* Defined if this machine has __va_copy(). */
Evan@653
    57
#define GG_CONFIG_HAVE___VA_COPY 
Evan@653
    58
Evan@653
    59
/* Defined if this machine supports long long. */
Evan@653
    60
#define GG_CONFIG_HAVE_LONG_LONG 
Evan@653
    61
Evan@653
    62
/* Defined if libgadu was compiled and linked with TLS support. */
Evan@653
    63
#define GG_CONFIG_HAVE_OPENSSL 
Evan@653
    64
Evan@653
    65
/* Defined if uintX_t types are defined in <stdint.h>. */
Evan@653
    66
#define GG_CONFIG_HAVE_STDINT_H 
Evan@653
    67
Evan@653
    68
/* Defined if uintX_t types are defined in <inttypes.h>. */
Evan@653
    69
/* #undef GG_CONFIG_HAVE_INTTYPES_H */
Evan@653
    70
Evan@653
    71
/* Defined if uintX_t types are defined in <sys/inttypes.h>. */
Evan@653
    72
/* #undef GG_CONFIG_HAVE_SYS_INTTYPES_H */
Evan@653
    73
Evan@653
    74
/* Defined if uintX_t types are defined in <sys/int_types.h>. */
Evan@653
    75
/* #undef GG_CONFIG_HAVE_SYS_INT_TYPES_H */
Evan@653
    76
Evan@653
    77
/* Defined if uintX_t types are defined in <sys/types.h>. */
Evan@653
    78
/* #undef GG_CONFIG_HAVE_SYS_TYPES_H */
Evan@653
    79
Evan@653
    80
#ifdef GG_CONFIG_HAVE_OPENSSL
Evan@653
    81
#include <openssl/ssl.h>
Evan@653
    82
#endif
Evan@653
    83
Evan@653
    84
#ifdef GG_CONFIG_HAVE_STDINT_H
Evan@653
    85
#include <stdint.h>
Evan@653
    86
#else
Evan@653
    87
#  ifdef GG_CONFIG_HAVE_INTTYPES_H
Evan@653
    88
#  include <inttypes.h>
Evan@653
    89
#  else
Evan@653
    90
#    ifdef GG_CONFIG_HAVE_SYS_INTTYPES_H
Evan@653
    91
#    include <sys/inttypes.h>
Evan@653
    92
#    else
Evan@653
    93
#      ifdef GG_CONFIG_HAVE_SYS_INT_TYPES_H
Evan@653
    94
#      include <sys/int_types.h>
Evan@653
    95
#      else
Evan@653
    96
#        ifdef GG_CONFIG_HAVE_SYS_TYPES_H
Evan@653
    97
#        include <sys/types.h>
Evan@653
    98
#        else
Evan@653
    99
Evan@653
   100
#ifndef __AC_STDINT_H
Evan@653
   101
#define __AC_STDINT_H
Evan@653
   102
Evan@653
   103
/* ISO C 9X: 7.18 Integer types <stdint.h> */
Evan@653
   104
Evan@653
   105
typedef unsigned char   uint8_t;
Evan@653
   106
typedef unsigned short uint16_t;
Evan@653
   107
typedef unsigned int   uint32_t;
Evan@653
   108
Evan@653
   109
#ifndef __CYGWIN__
Evan@653
   110
#define __int8_t_defined
Evan@653
   111
typedef   signed char    int8_t;
Evan@653
   112
typedef   signed short  int16_t;
Evan@653
   113
typedef   signed int    int32_t;
Evan@653
   114
#endif
Evan@653
   115
Evan@653
   116
#endif /* __AC_STDINT_H */
Evan@653
   117
Evan@653
   118
#        endif
Evan@653
   119
#      endif
Evan@653
   120
#    endif
Evan@653
   121
#  endif
Evan@653
   122
#endif
Evan@653
   123
Evan@653
   124
/*
Evan@653
   125
 * typedef uin_t
Evan@653
   126
 *
Evan@653
   127
 * typ reprezentuj�cy numer osoby.
Evan@653
   128
 */
Evan@653
   129
typedef uint32_t uin_t;
Evan@653
   130
Evan@653
   131
/*
Evan@653
   132
 * og� struktura opisuj�ca r� sesje. przydatna w klientach.
Evan@653
   133
 */
Evan@653
   134
#define gg_common_head(x) \
Evan@653
   135
	int fd;			/* podgl�dany deskryptor */ \
Evan@653
   136
	int check;		/* sprawdzamy zapis czy odczyt */ \
Evan@653
   137
	int state;		/* aktualny stan maszynki */ \
Evan@653
   138
	int error;		/* kod b�� dla GG_STATE_ERROR */ \
Evan@653
   139
	int type;		/* rodzaj sesji */ \
Evan@653
   140
	int id;			/* identyfikator */ \
Evan@653
   141
	int timeout;		/* sugerowany timeout w sekundach */ \
Evan@653
   142
	int (*callback)(x*); 	/* callback przy zmianach */ \
Evan@653
   143
	void (*destroy)(x*); 	/* funkcja niszczenia */
Evan@653
   144
Evan@653
   145
struct gg_common {
Evan@653
   146
	gg_common_head(struct gg_common)
Evan@653
   147
};
Evan@653
   148
Evan@653
   149
struct gg_image_queue;
Evan@653
   150
Evan@653
   151
/*
Evan@653
   152
 * struct gg_session
Evan@653
   153
 *
Evan@653
   154
 * struktura opisuj�ca dan� sesj�tworzona przez gg_login(), zwalniana
Evan@653
   155
 * przez gg_free_session().
Evan@653
   156
 */
Evan@653
   157
struct gg_session {
Evan@653
   158
	gg_common_head(struct gg_session)
Evan@653
   159
Evan@653
   160
	int async;      	/* czy po��czenie jest asynchroniczne */
Evan@653
   161
	int pid;        	/* pid procesu resolvera */
Evan@653
   162
	int port;       	/* port, z kt� si��czymy */
Evan@653
   163
	int seq;        	/* numer sekwencyjny ostatniej wiadomo�ci */
Evan@653
   164
	int last_pong;  	/* czas otrzymania ostatniego ping/pong */
Evan@653
   165
	int last_event;		/* czas otrzymania ostatniego pakietu */
Evan@653
   166
Evan@653
   167
	struct gg_event *event;	/* zdarzenie po ->callback() */
Evan@653
   168
Evan@653
   169
	uint32_t proxy_addr;	/* adres proxy, keszowany */
Evan@653
   170
	uint16_t proxy_port;	/* port proxy */
Evan@653
   171
Evan@653
   172
	uint32_t hub_addr;	/* adres huba po resolvni�u */
Evan@653
   173
	uint32_t server_addr;	/* adres serwera, od huba */
Evan@653
   174
Evan@653
   175
	uint32_t client_addr;	/* adres klienta */
Evan@653
   176
	uint16_t client_port;	/* port, na kt� klient s�ucha */
Evan@653
   177
Evan@653
   178
	uint32_t external_addr;	/* adres zewnetrzny klienta */
Evan@653
   179
	uint16_t external_port;	/* port zewnetrzny klienta */
Evan@653
   180
Evan@653
   181
	uin_t uin;		/* numerek klienta */
Evan@653
   182
	char *password;		/* i jego has�o. zwalniane automagicznie */
Evan@653
   183
Evan@653
   184
	int initial_status;	/* pocz�tkowy stan klienta */
Evan@653
   185
	int status;		/* aktualny stan klienta */
Evan@653
   186
Evan@653
   187
	char *recv_buf;		/* bufor na otrzymywane pakiety */
Evan@653
   188
	int recv_done;		/* ile ju� wczytano do bufora */
Evan@653
   189
	int recv_left;		/* i ile jeszcze trzeba wczyta�/
Evan@653
   190
Evan@653
   191
	int protocol_version;	/* wersja u�ywanego protoko�u */
Evan@653
   192
	char *client_version;	/* wersja u�ywanego klienta */
Evan@653
   193
	int last_sysmsg;	/* ostatnia wiadomo��ystemowa */
Evan@653
   194
Evan@653
   195
	char *initial_descr;	/* pocz�tkowy opis stanu klienta */
Evan@653
   196
Evan@653
   197
	void *resolver;		/* wska�nik na informacje resolvera */
Evan@653
   198
Evan@653
   199
	char *header_buf;	/* bufor na pocz�tek nag�� */
Evan@653
   200
	unsigned int header_done;/* ile ju� mamy */
Evan@653
   201
Evan@653
   202
#ifdef GG_CONFIG_HAVE_OPENSSL
Evan@653
   203
	SSL *ssl;		/* sesja TLS */
Evan@653
   204
	SSL_CTX *ssl_ctx;	/* kontekst sesji? */
Evan@653
   205
#else
Evan@653
   206
	void *ssl;		/* zachowujemy ABI */
Evan@653
   207
	void *ssl_ctx;
Evan@653
   208
#endif
Evan@653
   209
Evan@653
   210
	int image_size;		/* maksymalny rozmiar obrazk� KiB */
Evan@653
   211
Evan@653
   212
	char *userlist_reply;	/* fragment odpowiedzi listy kontakt�/
Evan@653
   213
Evan@653
   214
	int userlist_blocks;	/* na ile kawa�k�odzielono list�ontakt�/
Evan@653
   215
Evan@653
   216
	struct gg_image_queue *images;	/* aktualnie wczytywane obrazki */
Evan@653
   217
};
Evan@653
   218
Evan@653
   219
/*
Evan@653
   220
 * struct gg_http
Evan@653
   221
 *
Evan@653
   222
 * og� struktura opisuj�ca stan wszystkich operacji HTTP. tworzona
Evan@653
   223
 * przez gg_http_connect(), zwalniana przez gg_http_free().
Evan@653
   224
 */
Evan@653
   225
struct gg_http {
Evan@653
   226
	gg_common_head(struct gg_http)
Evan@653
   227
Evan@653
   228
	int async;              /* czy po��czenie asynchroniczne */
Evan@653
   229
	int pid;                /* pid procesu resolvera */
Evan@653
   230
	int port;               /* port, z kt� si��czymy */
Evan@653
   231
Evan@653
   232
	char *query;            /* bufor zapytania http */
Evan@653
   233
	char *header;           /* bufor nag�� */
Evan@653
   234
	int header_size;        /* rozmiar wczytanego nag�� */
Evan@653
   235
	char *body;             /* bufor otrzymanych informacji */
Evan@653
   236
	unsigned int body_size; /* oczekiwana ilo��nformacji */
Evan@653
   237
Evan@653
   238
	void *data;             /* dane danej operacji http */
Evan@653
   239
Evan@653
   240
	char *user_data;	/* dane u�ytkownika, nie s� zwalniane przez gg_http_free() */
Evan@653
   241
Evan@653
   242
	void *resolver;		/* wska�nik na informacje resolvera */
Evan@653
   243
Evan@653
   244
	unsigned int body_done;	/* ile ju� tre�ci odebrano? */
Evan@653
   245
};
Evan@653
   246
Evan@653
   247
#ifdef __GNUC__
Evan@653
   248
#define GG_PACKED __attribute__ ((packed))
Evan@653
   249
#else
Evan@653
   250
#define GG_PACKED
Evan@653
   251
#endif
Evan@653
   252
Evan@653
   253
#define GG_MAX_PATH 276
Evan@653
   254
Evan@653
   255
/*
Evan@653
   256
 * struct gg_file_info
Evan@653
   257
 *
Evan@653
   258
 * odpowiednik windowsowej struktury WIN32_FIND_DATA niezb�ej przy
Evan@653
   259
 * wysy�aniu plik� */
Evan@653
   260
struct gg_file_info {
Evan@653
   261
	uint32_t mode;			/* dwFileAttributes */
Evan@653
   262
	uint32_t ctime[2];		/* ftCreationTime */
Evan@653
   263
	uint32_t atime[2];		/* ftLastAccessTime */
Evan@653
   264
	uint32_t mtime[2];		/* ftLastWriteTime */
Evan@653
   265
	uint32_t size_hi;		/* nFileSizeHigh */
Evan@653
   266
	uint32_t size;			/* nFileSizeLow */
Evan@653
   267
	uint32_t reserved0;		/* dwReserved0 */
Evan@653
   268
	uint32_t reserved1;		/* dwReserved1 */
Evan@653
   269
	unsigned char filename[GG_MAX_PATH - 14];	/* cFileName */
Evan@653
   270
	unsigned char short_filename[14];		/* cAlternateFileName */
Evan@653
   271
} GG_PACKED;
Evan@653
   272
Evan@653
   273
/*
Evan@653
   274
 * struct gg_dcc
Evan@653
   275
 *
Evan@653
   276
 * struktura opisuj�ca nas�uchuj�ce gniazdo po��cze��y klientami.
Evan@653
   277
 * tworzona przez gg_dcc_socket_create(), zwalniana przez gg_dcc_free().
Evan@653
   278
 */
Evan@653
   279
struct gg_dcc {
Evan@653
   280
	gg_common_head(struct gg_dcc)
Evan@653
   281
Evan@653
   282
	struct gg_event *event;	/* opis zdarzenia */
Evan@653
   283
Evan@653
   284
	int active;		/* czy to my si��czymy? */
Evan@653
   285
	int port;		/* port, na kt� siedzi */
Evan@653
   286
	uin_t uin;		/* uin klienta */
Evan@653
   287
	uin_t peer_uin;		/* uin drugiej strony */
Evan@653
   288
	int file_fd;		/* deskryptor pliku */
Evan@653
   289
	unsigned int offset;	/* offset w pliku */
Evan@653
   290
	unsigned int chunk_size;/* rozmiar kawa�ka */
Evan@653
   291
	unsigned int chunk_offset;/* offset w aktualnym kawa�ku */
Evan@653
   292
	struct gg_file_info file_info;
Evan@653
   293
				/* informacje o pliku */
Evan@653
   294
	int established;	/* po��czenie ustanowione */
Evan@653
   295
	char *voice_buf;	/* bufor na pakiet po��czenia g�osowego */
Evan@653
   296
	int incoming;		/* po��czenie przychodz�ce */
Evan@653
   297
	char *chunk_buf;	/* bufor na kawa�ek danych */
Evan@653
   298
	uint32_t remote_addr;	/* adres drugiej strony */
Evan@653
   299
	uint16_t remote_port;	/* port drugiej strony */
Evan@653
   300
};
Evan@653
   301
Evan@653
   302
/*
Evan@653
   303
 * enum gg_session_t
Evan@653
   304
 *
Evan@653
   305
 * rodzaje sesji.
Evan@653
   306
 */
Evan@653
   307
enum gg_session_t {
Evan@653
   308
	GG_SESSION_GG = 1,	/* po��czenie z serwerem gg */
Evan@653
   309
	GG_SESSION_HTTP,	/* og� sesja http */
Evan@653
   310
	GG_SESSION_SEARCH,	/* szukanie */
Evan@653
   311
	GG_SESSION_REGISTER,	/* rejestrowanie */
Evan@653
   312
	GG_SESSION_REMIND,	/* przypominanie has�a */
Evan@653
   313
	GG_SESSION_PASSWD,	/* zmiana has�a */
Evan@653
   314
	GG_SESSION_CHANGE,	/* zmiana informacji o sobie */
Evan@653
   315
	GG_SESSION_DCC,		/* og� po��czenie DCC */
Evan@653
   316
	GG_SESSION_DCC_SOCKET,	/* nas�uchuj�cy socket */
Evan@653
   317
	GG_SESSION_DCC_SEND,	/* wysy�anie pliku */
Evan@653
   318
	GG_SESSION_DCC_GET,	/* odbieranie pliku */
Evan@653
   319
	GG_SESSION_DCC_VOICE,	/* rozmowa g�osowa */
Evan@653
   320
	GG_SESSION_USERLIST_GET,	/* pobieranie userlisty */
Evan@653
   321
	GG_SESSION_USERLIST_PUT,	/* wysy�anie userlisty */
Evan@653
   322
	GG_SESSION_UNREGISTER,	/* usuwanie konta */
Evan@653
   323
	GG_SESSION_USERLIST_REMOVE,	/* usuwanie userlisty */
Evan@653
   324
	GG_SESSION_TOKEN,	/* pobieranie tokenu */
Evan@653
   325
Evan@653
   326
	GG_SESSION_USER0 = 256,	/* zdefiniowana dla u�ytkownika */
Evan@653
   327
	GG_SESSION_USER1,	/* j.w. */
Evan@653
   328
	GG_SESSION_USER2,	/* j.w. */
Evan@653
   329
	GG_SESSION_USER3,	/* j.w. */
Evan@653
   330
	GG_SESSION_USER4,	/* j.w. */
Evan@653
   331
	GG_SESSION_USER5,	/* j.w. */
Evan@653
   332
	GG_SESSION_USER6,	/* j.w. */
Evan@653
   333
	GG_SESSION_USER7	/* j.w. */
Evan@653
   334
};
Evan@653
   335
Evan@653
   336
/*
Evan@653
   337
 * enum gg_state_t
Evan@653
   338
 *
Evan@653
   339
 * opisuje stan asynchronicznej maszyny.
Evan@653
   340
 */
Evan@653
   341
enum gg_state_t {
Evan@653
   342
		/* wsp� */
Evan@653
   343
	GG_STATE_IDLE = 0,		/* nie powinno wyst�pi�*/
Evan@653
   344
	GG_STATE_RESOLVING,             /* wywo�a� gethostbyname() */
Evan@653
   345
	GG_STATE_CONNECTING,            /* wywo�a� connect() */
Evan@653
   346
	GG_STATE_READING_DATA,		/* czeka na dane http */
Evan@653
   347
	GG_STATE_ERROR,			/* wyst�pi� b��d. kod w x->error */
Evan@653
   348
Evan@653
   349
		/* gg_session */
Evan@653
   350
	GG_STATE_CONNECTING_HUB,	/* wywo�a� connect() na huba */
Evan@653
   351
	GG_STATE_CONNECTING_GG,         /* wywo�a� connect() na serwer */
Evan@653
   352
	GG_STATE_READING_KEY,           /* czeka na klucz */
Evan@653
   353
	GG_STATE_READING_REPLY,         /* czeka na odpowied� */
Evan@653
   354
	GG_STATE_CONNECTED,             /* po��czy� si�/
Evan@653
   355
Evan@653
   356
		/* gg_http */
Evan@653
   357
	GG_STATE_SENDING_QUERY,		/* wysy�a zapytanie http */
Evan@653
   358
	GG_STATE_READING_HEADER,	/* czeka na nag�� http */
Evan@653
   359
	GG_STATE_PARSING,               /* przetwarza dane */
Evan@653
   360
	GG_STATE_DONE,                  /* sko�� */
Evan@653
   361
Evan@653
   362
		/* gg_dcc */
Evan@653
   363
	GG_STATE_LISTENING,		/* czeka na po��czenia */
Evan@653
   364
	GG_STATE_READING_UIN_1,		/* czeka na uin peera */
Evan@653
   365
	GG_STATE_READING_UIN_2,		/* czeka na sw�in */
Evan@653
   366
	GG_STATE_SENDING_ACK,		/* wysy�a potwierdzenie dcc */
Evan@653
   367
	GG_STATE_READING_ACK,		/* czeka na potwierdzenie dcc */
Evan@653
   368
	GG_STATE_READING_REQUEST,	/* czeka na komend�/
Evan@653
   369
	GG_STATE_SENDING_REQUEST,	/* wysy�a komend�/
Evan@653
   370
	GG_STATE_SENDING_FILE_INFO,	/* wysy�a informacje o pliku */
Evan@653
   371
	GG_STATE_READING_PRE_FILE_INFO,	/* czeka na pakiet przed file_info */
Evan@653
   372
	GG_STATE_READING_FILE_INFO,	/* czeka na informacje o pliku */
Evan@653
   373
	GG_STATE_SENDING_FILE_ACK,	/* wysy�a potwierdzenie pliku */
Evan@653
   374
	GG_STATE_READING_FILE_ACK,	/* czeka na potwierdzenie pliku */
Evan@653
   375
	GG_STATE_SENDING_FILE_HEADER,	/* wysy�a nag�� pliku */
Evan@653
   376
	GG_STATE_READING_FILE_HEADER,	/* czeka na nag�� */
Evan@653
   377
	GG_STATE_GETTING_FILE,		/* odbiera plik */
Evan@653
   378
	GG_STATE_SENDING_FILE,		/* wysy�a plik */
Evan@653
   379
	GG_STATE_READING_VOICE_ACK,	/* czeka na potwierdzenie voip */
Evan@653
   380
	GG_STATE_READING_VOICE_HEADER,	/* czeka na rodzaj bloku voip */
Evan@653
   381
	GG_STATE_READING_VOICE_SIZE,	/* czeka na rozmiar bloku voip */
Evan@653
   382
	GG_STATE_READING_VOICE_DATA,	/* czeka na dane voip */
Evan@653
   383
	GG_STATE_SENDING_VOICE_ACK,	/* wysy�a potwierdzenie voip */
Evan@653
   384
	GG_STATE_SENDING_VOICE_REQUEST,	/* wysy�a ��danie voip */
Evan@653
   385
	GG_STATE_READING_TYPE,		/* czeka na typ po��czenia */
Evan@653
   386
Evan@653
   387
	/* nowe. bez sensu jest to API. */
Evan@653
   388
	GG_STATE_TLS_NEGOTIATION	/* negocjuje po��czenie TLS */
Evan@653
   389
};
Evan@653
   390
Evan@653
   391
/*
Evan@653
   392
 * enum gg_check_t
Evan@653
   393
 *
Evan@653
   394
 * informuje, co proces klienta powinien sprawdzi�a deskryptorze danego
Evan@653
   395
 * po��czenia.
Evan@653
   396
 */
Evan@653
   397
enum gg_check_t {
Evan@653
   398
	GG_CHECK_NONE = 0,		/* nic. nie powinno wyst�pi�/
Evan@653
   399
	GG_CHECK_WRITE = 1,		/* sprawdzamy mo�liwo��apisu */
Evan@653
   400
	GG_CHECK_READ = 2		/* sprawdzamy mo�liwo��dczytu */
Evan@653
   401
};
Evan@653
   402
Evan@653
   403
/*
Evan@653
   404
 * struct gg_login_params
Evan@653
   405
 *
Evan@653
   406
 * parametry gg_login(). przeniesiono do struktury, �eby unikn��roblem�* z ci�g�ymi zmianami API, gdy dodano co� nowego do protoko�u.
Evan@653
   407
 */
Evan@653
   408
struct gg_login_params {
Evan@653
   409
	uin_t uin;			/* numerek */
Evan@653
   410
	char *password;			/* has�o */
Evan@653
   411
	int async;			/* asynchroniczne sockety? */
Evan@653
   412
	int status;			/* pocz�tkowy status klienta */
Evan@653
   413
	char *status_descr;		/* opis statusu */
Evan@653
   414
	uint32_t server_addr;		/* adres serwera gg */
Evan@653
   415
	uint16_t server_port;		/* port serwera gg */
Evan@653
   416
	uint32_t client_addr;		/* adres dcc klienta */
Evan@653
   417
	uint16_t client_port;		/* port dcc klienta */
Evan@653
   418
	int protocol_version;		/* wersja protoko�u */
Evan@653
   419
	char *client_version;		/* wersja klienta */
Evan@653
   420
	int has_audio;			/* czy ma d�wi� */
Evan@653
   421
	int last_sysmsg;		/* ostatnia wiadomo��ystemowa */
Evan@653
   422
	uint32_t external_addr;		/* adres widziany na zewnatrz */
Evan@653
   423
	uint16_t external_port;		/* port widziany na zewnatrz */
Evan@653
   424
	int tls;			/* czy ��czymy po TLS? */
Evan@653
   425
	int image_size;			/* maksymalny rozmiar obrazka w KiB */
Evan@653
   426
	int era_omnix;			/* czy udawa�lienta era omnix? */
Evan@653
   427
Evan@653
   428
	char dummy[6 * sizeof(int)];	/* miejsce na kolejnych 6 zmiennych,
Evan@653
   429
					 * �eby z dodaniem parametru nie
Evan@653
   430
					 * zmienia� si�ozmiar struktury */
Evan@653
   431
};
Evan@653
   432
Evan@653
   433
struct gg_session *gg_login(const struct gg_login_params *p);
Evan@653
   434
void gg_free_session(struct gg_session *sess);
Evan@653
   435
void gg_logoff(struct gg_session *sess);
Evan@653
   436
int gg_change_status(struct gg_session *sess, int status);
Evan@653
   437
int gg_change_status_descr(struct gg_session *sess, int status, const char *descr);
Evan@653
   438
int gg_change_status_descr_time(struct gg_session *sess, int status, const char *descr, int time);
Evan@653
   439
int gg_send_message(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message);
Evan@653
   440
int gg_send_message_richtext(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message, const unsigned char *format, int formatlen);
Evan@653
   441
int gg_send_message_confer(struct gg_session *sess, int msgclass, int recipients_count, uin_t *recipients, const unsigned char *message);
Evan@653
   442
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);
Evan@653
   443
int gg_send_message_ctcp(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message, int message_len);
Evan@653
   444
int gg_ping(struct gg_session *sess);
Evan@653
   445
int gg_userlist_request(struct gg_session *sess, char type, const char *request);
Evan@653
   446
int gg_image_request(struct gg_session *sess, uin_t recipient, int size, uint32_t crc32);
Evan@653
   447
int gg_image_reply(struct gg_session *sess, uin_t recipient, const char *filename, const char *image, int size);
Evan@653
   448
Evan@653
   449
uint32_t gg_crc32(uint32_t crc, const unsigned char *buf, int len);
Evan@653
   450
Evan@653
   451
struct gg_image_queue {
Evan@653
   452
	uin_t sender;			/* nadawca obrazka */
Evan@653
   453
	uint32_t size;			/* rozmiar */
Evan@653
   454
	uint32_t crc32;			/* suma kontrolna */
Evan@653
   455
	char *filename;			/* nazwa pliku */
Evan@653
   456
	char *image;			/* bufor z obrazem */
Evan@653
   457
	uint32_t done;			/* ile ju� wczytano */
Evan@653
   458
Evan@653
   459
	struct gg_image_queue *next;	/* nast�y na li�cie */
Evan@653
   460
};
Evan@653
   461
Evan@653
   462
/*
Evan@653
   463
 * enum gg_event_t
Evan@653
   464
 *
Evan@653
   465
 * rodzaje zdarze�*/
Evan@653
   466
enum gg_event_t {
Evan@653
   467
	GG_EVENT_NONE = 0,		/* nic si�ie wydarzy�o */
Evan@653
   468
	GG_EVENT_MSG,			/* otrzymano wiadomo��/
Evan@653
   469
	GG_EVENT_NOTIFY,		/* kto� si�ojawi� */
Evan@653
   470
	GG_EVENT_NOTIFY_DESCR,		/* kto� si�ojawi� z opisem */
Evan@653
   471
	GG_EVENT_STATUS,		/* kto� zmieni� stan */
Evan@653
   472
	GG_EVENT_ACK,			/* potwierdzenie wys�ania wiadomo�ci */
Evan@653
   473
	GG_EVENT_PONG,			/* pakiet pong */
Evan@653
   474
	GG_EVENT_CONN_FAILED,		/* po��czenie si�ie uda�o */
Evan@653
   475
	GG_EVENT_CONN_SUCCESS,		/* po��czenie si�owiod�o */
Evan@653
   476
	GG_EVENT_DISCONNECT,		/* serwer zrywa po��czenie */
Evan@653
   477
Evan@653
   478
	GG_EVENT_DCC_NEW,		/* nowe po��czenie mi�y klientami */
Evan@653
   479
	GG_EVENT_DCC_ERROR,		/* b��d po��czenia mi�y klientami */
Evan@653
   480
	GG_EVENT_DCC_DONE,		/* zako�no po��czenie */
Evan@653
   481
	GG_EVENT_DCC_CLIENT_ACCEPT,	/* moment akceptacji klienta */
Evan@653
   482
	GG_EVENT_DCC_CALLBACK,		/* klient si�o��czy� na ��danie */
Evan@653
   483
	GG_EVENT_DCC_NEED_FILE_INFO,	/* nale�y wype�ni�ile_info */
Evan@653
   484
	GG_EVENT_DCC_NEED_FILE_ACK,	/* czeka na potwierdzenie pliku */
Evan@653
   485
	GG_EVENT_DCC_NEED_VOICE_ACK,	/* czeka na potwierdzenie rozmowy */
Evan@653
   486
	GG_EVENT_DCC_VOICE_DATA, 	/* ramka danych rozmowy g�osowej */
Evan@653
   487
Evan@653
   488
	GG_EVENT_PUBDIR50_SEARCH_REPLY,	/* odpowiedz wyszukiwania */
Evan@653
   489
	GG_EVENT_PUBDIR50_READ,		/* odczytano w�asne dane z katalogu */
Evan@653
   490
	GG_EVENT_PUBDIR50_WRITE,	/* wpisano w�asne dane do katalogu */
Evan@653
   491
Evan@653
   492
	GG_EVENT_STATUS60,		/* kto� zmieni� stan w GG 6.0 */
Evan@653
   493
	GG_EVENT_NOTIFY60,		/* kto� si�ojawi� w GG 6.0 */
Evan@653
   494
	GG_EVENT_USERLIST,		/* odpowied� listy kontakt� GG 6.0 */
Evan@653
   495
	GG_EVENT_IMAGE_REQUEST,		/* pro�ba o wys�anie obrazka GG 6.0 */
Evan@653
   496
	GG_EVENT_IMAGE_REPLY,		/* podes�any obrazek GG 6.0 */
Evan@653
   497
	GG_EVENT_DCC_ACK		/* potwierdzenie transmisji */
Evan@653
   498
};
Evan@653
   499
Evan@653
   500
#define GG_EVENT_SEARCH50_REPLY GG_EVENT_PUBDIR50_SEARCH_REPLY
Evan@653
   501
Evan@653
   502
/*
Evan@653
   503
 * enum gg_failure_t
Evan@653
   504
 *
Evan@653
   505
 * okre�la pow�ieudanego po��czenia.
Evan@653
   506
 */
Evan@653
   507
enum gg_failure_t {
Evan@653
   508
	GG_FAILURE_RESOLVING = 1,	/* nie znaleziono serwera */
Evan@653
   509
	GG_FAILURE_CONNECTING,		/* nie mo�na si�o��czy�/
Evan@653
   510
	GG_FAILURE_INVALID,		/* serwer zwr� nieprawid�owe dane */
Evan@653
   511
	GG_FAILURE_READING,		/* zerwano po��czenie podczas odczytu */
Evan@653
   512
	GG_FAILURE_WRITING,		/* zerwano po��czenie podczas zapisu */
Evan@653
   513
	GG_FAILURE_PASSWORD,		/* nieprawid�owe has�o */
Evan@653
   514
	GG_FAILURE_404, 		/* XXX nieu�ywane */
Evan@653
   515
	GG_FAILURE_TLS,			/* b��d negocjacji TLS */
Evan@653
   516
	GG_FAILURE_NEED_EMAIL, 		/* serwer roz��czy� nas z pro�b� o zmian�maila */
Evan@653
   517
	GG_FAILURE_INTRUDER,		/* za du�o pr�o��czenia si� nieprawid�owym has�em */
Evan@653
   518
	GG_FAILURE_UNAVAILABLE		/* serwery s� wy��czone */
Evan@653
   519
};
Evan@653
   520
Evan@653
   521
/*
Evan@653
   522
 * enum gg_error_t
Evan@653
   523
 *
Evan@653
   524
 * okre�la rodzaj b�� wywo�anego przez dan� operacj�nie zawiera
Evan@653
   525
 * przesadnie szczeg�ych informacji o powodzie b��, by nie komplikowa�* obs�ugi b��w. je�li wymagana jest wi�za dok�adno��nale�y sprawdzi�* zawarto��miennej errno.
Evan@653
   526
 */
Evan@653
   527
enum gg_error_t {
Evan@653
   528
	GG_ERROR_RESOLVING = 1,		/* b��d znajdowania hosta */
Evan@653
   529
	GG_ERROR_CONNECTING,		/* b��d �aczenia si�/
Evan@653
   530
	GG_ERROR_READING,		/* b��d odczytu */
Evan@653
   531
	GG_ERROR_WRITING,		/* b��d wysy�ania */
Evan@653
   532
Evan@653
   533
	GG_ERROR_DCC_HANDSHAKE,		/* b��d negocjacji */
Evan@653
   534
	GG_ERROR_DCC_FILE,		/* b��d odczytu/zapisu pliku */
Evan@653
   535
	GG_ERROR_DCC_EOF,		/* plik si�ko��? */
Evan@653
   536
	GG_ERROR_DCC_NET,		/* b��d wysy�ania/odbierania */
Evan@653
   537
	GG_ERROR_DCC_REFUSED 		/* po��czenie odrzucone przez usera */
Evan@653
   538
};
Evan@653
   539
Evan@653
   540
/*
Evan@653
   541
 * struktury dotycz�ce wyszukiwania w GG 5.0. NIE NALE�Y SI�DO NICH
Evan@653
   542
 * ODWO�YWA�BEZPO�REDNIO! do dost� do nich s�u�� funkcje gg_pubdir50_*()
Evan@653
   543
 */
Evan@653
   544
struct gg_pubdir50_entry {
Evan@653
   545
	int num;
Evan@653
   546
	char *field;
Evan@653
   547
	char *value;
Evan@653
   548
};
Evan@653
   549
Evan@653
   550
struct gg_pubdir50_s {
Evan@653
   551
	int count;
Evan@653
   552
	uin_t next;
Evan@653
   553
	int type;
Evan@653
   554
	uint32_t seq;
Evan@653
   555
	struct gg_pubdir50_entry *entries;
Evan@653
   556
	int entries_count;
Evan@653
   557
};
Evan@653
   558
Evan@653
   559
/*
Evan@653
   560
 * typedef gg_pubdir_50_t
Evan@653
   561
 *
Evan@653
   562
 * typ opisuj�cy zapytanie lub wynik zapytania katalogu publicznego
Evan@653
   563
 * z protoko�u GG 5.0. nie nale�y si�dwo�ywa�ezpo�rednio do jego
Evan@653
   564
 * p�- s�u�� do tego funkcje gg_pubdir50_*()
Evan@653
   565
 */
Evan@653
   566
typedef struct gg_pubdir50_s *gg_pubdir50_t;
Evan@653
   567
Evan@653
   568
/*
Evan@653
   569
 * struct gg_event
Evan@653
   570
 *
Evan@653
   571
 * struktura opisuj�ca rodzaj zdarzenia. wychodzi z gg_watch_fd() lub
Evan@653
   572
 * z gg_dcc_watch_fd()
Evan@653
   573
 */
Evan@653
   574
struct gg_event {
Evan@653
   575
	int type;	/* rodzaj zdarzenia -- gg_event_t */
Evan@653
   576
	union {		/* @event */
Evan@653
   577
		struct gg_notify_reply *notify;	/* informacje o li�cie kontakt�- GG_EVENT_NOTIFY */
Evan@653
   578
Evan@653
   579
		enum gg_failure_t failure;	/* b��d po��czenia -- GG_EVENT_FAILURE */
Evan@653
   580
Evan@653
   581
		struct gg_dcc *dcc_new;		/* nowe po��czenie bezpo�rednie -- GG_EVENT_DCC_NEW */
Evan@653
   582
Evan@653
   583
		int dcc_error;			/* b��d po��czenia bezpo�redniego -- GG_EVENT_DCC_ERROR */
Evan@653
   584
Evan@653
   585
		gg_pubdir50_t pubdir50;		/* wynik operacji zwi�zanej z katalogiem publicznym -- GG_EVENT_PUBDIR50_* */
Evan@653
   586
Evan@653
   587
		struct {			/* @msg odebrano wiadomo��- GG_EVENT_MSG */
Evan@653
   588
			uin_t sender;		/* numer nadawcy */
Evan@653
   589
			int msgclass;		/* klasa wiadomo�ci */
Evan@653
   590
			time_t time;		/* czas nadania */
Evan@653
   591
			unsigned char *message;	/* tre��iadomo�ci */
Evan@653
   592
Evan@653
   593
			int recipients_count;	/* ilo��dbiorc�onferencji */
Evan@653
   594
			uin_t *recipients;	/* odbiorcy konferencji */
Evan@653
   595
Evan@653
   596
			int formats_length;	/* d�ugo��nformacji o formatowaniu tekstu */
Evan@653
   597
			void *formats;		/* informacje o formatowaniu tekstu */
Evan@653
   598
		} msg;
Evan@653
   599
Evan@653
   600
		struct {			/* @notify_descr informacje o li�cie kontakt� opisami stanu -- GG_EVENT_NOTIFY_DESCR */
Evan@653
   601
			struct gg_notify_reply *notify;	/* informacje o li�cie kontakt�/
Evan@653
   602
			char *descr;		/* opis stanu */
Evan@653
   603
		} notify_descr;
Evan@653
   604
Evan@653
   605
		struct {			/* @status zmiana stanu -- GG_EVENT_STATUS */
Evan@653
   606
			uin_t uin;		/* numer */
Evan@653
   607
			uint32_t status;	/* nowy stan */
Evan@653
   608
			char *descr;		/* opis stanu */
Evan@653
   609
		} status;
Evan@653
   610
Evan@653
   611
		struct {			/* @status60 zmiana stanu -- GG_EVENT_STATUS60 */
Evan@653
   612
			uin_t uin;		/* numer */
Evan@653
   613
			int status;	/* nowy stan */
Evan@653
   614
			uint32_t remote_ip;	/* adres ip */
Evan@653
   615
			uint16_t remote_port;	/* port */
Evan@653
   616
			int version;	/* wersja klienta */
Evan@653
   617
			int image_size;	/* maksymalny rozmiar grafiki w KiB */
Evan@653
   618
			char *descr;		/* opis stanu */
Evan@653
   619
			time_t time;		/* czas powrotu */
Evan@653
   620
		} status60;
Evan@653
   621
Evan@653
   622
		struct {			/* @notify60 informacja o li�cie kontakt�- GG_EVENT_NOTIFY60 */
Evan@653
   623
			uin_t uin;		/* numer */
Evan@653
   624
			int status;	/* stan */
Evan@653
   625
			uint32_t remote_ip;	/* adres ip */
Evan@653
   626
			uint16_t remote_port;	/* port */
Evan@653
   627
			int version;	/* wersja klienta */
Evan@653
   628
			int image_size;	/* maksymalny rozmiar grafiki w KiB */
Evan@653
   629
			char *descr;		/* opis stanu */
Evan@653
   630
			time_t time;		/* czas powrotu */
Evan@653
   631
		} *notify60;
Evan@653
   632
Evan@653
   633
		struct {			/* @ack potwierdzenie wiadomo�ci -- GG_EVENT_ACK */
Evan@653
   634
			uin_t recipient;	/* numer odbiorcy */
Evan@653
   635
			int status;		/* stan dor�enia wiadomo�ci */
Evan@653
   636
			int seq;		/* numer sekwencyjny wiadomo�ci */
Evan@653
   637
		} ack;
Evan@653
   638
Evan@653
   639
		struct {			/* @dcc_voice_data otrzymano dane d�wi�we -- GG_EVENT_DCC_VOICE_DATA */
Evan@653
   640
			uint8_t *data;		/* dane d�wi�we */
Evan@653
   641
			int length;		/* ilo��anych d�wi�wych */
Evan@653
   642
		} dcc_voice_data;
Evan@653
   643
Evan@653
   644
		struct {			/* @userlist odpowied� listy kontakt�erwera */
Evan@653
   645
			char type;		/* rodzaj odpowiedzi */
Evan@653
   646
			char *reply;		/* tre��dpowiedzi */
Evan@653
   647
		} userlist;
Evan@653
   648
Evan@653
   649
		struct {			/* @image_request pro�ba o obrazek */
Evan@653
   650
			uin_t sender;		/* nadawca pro�by */
Evan@653
   651
			uint32_t size;		/* rozmiar obrazka */
Evan@653
   652
			uint32_t crc32;		/* suma kontrolna */
Evan@653
   653
		} image_request;
Evan@653
   654
Evan@653
   655
		struct {			/* @image_reply odpowied� z obrazkiem */
Evan@653
   656
			uin_t sender;		/* nadawca odpowiedzi */
Evan@653
   657
			uint32_t size;		/* rozmiar obrazka */
Evan@653
   658
			uint32_t crc32;		/* suma kontrolna */
Evan@653
   659
			char *filename;		/* nazwa pliku */
Evan@653
   660
			char *image;		/* bufor z obrazkiem */
Evan@653
   661
		} image_reply;
Evan@653
   662
	} event;
Evan@653
   663
};
Evan@653
   664
Evan@653
   665
struct gg_event *gg_watch_fd(struct gg_session *sess);
Evan@653
   666
void gg_event_free(struct gg_event *e);
Evan@653
   667
#define gg_free_event gg_event_free
Evan@653
   668
Evan@653
   669
/*
Evan@653
   670
 * funkcje obs�ugi listy kontakt� */
Evan@653
   671
int gg_notify_ex(struct gg_session *sess, uin_t *userlist, char *types, int count);
Evan@653
   672
int gg_notify(struct gg_session *sess, uin_t *userlist, int count);
Evan@653
   673
int gg_add_notify_ex(struct gg_session *sess, uin_t uin, char type);
Evan@653
   674
int gg_add_notify(struct gg_session *sess, uin_t uin);
Evan@653
   675
int gg_remove_notify_ex(struct gg_session *sess, uin_t uin, char type);
Evan@653
   676
int gg_remove_notify(struct gg_session *sess, uin_t uin);
Evan@653
   677
Evan@653
   678
/*
Evan@653
   679
 * funkcje obs�ugi http.
Evan@653
   680
 */
Evan@653
   681
struct gg_http *gg_http_connect(const char *hostname, int port, int async, const char *method, const char *path, const char *header);
Evan@653
   682
int gg_http_watch_fd(struct gg_http *h);
Evan@653
   683
void gg_http_stop(struct gg_http *h);
Evan@653
   684
void gg_http_free(struct gg_http *h);
Evan@653
   685
void gg_http_free_fields(struct gg_http *h);
Evan@653
   686
#define gg_free_http gg_http_free
Evan@653
   687
Evan@653
   688
/*
Evan@653
   689
 * struktury opisuj�ca kryteria wyszukiwania dla gg_search(). nieaktualne,
Evan@653
   690
 * zast�pione przez gg_pubdir50_t. pozostawiono je dla zachowania ABI.
Evan@653
   691
 */
Evan@653
   692
struct gg_search_request {
Evan@653
   693
	int active;
Evan@653
   694
	unsigned int start;
Evan@653
   695
	char *nickname;
Evan@653
   696
	char *first_name;
Evan@653
   697
	char *last_name;
Evan@653
   698
	char *city;
Evan@653
   699
	int gender;
Evan@653
   700
	int min_birth;
Evan@653
   701
	int max_birth;
Evan@653
   702
	char *email;
Evan@653
   703
	char *phone;
Evan@653
   704
	uin_t uin;
Evan@653
   705
};
Evan@653
   706
Evan@653
   707
struct gg_search {
Evan@653
   708
	int count;
Evan@653
   709
	struct gg_search_result *results;
Evan@653
   710
};
Evan@653
   711
Evan@653
   712
struct gg_search_result {
Evan@653
   713
	uin_t uin;
Evan@653
   714
	char *first_name;
Evan@653
   715
	char *last_name;
Evan@653
   716
	char *nickname;
Evan@653
   717
	int born;
Evan@653
   718
	int gender;
Evan@653
   719
	char *city;
Evan@653
   720
	int active;
Evan@653
   721
};
Evan@653
   722
Evan@653
   723
#define GG_GENDER_NONE 0
Evan@653
   724
#define GG_GENDER_FEMALE 1
Evan@653
   725
#define GG_GENDER_MALE 2
Evan@653
   726
Evan@653
   727
/*
Evan@653
   728
 * funkcje wyszukiwania.
Evan@653
   729
 */
Evan@653
   730
struct gg_http *gg_search(const struct gg_search_request *r, int async);
Evan@653
   731
int gg_search_watch_fd(struct gg_http *f);
Evan@653
   732
void gg_free_search(struct gg_http *f);
Evan@653
   733
#define gg_search_free gg_free_search
Evan@653
   734
Evan@653
   735
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);
Evan@653
   736
const struct gg_search_request *gg_search_request_mode_1(char *email, int active, int start);
Evan@653
   737
const struct gg_search_request *gg_search_request_mode_2(char *phone, int active, int start);
Evan@653
   738
const struct gg_search_request *gg_search_request_mode_3(uin_t uin, int active, int start);
Evan@653
   739
void gg_search_request_free(struct gg_search_request *r);
Evan@653
   740
Evan@653
   741
/*
Evan@653
   742
 * funkcje obs�ugi katalogu publicznego zgodne z GG 5.0. tym razem funkcje
Evan@653
   743
 * zachowuj� pewien poziom abstrakcji, �eby unikn��mian ABI przy zmianach
Evan@653
   744
 * w protokole.
Evan@653
   745
 *
Evan@653
   746
 * NIE NALE�Y SI�ODWO�YWA�DO P� gg_pubdir50_t BEZPO�REDNIO!
Evan@653
   747
 */
Evan@653
   748
uint32_t gg_pubdir50(struct gg_session *sess, gg_pubdir50_t req);
Evan@653
   749
gg_pubdir50_t gg_pubdir50_new(int type);
Evan@653
   750
int gg_pubdir50_add(gg_pubdir50_t req, const char *field, const char *value);
Evan@653
   751
int gg_pubdir50_seq_set(gg_pubdir50_t req, uint32_t seq);
Evan@653
   752
const char *gg_pubdir50_get(gg_pubdir50_t res, int num, const char *field);
Evan@653
   753
int gg_pubdir50_type(gg_pubdir50_t res);
Evan@653
   754
int gg_pubdir50_count(gg_pubdir50_t res);
Evan@653
   755
uin_t gg_pubdir50_next(gg_pubdir50_t res);
Evan@653
   756
uint32_t gg_pubdir50_seq(gg_pubdir50_t res);
Evan@653
   757
void gg_pubdir50_free(gg_pubdir50_t res);
Evan@653
   758
Evan@653
   759
#define GG_PUBDIR50_UIN "FmNumber"
Evan@653
   760
#define GG_PUBDIR50_STATUS "FmStatus"
Evan@653
   761
#define GG_PUBDIR50_FIRSTNAME "firstname"
Evan@653
   762
#define GG_PUBDIR50_LASTNAME "lastname"
Evan@653
   763
#define GG_PUBDIR50_NICKNAME "nickname"
Evan@653
   764
#define GG_PUBDIR50_BIRTHYEAR "birthyear"
Evan@653
   765
#define GG_PUBDIR50_CITY "city"
Evan@653
   766
#define GG_PUBDIR50_GENDER "gender"
Evan@653
   767
#define GG_PUBDIR50_GENDER_FEMALE "1"
Evan@653
   768
#define GG_PUBDIR50_GENDER_MALE "2"
Evan@653
   769
#define GG_PUBDIR50_GENDER_SET_FEMALE "2"
Evan@653
   770
#define GG_PUBDIR50_GENDER_SET_MALE "1"
Evan@653
   771
#define GG_PUBDIR50_ACTIVE "ActiveOnly"
Evan@653
   772
#define GG_PUBDIR50_ACTIVE_TRUE "1"
Evan@653
   773
#define GG_PUBDIR50_START "fmstart"
Evan@653
   774
#define GG_PUBDIR50_FAMILYNAME "familyname"
Evan@653
   775
#define GG_PUBDIR50_FAMILYCITY "familycity"
Evan@653
   776
Evan@653
   777
int gg_pubdir50_handle_reply(struct gg_event *e, const char *packet, int length);
Evan@653
   778
Evan@653
   779
/*
Evan@653
   780
 * struct gg_pubdir
Evan@653
   781
 *
Evan@653
   782
 * operacje na katalogu publicznym.
Evan@653
   783
 */
Evan@653
   784
struct gg_pubdir {
Evan@653
   785
	int success;		/* czy si�da�o */
Evan@653
   786
	uin_t uin;		/* otrzymany numerek. 0 je�li b��d */
Evan@653
   787
};
Evan@653
   788
Evan@653
   789
/* og� funkcje, nie powinny by��ywane */
Evan@653
   790
int gg_pubdir_watch_fd(struct gg_http *f);
Evan@653
   791
void gg_pubdir_free(struct gg_http *f);
Evan@653
   792
#define gg_free_pubdir gg_pubdir_free
Evan@653
   793
Evan@653
   794
struct gg_token {
Evan@653
   795
	int width;		/* szeroko��brazka */
Evan@653
   796
	int height;		/* wysoko��brazka */
Evan@653
   797
	int length;		/* ilo��nak� tokenie */
Evan@653
   798
	char *tokenid;		/* id tokenu */
Evan@653
   799
};
Evan@653
   800
Evan@653
   801
/* funkcje dotycz�ce token�/
Evan@653
   802
struct gg_http *gg_token(int async);
Evan@653
   803
int gg_token_watch_fd(struct gg_http *h);
Evan@653
   804
void gg_token_free(struct gg_http *h);
Evan@653
   805
Evan@653
   806
/* rejestracja nowego numerka */
Evan@653
   807
struct gg_http *gg_register(const char *email, const char *password, int async);
Evan@653
   808
struct gg_http *gg_register2(const char *email, const char *password, const char *qa, int async);
Evan@653
   809
struct gg_http *gg_register3(const char *email, const char *password, const char *tokenid, const char *tokenval, int async);
Evan@653
   810
#define gg_register_watch_fd gg_pubdir_watch_fd
Evan@653
   811
#define gg_register_free gg_pubdir_free
Evan@653
   812
#define gg_free_register gg_pubdir_free
Evan@653
   813
Evan@653
   814
struct gg_http *gg_unregister(uin_t uin, const char *password, const char *email, int async);
Evan@653
   815
struct gg_http *gg_unregister2(uin_t uin, const char *password, const char *qa, int async);
Evan@653
   816
struct gg_http *gg_unregister3(uin_t uin, const char *password, const char *tokenid, const char *tokenval, int async);
Evan@653
   817
#define gg_unregister_watch_fd gg_pubdir_watch_fd
Evan@653
   818
#define gg_unregister_free gg_pubdir_free
Evan@653
   819
Evan@653
   820
/* przypomnienie has�a e-mailem */
Evan@653
   821
struct gg_http *gg_remind_passwd(uin_t uin, int async);
Evan@653
   822
struct gg_http *gg_remind_passwd2(uin_t uin, const char *tokenid, const char *tokenval, int async);
Evan@653
   823
struct gg_http *gg_remind_passwd3(uin_t uin, const char *email, const char *tokenid, const char *tokenval, int async);
Evan@653
   824
#define gg_remind_passwd_watch_fd gg_pubdir_watch_fd
Evan@653
   825
#define gg_remind_passwd_free gg_pubdir_free
Evan@653
   826
#define gg_free_remind_passwd gg_pubdir_free
Evan@653
   827
Evan@653
   828
/* zmiana has�a */
Evan@653
   829
struct gg_http *gg_change_passwd(uin_t uin, const char *passwd, const char *newpasswd, const char *newemail, int async);
Evan@653
   830
struct gg_http *gg_change_passwd2(uin_t uin, const char *passwd, const char *newpasswd, const char *email, const char *newemail, int async);
Evan@653
   831
struct gg_http *gg_change_passwd3(uin_t uin, const char *passwd, const char *newpasswd, const char *qa, int async);
Evan@653
   832
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);
Evan@653
   833
#define gg_change_passwd_free gg_pubdir_free
Evan@653
   834
#define gg_free_change_passwd gg_pubdir_free
Evan@653
   835
Evan@653
   836
/*
Evan@653
   837
 * struct gg_change_info_request
Evan@653
   838
 *
Evan@653
   839
 * opis ��dania zmiany informacji w katalogu publicznym.
Evan@653
   840
 */
Evan@653
   841
struct gg_change_info_request {
Evan@653
   842
	char *first_name;	/* imi�/
Evan@653
   843
	char *last_name;	/* nazwisko */
Evan@653
   844
	char *nickname;		/* pseudonim */
Evan@653
   845
	char *email;		/* email */
Evan@653
   846
	int born;		/* rok urodzenia */
Evan@653
   847
	int gender;		/* p�e�/
Evan@653
   848
	char *city;		/* miasto */
Evan@653
   849
};
Evan@653
   850
Evan@653
   851
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);
Evan@653
   852
void gg_change_info_request_free(struct gg_change_info_request *r);
Evan@653
   853
Evan@653
   854
struct gg_http *gg_change_info(uin_t uin, const char *passwd, const struct gg_change_info_request *request, int async);
Evan@653
   855
#define gg_change_pubdir_watch_fd gg_pubdir_watch_fd
Evan@653
   856
#define gg_change_pubdir_free gg_pubdir_free
Evan@653
   857
#define gg_free_change_pubdir gg_pubdir_free
Evan@653
   858
Evan@653
   859
/*
Evan@653
   860
 * funkcje dotycz�ce listy kontakt�a serwerze.
Evan@653
   861
 */
Evan@653
   862
struct gg_http *gg_userlist_get(uin_t uin, const char *password, int async);
Evan@653
   863
int gg_userlist_get_watch_fd(struct gg_http *f);
Evan@653
   864
void gg_userlist_get_free(struct gg_http *f);
Evan@653
   865
Evan@653
   866
struct gg_http *gg_userlist_put(uin_t uin, const char *password, const char *contacts, int async);
Evan@653
   867
int gg_userlist_put_watch_fd(struct gg_http *f);
Evan@653
   868
void gg_userlist_put_free(struct gg_http *f);
Evan@653
   869
Evan@653
   870
struct gg_http *gg_userlist_remove(uin_t uin, const char *password, int async);
Evan@653
   871
int gg_userlist_remove_watch_fd(struct gg_http *f);
Evan@653
   872
void gg_userlist_remove_free(struct gg_http *f);
Evan@653
   873
Evan@653
   874
Evan@653
   875
Evan@653
   876
/*
Evan@653
   877
 * funkcje dotycz�ce komunikacji mi�y klientami.
Evan@653
   878
 */
Evan@653
   879
extern int gg_dcc_port;			/* port, na kt� nas�uchuje klient */
Evan@653
   880
extern unsigned long gg_dcc_ip;		/* adres, na kt� nas�uchuje klient */
Evan@653
   881
Evan@653
   882
int gg_dcc_request(struct gg_session *sess, uin_t uin);
Evan@653
   883
Evan@653
   884
struct gg_dcc *gg_dcc_send_file(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin);
Evan@653
   885
struct gg_dcc *gg_dcc_get_file(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin);
Evan@653
   886
struct gg_dcc *gg_dcc_voice_chat(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin);
Evan@653
   887
void gg_dcc_set_type(struct gg_dcc *d, int type);
Evan@653
   888
int gg_dcc_fill_file_info(struct gg_dcc *d, const char *filename);
Evan@653
   889
int gg_dcc_fill_file_info2(struct gg_dcc *d, const char *filename, const char *local_filename);
Evan@653
   890
int gg_dcc_voice_send(struct gg_dcc *d, char *buf, int length);
Evan@653
   891
Evan@653
   892
#define GG_DCC_VOICE_FRAME_LENGTH 195
Evan@653
   893
#define GG_DCC_VOICE_FRAME_LENGTH_505 326
Evan@653
   894
Evan@653
   895
struct gg_dcc *gg_dcc_socket_create(uin_t uin, uint16_t port);
Evan@653
   896
#define gg_dcc_socket_free gg_free_dcc
Evan@653
   897
#define gg_dcc_socket_watch_fd gg_dcc_watch_fd
Evan@653
   898
Evan@653
   899
struct gg_event *gg_dcc_watch_fd(struct gg_dcc *d);
Evan@653
   900
Evan@653
   901
void gg_dcc_free(struct gg_dcc *c);
Evan@653
   902
#define gg_free_dcc gg_dcc_free
Evan@653
   903
Evan@653
   904
/*
Evan@653
   905
 * je�li chcemy sobie podebugowa�wystarczy ustawi�gg_debug_level'.
Evan@653
   906
 * niestety w miar�rzybywania wpis�gg_debug(...)' nie chcia�o mi
Evan@653
   907
 * si�stawia�dpowiednich leveli, wi�wi�zo��z�a do _MISC.
Evan@653
   908
 */
Evan@653
   909
extern int gg_debug_level;	/* poziom debugowania. mapa bitowa sta�ych GG_DEBUG_* */
Evan@653
   910
Evan@653
   911
/*
Evan@653
   912
 * mo�na poda�ska�nik do funkcji obs�uguj�cej wywo�ania gg_debug().
Evan@653
   913
 * nieoficjalne, nieudokumentowane, mo�e si�mieni�je�li kto� jest
Evan@653
   914
 * zainteresowany, niech da zna�a ekg-devel.
Evan@653
   915
 */
Evan@653
   916
extern void (*gg_debug_handler)(int level, const char *format, va_list ap);
Evan@653
   917
extern void (*gg_debug_handler_session)(struct gg_session *sess, int level, const char *format, va_list ap);
Evan@653
   918
Evan@653
   919
/*
Evan@653
   920
 * mo�na poda�lik, do kt�o b� zapisywane teksty z gg_debug().
Evan@653
   921
 */
Evan@653
   922
extern FILE *gg_debug_file;
Evan@653
   923
Evan@653
   924
#define GG_DEBUG_NET 1
Evan@653
   925
#define GG_DEBUG_TRAFFIC 2
Evan@653
   926
#define GG_DEBUG_DUMP 4
Evan@653
   927
#define GG_DEBUG_FUNCTION 8
Evan@653
   928
#define GG_DEBUG_MISC 16
Evan@653
   929
Evan@653
   930
#ifdef GG_DEBUG_DISABLE
Evan@653
   931
#define gg_debug(x, y...) do { } while(0)
Evan@653
   932
#define gg_debug_session(z, x, y...) do { } while(0)
Evan@653
   933
#else
Evan@653
   934
void gg_debug(int level, const char *format, ...);
Evan@653
   935
void gg_debug_session(struct gg_session *sess, int level, const char *format, ...);
Evan@653
   936
#endif
Evan@653
   937
Evan@653
   938
const char *gg_libgadu_version(void);
Evan@653
   939
Evan@653
   940
/*
Evan@653
   941
 * konfiguracja http proxy.
Evan@653
   942
 */
Evan@653
   943
extern int gg_proxy_enabled;		/* w��cza obs�ug�roxy */
Evan@653
   944
extern char *gg_proxy_host;		/* okre�la adres serwera proxy */
Evan@653
   945
extern int gg_proxy_port;		/* okre�la port serwera proxy */
Evan@653
   946
extern char *gg_proxy_username;		/* okre�la nazw��ytkownika przy autoryzacji serwera proxy */
Evan@653
   947
extern char *gg_proxy_password;		/* okre�la has�o u�ytkownika przy autoryzacji serwera proxy */
Evan@653
   948
extern int gg_proxy_http_only;		/* w��cza obs�ug�roxy wy��cznie dla us�ug HTTP */
Evan@653
   949
Evan@653
   950
Evan@653
   951
/*
Evan@653
   952
 * adres, z kt�o �lemy pakiety (np ��czymy si� serwerem)
Evan@653
   953
 * u�ywany przy gg_connect()
Evan@653
   954
 */
Evan@653
   955
extern unsigned long gg_local_ip;
Evan@653
   956
/*
Evan@653
   957
 * -------------------------------------------------------------------------
Evan@653
   958
 * poni�ej znajduj� si�ewn�zne sprawy biblioteki. zwyk�y klient nie
Evan@653
   959
 * powinien ich w og�rusza�bo i nie ma po co. wszystko mo�na za�atwi�* procedurami wy�szego poziomu, kt�h definicje znajduj� si�a pocz�tku
Evan@653
   960
 * tego pliku.
Evan@653
   961
 * -------------------------------------------------------------------------
Evan@653
   962
 */
Evan@653
   963
Evan@653
   964
#ifdef GG_CONFIG_HAVE_PTHREAD
Evan@653
   965
int gg_resolve_pthread(int *fd, void **resolver, const char *hostname);
Evan@653
   966
void gg_resolve_pthread_cleanup(void *resolver, int kill);
Evan@653
   967
#endif
Evan@653
   968
Evan@653
   969
#ifdef _WIN32
Evan@653
   970
int gg_thread_socket(int thread_id, int socket);
Evan@653
   971
#endif
Evan@653
   972
Evan@653
   973
int gg_resolve(int *fd, int *pid, const char *hostname);
Evan@653
   974
Evan@653
   975
#ifdef __GNUC__
Evan@653
   976
char *gg_saprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
Evan@653
   977
#else
Evan@653
   978
char *gg_saprintf(const char *format, ...);
Evan@653
   979
#endif
Evan@653
   980
Evan@653
   981
char *gg_vsaprintf(const char *format, va_list ap);
Evan@653
   982
Evan@653
   983
#define gg_alloc_sprintf gg_saprintf
Evan@653
   984
Evan@653
   985
char *gg_get_line(char **ptr);
Evan@653
   986
Evan@653
   987
int gg_connect(void *addr, int port, int async);
Evan@653
   988
struct in_addr *gg_gethostbyname(const char *hostname);
Evan@653
   989
char *gg_read_line(int sock, char *buf, int length);
Evan@653
   990
void gg_chomp(char *line);
Evan@653
   991
char *gg_urlencode(const char *str);
Evan@653
   992
int gg_http_hash(const char *format, ...);
Evan@653
   993
int gg_read(struct gg_session *sess, char *buf, int length);
Evan@653
   994
int gg_write(struct gg_session *sess, const char *buf, int length);
Evan@653
   995
void *gg_recv_packet(struct gg_session *sess);
Evan@653
   996
int gg_send_packet(struct gg_session *sess, int type, ...);
Evan@653
   997
unsigned int gg_login_hash(const unsigned char *password, unsigned int seed);
Evan@653
   998
uint32_t gg_fix32(uint32_t x);
Evan@653
   999
uint16_t gg_fix16(uint16_t x);
Evan@653
  1000
#define fix16 gg_fix16
Evan@653
  1001
#define fix32 gg_fix32
Evan@653
  1002
char *gg_proxy_auth(void);
Evan@653
  1003
char *gg_base64_encode(const char *buf);
Evan@653
  1004
char *gg_base64_decode(const char *buf);
Evan@653
  1005
int gg_image_queue_remove(struct gg_session *s, struct gg_image_queue *q, int freeq);
Evan@653
  1006
Evan@653
  1007
#define GG_APPMSG_HOST "appmsg.gadu-gadu.pl"
Evan@653
  1008
#define GG_APPMSG_PORT 80
Evan@653
  1009
#define GG_PUBDIR_HOST "pubdir.gadu-gadu.pl"
Evan@653
  1010
#define GG_PUBDIR_PORT 80
Evan@653
  1011
#define GG_REGISTER_HOST "register.gadu-gadu.pl"
Evan@653
  1012
#define GG_REGISTER_PORT 80
Evan@653
  1013
#define GG_REMIND_HOST "retr.gadu-gadu.pl"
Evan@653
  1014
#define GG_REMIND_PORT 80
Evan@653
  1015
Evan@653
  1016
#define GG_DEFAULT_PORT 8074
Evan@653
  1017
#define GG_HTTPS_PORT 443
Evan@653
  1018
#define GG_HTTP_USERAGENT "Mozilla/4.7 [en] (Win98; I)"
Evan@653
  1019
Evan@653
  1020
#define GG_DEFAULT_CLIENT_VERSION "6, 1, 0, 158"
Evan@653
  1021
#define GG_DEFAULT_PROTOCOL_VERSION 0x24
Evan@653
  1022
#define GG_DEFAULT_TIMEOUT 30
Evan@653
  1023
#define GG_HAS_AUDIO_MASK 0x40000000
Evan@653
  1024
#define GG_ERA_OMNIX_MASK 0x04000000
Evan@653
  1025
#define GG_LIBGADU_VERSION "CVS"
Evan@653
  1026
Evan@653
  1027
#define GG_DEFAULT_DCC_PORT 1550
Evan@653
  1028
Evan@653
  1029
struct gg_header {
Evan@653
  1030
	uint32_t type;			/* typ pakietu */
Evan@653
  1031
	uint32_t length;		/* d�ugo��eszty pakietu */
Evan@653
  1032
} GG_PACKED;
Evan@653
  1033
Evan@653
  1034
#define GG_WELCOME 0x0001
Evan@653
  1035
#define GG_NEED_EMAIL 0x0014
Evan@653
  1036
Evan@653
  1037
struct gg_welcome {
Evan@653
  1038
	uint32_t key;			/* klucz szyfrowania has�a */
Evan@653
  1039
} GG_PACKED;
Evan@653
  1040
Evan@653
  1041
#define GG_LOGIN 0x000c
Evan@653
  1042
Evan@653
  1043
struct gg_login {
Evan@653
  1044
	uint32_t uin;			/* m�umerek */
Evan@653
  1045
	uint32_t hash;			/* hash has�a */
Evan@653
  1046
	uint32_t status;		/* status na dzie�bry */
Evan@653
  1047
	uint32_t version;		/* moja wersja klienta */
Evan@653
  1048
	uint32_t local_ip;		/* m�dres ip */
Evan@653
  1049
	uint16_t local_port;		/* port, na kt� s�ucham */
Evan@653
  1050
} GG_PACKED;
Evan@653
  1051
Evan@653
  1052
#define GG_LOGIN_EXT 0x0013
Evan@653
  1053
Evan@653
  1054
struct gg_login_ext {
Evan@653
  1055
	uint32_t uin;			/* m�umerek */
Evan@653
  1056
	uint32_t hash;			/* hash has�a */
Evan@653
  1057
	uint32_t status;		/* status na dzie�bry */
Evan@653
  1058
	uint32_t version;		/* moja wersja klienta */
Evan@653
  1059
	uint32_t local_ip;		/* m�dres ip */
Evan@653
  1060
	uint16_t local_port;		/* port, na kt� s�ucham */
Evan@653
  1061
	uint32_t external_ip;		/* zewn�zny adres ip */
Evan@653
  1062
	uint16_t external_port;		/* zewn�zny port */
Evan@653
  1063
} GG_PACKED;
Evan@653
  1064
Evan@653
  1065
#define GG_LOGIN60 0x0015
Evan@653
  1066
Evan@653
  1067
struct gg_login60 {
Evan@653
  1068
	uint32_t uin;			/* m�umerek */
Evan@653
  1069
	uint32_t hash;			/* hash has�a */
Evan@653
  1070
	uint32_t status;		/* status na dzie�bry */
Evan@653
  1071
	uint32_t version;		/* moja wersja klienta */
Evan@653
  1072
	uint8_t dunno1;			/* 0x00 */
Evan@653
  1073
	uint32_t local_ip;		/* m�dres ip */
Evan@653
  1074
	uint16_t local_port;		/* port, na kt� s�ucham */
Evan@653
  1075
	uint32_t external_ip;		/* zewn�zny adres ip */
Evan@653
  1076
	uint16_t external_port;		/* zewn�zny port */
Evan@653
  1077
	uint8_t image_size;		/* maksymalny rozmiar grafiki w KiB */
Evan@653
  1078
	uint8_t dunno2;			/* 0xbe */
Evan@653
  1079
} GG_PACKED;
Evan@653
  1080
Evan@653
  1081
#define GG_LOGIN_OK 0x0003
Evan@653
  1082
Evan@653
  1083
#define GG_LOGIN_FAILED 0x0009
Evan@653
  1084
Evan@653
  1085
#define GG_PUBDIR50_REQUEST 0x0014
Evan@653
  1086
Evan@653
  1087
#define GG_PUBDIR50_WRITE 0x01
Evan@653
  1088
#define GG_PUBDIR50_READ 0x02
Evan@653
  1089
#define GG_PUBDIR50_SEARCH 0x03
Evan@653
  1090
#define GG_PUBDIR50_SEARCH_REQUEST GG_PUBDIR50_SEARCH
Evan@653
  1091
#define GG_PUBDIR50_SEARCH_REPLY 0x05
Evan@653
  1092
Evan@653
  1093
struct gg_pubdir50_request {
Evan@653
  1094
	uint8_t type;			/* GG_PUBDIR50_* */
Evan@653
  1095
	uint32_t seq;			/* czas wys�ania zapytania */
Evan@653
  1096
} GG_PACKED;
Evan@653
  1097
Evan@653
  1098
#define GG_PUBDIR50_REPLY 0x000e
Evan@653
  1099
Evan@653
  1100
struct gg_pubdir50_reply {
Evan@653
  1101
	uint8_t type;			/* GG_PUBDIR50_* */
Evan@653
  1102
	uint32_t seq;			/* czas wys�ania zapytania */
Evan@653
  1103
} GG_PACKED;
Evan@653
  1104
Evan@653
  1105
#define GG_NEW_STATUS 0x0002
Evan@653
  1106
Evan@653
  1107
#define GG_STATUS_NOT_AVAIL 0x0001		/* niedost�y */
Evan@653
  1108
#define GG_STATUS_NOT_AVAIL_DESCR 0x0015	/* niedost�y z opisem (4.8) */
Evan@653
  1109
#define GG_STATUS_AVAIL 0x0002			/* dost�y */
Evan@653
  1110
#define GG_STATUS_AVAIL_DESCR 0x0004		/* dost�y z opisem (4.9) */
Evan@653
  1111
#define GG_STATUS_BUSY 0x0003			/* zaj� */
Evan@653
  1112
#define GG_STATUS_BUSY_DESCR 0x0005		/* zaj� z opisem (4.8) */
Evan@653
  1113
#define GG_STATUS_INVISIBLE 0x0014		/* niewidoczny (4.6) */
Evan@653
  1114
#define GG_STATUS_INVISIBLE_DESCR 0x0016	/* niewidoczny z opisem (4.9) */
Evan@653
  1115
#define GG_STATUS_BLOCKED 0x0006		/* zablokowany */
Evan@653
  1116
Evan@653
  1117
#define GG_STATUS_FRIENDS_MASK 0x8000		/* tylko dla znajomych (4.6) */
Evan@653
  1118
Evan@653
  1119
#define GG_STATUS_DESCR_MAXSIZE 70
Evan@653
  1120
Evan@653
  1121
/*
Evan@653
  1122
 * makra do �atwego i szybkiego sprawdzania stanu.
Evan@653
  1123
 */
Evan@653
  1124
Evan@653
  1125
/* GG_S_F() tryb tylko dla znajomych */
Evan@653
  1126
#define GG_S_F(x) (((x) & GG_STATUS_FRIENDS_MASK) != 0)
Evan@653
  1127
Evan@653
  1128
/* GG_S() stan bez uwzgl�ienia trybu tylko dla znajomych */
Evan@653
  1129
#define GG_S(x) ((x) & ~GG_STATUS_FRIENDS_MASK)
Evan@653
  1130
Evan@653
  1131
/* GG_S_A() dost�y */
Evan@653
  1132
#define GG_S_A(x) (GG_S(x) == GG_STATUS_AVAIL || GG_S(x) == GG_STATUS_AVAIL_DESCR)
Evan@653
  1133
Evan@653
  1134
/* GG_S_NA() niedost�y */
Evan@653
  1135
#define GG_S_NA(x) (GG_S(x) == GG_STATUS_NOT_AVAIL || GG_S(x) == GG_STATUS_NOT_AVAIL_DESCR)
Evan@653
  1136
Evan@653
  1137
/* GG_S_B() zaj� */
Evan@653
  1138
#define GG_S_B(x) (GG_S(x) == GG_STATUS_BUSY || GG_S(x) == GG_STATUS_BUSY_DESCR)
Evan@653
  1139
Evan@653
  1140
/* GG_S_I() niewidoczny */
Evan@653
  1141
#define GG_S_I(x) (GG_S(x) == GG_STATUS_INVISIBLE || GG_S(x) == GG_STATUS_INVISIBLE_DESCR)
Evan@653
  1142
Evan@653
  1143
/* GG_S_D() stan opisowy */
Evan@653
  1144
#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)
Evan@653
  1145
Evan@653
  1146
/* GG_S_BL() blokowany lub blokuj�cy */
Evan@653
  1147
#define GG_S_BL(x) (GG_S(x) == GG_STATUS_BLOCKED)
Evan@653
  1148
Evan@653
  1149
struct gg_new_status {
Evan@653
  1150
	uint32_t status;			/* na jaki zmieni�*/
Evan@653
  1151
} GG_PACKED;
Evan@653
  1152
Evan@653
  1153
#define GG_NOTIFY_FIRST 0x000f
Evan@653
  1154
#define GG_NOTIFY_LAST 0x0010
Evan@653
  1155
Evan@653
  1156
#define GG_NOTIFY 0x0010
Evan@653
  1157
Evan@653
  1158
struct gg_notify {
Evan@653
  1159
	uint32_t uin;				/* numerek danej osoby */
Evan@653
  1160
	uint8_t dunno1;				/* rodzaj wpisu w li�cie */
Evan@653
  1161
} GG_PACKED;
Evan@653
  1162
Evan@653
  1163
#define GG_USER_OFFLINE 0x01	/* b�iemy niewidoczni dla u�ytkownika */
Evan@653
  1164
#define GG_USER_NORMAL 0x03	/* zwyk�y u�ytkownik */
Evan@653
  1165
#define GG_USER_BLOCKED 0x04	/* zablokowany u�ytkownik */
Evan@653
  1166
Evan@653
  1167
#define GG_LIST_EMPTY 0x0012
Evan@653
  1168
Evan@653
  1169
#define GG_NOTIFY_REPLY 0x000c	/* tak, to samo co GG_LOGIN */
Evan@653
  1170
Evan@653
  1171
struct gg_notify_reply {
Evan@653
  1172
	uint32_t uin;			/* numerek */
Evan@653
  1173
	uint32_t status;		/* status danej osoby */
Evan@653
  1174
	uint32_t remote_ip;		/* adres ip delikwenta */
Evan@653
  1175
	uint16_t remote_port;		/* port, na kt� s�ucha klient */
Evan@653
  1176
	uint32_t version;		/* wersja klienta */
Evan@653
  1177
	uint16_t dunno2;		/* znowu port? */
Evan@653
  1178
} GG_PACKED;
Evan@653
  1179
Evan@653
  1180
#define GG_NOTIFY_REPLY60 0x0011
Evan@653
  1181
Evan@653
  1182
struct gg_notify_reply60 {
Evan@653
  1183
	uint32_t uin;			/* numerek plus flagi w MSB */
Evan@653
  1184
	uint8_t status;			/* status danej osoby */
Evan@653
  1185
	uint32_t remote_ip;		/* adres ip delikwenta */
Evan@653
  1186
	uint16_t remote_port;		/* port, na kt� s�ucha klient */
Evan@653
  1187
	uint8_t version;		/* wersja klienta */
Evan@653
  1188
	uint8_t image_size;		/* maksymalny rozmiar grafiki w KiB */
Evan@653
  1189
	uint8_t dunno1;			/* 0x00 */
Evan@653
  1190
} GG_PACKED;
Evan@653
  1191
Evan@653
  1192
#define GG_STATUS60 0x000f
Evan@653
  1193
Evan@653
  1194
struct gg_status60 {
Evan@653
  1195
	uint32_t uin;			/* numerek plus flagi w MSB */
Evan@653
  1196
	uint8_t status;			/* status danej osoby */
Evan@653
  1197
	uint32_t remote_ip;		/* adres ip delikwenta */
Evan@653
  1198
	uint16_t remote_port;		/* port, na kt� s�ucha klient */
Evan@653
  1199
	uint8_t version;		/* wersja klienta */
Evan@653
  1200
	uint8_t image_size;		/* maksymalny rozmiar grafiki w KiB */
Evan@653
  1201
	uint8_t dunno1;			/* 0x00 */
Evan@653
  1202
} GG_PACKED;
Evan@653
  1203
Evan@653
  1204
#define GG_ADD_NOTIFY 0x000d
Evan@653
  1205
#define GG_REMOVE_NOTIFY 0x000e
Evan@653
  1206
Evan@653
  1207
struct gg_add_remove {
Evan@653
  1208
	uint32_t uin;			/* numerek */
Evan@653
  1209
	uint8_t dunno1;			/* bitmapa */
Evan@653
  1210
} GG_PACKED;
Evan@653
  1211
Evan@653
  1212
#define GG_STATUS 0x0002
Evan@653
  1213
Evan@653
  1214
struct gg_status {
Evan@653
  1215
	uint32_t uin;			/* numerek */
Evan@653
  1216
	uint32_t status;		/* nowy stan */
Evan@653
  1217
} GG_PACKED;
Evan@653
  1218
Evan@653
  1219
#define GG_SEND_MSG 0x000b
Evan@653
  1220
Evan@653
  1221
#define GG_CLASS_QUEUED 0x0001
Evan@653
  1222
#define GG_CLASS_OFFLINE GG_CLASS_QUEUED
Evan@653
  1223
#define GG_CLASS_MSG 0x0004
Evan@653
  1224
#define GG_CLASS_CHAT 0x0008
Evan@653
  1225
#define GG_CLASS_CTCP 0x0010
Evan@653
  1226
#define GG_CLASS_ACK 0x0020
Evan@653
  1227
#define GG_CLASS_EXT GG_CLASS_ACK	/* kompatybilno��stecz */
Evan@653
  1228
Evan@653
  1229
#define GG_MSG_MAXSIZE 2000
Evan@653
  1230
Evan@653
  1231
struct gg_send_msg {
Evan@653
  1232
	uint32_t recipient;
Evan@653
  1233
	uint32_t seq;
Evan@653
  1234
	uint32_t msgclass;
Evan@653
  1235
} GG_PACKED;
Evan@653
  1236
Evan@653
  1237
struct gg_msg_richtext {
Evan@653
  1238
	uint8_t flag;
Evan@653
  1239
	uint16_t length;
Evan@653
  1240
} GG_PACKED;
Evan@653
  1241
Evan@653
  1242
struct gg_msg_richtext_format {
Evan@653
  1243
	uint16_t position;
Evan@653
  1244
	uint8_t font;
Evan@653
  1245
} GG_PACKED;
Evan@653
  1246
Evan@653
  1247
struct gg_msg_richtext_image {
Evan@653
  1248
	uint16_t unknown1;
Evan@653
  1249
	uint32_t size;
Evan@653
  1250
	uint32_t crc32;
Evan@653
  1251
} GG_PACKED;
Evan@653
  1252
Evan@653
  1253
#define GG_FONT_BOLD 0x01
Evan@653
  1254
#define GG_FONT_ITALIC 0x02
Evan@653
  1255
#define GG_FONT_UNDERLINE 0x04
Evan@653
  1256
#define GG_FONT_COLOR 0x08
Evan@653
  1257
#define GG_FONT_IMAGE 0x80
Evan@653
  1258
Evan@653
  1259
struct gg_msg_richtext_color {
Evan@653
  1260
	uint8_t red;
Evan@653
  1261
	uint8_t green;
Evan@653
  1262
	uint8_t blue;
Evan@653
  1263
} GG_PACKED;
Evan@653
  1264
Evan@653
  1265
struct gg_msg_recipients {
Evan@653
  1266
	uint8_t flag;
Evan@653
  1267
	uint32_t count;
Evan@653
  1268
} GG_PACKED;
Evan@653
  1269
Evan@653
  1270
struct gg_msg_image_request {
Evan@653
  1271
	uint8_t flag;
Evan@653
  1272
	uint32_t size;
Evan@653
  1273
	uint32_t crc32;
Evan@653
  1274
} GG_PACKED;
Evan@653
  1275
Evan@653
  1276
struct gg_msg_image_reply {
Evan@653
  1277
	uint8_t flag;
Evan@653
  1278
	uint32_t size;
Evan@653
  1279
	uint32_t crc32;
Evan@653
  1280
	/* char filename[]; */
Evan@653
  1281
	/* char image[]; */
Evan@653
  1282
} GG_PACKED;
Evan@653
  1283
Evan@653
  1284
#define GG_SEND_MSG_ACK 0x0005
Evan@653
  1285
Evan@653
  1286
#define GG_ACK_BLOCKED 0x0001
Evan@653
  1287
#define GG_ACK_DELIVERED 0x0002
Evan@653
  1288
#define GG_ACK_QUEUED 0x0003
Evan@653
  1289
#define GG_ACK_MBOXFULL 0x0004
Evan@653
  1290
#define GG_ACK_NOT_DELIVERED 0x0006
Evan@653
  1291
Evan@653
  1292
struct gg_send_msg_ack {
Evan@653
  1293
	uint32_t status;
Evan@653
  1294
	uint32_t recipient;
Evan@653
  1295
	uint32_t seq;
Evan@653
  1296
} GG_PACKED;
Evan@653
  1297
Evan@653
  1298
#define GG_RECV_MSG 0x000a
Evan@653
  1299
Evan@653
  1300
struct gg_recv_msg {
Evan@653
  1301
	uint32_t sender;
Evan@653
  1302
	uint32_t seq;
Evan@653
  1303
	uint32_t time;
Evan@653
  1304
	uint32_t msgclass;
Evan@653
  1305
} GG_PACKED;
Evan@653
  1306
Evan@653
  1307
#define GG_PING 0x0008
Evan@653
  1308
Evan@653
  1309
#define GG_PONG 0x0007
Evan@653
  1310
Evan@653
  1311
#define GG_DISCONNECTING 0x000b
Evan@653
  1312
Evan@653
  1313
#define GG_USERLIST_REQUEST 0x0016
Evan@653
  1314
Evan@653
  1315
#define GG_USERLIST_PUT 0x00
Evan@653
  1316
#define GG_USERLIST_PUT_MORE 0x01
Evan@653
  1317
#define GG_USERLIST_GET 0x02
Evan@653
  1318
Evan@653
  1319
struct gg_userlist_request {
Evan@653
  1320
	uint8_t type;
Evan@653
  1321
} GG_PACKED;
Evan@653
  1322
Evan@653
  1323
#define GG_USERLIST_REPLY 0x0010
Evan@653
  1324
Evan@653
  1325
#define GG_USERLIST_PUT_REPLY 0x00
Evan@653
  1326
#define GG_USERLIST_PUT_MORE_REPLY 0x02
Evan@653
  1327
#define GG_USERLIST_GET_REPLY 0x06
Evan@653
  1328
#define GG_USERLIST_GET_MORE_REPLY 0x04
Evan@653
  1329
Evan@653
  1330
struct gg_userlist_reply {
Evan@653
  1331
	uint8_t type;
Evan@653
  1332
} GG_PACKED;
Evan@653
  1333
Evan@653
  1334
/*
Evan@653
  1335
 * pakiety, sta�e, struktury dla DCC
Evan@653
  1336
 */
Evan@653
  1337
Evan@653
  1338
struct gg_dcc_tiny_packet {
Evan@653
  1339
	uint8_t type;		/* rodzaj pakietu */
Evan@653
  1340
} GG_PACKED;
Evan@653
  1341
Evan@653
  1342
struct gg_dcc_small_packet {
Evan@653
  1343
	uint32_t type;		/* rodzaj pakietu */
Evan@653
  1344
} GG_PACKED;
Evan@653
  1345
Evan@653
  1346
struct gg_dcc_big_packet {
Evan@653
  1347
	uint32_t type;		/* rodzaj pakietu */
Evan@653
  1348
	uint32_t dunno1;		/* niewiadoma */
Evan@653
  1349
	uint32_t dunno2;		/* niewiadoma */
Evan@653
  1350
} GG_PACKED;
Evan@653
  1351
Evan@653
  1352
/*
Evan@653
  1353
 * p�co, nie znamy dok�adnie protoko�u. nie wiemy, co czemu odpowiada.
Evan@653
  1354
 * nazwy s� niepowa�ne i tymczasowe.
Evan@653
  1355
 */
Evan@653
  1356
#define GG_DCC_WANT_FILE 0x0003		/* peer chce plik */
Evan@653
  1357
#define GG_DCC_HAVE_FILE 0x0001		/* wi�mu damy */
Evan@653
  1358
#define GG_DCC_HAVE_FILEINFO 0x0003	/* niech ma informacje o pliku */
Evan@653
  1359
#define GG_DCC_GIMME_FILE 0x0006	/* peer jest pewny */
Evan@653
  1360
#define GG_DCC_CATCH_FILE 0x0002	/* wysy�amy plik */
Evan@653
  1361
Evan@653
  1362
#define GG_DCC_FILEATTR_READONLY 0x0020
Evan@653
  1363
Evan@653
  1364
#define GG_DCC_TIMEOUT_SEND 1800	/* 30 minut */
Evan@653
  1365
#define GG_DCC_TIMEOUT_GET 1800		/* 30 minut */
Evan@653
  1366
#define GG_DCC_TIMEOUT_FILE_ACK 300	/* 5 minut */
Evan@653
  1367
#define GG_DCC_TIMEOUT_VOICE_ACK 300	/* 5 minut */
Evan@653
  1368
Evan@653
  1369
#ifdef __cplusplus
Evan@653
  1370
}
Evan@653
  1371
#ifdef _WIN32
Evan@653
  1372
#pragma pack(pop)
Evan@653
  1373
#endif
Evan@653
  1374
#endif
Evan@653
  1375
Evan@653
  1376
#endif /* __GG_LIBGADU_H */
Evan@653
  1377
Evan@653
  1378
/*
Evan@653
  1379
 * Local variables:
Evan@653
  1380
 * c-indentation-style: k&r
Evan@653
  1381
 * c-basic-offset: 8
Evan@653
  1382
 * indent-tabs-mode: notnil
Evan@653
  1383
 * End:
Evan@653
  1384
 *
Evan@653
  1385
 * vim: shiftwidth=8:
Evan@653
  1386
 */
Evan@653
  1387
Evan@653
  1388
Evan@653
  1389
Evan@653
  1390
Evan@653
  1391
Evan@653
  1392
Evan@653
  1393