Mercurial > pidgin
annotate plugins/icq/tcphandle.c @ 2035:38c06d8b7863
[gaim-migrate @ 2045]
hi
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Sat, 16 Jun 2001 06:20:30 +0000 |
parents | 7b3f1eb1ef7d |
children |
rev | line source |
---|---|
1152 | 1 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 | |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
3 /* |
1977
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
4 * $Id: tcphandle.c 1987 2001-06-09 14:46:51Z warmenhoven $ |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
5 * |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
6 * Copyright (C) 1998-2001, Denis V. Dmitrienko <denis@null.net> and |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
7 * Bill Soudan <soudan@kde.org> |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
8 * |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
9 * This program is free software; you can redistribute it and/or modify |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
10 * it under the terms of the GNU General Public License as published by |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
11 * the Free Software Foundation; either version 2 of the License, or |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
12 * (at your option) any later version. |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
13 * |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
14 * This program is distributed in the hope that it will be useful, |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
17 * GNU General Public License for more details. |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
18 * |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
19 * You should have received a copy of the GNU General Public License |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
20 * along with this program; if not, write to the Free Software |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
22 * |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
23 */ |
1152 | 24 |
1432
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
25 #include <stdlib.h> |
1152 | 26 |
27 #include "icqlib.h" | |
28 | |
29 #include "tcp.h" | |
30 #include "stdpackets.h" | |
31 | |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
32 void icq_TCPOnMessageReceived(icq_Link *icqlink, DWORD uin, const char *message, DWORD id, icq_TCPLink *plink); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
33 void icq_TCPOnURLReceived(icq_Link *icqlink, DWORD uin, const char *message, DWORD id); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
34 void icq_TCPOnContactListReceived(icq_Link *icqlink, DWORD uin, const char *message, DWORD id); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
35 void icq_TCPOnChatReqReceived(icq_Link *icqlink, DWORD uin, const char *message, DWORD id); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
36 void icq_TCPOnFileReqReceived(icq_Link *icqlink, DWORD uin, const char *message, |
1152 | 37 const char *filename, unsigned long filesize, DWORD id); |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
38 void icq_TCPProcessAck(icq_Link *icqlink, icq_Packet *p); |
1152 | 39 void icq_HandleChatAck(icq_TCPLink *plink, icq_Packet *p, int port); |
40 void icq_HandleChatHello(icq_TCPLink *plink); | |
41 void icq_HandleFileHello(icq_TCPLink *plink); | |
42 void icq_HandleFileAck(icq_TCPLink *plink, icq_Packet *p, int port); | |
43 | |
44 void icq_TCPProcessPacket(icq_Packet *p, icq_TCPLink *plink) | |
45 { | |
46 DWORD uin; | |
47 WORD version; | |
48 WORD command; | |
49 WORD type; | |
50 WORD status; | |
51 DWORD command_type; | |
52 DWORD filesize = 0; | |
53 DWORD port = 0; | |
54 | |
55 const char *message; | |
56 const char *filename = 0; | |
57 | |
58 icq_PacketBegin(p); | |
59 (void)icq_PacketRead32(p); | |
60 version=icq_PacketRead16(p); | |
61 command=icq_PacketRead16(p); | |
62 (void)icq_PacketRead16(p); | |
63 | |
64 uin=icq_PacketRead32(p); | |
65 type=icq_PacketRead16(p); | |
66 message=icq_PacketReadString(p); | |
67 (void)icq_PacketRead32(p); | |
68 (void)icq_PacketRead32(p); | |
69 (void)icq_PacketRead32(p); | |
70 (void)icq_PacketRead8(p); | |
71 status=icq_PacketRead16(p); | |
72 command_type=icq_PacketRead16(p); | |
73 | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
74 switch(type & ~ICQ_TCP_MASS_MASK) |
1152 | 75 { |
76 case ICQ_TCP_MSG_MSG: | |
77 case ICQ_TCP_MSG_URL: | |
1432
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
78 case ICQ_TCP_MSG_CONTACTLIST: |
1977
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
79 case ICQ_TCP_MSG_READAWAY: |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
80 case ICQ_TCP_MSG_READNA: |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
81 case ICQ_TCP_MSG_READDND: |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
82 case ICQ_TCP_MSG_READOCCUPIED: |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
83 case ICQ_TCP_MSG_READFFC: |
1152 | 84 p->id=icq_PacketRead32(p); |
85 break; | |
86 | |
87 case ICQ_TCP_MSG_CHAT: | |
88 (void)icq_PacketReadString(p); | |
89 (void)icq_PacketRead16(p); | |
90 (void)icq_PacketRead16(p); | |
91 port=icq_PacketRead32(p); | |
92 p->id=icq_PacketRead32(p); | |
93 break; | |
94 | |
95 case ICQ_TCP_MSG_FILE: | |
96 (void)icq_PacketRead16(p); | |
97 (void)icq_PacketRead16(p); | |
98 filename=icq_PacketReadString(p); | |
99 filesize=icq_PacketRead32(p); | |
100 port=icq_PacketRead32(p); | |
101 p->id=icq_PacketRead32(p); | |
102 break; | |
103 | |
104 default: | |
105 icq_FmtLog(plink->icqlink, ICQ_LOG_WARNING, "unknown message packet, type %x\n", type); | |
106 } | |
107 | |
108 #ifdef TCP_PROCESS_TRACE | |
109 printf("packet processed from uin: %lu:\n", uin); | |
110 printf(" command: %x\ttype: %x\n", command, type); | |
111 printf(" status: %x\tcommand_type: %x\n", status, (int)command_type); | |
112 printf(" message %s\n", message); | |
113 printf(" id: %x\n", (int)p->id); | |
114 #endif | |
115 | |
116 switch(command) | |
117 { | |
118 case ICQ_TCP_MESSAGE: | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
119 switch(type & ~ICQ_TCP_MASS_MASK) |
1152 | 120 { |
121 case ICQ_TCP_MSG_MSG: | |
122 icq_TCPOnMessageReceived(plink->icqlink, uin, message, p->id, plink); | |
123 break; | |
124 | |
125 case ICQ_TCP_MSG_URL: | |
126 icq_TCPOnURLReceived(plink->icqlink, uin, message, p->id); | |
127 break; | |
128 | |
129 case ICQ_TCP_MSG_CHAT: | |
130 icq_TCPOnChatReqReceived(plink->icqlink, uin, message, p->id); | |
131 break; | |
132 | |
133 case ICQ_TCP_MSG_FILE: | |
134 icq_TCPOnFileReqReceived(plink->icqlink, uin, message, filename, filesize, p->id); | |
135 break; | |
136 | |
1432
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
137 case ICQ_TCP_MSG_CONTACTLIST: |
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
138 icq_TCPOnContactListReceived(plink->icqlink, uin, message, p->id); |
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
139 break; |
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
140 |
1152 | 141 default: |
142 icq_FmtLog(plink->icqlink, ICQ_LOG_WARNING, "unknown message type %d!\n", type); | |
143 break; | |
144 } | |
145 break; | |
146 | |
147 case ICQ_TCP_ACK: | |
1977
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
148 invoke_callback(plink->icqlink, icq_RequestNotify) |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
149 (plink->icqlink, p->id, ICQ_NOTIFY_ACK, status, (void *)message); |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
150 switch(type) |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
151 { |
1152 | 152 case ICQ_TCP_MSG_CHAT: |
153 icq_HandleChatAck(plink, p, port); | |
154 break; | |
155 | |
156 case ICQ_TCP_MSG_FILE: | |
157 icq_HandleFileAck(plink, p, port); | |
158 break; | |
159 | |
160 case ICQ_TCP_MSG_MSG: | |
161 case ICQ_TCP_MSG_URL: | |
1977
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
162 icq_FmtLog(plink->icqlink, ICQ_LOG_MESSAGE, "received ack %d\n", |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
163 p->id); |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
164 break; |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
165 |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
166 case ICQ_TCP_MSG_READAWAY: |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
167 case ICQ_TCP_MSG_READNA: |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
168 case ICQ_TCP_MSG_READDND: |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
169 case ICQ_TCP_MSG_READOCCUPIED: |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
170 case ICQ_TCP_MSG_READFFC: |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
171 icq_FmtLog(plink->icqlink, ICQ_LOG_MESSAGE, |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
172 "received away msg, seq %d\n", p->id); |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
173 invoke_callback(plink->icqlink, icq_RecvAwayMsg) |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
174 (plink->icqlink, p->id, message); |
1152 | 175 break; |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
176 } |
1977
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
177 invoke_callback(plink->icqlink, icq_RequestNotify) |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
178 (plink->icqlink, p->id, ICQ_NOTIFY_SUCCESS, 0, NULL); |
1152 | 179 break; |
180 | |
181 case ICQ_TCP_CANCEL: | |
182 /* icq_TCPProcessCancel(p); */ | |
183 break; | |
184 | |
185 default: | |
186 icq_FmtLog(plink->icqlink, ICQ_LOG_WARNING, | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
187 "unknown packet command %d!\n", command); |
1152 | 188 } |
189 } | |
190 | |
191 void icq_TCPProcessCancel(icq_Packet *p) | |
192 { | |
193 (void)p; | |
194 | |
195 /* | |
196 find packet in queue | |
197 call notification function | |
198 remove packet from queue | |
199 */ | |
200 } | |
201 | |
202 int icq_TCPProcessHello(icq_Packet *p, icq_TCPLink *plink) | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
203 { |
1152 | 204 /* TCP Hello packet */ |
205 BYTE code; /* 0xFF - init packet code */ | |
206 DWORD version; /* tcp version */ | |
207 DWORD remote_port; /* remote message listen port */ | |
208 DWORD remote_uin; /* remote uin */ | |
209 DWORD remote_ip; /* remote IP as seen by ICQ server */ | |
210 DWORD remote_real_ip; /* remote IP as seen by client */ | |
211 BYTE flags; /* tcp flags */ | |
212 DWORD remote_other_port; /* remote chat or file listen port */ | |
213 | |
214 icq_PacketBegin(p); | |
215 | |
216 code=icq_PacketRead8(p); | |
217 version=icq_PacketRead32(p); | |
218 | |
219 if (!(p->length>=26 && code==ICQ_TCP_HELLO)) | |
220 { | |
221 icq_FmtLog(plink->icqlink, ICQ_LOG_WARNING, | |
222 "malformed hello packet received from %s:%d, closing link\n", | |
223 inet_ntoa(*((struct in_addr *)(&(plink->remote_address.sin_addr)))), | |
224 ntohs(plink->remote_address.sin_port)); | |
225 | |
226 icq_TCPLinkClose(plink); | |
227 return 0; | |
228 } | |
229 remote_port=icq_PacketRead32(p); | |
230 remote_uin=icq_PacketRead32(p); | |
231 remote_ip=icq_PacketRead32(p); | |
232 remote_real_ip=icq_PacketRead32(p); | |
233 flags=icq_PacketRead8(p); | |
234 remote_other_port=icq_PacketRead32(p); | |
235 | |
236 icq_FmtLog(plink->icqlink, ICQ_LOG_MESSAGE, | |
237 "hello packet received from %lu { version=%d }\n", remote_uin, version); | |
238 | |
239 plink->remote_version=version; | |
240 plink->remote_uin=remote_uin; | |
241 plink->flags=flags; | |
242 plink->mode&=~TCP_LINK_MODE_HELLOWAIT; | |
243 | |
244 /* file and chat sessions require additional handling */ | |
245 if(plink->type==TCP_LINK_CHAT) icq_HandleChatHello(plink); | |
246 if(plink->type==TCP_LINK_FILE) icq_HandleFileHello(plink); | |
247 | |
248 return 1; | |
249 } | |
250 | |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
251 void icq_TCPOnMessageReceived(icq_Link *icqlink, DWORD uin, const char *message, DWORD id, icq_TCPLink *plink) |
1152 | 252 { |
1977
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
253 char data[ICQ_MAX_MESSAGE_SIZE]; |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
254 |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
255 /* use the current system time for time received */ |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
256 time_t t=time(0); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
257 struct tm *ptime=localtime(&t); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
258 icq_Packet *pack; |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
259 |
1152 | 260 #ifdef TCP_PACKET_TRACE |
261 printf("tcp message packet received from %lu { sequence=%x }\n", | |
262 uin, (int)id); | |
263 #endif | |
264 | |
1977
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
265 strncpy(data,message,sizeof(data)); |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
266 data[sizeof(data)-1]='\0'; |
7b3f1eb1ef7d
[gaim-migrate @ 1987]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1912
diff
changeset
|
267 icq_RusConv("wk",data); |
1152 | 268 |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
269 invoke_callback(icqlink,icq_RecvMessage)(icqlink, uin, ptime->tm_hour, |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
270 ptime->tm_min, ptime->tm_mday, ptime->tm_mon+1, ptime->tm_year+1900, data); |
1152 | 271 |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
272 /* |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
273 icq_TCPLink *preallink=icq_FindTCPLink(icqlink, uin, TCP_LINK_MESSAGE); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
274 if(plink != preallink) |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
275 invoke_callback(icqlink,icq_SpoofedMessage)(uin, ...) |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
276 */ |
1152 | 277 |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
278 /* send an acknowledgement to the remote client */ |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
279 pack=icq_TCPCreateMessageAck(plink,0); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
280 icq_PacketAppend32(pack, id); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
281 icq_PacketSend(pack, plink->socket); |
1152 | 282 #ifdef TCP_PACKET_TRACE |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
283 printf("tcp message ack sent to uin %lu { sequence=%lx }\n", uin, id); |
1152 | 284 #endif |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
285 icq_PacketDelete(pack); |
1152 | 286 } |
287 | |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
288 void icq_TCPOnURLReceived(icq_Link *icqlink, DWORD uin, const char *message, DWORD id) |
1152 | 289 { |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
290 /* use the current system time for time received */ |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
291 time_t t=time(0); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
292 struct tm *ptime=localtime(&t); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
293 icq_Packet *pack; |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
294 char *pfe; |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
295 icq_TCPLink *plink=icq_FindTCPLink(icqlink, uin, TCP_LINK_MESSAGE); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
296 |
1152 | 297 #ifdef TCP_PACKET_TRACE |
298 printf("tcp url packet received from %lu { sequence=%lx }\n", | |
299 uin, id); | |
300 #endif /*TCP_PACKET_TRACE*/ | |
301 | |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
302 /* the URL is split from the description by 0xFE */ |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
303 pfe=strchr(message, '\xFE'); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
304 *pfe=0; |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
305 icq_RusConv("wk", (char*)message); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
306 |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
307 invoke_callback(icqlink,icq_RecvURL)(icqlink, uin, ptime->tm_hour, |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
308 ptime->tm_min, ptime->tm_mday, ptime->tm_mon+1, ptime->tm_year+1900, |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
309 pfe+1, message); |
1152 | 310 |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
311 /* send an acknowledgement to the remote client */ |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
312 pack=icq_TCPCreateURLAck(plink,0); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
313 icq_PacketAppend32(pack, id); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
314 icq_PacketSend(pack, plink->socket); |
1152 | 315 #ifdef TCP_PACKET_TRACE |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
316 printf("tcp message ack sent to %lu { sequence=%lx }\n", uin, id); |
1152 | 317 #endif |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
318 icq_PacketDelete(pack); |
1152 | 319 } |
1432
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
320 |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
321 void icq_TCPOnContactListReceived(icq_Link *icqlink, DWORD uin, const char *message, DWORD id) |
1432
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
322 { |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
323 /* use the current system time for time received */ |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
324 time_t t=time(0); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
325 struct tm *ptime=localtime(&t); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
326 icq_Packet *pack; |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
327 icq_List *strList = icq_ListNew(); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
328 int i, k, nr = icq_SplitFields(strList, message); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
329 const char **contact_uin = (const char **)malloc((nr - 2) /2); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
330 const char **contact_nick = (const char **)malloc((nr - 2) /2); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
331 icq_TCPLink *plink=icq_FindTCPLink(icqlink, uin, TCP_LINK_MESSAGE); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
332 |
1432
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
333 #ifdef TCP_PACKET_TRACE |
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
334 printf("tcp contactlist packet received from %lu { sequence=%lx }\n", uin, id); |
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
335 #endif /* TCP_PACKET_TRACE */ |
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
336 |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
337 /* split message */ |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
338 for (i = 1, k = 0; i < (nr - 1); k++) |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
339 { |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
340 contact_uin[k] = icq_ListAt(strList, i); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
341 contact_nick[k] = icq_ListAt(strList, i + 1); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
342 i += 2; |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
343 } |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
344 |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
345 invoke_callback(icqlink,icq_RecvContactList)(icqlink, uin, |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
346 ptime->tm_hour, ptime->tm_min, ptime->tm_mday, ptime->tm_mon+1, |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
347 ptime->tm_year+1900, k, contact_uin, contact_nick); |
1432
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
348 |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
349 /* send an acknowledement to the remote client */ |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
350 pack=icq_TCPCreateContactListAck(plink, 0); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
351 icq_PacketAppend32(pack, id); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
352 icq_PacketSend(pack, plink->socket); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
353 #ifdef TCP_PACKET_TRACE |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
354 printf("tcp message ack sent to %lu { sequence=%lx }\n", uin, id); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
355 #endif /* TCP_PACKE_TRACE */ |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
356 icq_PacketDelete(pack); |
1432
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
357 |
1912
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
358 free(contact_nick); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
359 free(contact_uin); |
8ed70631ed15
[gaim-migrate @ 1922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
360 icq_ListDelete(strList, free); |
1432
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
361 } |