1152
|
1
|
|
2 #ifndef _CHAT_SESSION_H
|
|
3 #define _CHAT_SESSION_H
|
|
4
|
|
5 #include "icq.h"
|
|
6 #include "icqtypes.h"
|
|
7
|
|
8 /* chat session statuses- request receiver */
|
|
9 #define CHAT_STATUS_LISTENING 1
|
|
10 #define CHAT_STATUS_CONNECTED 3
|
|
11 #define CHAT_STATUS_WAIT_NAME 4
|
|
12 #define CHAT_STATUS_WAIT_FONT 6
|
|
13
|
|
14 /* chat session statuses- request sender */
|
|
15 #define CHAT_STATUS_CONNECTING 2
|
|
16 #define CHAT_STATUS_WAIT_ALLINFO 5
|
|
17
|
|
18 /* once negotiation is complete, both sides enter ready state */
|
|
19 #define CHAT_STATUS_READY 7
|
|
20
|
|
21 /* chat session states:
|
|
22
|
|
23 accepting chat request
|
|
24
|
|
25 1. remote user initiates chat by sending chat request to message listen
|
|
26 port
|
|
27 2. local user accepts chat, ack packet sent back to remote user and
|
|
28 chat listen port opened
|
|
29 * chat session created on local side with ID of ack packet
|
|
30 LISTENING
|
|
31 * remote chat session created with ID of ack packet
|
|
32 CONNECTING
|
|
33 3. remote client connects to local chat listen port, sends hello and
|
|
34 sends info packet with name and colors
|
|
35 * local chat session associated with new icq_TCPLink according to uin
|
|
36 4. local client sends back big info packet with name, colors, and font
|
|
37
|
|
38 5. remote client sends font packet, connection is considered established
|
|
39
|
|
40 sending chat request
|
|
41
|
|
42 1. local user initiates chat by sending chat request to remote message
|
|
43 listen port
|
|
44 2. remote user accepts chat, ack packet received from remote client and
|
|
45 remote client opens chat listen port
|
|
46 3. local client connects to remote chat listen port, sends hello and
|
|
47 sends info packet with name and colors
|
|
48 4. remote client sends back big info packet with name, colors, and font
|
|
49 5. local client sends font packet, connection is considered established
|
|
50
|
|
51 1. icq_RecvChatRequest - provides session ID (same as packet sequence)
|
|
52 2. icq_SendChatAck - pass session ID
|
|
53 ICQ_NOTIFY_CONNECTED
|
|
54 ICQ_NOTIFY_SENT
|
|
55 ICQ_NOTIFY_CHAT, CHAT_STATUS_LISTENING
|
|
56 3. ICQ_NOTIFY_CHAT, CHAT_STATUS_WAIT_NAME
|
|
57 4. ICQ_NOTIFY_CHAT, CHAT_STATUS_WAIT_FONT
|
|
58 5. ICQ_NOTIFY_CHAT, CHAT_STATUS_CONNECTED
|
|
59 ICQ_NOTIFY_CHATDATA, ....
|
|
60 ICQ_NOTIFY_SUCCESS
|
|
61 */
|
|
62
|
|
63 typedef struct icq_ChatSession_s {
|
|
64
|
|
65 DWORD id;
|
|
66 int status;
|
|
67 ICQLINK *icqlink;
|
|
68
|
|
69 DWORD remote_uin;
|
|
70 char *remote_handle;
|
|
71
|
|
72 } icq_ChatSession;
|
|
73
|
|
74 icq_ChatSession *icq_ChatSessionNew(ICQLINK *);
|
|
75 void icq_ChatSessionDelete(void *);
|
|
76 void icq_ChatSessionClose(icq_ChatSession *);
|
|
77 void icq_ChatSessionSetStatus(icq_ChatSession *, int);
|
|
78 icq_ChatSession *icq_FindChatSession(ICQLINK *, DWORD);
|
|
79
|
|
80 #endif
|