ekg2
plugins/icq/misc.h
Idź do dokumentacji tego pliku.
00001 #ifndef __ICQ_MISC_H
00002 #define __ICQ_MISC_H
00003 
00004 #include <stdint.h>
00005 
00006 #include <ekg/dynstuff.h>
00007 
00008 typedef struct icq_tlv_list {
00009         struct icq_tlv_list *next;
00010 
00011         uint16_t type;
00012         uint16_t len;
00013 
00014         uint32_t nr;
00015         unsigned char *buf;
00016 } icq_tlv_t;
00017 
00018 struct fieldnames_t {
00019         int code;
00020         char *text;
00021 };
00022 
00023 extern struct fieldnames_t snac_families[];
00024 
00025 /* pack, unpack */
00026 int icq_unpack(unsigned char *buf, unsigned char **endbuf, int *l, char *format, ...);
00027 int icq_unpack_nc(unsigned char *buf, int len, char *format, ...);
00028 #define icq_unpack_tlv_word(tlv, val) \
00029         do {                                                                            \
00030                 val = 0;                                                                \
00031                 icq_unpack_nc(tlv ? tlv->buf : NULL, tlv ? tlv->len : 0, "W", &val);    \
00032         } while(0);
00033 
00034 
00035 string_t icq_pack(char *format, ...);
00036 string_t icq_pack_append(string_t str, char *format, ...);
00037 
00038 #define icq_pack_tlv(type, data, datalen)       (uint32_t) type, (uint32_t) datalen, (uint8_t *) data
00039 #define icq_pack_tlv_char(type, data)           (uint32_t) type, (uint32_t) 1, (uint32_t) data
00040 #define icq_pack_tlv_word(type, data)           (uint32_t) type, (uint32_t) 2, (uint32_t) data
00041 #define icq_pack_tlv_dword(type, data)          (uint32_t) type, (uint32_t) 4, (uint32_t) data
00042 #define icq_pack_tlv_str(type, str)             icq_pack_tlv(type, str, xstrlen(str))
00043 
00044 struct icq_tlv_list *icq_unpack_tlvs(unsigned char **str, int *maxlen, unsigned int maxcount);
00045 struct icq_tlv_list *icq_unpack_tlvs_nc(unsigned char *str, int maxlen, unsigned int maxcount);
00046 icq_tlv_t *icq_tlv_get(struct icq_tlv_list *l, uint16_t type);
00047 void icq_tlvs_destroy(struct icq_tlv_list **list);
00048 
00049 void icq_hexdump(int level, unsigned char *p, size_t len);
00050 char *icq_encryptpw(const char *pw);
00051 uint16_t icq_status(int status);
00052 
00053 #define ICQ_UNPACK(endbuf, args...) (icq_unpack(buf, endbuf, &len, args))
00054 
00055 status_t icq2ekg_status(int icq_status);
00056 status_t icq2ekg_status2(int nMsgType);
00057 
00058 /* misc */
00059 int tlv_length_check(char *name, icq_tlv_t *t, int length);
00060 
00061 #define ICQ_SNAC_NAMES_DEBUG 1
00062 
00063 #if ICQ_SNAC_NAMES_DEBUG
00064 const char *icq_snac_name(int family, int cmd);
00065 #endif
00066 
00067 const char *icq_lookuptable(struct fieldnames_t *table, int code);
00068 
00069 void icq_pack_append_client_identification(string_t pkt);
00070 
00071 void icq_convert_string_init();
00072 void icq_convert_string_destroy();
00073 
00074 char *icq_convert_from_ucs2be(char *buf, int len);
00075 string_t icq_convert_to_ucs2be(char *text);
00076 char *icq_convert_from_utf8(char *text);
00077 
00078 void icq_send_snac(session_t *s, uint16_t family, uint16_t cmd, private_data_t *data, snac_subhandler_t subhandler, char *format, ...);
00079 
00080 void icq_rates_destroy(session_t *s);
00081 void icq_rates_init(session_t *s, int n_rates);
00082 
00083 #endif
 All Struktury Danych Pliki Funkcje Zmienne Definicje typów Wyliczenia Wartości wyliczeń Definicje