micq.h
上传用户:ai20ln
上传日期:2007-01-05
资源大小:79k
文件大小:12k
源码类别:

ICQ/即时通讯

开发平台:

Unix_Linux

  1. /*********************************************
  2. **********************************************
  3. Header file for ICQ protocol structres and
  4. constants
  5. This software is provided AS IS to be used in
  6. whatever way you see fit and is placed in the
  7. public domain.
  8. Author : Matthew Smith April 19, 1998
  9. Contributors : None yet
  10. Changes :
  11.    4-21-98 Increase the size of data associtated
  12.             with the packets to enable longer messages. mds
  13.    4-22-98 Added function prototypes and extern variables mds
  14.    4-22-98 Added SRV_GO_AWAY code for bad passwords etc.
  15. **********************************************
  16. **********************************************/
  17. #define MICQ_VERSION "0.3.3t"
  18. #include "datatype.h"
  19. #include <stdlib.h>
  20. /*********  Leeched from Xicq :) xtrophy@it.dk ********/
  21. /*********  changed to use escape codes like you should :) ***/
  22. /*********  changed colors ***********************************/
  23. #ifdef ANSI_COLOR
  24. /* Last 2 digit number selects the color */
  25. /* Experiment and let me know if you come up with */
  26. /* A better scheme */
  27.    #define SERVCOL         "x1B[0;31m"
  28.    #define MESSCOL         "x1B[1;34m"
  29.    #define CONTACTCOL      "x1B[1;35m"
  30.    #define CLIENTCOL       "x1B[0;32m"
  31.    #define NOCOL           "x1B[0m"
  32. #else
  33.    #define SERVCOL         ""
  34.    #define MESSCOL         ""
  35.    #define CONTACTCOL      ""
  36.    #define CLIENTCOL       ""
  37.    #define NOCOL           ""
  38. #endif
  39. #define SOUND_ON 1
  40. #define SOUND_OFF 0
  41. #define SOUND_CMD 2
  42. #define ICQ_VER 0x0004
  43. #define STDIN 0
  44. #define STDOUT 1
  45. #define STDERR 2
  46. #if ICQ_VER == 0x0004
  47.    typedef struct
  48.    {
  49.       BYTE dummy[2]; /* to fix alignment problem */
  50.       BYTE ver[2];
  51.       BYTE rand[2];
  52.       BYTE zero[2];
  53.       BYTE cmd[2];
  54.       BYTE seq[2];
  55.       BYTE seq2[2];
  56.       BYTE  UIN[4];
  57.       BYTE checkcode[4];
  58.    } ICQ_pak, *ICQ_PAK_PTR;
  59.    typedef struct
  60.    {
  61.       WORD dummy; /* to fix alignment problem */
  62.       BYTE ver[2];
  63.       BYTE cmd[2];
  64.       BYTE seq[2];
  65.       BYTE seq2[2];
  66.       BYTE UIN[4];
  67.       BYTE check[4];
  68.    } SRV_ICQ_pak, *SRV_ICQ_PAK_PTR;
  69. #else /* ICQ_VER */
  70.    typedef struct
  71.    {
  72.       WORD dummy; /* to fix alignment problem */
  73.       BYTE ver[2];
  74.       BYTE cmd[2];
  75.       BYTE seq[2];
  76.       BYTE  UIN[4];
  77.    } ICQ_pak, *ICQ_PAK_PTR;
  78.    typedef struct
  79.    {
  80.       WORD dummy; /* to fix alignment problem */
  81.       BYTE ver[2];
  82.       BYTE cmd[2];
  83.       BYTE seq[2];
  84.    } SRV_ICQ_pak, *SRV_ICQ_PAK_PTR;
  85. #endif  /* ICQ_VER */
  86. typedef struct
  87. {
  88.    ICQ_pak  head;
  89.    unsigned char  data[1024];
  90. } net_icq_pak, *NET_ICQ_PTR;
  91. typedef struct
  92. {
  93.    SRV_ICQ_pak  head;
  94.    unsigned char  data[1024];
  95. } srv_net_icq_pak, *SRV_NET_ICQ_PTR;
  96. #define CMD_ACK               0x000A 
  97. #define CMD_SENDM             0x010E
  98. #define CMD_LOGIN             0x03E8
  99. #define CMD_CONT_LIST         0x0406
  100. #define CMD_SEARCH_UIN        0x041a
  101. #define CMD_SEARCH_USER       0x0424
  102. #define CMD_KEEP_ALIVE        0x042e
  103. #define CMD_KEEP_ALIVE2       0x051e
  104. #define CMD_SEND_TEXT_CODE    0x0438
  105. #define CMD_LOGIN_1           0x044c
  106. #define CMD_INFO_REQ          0x0460
  107. #define CMD_EXT_INFO_REQ      0x046a
  108. #define CMD_CHANGE_PW         0x049c
  109. #define CMD_STATUS_CHANGE     0x04d8
  110. #define CMD_LOGIN_2           0x0528
  111. #define CMD_UPDATE_INFO       0x050A
  112. #define CMD_UPDATE_EXT_INFO   0X04B0
  113. #define CMD_ADD_TO_LIST       0X053C
  114. #define CMD_REQ_ADD_LIST      0X0456
  115. #define CMD_QUERY_SERVERS     0X04BA
  116. #define CMD_QUERY_ADDONS      0X04C4
  117. #define CMD_NEW_USER_1        0X04EC
  118. #define CMD_NEW_USER_INFO     0x04A6
  119. #define CMD_ACK_MESSAGES      0x0442
  120. #define CMD_MSG_TO_NEW_USER   0x0456
  121. #define CMD_REG_NEW_USER      0x03FC
  122. #define CMD_VIS_LIST          0x06AE
  123. #define CMD_INVIS_LIST        0x06A4
  124. #define CMD_META_USER         0x064A
  125. #define CMD_RAND_SEARCH       0x056E
  126. #define CMD_RAND_SET          0x0564
  127. #define CMD_AUTH_UPDATE       0x0514
  128. #define SRV_ACK            0x000A
  129. #define SRV_LOGIN_REPLY    0x005A
  130. #define SRV_USER_ONLINE    0x006E
  131. #define SRV_USER_OFFLINE   0x0078
  132. #define SRV_USER_FOUND     0x008C
  133. #define SRV_RECV_MESSAGE   0x00DC
  134. #define SRV_END_OF_SEARCH  0x00A0
  135. #define SRV_INFO_REPLY     0x0118
  136. #define SRV_EXT_INFO_REPLY 0x0122
  137. #define SRV_STATUS_UPDATE  0x01A4
  138. #define SRV_X1             0x021C
  139. #define SRV_X2             0x00E6
  140. #define SRV_UPDATE_EXT     0x00C8
  141. #define SRV_NEW_UIN        0x0046
  142. #define SRV_NEW_USER       0x00B4
  143. #define SRV_QUERY          0x0082
  144. #define SRV_SYSTEM_MESSAGE 0x01C2
  145. #define SRV_SYS_DELIVERED_MESS 0x0104
  146. #define SRV_GO_AWAY        0x0028
  147. #define SRV_NOT_CONNECTED  0x00F0
  148. #define SRV_BAD_PASS       0x0064
  149. #define SRV_TRY_AGAIN      0x00FA
  150. #define SRV_UPDATE_FAIL    0x01EA
  151. #define SRV_UPDATE_SUCCESS 0x01E0
  152. #define SRV_MULTI_PACKET   0x0212
  153. #define SRV_META_USER      0x03DE
  154. #define SRV_RAND_USER      0x024E
  155. #define SRV_AUTH_UPDATE    0x01F4
  156. #define META_INFO_SET 0x3E8
  157. #define META_INFO_REQ 0x04B0
  158. #define META_INFO_GEN 0xC8
  159. #define META_INFO_MORE 0xDC
  160. #define META_INFO_WORK 0xD2
  161. #define STATUS_OFFLINE  (-1L)
  162. #define STATUS_ONLINE  0x00
  163. #define STATUS_INVISIBLE 0x100
  164. #define STATUS_NA_99        0x04
  165. #define STATUS_NA      0x05
  166. #define STATUS_FREE_CHAT 0x20
  167. #define STATUS_OCCUPIED_MAC 0x10
  168. #define STATUS_OCCUPIED 0x11
  169. #define STATUS_AWAY    0x01
  170. #define STATUS_DND    0x13
  171. #define AUTH_MESSAGE  0x0008
  172. #define USER_ADDED_MESS 0x000C
  173. #define AUTH_REQ_MESS 0x0006
  174. #define URL_MESS 0x0004
  175. #define MASS_MESS_MASK  0x8000
  176. #define MRURL_MESS 0x8004
  177. #define NORM_MESS 0x0001
  178. #define MRNORM_MESS 0x8001
  179. #define CONTACT_MESS 0x0013
  180. #define MRCONTACT_MESS 0x8013
  181. /*#define USA_COUNTRY_CODE 0x01
  182. #define UK_COUNTRY_CODE 0x2C*/
  183. #if ICQ_VER == 0x0004
  184.    typedef struct
  185.    {
  186.       BYTE time[4];
  187.       BYTE port[4];
  188.       BYTE len[2];
  189.    } login_1, *LOGIN_1_PTR;
  190.    typedef struct
  191.    {
  192.       BYTE X1[4];
  193.       BYTE ip[4];
  194.       BYTE  X2[1];
  195.       BYTE  status[4];
  196.       BYTE X3[4];
  197.    /*   BYTE seq[2];*/
  198.       BYTE  X4[4];
  199.       BYTE X5[4];
  200.    } login_2, *LOGIN_2_PTR;
  201.    /* those behind the // are for the spec on
  202.     http://www.student.nada.kth.se/~d95-mih/icq/
  203.     they didn't work for me so I changed them
  204.     to values that did work.
  205.     *********************************/
  206.    /*#define LOGIN_X1_DEF 0x00000078 */
  207.    #define LOGIN_X1_DEF 0x00000098
  208. /*   #define LOGIN_X2_DEF 0x04*/
  209.    #define LOGIN_X2_DEF 0x06
  210.    /*#define LOGIN_X3_DEF 0x00000002*/
  211.    #define LOGIN_X3_DEF 0x00000003
  212.    /*#define LOGIN_X4_DEF 0x00000000*/
  213.    #define LOGIN_X4_DEF 0x00000000
  214.    /*#define LOGIN_X5_DEF 0x00780008*/
  215.    #define LOGIN_X5_DEF 0x00980000
  216. #else /* ICQ_VER */
  217.    typedef struct
  218.    {
  219.       BYTE port[4];
  220.       BYTE len[2];
  221.    } login_1, *LOGIN_1_PTR;
  222.    typedef struct
  223.    {
  224.       BYTE X1[4];
  225.       BYTE ip[4];
  226.       BYTE  X2[1];
  227.       BYTE  status[4];
  228.       BYTE X3[4];
  229.       BYTE seq[2];
  230.       BYTE  X4[4];
  231.       BYTE X5[4];
  232.    } login_2, *LOGIN_2_PTR;
  233.    /* those behind the // are for the spec on
  234.     http://www.student.nada.kth.se/~d95-mih/icq/
  235.     they didn't work for me so I changed them
  236.     to values that did work.
  237.     *********************************/
  238.    /*#define LOGIN_X1_DEF 0x00000078 */
  239.    #define LOGIN_X1_DEF 0x00040072
  240.    #define LOGIN_X2_DEF 0x06
  241.    /*#define LOGIN_X3_DEF 0x00000002*/
  242.    #define LOGIN_X3_DEF 0x00000003
  243.    /*#define LOGIN_X4_DEF 0x00000000*/
  244.    #define LOGIN_X4_DEF 0x00000000
  245.    /*#define LOGIN_X5_DEF 0x00780008*/
  246.    #define LOGIN_X5_DEF 0x00720004
  247. #endif /* ICQ_VER */
  248. typedef struct
  249. {
  250.    BYTE   uin[4];
  251.    BYTE year[2];
  252.    BYTE  month;
  253.    BYTE  day;
  254.    BYTE  hour;
  255.    BYTE  minute;
  256.    BYTE type[2];
  257.    BYTE len[2];
  258. } RECV_MESSAGE, *RECV_MESSAGE_PTR;
  259. typedef struct
  260. {
  261.    BYTE uin[4];
  262.    BYTE type[2]; 
  263.    BYTE len[2];
  264. } SIMPLE_MESSAGE, *SIMPLE_MESSAGE_PTR;
  265. typedef struct
  266. {
  267.    DWORD uin;
  268.    DWORD status;
  269.    DWORD last_time; /* last time online or when came online */
  270.    BYTE current_ip[4];
  271.    DWORD port;
  272.    BOOL invis_list;
  273.    BOOL vis_list;
  274.    BOOL not_in_list;
  275.    SOK_T sok;
  276.    char nick[20];
  277. } Contact_Member, *CONTACT_PTR;
  278. typedef struct
  279. {
  280.    char *nick;
  281.    char *first;
  282.    char *last;
  283.    char *email;
  284.    BOOL auth;
  285. } USER_INFO_STRUCT, *USER_INFO_PTR;
  286. typedef struct
  287. {
  288.    char *nick;
  289.    char *first;
  290.    char *last;
  291.    char *email;
  292.    char *email2;
  293.    char *email3;
  294.    char *city;
  295.    char *state;
  296.    char *phone;
  297.    char *fax;
  298.    char *street;
  299.    char *cellular;
  300.    DWORD zip;
  301.    WORD country;
  302.    BYTE c_status;
  303.    BOOL hide_email;
  304. } MORE_INFO_STRUCT, *MORE_INFO_PTR;
  305. void Keep_Alive( int sok );
  306. void snd_got_messages( int sok );
  307. void snd_contact_list( int sok );
  308. void snd_invis_list( int sok );
  309. void snd_vis_list( int sok );
  310. void snd_login_1( int sok );
  311. void Status_Update( int sok, BYTE * pak );
  312. void Login( int sok, int UIN, char *pass, int ip, int port, DWORD status );
  313. void ack_srv( int sok, int seq );
  314. void User_Offline( int sok, BYTE * pak );
  315. int Save_RC();
  316. void User_Online( int sok, BYTE * pak );
  317. void M_fdprint( FD_T fd, char *str, ... );
  318. int M_fdnreadln( FD_T fd, char *buf, size_t len );
  319. char *Convert_Status_2_Str( int status );
  320. void Print_Status( DWORD new_status );
  321. void Get_Input( SOK_T sok );
  322. void Quit_ICQ( SOK_T sok );
  323. void icq_sendmsg( SOK_T sok, DWORD uin, char *text, DWORD msg_type);
  324. void Recv_Message( SOK_T sok, BYTE * pak );
  325. int Print_UIN_Name( DWORD uin );
  326. void icq_change_status( SOK_T sok, DWORD status );
  327. DWORD nick2uin( char * nick );
  328. S_DWORD Echo_On( void );
  329. S_DWORD Echo_Off( void );
  330. void send_info_req( SOK_T sok, DWORD uin );
  331. void Print_IP( DWORD uin );
  332. void Display_Info_Reply( int sok, BYTE * pak );
  333. WORD Chars_2_Word( unsigned char *buf );
  334. DWORD Chars_2_DW( unsigned char *buf );
  335. DWORD Get_Port( DWORD uin );
  336. void Show_Quick_Status( void );
  337. void icq_sendauthmsg( SOK_T sok, DWORD uin);
  338. void Do_Msg( SOK_T sok, DWORD type, WORD len, char * data, DWORD uin );
  339. void DW_2_Chars( unsigned char *buf, DWORD num );
  340. void Word_2_Chars( unsigned char *buf, WORD num );
  341. void Prompt( void );
  342. void Time_Stamp( void );
  343. void Add_User( SOK_T sok, DWORD uin, char *name );
  344. void start_search( SOK_T sok, char *email, char *nick, char* first, char* last );
  345. void Display_Search_Reply( int sok, BYTE * pak );
  346. int log_event(char    *desc,char    *msg,DWORD   uin);
  347. void rus_conv(char to[4],char *t_in);
  348. void clrscr(void);
  349. void reg_new_user( SOK_T sok, char *pass);
  350. void send_ext_info_req( SOK_T sok, DWORD uin );
  351. void Display_Ext_Info_Reply( int sok, BYTE * pak );
  352. const char *Get_Country_Name( int code );
  353. int Connect_Remote( char *hostname, int port, FD_T aux );
  354. void Update_User_Info( SOK_T sok, USER_INFO_PTR user);
  355. size_t SOCKWRITE( SOK_T sok, void * ptr, size_t len );
  356. size_t SOCKREAD( SOK_T sok, void * ptr, size_t len );
  357. void Hex_Dump( void *buffer, size_t len );
  358. void icq_sendurl( SOK_T sok, DWORD uin, char *description, char *url );
  359. void M_print( char *str, ... );
  360. void Server_Response( SOK_T sok, BYTE *data, DWORD len, WORD cmd, WORD ver, WORD seq, DWORD uin );
  361. void icq_rand_user_req( SOK_T sok, DWORD group );
  362. void icq_rand_set( SOK_T sok, DWORD group );
  363. void Display_Rand_User( SOK_T sok, BYTE *data, DWORD len );
  364. void Initialize_Msg_Queue( void );
  365. void Do_Resend( SOK_T sok );
  366. void Print_CMD( WORD cmd );
  367. #ifdef UNIX 
  368. void Get_Unix_Config_Info( void );
  369. #endif
  370. extern Contact_Member Contacts[ 100 ]; /* no more than 100 contacts max */
  371. extern int Num_Contacts;
  372. extern DWORD UIN; /* current User Id Number */
  373. extern BOOL Contact_List;
  374. extern WORD last_cmd[ 1024 ]; /* command issued for the first 1024 SEQ #'s */
  375. /******************** should use & 0x3ff on all references to this */
  376. extern WORD seq_num;  /* current sequence number */
  377. extern DWORD our_ip;
  378. extern DWORD our_port; /* the port to make tcp connections on */
  379. extern BOOL Quit;
  380. extern BOOL Verbose;
  381. extern BYTE Sound;
  382. extern DWORD Current_Status;
  383. extern DWORD last_recv_uin;
  384. extern char passwd[100];
  385. extern char server[100];
  386. extern DWORD remote_port;
  387. extern DWORD set_status;
  388. extern BOOL auto_resp;
  389. extern char auto_rep_str_na[450];
  390. extern char auto_rep_str_away[450];
  391. extern char auto_rep_str_occ[450];
  392. extern char auto_rep_str_inv[450];
  393. extern char auto_rep_str_dnd[450];
  394. extern BYTE Sound_Str[150];
  395. extern BOOL Done_Login;
  396. extern char message_cmd[16];
  397. extern char info_cmd[16];
  398. extern char quit_cmd[16];
  399. extern char reply_cmd[16];
  400. extern char again_cmd[16];
  401. extern char add_cmd[16];
  402. extern char list_cmd[16];
  403. extern char away_cmd[16];
  404. extern char na_cmd[16];
  405. extern char dnd_cmd[16];
  406. extern char online_cmd[16];
  407. extern char occ_cmd[16];
  408. extern char ffc_cmd[16];
  409. extern char inv_cmd[16];
  410. extern char status_cmd[16];
  411. extern char auth_cmd[16];
  412. extern char auto_cmd[16];
  413. extern char search_cmd[16];
  414. extern char save_cmd[16];
  415. extern char change_cmd[16];
  416. extern char alter_cmd[16];
  417. extern char msga_cmd[16];
  418. extern char url_cmd[16];
  419. extern char update_cmd[16];
  420. extern BOOL Russian;
  421. extern BOOL Logging;
  422. extern BOOL Color;
  423. extern unsigned int next_resend;