ekg2
|
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