Mercurial > pidgin
annotate libfaim/aim_ft.c @ 1345:d6e6fcaa1f39
[gaim-migrate @ 1355]
ok. messages work. transports sort of work (you'll sign into them if you have them, but you won't see them and you can't add or remove them). resource is not a part of buddy's names, which is a very very big plus, since it means things will work incredibly well now. at some point the resource may be added back somehow but if it is it won't be part of the name.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Thu, 21 Dec 2000 13:54:22 +0000 |
parents | 920c86b753d7 |
children | ed1f47853bd4 |
rev | line source |
---|---|
503 | 1 #include <faim/aim.h> |
2 | |
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
3 #ifndef _WIN32 |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
4 #include <netdb.h> |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
5 #include <sys/socket.h> |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
6 #include <netinet/in.h> |
503 | 7 #include <sys/utsname.h> /* for aim_directim_initiate */ |
8 #include <arpa/inet.h> /* for inet_ntoa */ | |
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
9 #endif |
640
2c0a7d245bd2
[gaim-migrate @ 650]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
10 |
503 | 11 /* aim_msgcookies.c is mostly new. just look at the diff and replace yours, easiest. */ |
12 | |
13 /* | |
14 function name where i had it | |
15 aim_send_im_direct aim_im.c | |
16 aim_directim_initiate aim_im.c | |
17 aim_filetransfer_accept aim_im.c | |
18 aim_getlisting aim_misc.c (?!) -- prototype function. can be ignored. | |
19 establish aim_misc.c | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
20 aim_get_command_rendezvous aim_r |
503 | 21 oft_getfh aim_rxqueue.c |
22 */ | |
23 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
24 faim_export int aim_handlerendconnect(struct aim_session_t *sess, struct aim_conn_t *cur) |
503 | 25 { |
26 int acceptfd = 0; | |
27 rxcallback_t userfunc; | |
28 struct sockaddr cliaddr; | |
1245
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
29 socklen_t clilen = sizeof(cliaddr); |
503 | 30 int ret = 0; |
31 | |
32 /* | |
33 * Listener sockets only have incoming connections. No data. | |
34 */ | |
35 if( (acceptfd = accept(cur->fd, &cliaddr, &clilen)) == -1) | |
36 return -1; | |
37 | |
38 if (cliaddr.sa_family != AF_INET) /* just in case IPv6 really is happening */ | |
39 return -1; | |
40 | |
41 switch(cur->subtype) { | |
42 case AIM_CONN_SUBTYPE_OFT_DIRECTIM: { | |
43 struct aim_directim_priv *priv; | |
44 | |
45 priv = (struct aim_directim_priv *)calloc(1, sizeof(struct aim_directim_priv)); | |
46 | |
47 snprintf(priv->ip, sizeof(priv->ip), "%s:%u", inet_ntoa(((struct sockaddr_in *)&cliaddr)->sin_addr), ntohs(((struct sockaddr_in *)&cliaddr)->sin_port)); | |
48 | |
49 if(!cur->priv) | |
50 cur->priv = priv; /* what happens if there is one?! -- mid */ | |
51 | |
52 cur->type = AIM_CONN_TYPE_RENDEZVOUS; | |
53 close(cur->fd); /* should we really do this? seems like the client should decide. maybe clone the connection and keep the listener open. -- mid */ | |
54 cur->fd = acceptfd; | |
55 | |
56 if ( (userfunc = aim_callhandler(cur, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINITIATE))) | |
57 ret = userfunc(sess, NULL, cur); | |
58 | |
59 break; | |
60 } | |
61 case AIM_CONN_SUBTYPE_OFT_GETFILE: { | |
62 struct aim_filetransfer_priv *priv; | |
63 | |
64 priv = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv)); | |
65 | |
66 snprintf(priv->ip, sizeof(priv->ip), "%s:%u", inet_ntoa(((struct sockaddr_in *)&cliaddr)->sin_addr), ntohs(((struct sockaddr_in *)&cliaddr)->sin_port)); | |
67 | |
68 if(!cur->priv) | |
69 cur->priv = priv; | |
70 | |
71 if ( (userfunc = aim_callhandler(cur, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILEINITIATE))) | |
72 ret = userfunc(sess, NULL, cur); | |
73 break; | |
74 } | |
75 default: { | |
76 /* XXX */ | |
77 } | |
78 } | |
79 return ret; | |
80 } | |
81 | |
82 | |
83 /* | |
84 * aim_send_im_direct: | |
85 * sess - session | |
86 * conn - directim connection | |
87 * msg - null-terminated string to send | |
88 */ | |
89 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
90 faim_export int aim_send_im_direct(struct aim_session_t *sess, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
91 struct aim_conn_t *conn, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
92 char *msg) |
503 | 93 { |
94 struct command_tx_struct *newpacket , *newpacket2; | |
95 | |
96 /* newpacket contains a real header with data, newpacket2 is just a | |
97 null packet, with a cookie and a lot of 0x00s. newpacket is the | |
98 "i'm sending", newpacket2 is the "i'm typing".*/ | |
99 | |
100 /* uhm. the client should send those as two seperate things -- mid */ | |
101 | |
102 struct aim_directim_priv *priv = NULL; | |
103 int i; | |
104 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
105 if (!sess || !conn || !(conn->type) || (conn->type != AIM_CONN_TYPE_RENDEZVOUS) || !conn->priv || !msg) { |
503 | 106 printf("faim: directim: invalid arguments\n"); |
107 return -1; | |
108 }; | |
109 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
110 if (strlen(msg) >= MAXMSGLEN) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
111 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
112 |
503 | 113 priv = (struct aim_directim_priv *)conn->priv; |
114 | |
115 /* NULLish Header */ | |
116 | |
117 if (!(newpacket2 = aim_tx_new(AIM_FRAMETYPE_OFT, 0x0001, conn, 0))) { | |
118 printf("faim: directim: tx_new2 failed\n"); | |
119 return -1; | |
120 } | |
121 | |
122 newpacket2->lock = 1; /* lock struct */ | |
123 | |
124 memcpy(newpacket2->hdr.oft.magic, "ODC2", 4); | |
125 newpacket2->hdr.oft.hdr2len = 0x44; | |
126 | |
127 if (!(newpacket2->hdr.oft.hdr2 = calloc(1,newpacket2->hdr.oft.hdr2len))) { | |
128 free(newpacket2); | |
129 return -1; | |
130 } | |
131 | |
132 i = 0; | |
133 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0006); | |
134 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
135 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
136 i += aimutil_putstr(newpacket2->hdr.oft.hdr2+i, (char *)priv->cookie, 8); |
503 | 137 |
138 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
139 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
140 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
141 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
142 | |
143 i += aimutil_put32(newpacket2->hdr.oft.hdr2+i, 0x00000000); | |
144 | |
145 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
146 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
147 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
148 | |
149 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x000e); | |
150 | |
151 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
152 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
153 | |
1245
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
154 i += aimutil_putstr(newpacket2->hdr.oft.hdr2+i, sess->sn, strlen(sess->sn)); |
503 | 155 |
156 i = 52; /* 0x34 */ | |
157 i += aimutil_put8(newpacket2->hdr.oft.hdr2+i, 0x00); /* 53 */ | |
158 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); /* 55 */ | |
159 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
160 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
161 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);/* 61 */ | |
162 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); | |
163 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);/* 65 */ | |
164 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);/* end of hdr2 */ | |
165 | |
166 newpacket2->lock = 0; | |
167 newpacket2->data = NULL; | |
168 | |
169 aim_tx_enqueue(sess, newpacket2); | |
170 | |
171 /* Header packet */ | |
172 | |
173 if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OFT, 0x0001, conn, strlen(msg)))) { | |
174 printf("faim: directim: tx_new failed\n"); | |
175 return -1; | |
176 } | |
177 | |
178 newpacket->lock = 1; /* lock struct */ | |
179 | |
180 memcpy(newpacket->hdr.oft.magic, "ODC2", 4); | |
181 newpacket->hdr.oft.hdr2len = 0x54; | |
182 | |
183 if (!(newpacket->hdr.oft.hdr2 = calloc(1,newpacket->hdr.oft.hdr2len))) { | |
184 free(newpacket); | |
185 return -1; | |
186 } | |
187 | |
188 i = 0; | |
189 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0006); | |
190 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
191 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
192 i += aimutil_putstr(newpacket->hdr.oft.hdr2+i, (char *)priv->cookie, 8); |
503 | 193 |
194 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
195 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
196 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
197 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
198 | |
199 i += aimutil_put32(newpacket->hdr.oft.hdr2+i, strlen(msg)); | |
200 | |
201 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
202 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
203 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
204 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
205 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
206 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
207 | |
1245
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
208 i += aimutil_putstr(newpacket->hdr.oft.hdr2+i, sess->sn, strlen(sess->sn)); |
503 | 209 |
210 i = 52; /* 0x34 */ | |
211 i += aimutil_put8(newpacket->hdr.oft.hdr2+i, 0x00); /* 53 */ | |
212 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); /* 55 */ | |
213 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
214 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
215 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);/* 61 */ | |
216 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); | |
217 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);/* 65 */ | |
218 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);/* end of hdr2 */ | |
219 | |
220 /* values grabbed from a dump */ | |
221 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0008); /* 69 */ | |
222 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x000c); | |
223 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);/* 71 */ | |
224 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x1466);/* 73 */ | |
225 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0001);/* 73 */ | |
226 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x2e0f); | |
227 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x393e); | |
228 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0xcac8); | |
229 | |
230 memcpy(newpacket->data, msg, strlen(msg)); | |
231 | |
232 newpacket->lock = 0; | |
233 | |
234 aim_tx_enqueue(sess, newpacket); | |
235 | |
236 return 0; | |
237 } | |
238 | |
239 /* | |
240 * aim_directim_intitiate: | |
241 * For those times when we want to open up the directim channel ourselves. | |
242 * sess is your session, | |
243 * conn is the BOS conn, | |
244 * priv is a dummy priv value (we'll let it get filled in later) (if | |
245 * you pass a NULL, we alloc one) | |
246 * destsn is the SN to connect to. | |
247 */ | |
248 | |
249 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
250 faim_export struct aim_conn_t *aim_directim_initiate(struct aim_session_t *sess, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
251 struct aim_conn_t *conn, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
252 struct aim_directim_priv *priv, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
253 char *destsn) |
503 | 254 { |
255 struct command_tx_struct *newpacket; | |
256 struct aim_conn_t *newconn; | |
257 | |
258 struct aim_msgcookie_t *cookie; | |
259 | |
260 int curbyte, i, listenfd; | |
261 short port = 4443; | |
262 | |
263 struct hostent *hptr; | |
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
264 char localhost[129]; |
503 | 265 |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
266 unsigned char cap[16]; |
503 | 267 char d[4]; /* XXX: IPv6. *cough* */ |
268 | |
269 /* | |
270 * Open our socket | |
271 */ | |
272 | |
273 if( (listenfd = aim_listenestablish(port)) == -1) | |
274 return NULL; | |
275 | |
276 /* | |
277 * get our local IP | |
278 */ | |
279 | |
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
280 if(gethostname(localhost, 128) < 0) |
503 | 281 return NULL; |
282 | |
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
283 if( (hptr = gethostbyname(localhost)) == NULL) |
503 | 284 return NULL; |
285 | |
286 memcpy(&d, hptr->h_addr_list[0], 4); /* XXX: this probably isn't quite kosher, but it works */ | |
287 | |
288 aim_putcap(cap, 16, AIM_CAPS_IMIMAGE); | |
289 | |
290 /* | |
291 * create the OSCAR packet | |
292 */ | |
293 | |
294 if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10+8+2+1+strlen(destsn)+4+4+0x32))) | |
295 return NULL; | |
296 | |
297 newpacket->lock = 1; /* lock struct */ | |
298 | |
299 curbyte = 0; | |
300 curbyte += aim_putsnac(newpacket->data+curbyte, | |
301 0x0004, 0x0006, 0x0000, sess->snac_nextid); | |
302 | |
303 /* | |
304 * Generate a random message cookie | |
305 * This cookie needs to be alphanumeric and NULL-terminated to be TOC-compatible. | |
306 */ | |
307 for (i=0;i<7;i++) | |
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
308 curbyte += aimutil_put8(newpacket->data+curbyte, 0x30 + ((u_char) rand() % 20)); |
503 | 309 curbyte += aimutil_put8(newpacket->data+curbyte, 0x00); |
310 | |
311 /* | |
312 * grab all the data for cookie caching. | |
313 */ | |
314 cookie = (struct aim_msgcookie_t *)calloc(1, sizeof(struct aim_msgcookie_t)); | |
315 | |
316 memcpy(cookie->cookie, newpacket->data+curbyte-8, 8); | |
317 cookie->type = AIM_COOKIETYPE_OFTIM; | |
318 | |
319 if(!priv) | |
320 priv = (struct aim_directim_priv *)calloc(1, sizeof(struct aim_directim_priv)); | |
321 | |
322 memcpy(priv->cookie, cookie, 8); | |
323 memcpy(priv->sn, destsn, sizeof(priv->sn)); | |
324 | |
325 cookie->data = priv; | |
326 | |
327 aim_cachecookie(sess, cookie); /* cache da cookie */ | |
328 | |
329 /* | |
330 * Channel ID | |
331 */ | |
332 curbyte += aimutil_put16(newpacket->data+curbyte,0x0002); | |
333 | |
334 /* | |
335 * Destination SN (prepended with byte length) | |
336 */ | |
337 curbyte += aimutil_put8(newpacket->data+curbyte,strlen(destsn)); | |
338 curbyte += aimutil_putstr(newpacket->data+curbyte, destsn, strlen(destsn)); | |
339 | |
340 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0003); | |
341 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0000); | |
342 | |
343 /* | |
344 * enTLV start | |
345 */ | |
346 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0005); | |
347 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0032); | |
348 | |
349 /* | |
350 * Flag data / ICBM Parameters? | |
351 */ | |
352 curbyte += aimutil_put8(newpacket->data+curbyte, 0x00); | |
353 curbyte += aimutil_put8(newpacket->data+curbyte, 0x00); | |
354 | |
355 /* | |
356 * Cookie | |
357 */ | |
358 curbyte += aimutil_putstr(newpacket->data+curbyte, (char *)cookie, 8); | |
359 | |
360 /* | |
361 * Capability String | |
362 */ | |
363 curbyte += aimutil_putstr(newpacket->data+curbyte, (char *)cap, 0x10); | |
364 | |
365 /* | |
366 * 000a/0002 : 0001 | |
367 */ | |
368 curbyte += aimutil_put16(newpacket->data+curbyte, 0x000a); | |
369 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002); | |
370 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0001); | |
371 | |
372 /* | |
373 * 0003/0004: IP address | |
374 */ | |
375 | |
376 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0003); | |
377 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0004); | |
378 | |
379 for(i = 0; i < 4; i++) | |
380 curbyte += aimutil_put8(newpacket->data+curbyte, d[i]); /* already in network byte order */ | |
381 | |
382 /* | |
383 * 0005/0002: Port | |
384 */ | |
385 | |
386 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0005); | |
387 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002); | |
388 curbyte += aimutil_put16(newpacket->data+curbyte, port); | |
389 | |
390 /* | |
391 * 000f/0000: umm.. dunno. Zigamorph[1]? | |
392 * [1]: see esr's TNHD. | |
393 */ | |
394 | |
395 curbyte += aimutil_put16(newpacket->data+curbyte, 0x000f); | |
396 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0000); | |
397 | |
398 printf("curbyte: 0x%x\n",curbyte); | |
399 | |
400 newpacket->commandlen = curbyte; | |
401 newpacket->lock = 0; | |
402 | |
403 aim_tx_enqueue(sess, newpacket); | |
404 | |
405 /* | |
406 * allocate and set up our connection | |
407 */ | |
408 | |
409 newconn = aim_newconn(sess, AIM_CONN_TYPE_RENDEZVOUS_OUT, NULL); | |
410 if (!newconn) { | |
411 perror("aim_newconn"); | |
412 aim_conn_kill(sess, &newconn); | |
413 return NULL; | |
414 } | |
415 | |
416 newconn->fd = listenfd; | |
417 newconn->subtype = AIM_CONN_SUBTYPE_OFT_DIRECTIM; | |
418 newconn->priv = priv; | |
419 printf("faim: listening (fd = %d, unconnected)\n", newconn->fd); | |
420 | |
421 /* | |
422 * XXX We need some way of closing the listener socket after | |
423 * n seconds of no connection. -- mid | |
424 */ | |
425 | |
426 return (newconn); | |
427 } | |
428 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
429 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
430 * struct aim_conn_t *aim_directim_connect(struct aim_session_t *sess, struct aim_conn_t *conn, struct aim_directim_priv *priv) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
431 * sess is the session to append the conn to, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
432 * conn is the BOS connection, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
433 * priv is the filled-in priv data structure for the connection |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
434 * returns conn if connected, NULL on error |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
435 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
436 |
503 | 437 |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
438 faim_export struct aim_conn_t *aim_directim_connect(struct aim_session_t *sess, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
439 struct aim_conn_t *conn, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
440 struct aim_directim_priv *priv ) |
503 | 441 { |
442 struct aim_conn_t *newconn = NULL;; | |
443 | |
444 newconn = aim_newconn(sess, AIM_CONN_TYPE_RENDEZVOUS, priv->ip); | |
445 if (!newconn || (newconn->fd == -1)) { | |
446 printf("could not connect to %s\n", priv->ip); | |
447 perror("aim_newconn"); | |
448 aim_conn_kill(sess, &newconn); | |
449 return NULL; | |
450 } else { | |
451 newconn->subtype = AIM_CONN_SUBTYPE_OFT_DIRECTIM; | |
452 newconn->priv = priv; | |
453 printf("faim: connected to peer (fd = %d)\n", newconn->fd); | |
454 return newconn; | |
455 } | |
456 return newconn; | |
457 } | |
458 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
459 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
460 * struct aim_conn_t *aim_directim_getconn(struct aim_session_t *sess, const char *name) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
461 * sess is your session, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
462 * name is the name to get, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
463 * returns conn for directim with name, NULL if none found. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
464 */ |
503 | 465 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
466 faim_export struct aim_conn_t *aim_directim_getconn(struct aim_session_t *sess, const char *name) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
467 { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
468 struct aim_conn_t *cur; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
469 struct aim_directim_priv *priv; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
470 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
471 faim_mutex_lock(&sess->connlistlock); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
472 for (cur = sess->connlist; cur; cur = cur->next) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
473 if (cur->type != AIM_CONN_TYPE_RENDEZVOUS || cur->subtype != AIM_CONN_SUBTYPE_OFT_DIRECTIM) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
474 continue; |
503 | 475 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
476 priv = cur->priv; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
477 if (aim_sncmp(priv->sn, name) == 0) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
478 break; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
479 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
480 faim_mutex_unlock(&sess->connlistlock); |
503 | 481 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
482 return cur; |
503 | 483 } |
484 | |
485 /* | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
486 * aim_accepttransfer: |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
487 * accept a file transfer request. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
488 * sess is the session, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
489 * conn is the BOS conn for the CAP reply |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
490 * sn is the screenname to send it to, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
491 * cookie is the cookie used |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
492 * ip is the ip to connect to |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
493 * file is the listing file to use |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
494 * rendid is CAP type |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
495 * |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
496 * returns connection |
503 | 497 */ |
498 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
499 faim_export struct aim_conn_t *aim_accepttransfer(struct aim_session_t *sess, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
500 struct aim_conn_t *conn, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
501 char *sn, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
502 char *cookie, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
503 char *ip, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
504 FILE *file, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
505 unsigned short rendid) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
506 { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
507 struct command_tx_struct *newpacket, *newoft; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
508 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
509 struct aim_conn_t *newconn; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
510 struct aim_fileheader_t *listingfh; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
511 struct aim_filetransfer_priv *priv; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
512 struct aim_msgcookie_t *cachedcook; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
513 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
514 int curbyte, i; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
515 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
516 if(rendid == AIM_CAPS_GETFILE) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
517 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
518 newconn = aim_newconn(sess, AIM_CONN_TYPE_RENDEZVOUS, ip); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
519 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
520 newconn->subtype = AIM_CONN_SUBTYPE_OFT_GETFILE; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
521 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
522 if (!newconn || (newconn->fd == -1)) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
523 perror("aim_newconn"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
524 faimdprintf(2, "could not connect to %s (fd: %i)\n", ip, newconn?newconn->fd:0); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
525 aim_conn_kill(sess, &newconn); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
526 return NULL; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
527 } else { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
528 priv = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
529 memcpy(priv->cookie, cookie, 8); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
530 strncpy(priv->sn, sn, MAXSNLEN); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
531 strncpy(priv->ip, ip, sizeof(priv->ip)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
532 newconn->priv = (void *)priv; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
533 faimdprintf(2, "faim: connected to peer (fd = %d)\n", newconn->fd); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
534 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
535 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
536 /* cache da cookie. COOOOOKIES! */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
537 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
538 if(!(cachedcook = (struct aim_msgcookie_t *)calloc(1, sizeof(struct aim_msgcookie_t)))) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
539 faimdprintf(1, "faim: accepttransfer: couldn't calloc cachedcook. yeep!\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
540 /* XXX die here, or go on? search for cachedcook for future references */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
541 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
542 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
543 if(cachedcook) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
544 memcpy(cachedcook->cookie, cookie, 8); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
545 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
546 /* strncpy(ft->fh.name, miscinfo->value+8, sizeof(ft->fh.name)); */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
547 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
548 if(cachedcook) { /* see above calloc of cachedcook */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
549 cachedcook->type = AIM_COOKIETYPE_OFTGET; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
550 cachedcook->data = (void *)priv; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
551 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
552 if (aim_cachecookie(sess, cachedcook) != 0) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
553 faimdprintf(1, "faim: ERROR caching message cookie\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
554 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
555 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
556 if(rendid == AIM_CAPS_GETFILE) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
557 faimdprintf(2, "faim: getfile request accept\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
558 if(!(newoft = aim_tx_new(AIM_FRAMETYPE_OFT, 0x1108, newconn, 0))) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
559 faimdprintf(2, "faim: aim_accepttransfer: tx_new OFT failed\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
560 /* XXX: what else do we need to clean up here? */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
561 return NULL; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
562 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
563 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
564 newoft->lock = 1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
565 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
566 memcpy(newoft->hdr.oft.magic, "OFT2", 4); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
567 newoft->hdr.oft.hdr2len = 0xf8; /* 0x100 - 8 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
568 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
569 if(!(listingfh = aim_getlisting(file))) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
570 return NULL; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
571 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
572 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
573 if (!(newoft->hdr.oft.hdr2 = (char *)calloc(1,newoft->hdr.oft.hdr2len))) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
574 free(newoft); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
575 return NULL; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
576 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
577 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
578 memcpy(listingfh->bcookie, cookie, 8); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
579 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
580 aim_oft_buildheader((void *)newoft->hdr.oft.hdr2, listingfh); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
581 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
582 free(listingfh); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
583 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
584 newoft->lock = 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
585 aim_tx_enqueue(sess, newoft); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
586 printf("faim: getfile: OFT listing enqueued.\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
587 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
588 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
589 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
590 /* OSCAR CAP accept packet */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
591 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
592 if(!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10+8+2+1+strlen(sn)+4+2+8+16))) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
593 return NULL; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
594 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
595 newpacket->lock = 1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
596 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
597 curbyte = aim_putsnac(newpacket->data, 0x0004, 0x0006, 0x0000, sess->snac_nextid); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
598 for (i = 0; i < 8; i++) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
599 curbyte += aimutil_put8(newpacket->data+curbyte, cookie[i]); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
600 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
601 curbyte += aimutil_put8(newpacket->data+curbyte, strlen(sn)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
602 curbyte += aimutil_putstr(newpacket->data+curbyte, sn, strlen(sn)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
603 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0005); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
604 curbyte += aimutil_put16(newpacket->data+curbyte, 0x001a); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
605 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002 /* accept */); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
606 for (i = 0; i < 8; i++) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
607 curbyte += aimutil_put8(newpacket->data+curbyte, cookie[i]); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
608 curbyte += aim_putcap(newpacket->data+curbyte, 0x10, rendid); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
609 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
610 newpacket->lock = 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
611 aim_tx_enqueue(sess, newpacket); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
612 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
613 return newconn; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
614 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
615 return NULL; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
616 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
617 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
618 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
619 * aim_getlisting(FILE *file) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
620 * |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
621 * file is an opened listing file |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
622 * returns a pointer to the filled-in fileheader_t |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
623 * |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
624 * currently omits checksum. we'll fix this when AOL breaks us, i |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
625 * guess. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
626 * |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
627 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
628 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
629 faim_internal struct aim_fileheader_t *aim_getlisting(FILE *file) |
503 | 630 { |
631 struct aim_fileheader_t *fh; | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
632 u_long totsize = 0, size = 0, checksum = 0xffff0000; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
633 short totfiles = 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
634 char *linebuf, sizebuf[9]; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
635 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
636 int linelength = 1024; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
637 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
638 /* XXX: if we have a line longer than 1024chars, God help us. */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
639 if( (linebuf = (char *)calloc(1, linelength)) == NULL ) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
640 faimdprintf(2, "linebuf calloc failed\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
641 return NULL; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
642 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
643 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
644 if(fseek(file, 0, SEEK_END) == -1) { /* use this for sanity check */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
645 perror("getlisting END1 fseek:"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
646 faimdprintf(2, "getlising fseek END1 error\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
647 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
648 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
649 if(fgetpos(file, &size) == -1) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
650 perror("getlisting END1 getpos:"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
651 faimdprintf(2, "getlising getpos END1 error\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
652 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
653 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
654 if(fseek(file, 0, SEEK_SET) != 0) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
655 perror("getlesting fseek(SET):"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
656 faimdprintf(2, "faim: getlisting: couldn't seek to beginning of listing file\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
657 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
658 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
659 bzero(linebuf, linelength); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
660 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
661 size = 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
662 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
663 while(fgets(linebuf, linelength, file)) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
664 totfiles++; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
665 bzero(sizebuf, 9); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
666 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
667 size += strlen(linebuf); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
668 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
669 if(strlen(linebuf) < 23) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
670 faimdprintf(2, "line \"%s\" too short. skipping\n", linebuf); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
671 continue; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
672 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
673 if(linebuf[strlen(linebuf)-1] != '\n') { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
674 faimdprintf(2, "faim: OFT: getlisting -- hit EOF or line too long!\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
675 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
676 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
677 memcpy(sizebuf, linebuf+17, 8); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
678 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
679 totsize += strtol(sizebuf, NULL, 10); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
680 bzero(linebuf, linelength); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
681 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
682 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
683 /* if(size != 0) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
684 faimdprintf(2, "faim: getlisting: size != 0 after while.. %i\n", size); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
685 }*/ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
686 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
687 if(fseek(file, 0, SEEK_SET) == -1) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
688 perror("getlisting END2 fseek:"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
689 faimdprintf(2, "getlising fseek END2 error\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
690 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
691 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
692 free(linebuf); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
693 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
694 /* we're going to ignore checksumming the data for now -- that |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
695 * requires walking the whole listing.txt. it should probably be |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
696 * done at register time and cached, but, eh. */ |
503 | 697 |
698 if(!(fh = (struct aim_fileheader_t*)calloc(1, sizeof(struct aim_fileheader_t)))) | |
699 return NULL; | |
700 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
701 printf( "faim: OFT: getlisting: totfiles: %u, totsize: %lu, size: %lu\n", totfiles, totsize, size); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
702 |
503 | 703 fh->encrypt = 0x0000; |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
704 fh->compress = 0x0000; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
705 fh->totfiles = totfiles; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
706 fh->filesleft = totfiles; /* is this right ?*/ |
503 | 707 fh->totparts = 0x0001; |
708 fh->partsleft = 0x0001; | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
709 fh->totsize = totsize; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
710 fh->size = size; /* ls -l listing.txt */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
711 fh->modtime = (int)time(NULL); /* we'll go with current time for now */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
712 fh->checksum = checksum; /* XXX: checksum ! */ |
503 | 713 fh->rfcsum = 0x00000000; |
714 fh->rfsize = 0x00000000; | |
715 fh->cretime = 0x00000000; | |
716 fh->rfcsum = 0x00000000; | |
717 fh->nrecvd = 0x00000000; | |
718 fh->recvcsum = 0x00000000; | |
719 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
720 /* memset(fh->idstring, 0, sizeof(fh->idstring)); */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
721 memcpy(fh->idstring, "OFT_Windows ICBMFT V1.1 32", sizeof(fh->idstring)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
722 memset(fh->idstring+strlen(fh->idstring), 0, sizeof(fh->idstring)-strlen(fh->idstring)); |
503 | 723 |
724 fh->flags = 0x02; | |
725 fh->lnameoffset = 0x1a; | |
726 fh->lsizeoffset = 0x10; | |
727 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
728 /* memset(fh->dummy, 0, sizeof(fh->dummy)); */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
729 memset(fh->macfileinfo, 0, sizeof(fh->macfileinfo)); |
503 | 730 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
731 fh->nencode = 0x0000; /* we need to figure out these encodings for filenames */ |
503 | 732 fh->nlanguage = 0x0000; |
733 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
734 /* memset(fh->name, 0, sizeof(fh->name)); */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
735 memcpy(fh->name, "listing.txt", sizeof(fh->name)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
736 memset(fh->name+strlen(fh->name), 0, 64-strlen(fh->name)); |
503 | 737 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
738 faimdprintf(2, "faim: OFT: listing fh name %s / %s\n", fh->name, (fh->name+(strlen(fh->name)))); |
503 | 739 return fh; |
740 } | |
741 | |
742 /* | |
743 * establish: create a listening socket on a port. you need to call | |
744 * accept() when it's connected. | |
745 * portnum is the port number to bind to. | |
746 * returns your fd | |
747 */ | |
748 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
749 faim_internal int aim_listenestablish(u_short portnum) |
503 | 750 { |
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
751 #if defined(__linux__) /* XXX what other OS's support getaddrinfo? */ |
503 | 752 int listenfd; |
753 const int on = 1; | |
754 struct addrinfo hints, *res, *ressave; | |
755 char serv[5]; | |
756 sprintf(serv, "%d", portnum); | |
757 memset(&hints, 0, sizeof(struct addrinfo)); | |
758 hints.ai_flags = AI_PASSIVE; | |
759 hints.ai_family = AF_UNSPEC; | |
760 hints.ai_socktype = SOCK_STREAM; | |
761 if (getaddrinfo(NULL/*any IP*/, serv, &hints, &res) != 0) { | |
762 perror("getaddrinfo"); | |
763 return -1; | |
764 } | |
765 ressave = res; | |
766 do { | |
767 listenfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); | |
768 if (listenfd < 0) | |
769 continue; | |
770 setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); | |
771 if (bind(listenfd, res->ai_addr, res->ai_addrlen) == 0) | |
772 break; /* success */ | |
773 close(listenfd); | |
774 } while ( (res = res->ai_next) ); | |
775 if (!res) | |
776 return -1; | |
777 if (listen(listenfd, 1024)!=0) { | |
778 perror("listen"); | |
779 return -1; | |
780 } | |
781 freeaddrinfo(ressave); | |
782 return listenfd; | |
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
783 #else |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
784 int listenfd; |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
785 const int on = 1; |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
786 struct sockaddr_in sockin; |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
787 |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
788 if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
789 perror("socket(listenfd)"); |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
790 return -1; |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
791 } |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
792 if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on) != 0)) { |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
793 perror("setsockopt(listenfd)"); |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
794 close(listenfd); |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
795 return -1; |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
796 } |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
797 memset(&sockin, 0, sizeof(struct sockaddr_in)); |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
798 sockin.sin_family = AF_INET; |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
799 sockin.sin_port = htons(portnum); |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
800 if (bind(listenfd, (struct sockaddr *)&sockin, sizeof(struct sockaddr_in)) != 0) { |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
801 perror("bind(listenfd)"); |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
802 close(listenfd); |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
803 return -1; |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
804 } |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
805 if (listen(listenfd, 4) != 0) { |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
806 perror("listen(listenfd)"); |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
807 close(listenfd); |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
808 return -1; |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
809 } |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
810 |
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
811 return listenfd; |
640
2c0a7d245bd2
[gaim-migrate @ 650]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
812 #endif |
503 | 813 } |
814 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
815 faim_internal int aim_get_command_rendezvous(struct aim_session_t *sess, struct aim_conn_t *conn) |
503 | 816 { |
817 unsigned char hdrbuf1[6]; | |
818 unsigned char *hdr = NULL; | |
819 int hdrlen, hdrtype; | |
820 int flags = 0; | |
821 rxcallback_t userfunc = NULL; | |
822 | |
823 | |
824 memset(hdrbuf1, 0, sizeof(hdrbuf1)); | |
825 | |
826 faim_mutex_lock(&conn->active); /* gets locked down for the entirety */ | |
827 | |
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
828 if ( (hdrlen = aim_recv(conn->fd, hdrbuf1, 6)) < 6) { |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
829 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
830 faimdprintf(2, "faim: rend: read error (fd: %i) %02x%02x%02x%02x%02x%02x (%i)\n", conn->fd, hdrbuf1[0],hdrbuf1[1],hdrbuf1[0],hdrbuf1[0],hdrbuf1[0],hdrbuf1[0],hdrlen); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
831 faim_mutex_unlock(&conn->active); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
832 |
503 | 833 if(hdrlen < 0) |
834 perror("read"); | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
835 else { /* disconnected */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
836 switch(conn->subtype) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
837 case AIM_CONN_SUBTYPE_OFT_DIRECTIM: { /* XXX: clean up cookies here ? */ |
1002
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
838 struct aim_directim_priv *priv = NULL; |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
839 if(!(priv = (struct aim_directim_priv *)conn->priv) ) |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
840 return -1; /* not much we can do */ |
1002
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
841 aim_uncachecookie(sess, priv->cookie, AIM_COOKIETYPE_OFTIM); |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
842 |
1002
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
843 |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
844 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMDISCONNECT)) ) { |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
845 aim_conn_close(conn); |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
846 return userfunc(sess, NULL, conn, priv->sn); |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
847 } |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
848 |
1002
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
849 break; |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
850 } |
1002
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
851 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
852 case AIM_CONN_SUBTYPE_OFT_GETFILE: { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
853 struct aim_filetransfer_priv *priv; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
854 if(!(priv = (struct aim_filetransfer_priv *)conn->priv)) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
855 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
856 |
1002
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
857 aim_uncachecookie(sess, priv->cookie, AIM_COOKIETYPE_OFTGET); |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
858 |
1002
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
859 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILEDISCONNECT)) ) { |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
860 aim_conn_close(conn); |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
861 return userfunc(sess, NULL, conn, priv->sn); |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
862 } |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
863 |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
864 break; |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
865 } |
1002
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
866 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
867 case AIM_CONN_SUBTYPE_OFT_SENDFILE: { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
868 struct aim_filetransfer_priv *priv; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
869 if(!(priv = (struct aim_filetransfer_priv *)conn->priv)) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
870 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
871 |
1002
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
872 aim_uncachecookie(sess, priv->cookie, AIM_COOKIETYPE_OFTSEND); |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
873 |
1002
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
874 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_SENDFILEDISCONNECT)) ) { |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
875 aim_conn_close(conn); |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
876 return userfunc(sess, NULL, conn, priv->sn); |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
877 } |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
878 |
1002
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
879 break; |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
880 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
881 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
882 |
1002
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
883 aim_conn_close(conn); |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
884 aim_conn_kill(sess, &conn); |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
885 |
1d8f05ea6bdf
[gaim-migrate @ 1012]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
886 return -1; |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
887 } |
503 | 888 } |
889 | |
890 hdrlen = aimutil_get16(hdrbuf1+4); | |
891 | |
892 hdrlen -= 6; | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
893 if (!(hdr = malloc(hdrlen))) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
894 faim_mutex_unlock(&conn->active); |
503 | 895 return -1; |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
896 } |
503 | 897 |
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
898 if (aim_recv(conn->fd, hdr, hdrlen) < hdrlen) { |
503 | 899 perror("read"); |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
900 faimdprintf(2,"faim: rend: read2 error\n"); |
503 | 901 free(hdr); |
902 faim_mutex_unlock(&conn->active); | |
903 aim_conn_close(conn); | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
904 return -1; |
503 | 905 } |
906 | |
907 hdrtype = aimutil_get16(hdr); | |
908 | |
909 switch (hdrtype) { | |
910 case 0x0001: { /* directim */ | |
911 int payloadlength = 0; | |
912 char *snptr = NULL; | |
913 struct aim_directim_priv *priv; | |
914 int i; | |
915 | |
916 priv = (struct aim_directim_priv *)calloc(1, sizeof(struct aim_directim_priv)); | |
917 | |
918 payloadlength = aimutil_get32(hdr+22); | |
919 flags = aimutil_get16(hdr+32); | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
920 snptr = (char *)hdr+38; |
503 | 921 |
922 strncpy(priv->sn, snptr, MAXSNLEN); | |
923 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
924 faimdprintf(2, "faim: OFT frame: %04x / %04x / %04x / %s\n", hdrtype, payloadlength, flags, snptr); |
503 | 925 |
926 if (flags == 0x000e) { | |
927 faim_mutex_unlock(&conn->active); | |
928 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING)) ) | |
929 return userfunc(sess, NULL, snptr); | |
930 } else if ((flags == 0x0000) && payloadlength) { | |
931 unsigned char *msg; | |
932 | |
933 if(! (msg = calloc(1, payloadlength+1)) ) { | |
934 faim_mutex_unlock(&conn->active); | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
935 return -1; |
503 | 936 } |
937 | |
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
938 if (aim_recv(conn->fd, msg, payloadlength) < payloadlength) { |
503 | 939 perror("read"); |
940 printf("faim: rend: read3 error\n"); | |
941 free(msg); | |
942 faim_mutex_unlock(&conn->active); | |
943 aim_conn_close(conn); | |
944 return -1; | |
945 } | |
946 faim_mutex_unlock(&conn->active); | |
947 msg[payloadlength] = '\0'; | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
948 faimdprintf(2, "faim: directim: %s/%04x/%04x/%s\n", snptr, payloadlength, flags, msg); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
949 |
503 | 950 |
951 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING)) ) | |
952 i = userfunc(sess, NULL, conn, snptr, msg); | |
953 | |
954 free(msg); | |
955 return i; | |
956 } | |
957 break; | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
958 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
959 #if 0 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
960 /* currently experimental to a non-compiling degree */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
961 case 0x1108: { /* getfile listing.txt incoming tx->rx */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
962 struct aim_filetransfer_priv *ft; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
963 struct aim_fileheader_t *fh; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
964 struct aim_msgcookie_t *cook; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
965 struct aim_conn_type *newoft; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
966 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
967 int commandlen; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
968 char *data; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
969 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
970 faimdprintf(2,"faim: rend: fileget 0x1108\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
971 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
972 if(!(ft = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv)))) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
973 faimdprintf(2, "faim: couldn't malloc ft. um. bad. bad bad. file transfer will likely fail, sorry.\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
974 faim_mutex_unlock(&conn->active); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
975 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
976 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
977 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
978 ft->state = 1; /* we're waaaaiiiting.. */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
979 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
980 fh = aim_oft_getfh(hdr); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
981 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
982 memcpy(&(ft->fh), fh, sizeof(struct aim_fileheader_t)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
983 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
984 if(!(cook = aim_checkcookie(sess, ft->fh.bcookie, AIM_COOKIETYPE_OFTGET))) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
985 faim_mutex_unlock(&conn->active); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
986 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
987 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
988 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
989 if(cook->data) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
990 free(cook->data); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
991 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
992 cook->data = ft; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
993 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
994 aim_cachecookie(sess, cook); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
995 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
996 if(!(newoft = aim_tx_new(AIM_FRAMETYPE_OFT, 0x1209, conn, 0))) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
997 /* XXX: what else do we need to clean up here? */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
998 faim_mutex_unlock(&conn->active); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
999 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1000 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1001 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1002 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1003 aim_oft_buildheader((void *)newoft->hdr.oft.hdr2, ft->fh); /* no change */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1004 newoft->lock = 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1005 aim_tx_enqueue(sess, newoft); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1006 break; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1007 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1008 #endif |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1009 case 0x1209: { /* get file listing ack rx->tx */ |
503 | 1010 struct aim_filetransfer_priv *ft; |
1011 struct aim_fileheader_t *fh; | |
1012 struct aim_msgcookie_t *cook; | |
1013 | |
1014 int commandlen; | |
1015 char *data; | |
1016 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1017 faimdprintf(2,"faim: rend: fileget 0x1209\n"); |
503 | 1018 |
1019 if(!(ft = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv)))) { | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1020 faimdprintf(2, "faim: couldn't malloc ft. um. bad. bad bad. file transfer will likely fail, sorry.\n"); |
503 | 1021 faim_mutex_unlock(&conn->active); |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1022 return -1; |
503 | 1023 } |
1024 | |
1025 fh = aim_oft_getfh(hdr); | |
1026 | |
1027 memcpy(&(ft->fh), fh, sizeof(struct aim_fileheader_t)); | |
1028 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1029 cook = aim_checkcookie(sess, ft->fh.bcookie, AIM_COOKIETYPE_OFTGET); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1030 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1031 /* we currently trust the other client to be giving us Valid |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1032 * Enough input, else this gets to be a messy function (and we |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1033 * won't break like winaim does when it gets bad input =) */ |
503 | 1034 |
1035 if(cook->data) | |
1036 free(cook->data); /* XXX */ | |
1037 | |
1038 cook->data = ft; | |
1039 | |
1040 aim_cachecookie(sess, cook); | |
1041 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1042 /* XXX: have this send chunks of the file instead of the whole |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1043 * file. requires rethinking some code. */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1044 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1045 if(fseek(sess->oft.listing, 0, SEEK_SET) != 0) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1046 perror("get_command_rendezvous 1209 fseek(SET):"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1047 faimdprintf(2, "faim: getlisting: couldn't seek to beginning of listing file\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1048 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1049 commandlen = ft->fh.size; |
503 | 1050 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1051 if((data = (char *)calloc(1, commandlen)) == NULL) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1052 faimdprintf(2, "faim: get_command_rendezvous 1209: couldn't malloc data.\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1053 faim_mutex_unlock(&conn->active); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1054 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1055 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1056 } |
503 | 1057 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1058 for(commandlen = 0; commandlen < ft->fh.size; commandlen++) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1059 if( (data[commandlen] = (unsigned char)fgetc(sess->oft.listing)) == EOF) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1060 faimdprintf(2, "faim: get_command_rendezvous 1209: got early EOF (error?)\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1061 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1062 commandlen = ft->fh.size; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1063 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1064 if (write(conn->fd, data, commandlen) != commandlen) { |
503 | 1065 perror("listing write error"); |
1066 } | |
1067 faim_mutex_unlock(&conn->active); | |
1068 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1069 faimdprintf(2, "faim: get_command_rendezvous: hit end of 1209\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1070 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1071 free(data); |
503 | 1072 |
1073 break; | |
1074 } | |
1075 case 0x120b: { /* get file second */ | |
1076 struct aim_filetransfer_priv *ft; | |
1077 struct aim_msgcookie_t *cook; | |
1078 | |
1079 struct aim_fileheader_t *fh; | |
1080 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1081 faimdprintf(2, "faim: rend: fileget 120b\n"); |
503 | 1082 |
1083 if(!(ft = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv)))) { | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1084 faimdprintf(2, "faim: couldn't malloc ft. um. bad. bad bad. file transfer will likely fail, sorry.\n"); |
503 | 1085 faim_mutex_unlock(&conn->active); |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1086 return -1; |
503 | 1087 } |
1088 | |
1089 fh = aim_oft_getfh(hdr); | |
1090 | |
1091 memcpy(&(ft->fh), fh, sizeof(struct aim_fileheader_t)); | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1092 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1093 if(!(cook = aim_checkcookie(sess, ft->fh.bcookie, AIM_COOKIETYPE_OFTGET))) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1094 faim_mutex_unlock(&conn->active); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1095 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1096 } |
503 | 1097 |
1098 if(cook->data) | |
1099 free(cook->data); /* XXX: integrate cookie caching */ | |
1100 | |
1101 cook->data = ft; | |
1102 | |
1103 aim_cachecookie(sess, cook); | |
1104 | |
1105 faim_mutex_unlock(&conn->active); | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1106 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1107 /* call listing.txt rx confirm */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1108 |
503 | 1109 break; |
1110 } | |
1111 case 0x120c: { /* yet more get file */ | |
1112 struct aim_filetransfer_priv *ft; | |
1113 struct aim_msgcookie_t *cook; | |
1114 struct aim_fileheader_t *listingfh; | |
1115 struct command_tx_struct *newoft; | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1116 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1117 int i; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1118 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1119 rxcallback_t userfunc; |
503 | 1120 |
1121 printf("faim: rend: fileget 120c\n"); | |
1122 | |
1123 if(!(ft = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv)))) { | |
1124 printf("faim: couldn't malloc ft. um. bad. bad bad. file transfer will likely fail, sorry.\n"); | |
1125 faim_mutex_unlock(&conn->active); | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1126 return -1; |
503 | 1127 } |
1128 | |
1129 if(hdrlen != 0x100) | |
1130 printf("faim: fileget_command(120c): um. hdrlen != 0x100..\n"); | |
1131 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1132 listingfh = aim_oft_getfh((char *)hdr); |
503 | 1133 |
1134 memcpy(&(ft->fh), listingfh, sizeof(struct aim_fileheader_t)); | |
1135 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1136 if(!(cook = aim_checkcookie(sess, ft->fh.bcookie, AIM_COOKIETYPE_OFTGET))) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1137 faim_mutex_unlock(&conn->active); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1138 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1139 } |
503 | 1140 |
1141 if(cook->data) | |
1142 free(cook->data); /* XXX */ | |
1143 | |
1144 cook->data = ft; | |
1145 | |
1146 aim_cachecookie(sess, cook); | |
1147 | |
1148 faim_mutex_unlock(&conn->active); | |
1149 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1150 faimdprintf(2, "faim: fileget: %s seems to want %s\n", ft->sn, ft->fh.name); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1151 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1152 if( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILEFILEREQ)) ) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1153 i = userfunc(sess, NULL, conn, &ft->fh, cook->cookie); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1154 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1155 if(i < 0) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1156 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1157 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1158 if(!(newoft = aim_tx_new(AIM_FRAMETYPE_OFT, 0x0101, conn, 0))) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1159 faimdprintf(2, "faim: send_final_transfer: tx_new OFT failed\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1160 return -1; |
503 | 1161 } |
1162 | |
1163 newoft->lock = 1; | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1164 |
503 | 1165 memcpy(newoft->hdr.oft.magic, "OFT2", 4); |
1166 newoft->hdr.oft.hdr2len = 0xf8; /* 0x100 - 8 */ | |
1167 | |
1168 if (!(newoft->hdr.oft.hdr2 = calloc(1,newoft->hdr.oft.hdr2len))) { | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1169 newoft->lock = 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1170 aim_tx_destroy(newoft); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1171 return -1; |
503 | 1172 } |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1173 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1174 /* memcpy(listingfh->bcookie, ft->fh.bcookie, 8); */ |
503 | 1175 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1176 listingfh->nrecvd = 0; /* these need reset for protocol-correctness */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1177 listingfh->recvcsum = 0; |
503 | 1178 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1179 aim_oft_buildheader((void *)newoft->hdr.oft.hdr2, listingfh); |
503 | 1180 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1181 newoft->lock = 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1182 aim_tx_enqueue(sess, newoft); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1183 faimdprintf(2, "faim: OFT: OFT file enqueued.\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1184 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1185 if( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILEFILEREQ)) == NULL) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1186 return 1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1187 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1188 i = userfunc(sess, NULL, conn, listingfh, listingfh->bcookie); |
503 | 1189 |
1190 free(listingfh); | |
1191 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1192 return i; |
503 | 1193 |
1194 break; | |
1195 } | |
1196 case 0x0202: { /* get file: ready to recieve data */ | |
1197 struct aim_fileheader_t *fh; | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1198 fh = aim_oft_getfh((char *)hdr); |
503 | 1199 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1200 faimdprintf(2, "faim: get_rend: looks like we're ready to send data.(oft 0x0202)\n"); |
503 | 1201 |
1202 faim_mutex_unlock(&conn->active); | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1203 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1204 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILEFILESEND)) == NULL) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1205 return 1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1206 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1207 return userfunc(sess, NULL, conn, fh); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1208 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1209 free(fh); |
503 | 1210 |
1211 break; | |
1212 } | |
1213 case 0x0204: { /* get file: finished. close it up */ | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1214 int i; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1215 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1216 struct aim_fileheader_t *fh; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1217 fh = aim_oft_getfh((char *)hdr); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1218 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1219 faimdprintf(2, "faim: get_rend: looks like we're done with a transfer (oft 0x0204)\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1220 |
503 | 1221 faim_mutex_unlock(&conn->active); |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1222 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1223 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILECOMPLETE)) ) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1224 i = userfunc(sess, NULL, conn, fh); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1225 else |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1226 i = 1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1227 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1228 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1229 free(fh); */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1230 /* not sure where to do this yet, as we need to keep it to allow multiple file sends... bleh */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1231 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1232 return i; |
503 | 1233 break; |
1234 } | |
1235 default: { | |
1236 printf("OFT frame: type %04x\n", hdrtype); | |
1237 /* data connection may be unreliable here */ | |
1238 faim_mutex_unlock(&conn->active); | |
1239 break; | |
1240 } | |
1241 } /* switch */ | |
1242 | |
1243 free(hdr); | |
1244 | |
1245 return 0; | |
1246 } | |
1247 | |
1248 /* | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1249 * aim_oft_registerlisting() |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1250 * sess: aim session |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1251 * file: opened FILE * |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1252 * listingdir: the path to listing.txt |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1253 * returns -1 on error, 0 on success. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1254 * |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1255 * it's not my problem if the listing fd is already set. |
503 | 1256 */ |
1257 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1258 faim_export int aim_oft_registerlisting(struct aim_session_t *sess, FILE *file, char* listingdir) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1259 { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1260 if(!sess) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1261 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1262 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1263 /* XXX: checksum each file in the listing */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1264 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1265 #if 0 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1266 if(sess->oft.listing) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1267 faimdprintf(1, "We already have a file pointer. Closing and overwriting.\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1268 fclose(sess->oft.listing); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1269 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1270 #endif |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1271 sess->oft.listing = file; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1272 #if 0 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1273 if(sess->oft.listingdir) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1274 faimdprintf(1, "We already have a directory string. Freeing and overwriting\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1275 free(sess->oft.listingdir); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1276 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1277 #endif |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1278 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1279 if( (sess->oft.listingdir = (char *)calloc(1, strlen(listingdir)+1)) ) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1280 memcpy(sess->oft.listingdir, listingdir, strlen(listingdir)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1281 else |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1282 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1283 return 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1284 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1285 |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
642
diff
changeset
|
1286 faim_internal struct aim_fileheader_t *aim_oft_getfh(unsigned char *hdr) |
503 | 1287 { |
1288 struct aim_fileheader_t *fh; | |
1289 int i, j; | |
1290 | |
1291 if(!(fh = calloc(1, sizeof(struct aim_fileheader_t)))) | |
1292 return NULL; | |
1293 | |
1294 /* [0] and [1] are the type. we can ignore those here. */ | |
1295 | |
1296 i = 2; | |
1297 | |
1298 for(j = 0; j < 8; j++, i++) | |
1299 fh->bcookie[j] = hdr[i]; | |
1300 fh->encrypt = aimutil_get16(hdr+i); | |
1301 i += 2; | |
1302 fh->compress = aimutil_get16(hdr+i); | |
1303 i += 2; | |
1304 fh->totfiles = aimutil_get16(hdr+i); | |
1305 i += 2; | |
1306 fh->filesleft = aimutil_get16(hdr+i); | |
1307 i += 2; | |
1308 fh->totparts = aimutil_get16(hdr+i); | |
1309 i += 2; | |
1310 fh->partsleft = aimutil_get16(hdr+i); | |
1311 i += 2; | |
1312 fh->totsize = aimutil_get32(hdr+i); | |
1313 i += 4; | |
1314 fh->size = aimutil_get32(hdr+i); | |
1315 i += 4; | |
1316 fh->modtime = aimutil_get32(hdr+i); | |
1317 i += 4; | |
1318 fh->checksum = aimutil_get32(hdr+i); | |
1319 i += 4; | |
1320 fh->rfrcsum = aimutil_get32(hdr+i); | |
1321 i += 4; | |
1322 fh->rfsize = aimutil_get32(hdr+i); | |
1323 i += 4; | |
1324 fh->cretime = aimutil_get32(hdr+i); | |
1325 i += 4; | |
1326 fh->rfcsum = aimutil_get32(hdr+i); | |
1327 i += 4; | |
1328 fh->nrecvd = aimutil_get32(hdr+i); | |
1329 i += 4; | |
1330 fh->recvcsum = aimutil_get32(hdr+i); | |
1331 i += 4; | |
1332 | |
1333 memcpy(fh->idstring, hdr+i, 32); | |
1334 i += 32; | |
1335 | |
1336 fh->flags = aimutil_get8(hdr+i); | |
1337 i += 1; | |
1338 fh->lnameoffset = aimutil_get8(hdr+i); | |
1339 i += 1; | |
1340 fh->lsizeoffset = aimutil_get8(hdr+i); | |
1341 i += 1; | |
1342 | |
1343 memcpy(fh->dummy, hdr+i, 69); | |
1344 i += 69; | |
1345 | |
1346 memcpy(fh->macfileinfo, hdr+i, 16); | |
1347 i += 16; | |
1348 | |
1349 fh->nencode = aimutil_get16(hdr+i); | |
1350 i += 2; | |
1351 fh->nlanguage = aimutil_get16(hdr+i); | |
1352 i += 2; | |
1353 | |
1354 memcpy(fh->name, hdr+i, 64); | |
1355 i += 64; | |
1356 | |
1357 return fh; | |
1358 } | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1359 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1360 faim_export int aim_oft_checksum(char *buffer, int bufsize, int *checksum) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1361 { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1362 short check0, check1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1363 int i; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1364 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1365 check0 = ((*checksum & 0xFF000000) >> 16); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1366 check1 = ((*checksum & 0x00ff0000) >> 16); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1367 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1368 for(i = 0; i < bufsize; i++) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1369 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1370 if(i % 2) { /* use check1 -- second byte */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1371 if ( (short)buffer[i] > check1 ) { /* wrapping */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1372 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1373 check1 += 0x100; /* this is a cheap way to wrap */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1374 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1375 /* if we're wrapping, decrement the other one */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1376 if(check0 == 0) /* XXX: check this corner case */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1377 check0 = 0x00ff; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1378 else |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1379 check0--; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1380 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1381 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1382 check1 -= buffer[i]; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1383 } else { /* use check0 -- first byte */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1384 if ( (short)buffer[i] > check0 ) { /* wrapping */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1385 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1386 check0 += 0x100; /* this is a cheap way to wrap */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1387 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1388 /* if we're wrapping, decrement the other one */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1389 if(check1 == 0) /* XXX: check this corner case */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1390 check1 = 0x00ff; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1391 else |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1392 check1--; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1393 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1394 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1395 check0 -= buffer[i]; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1396 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1397 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1398 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1399 if(check0 > 0xff || check1 > 0xff) { /* they shouldn't be able to do this. error! */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1400 faimdprintf(2, "check0 or check1 is too high: 0x%04x, 0x%04x\n", check0, check1); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1401 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1402 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1403 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1404 check0 &= 0xff; /* grab just the lowest byte */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1405 check1 &= 0xff; /* this should be clean, but just in case */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1406 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1407 *checksum = ((check0 * 0x1000000) + (check1 * 0x10000)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1408 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1409 return *checksum; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1410 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1411 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1412 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1413 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1414 * aim_oft_buildheader: |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1415 * fills a buffer with network-order fh data. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1416 * returns length written; -1 on error. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1417 * dest: buffer to fill -- pre-alloced |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1418 * listingfh: fh to get data from |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1419 * |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1420 * DOES NOT DO BOUNDS CHECKING! |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1421 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1422 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1423 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1424 faim_internal int aim_oft_buildheader(char *dest,struct aim_fileheader_t *listingfh) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1425 { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1426 int i, curbyte; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1427 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1428 if(!dest || !listingfh) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1429 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1430 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1431 curbyte = 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1432 for(i = 0; i < 8; i++) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1433 curbyte += aimutil_put8(dest+curbyte, listingfh->bcookie[i]); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1434 curbyte += aimutil_put16(dest+curbyte, listingfh->encrypt); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1435 curbyte += aimutil_put16(dest+curbyte, listingfh->compress); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1436 curbyte += aimutil_put16(dest+curbyte, listingfh->totfiles); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1437 curbyte += aimutil_put16(dest+curbyte, listingfh->filesleft); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1438 curbyte += aimutil_put16(dest+curbyte, listingfh->totparts); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1439 curbyte += aimutil_put16(dest+curbyte, listingfh->partsleft); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1440 curbyte += aimutil_put32(dest+curbyte, listingfh->totsize); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1441 curbyte += aimutil_put32(dest+curbyte, listingfh->size); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1442 curbyte += aimutil_put32(dest+curbyte, listingfh->modtime); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1443 curbyte += aimutil_put32(dest+curbyte, listingfh->checksum); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1444 curbyte += aimutil_put32(dest+curbyte, listingfh->rfrcsum); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1445 curbyte += aimutil_put32(dest+curbyte, listingfh->rfsize); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1446 curbyte += aimutil_put32(dest+curbyte, listingfh->cretime); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1447 curbyte += aimutil_put32(dest+curbyte, listingfh->rfcsum); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1448 curbyte += aimutil_put32(dest+curbyte, listingfh->nrecvd); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1449 curbyte += aimutil_put32(dest+curbyte, listingfh->recvcsum); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1450 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1451 memcpy(dest+curbyte, listingfh->idstring, 32); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1452 curbyte += 32; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1453 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1454 curbyte += aimutil_put8(dest+curbyte, listingfh->flags); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1455 curbyte += aimutil_put8(dest+curbyte, listingfh->lnameoffset); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1456 curbyte += aimutil_put8(dest+curbyte, listingfh->lsizeoffset); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1457 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1458 memcpy(dest+curbyte, listingfh->dummy, 69); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1459 curbyte += 69; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1460 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1461 memcpy(dest+curbyte, listingfh->macfileinfo, 16); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1462 curbyte += 16; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1463 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1464 curbyte += aimutil_put16(dest+curbyte, listingfh->nencode); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1465 curbyte += aimutil_put16(dest+curbyte, listingfh->nlanguage); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1466 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1467 memcpy(dest+curbyte, listingfh->name, 64); /* XXX: Filenames longer than 64B */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1468 curbyte += 64; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1469 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1470 return curbyte; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1471 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1472 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1473 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1474 * int aim_getfile_send(struct aim_conn_t *conn, FILE *tosend, struct aim_fileheader_t *fh) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1475 * conn is the OFT connection to shove the data down, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1476 * tosend is the FILE * for the file to send |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1477 * fh is the filled-in fh value |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1478 * returns -1 on error, 1 on success. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1479 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1480 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1481 faim_export int aim_getfile_send(struct aim_conn_t *conn, FILE *tosend, struct aim_fileheader_t *fh) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1482 { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1483 int pos, bufpos, i; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1484 const int bufsize = 4096; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1485 char *buf; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1486 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1487 /* sanity checks */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1488 if(conn->type != AIM_CONN_TYPE_RENDEZVOUS || conn->subtype != AIM_CONN_SUBTYPE_OFT_GETFILE) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1489 faimdprintf(1, "getfile_send: conn->type(0x%04x) != RENDEZVOUS or conn->subtype(0x%04x) != GETFILE\n", conn->type, conn->subtype); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1490 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1491 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1492 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1493 if(!tosend) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1494 faimdprintf(1, "getfile_send: file pointer isn't valid\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1495 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1496 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1497 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1498 if(!fh) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1499 faimdprintf(1, "getfile_send: fh isn't valid\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1500 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1501 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1502 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1503 /* real code */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1504 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1505 if(!(buf = (char *)calloc(1, bufsize))) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1506 perror("faim: getfile_send: calloc:"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1507 faimdprintf(2, "getfile_send calloc error\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1508 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1509 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1510 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1511 pos = 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1512 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1513 if( fseek(tosend, 0, SEEK_SET) == -1) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1514 perror("faim: getfile_send: fseek:"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1515 faimdprintf(2, "getfile_send fseek error\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1516 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1517 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1518 faimdprintf(2, "faim: getfile_send: using %i byte blocks\n", bufsize); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1519 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1520 for(pos = 0; pos < fh->size; pos++) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1521 bufpos = pos % bufsize; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1522 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1523 if(bufpos == 0 && pos > 0) { /* filled our buffer. spit it across the wire */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1524 if ( (i = write(conn->fd, buf, bufsize)) != bufsize ) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1525 perror("faim: getfile_send: write1: "); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1526 faimdprintf(1, "faim: getfile_send: whoopsy, didn't write it all...\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1527 free(buf); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1528 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1529 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1530 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1531 if( (buf[bufpos] = fgetc(tosend)) == EOF) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1532 if(pos != fh->size) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1533 printf("faim: getfile_send: hrm... apparent early EOF at pos 0x%x of 0x%lx\n", pos, fh->size); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1534 faimdprintf(1, "faim: getfile_send: hrm... apparent early EOF at pos 0x%lx of 0x%lx\n", pos, fh->size); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1535 free(buf); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1536 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1537 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1538 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1539 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1540 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1541 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1542 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1543 if( (i = write(conn->fd, buf, bufpos+1)) != (bufpos+1)) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1544 perror("faim: getfile_send: write2: "); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1545 faimdprintf(1, "faim: getfile_send cleanup: whoopsy, didn't write it all...\n"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1546 free(buf); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1547 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1548 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1549 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1550 free(buf); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1551 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1552 fclose(tosend); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1553 return 1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1554 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1555 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1556 /* |
1245
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1557 * int aim_getfile_send_chunk(struct aim_conn_t *conn, FILE *tosend, struct aim_fileheader_t *fh, int pos, int bufsize) |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1558 * conn is the OFT connection to shove the data down, |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1559 * tosend is the FILE * for the file to send |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1560 * fh is the filled-in fh value |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1561 * pos is the position to start at (at beginning should be 0, after 5 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1562 * bytes are sent should be 5); -1 for "don't seek" |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1563 * bufsize is the size of the chunk to send |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1564 * |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1565 * returns -1 on error, new pos on success. |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1566 * |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1567 * |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1568 * Notes on usage: |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1569 * You don't really have to keep track of pos if you don't want |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1570 * to. just always call with -1 for pos, and it'll use the one |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1571 * contained within the FILE *. |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1572 * |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1573 * if (pos + chunksize > fh->size), we only send as much data as we |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1574 * can get (ie: up to fh->size. |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1575 */ |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1576 faim_export int aim_getfile_send_chunk(struct aim_conn_t *conn, FILE *tosend, struct aim_fileheader_t *fh, int pos, int bufsize) |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1577 { |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1578 int bufpos; |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1579 char *buf; |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1580 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1581 /* sanity checks */ |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1582 if(conn->type != AIM_CONN_TYPE_RENDEZVOUS || conn->type != AIM_CONN_SUBTYPE_OFT_GETFILE) { |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1583 faimdprintf(1, "faim: getfile_send_chunk: conn->type(0x%04x) != RENDEZVOUS or conn->subtype(0x%04x) != GETFILE\n", conn->type, conn->subtype); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1584 return -1; |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1585 } |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1586 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1587 if(!tosend) { |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1588 faimdprintf(1, "faim: getfile_send_chunk: file pointer isn't valid\n"); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1589 return -1; |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1590 } |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1591 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1592 if(!fh) { |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1593 faimdprintf(1, "faim: getfile_send_chunk: fh isn't valid\n"); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1594 return -1; |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1595 } |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1596 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1597 /* real code */ |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1598 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1599 if(!(buf = (char *)calloc(1, bufsize))) { |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1600 perror("faim: getfile_send_chunk: calloc:"); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1601 faimdprintf(2, "faim: getfile_send_chunk calloc error\n"); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1602 return -1; |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1603 } |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1604 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1605 if(pos != -1) { |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1606 if( fseek(tosend, pos, SEEK_SET) == -1) { |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1607 perror("faim: getfile_send_chunk: fseek:"); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1608 faimdprintf(2, "faim: getfile_send_chunk fseek error\n"); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1609 } |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1610 } |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1611 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1612 faimdprintf(2, "faim: getfile_send_chunk: using %i byte blocks\n", bufsize); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1613 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1614 for(bufpos = 0; pos < fh->size; bufpos++, pos++) { |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1615 if( (buf[bufpos] = fgetc(tosend)) == EOF) { |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1616 if(pos != fh->size) { |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1617 faimdprintf(1, "faim: getfile_send_chunk: hrm... apparent early EOF at pos 0x%x of 0x%x\n", pos, fh->size); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1618 free(buf); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1619 return -1; |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1620 } |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1621 } |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1622 } |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1623 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1624 if( write(conn->fd, buf, bufpos+1) != (bufpos+1)) { |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1625 faimdprintf(1, "faim: getfile_send_chunk cleanup: whoopsy, didn't write it all...\n"); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1626 free(buf); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1627 return -1; |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1628 } |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1629 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1630 free(buf); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1631 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1632 return (pos + bufpos); |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1633 } |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1634 |
2ac6ccb94229
[gaim-migrate @ 1255]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1200
diff
changeset
|
1635 /* |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1636 * aim_tx_destroy: |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1637 * free's tx_command_t's. if command is locked, doesn't free. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1638 * returns -1 on error (locked struct); 0 on success. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1639 * command is the command to free |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1640 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1641 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1642 faim_internal int aim_tx_destroy(struct command_tx_struct *command) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1643 { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1644 if(command->lock) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1645 return -1; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1646 if(command->data) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1647 free(command->data); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1648 free(command); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1649 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1650 return 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1651 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1652 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1653 #if 0 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1654 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1655 * aim_getfile_intitiate: |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1656 * For those times when we want to open up the directim channel ourselves. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1657 * sess is your session, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1658 * conn is the BOS conn, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1659 * priv is a dummy priv value (we'll let it get filled in later) (if |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1660 * you pass a NULL, we alloc one) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1661 * destsn is the SN to connect to. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1662 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1663 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1664 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1665 faim_export struct aim_conn_t *aim_getfile_initiate(struct aim_session_t *sess, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1666 struct aim_conn_t *conn, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1667 struct aim_getfile_priv *priv, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1668 char *destsn) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1669 { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1670 struct command_tx_struct *newpacket; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1671 struct aim_conn_t *newconn; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1672 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1673 struct aim_msgcookie_t *cookie; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1674 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1675 int curbyte, i, listenfd; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1676 short port = 4443; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1677 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1678 struct hostent *hptr; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1679 struct utsname myname; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1680 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1681 char cap[16]; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1682 char d[4]; /* XXX: IPv6. *cough* */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1683 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1684 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1685 * Open our socket |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1686 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1687 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1688 if( (listenfd = aim_listenestablish(port)) == -1) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1689 return NULL; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1690 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1691 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1692 * get our local IP |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1693 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1694 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1695 if(uname(&myname) < 0) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1696 return NULL; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1697 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1698 if( (hptr = gethostbyname(myname.nodename)) == NULL) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1699 return NULL; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1700 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1701 memcpy(&d, hptr->h_addr_list[0], 4); /* XXX: this probably isn't quite kosher, but it works */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1702 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1703 aim_putcap(cap, 16, AIM_CAPS_IMIMAGE); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1704 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1705 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1706 * create the OSCAR packet |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1707 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1708 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1709 if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10+8+2+1+strlen(destsn)+4+4+0x32))) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1710 return NULL; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1711 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1712 newpacket->lock = 1; /* lock struct */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1713 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1714 curbyte = 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1715 curbyte += aim_putsnac(newpacket->data+curbyte, |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1716 0x0004, 0x0006, 0x0000, sess->snac_nextid); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1717 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1718 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1719 * Generate a random message cookie |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1720 * This cookie needs to be alphanumeric and NULL-terminated to be TOC-compatible. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1721 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1722 for (i=0;i<7;i++) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1723 curbyte += aimutil_put8(newpacket->data+curbyte, 0x30 + ((u_char) random() % 20)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1724 curbyte += aimutil_put8(newpacket->data+curbyte, 0x00); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1725 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1726 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1727 * grab all the data for cookie caching. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1728 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1729 cookie = (struct aim_msgcookie_t *)calloc(1, sizeof(struct aim_msgcookie_t)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1730 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1731 memcpy(cookie->cookie, newpacket->data+curbyte-8, 8); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1732 cookie->type = AIM_COOKIETYPE_OFTIM; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1733 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1734 if(!priv) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1735 priv = (struct aim_directim_priv *)calloc(1, sizeof(struct aim_directim_priv)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1736 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1737 memcpy(priv->cookie, cookie, 8); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1738 memcpy(priv->sn, destsn, sizeof(priv->sn)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1739 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1740 cookie->data = priv; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1741 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1742 aim_cachecookie(sess, cookie); /* cache da cookie */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1743 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1744 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1745 * Channel ID |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1746 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1747 curbyte += aimutil_put16(newpacket->data+curbyte,0x0002); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1748 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1749 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1750 * Destination SN (prepended with byte length) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1751 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1752 curbyte += aimutil_put8(newpacket->data+curbyte,strlen(destsn)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1753 curbyte += aimutil_putstr(newpacket->data+curbyte, destsn, strlen(destsn)); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1754 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1755 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0003); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1756 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0000); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1757 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1758 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1759 * enTLV start |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1760 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1761 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0005); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1762 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0032); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1763 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1764 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1765 * Flag data / ICBM Parameters? |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1766 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1767 curbyte += aimutil_put8(newpacket->data+curbyte, 0x00); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1768 curbyte += aimutil_put8(newpacket->data+curbyte, 0x00); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1769 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1770 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1771 * Cookie |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1772 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1773 curbyte += aimutil_putstr(newpacket->data+curbyte, (char *)cookie, 8); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1774 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1775 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1776 * Capability String |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1777 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1778 curbyte += aimutil_putstr(newpacket->data+curbyte, (char *)cap, 0x10); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1779 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1780 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1781 * 000a/0002 : 0001 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1782 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1783 curbyte += aimutil_put16(newpacket->data+curbyte, 0x000a); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1784 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1785 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0001); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1786 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1787 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1788 * 0003/0004: IP address |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1789 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1790 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1791 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0003); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1792 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0004); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1793 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1794 for(i = 0; i < 4; i++) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1795 curbyte += aimutil_put8(newpacket->data+curbyte, d[i]); /* already in network byte order */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1796 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1797 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1798 * 0005/0002: Port |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1799 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1800 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1801 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0005); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1802 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1803 curbyte += aimutil_put16(newpacket->data+curbyte, port); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1804 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1805 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1806 * 000f/0000: umm.. dunno. Zigamorph[1]? |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1807 * [1]: see esr's TNHD. |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1808 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1809 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1810 curbyte += aimutil_put16(newpacket->data+curbyte, 0x000f); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1811 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0000); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1812 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1813 printf("curbyte: 0x%x\n",curbyte); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1814 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1815 newpacket->commandlen = curbyte; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1816 newpacket->lock = 0; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1817 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1818 aim_tx_enqueue(sess, newpacket); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1819 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1820 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1821 * allocate and set up our connection |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1822 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1823 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1824 i = fcntl(listenfd, F_GETFL, 0); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1825 fcntl(listenfd, F_SETFL, i | O_NONBLOCK); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1826 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1827 newconn = aim_newconn(sess, AIM_CONN_TYPE_RENDEZVOUS_OUT, NULL); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1828 if (!newconn) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1829 perror("aim_newconn"); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1830 aim_conn_kill(sess, &newconn); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1831 return NULL; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1832 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1833 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1834 newconn->fd = listenfd; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1835 newconn->subtype = AIM_CONN_SUBTYPE_OFT_DIRECTIM; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1836 newconn->priv = priv; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1837 printf("faim: listening (fd = %d, unconnected)\n", newconn->fd); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1838 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1839 /* |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1840 * XXX We need some way of closing the listener socket after |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1841 * n seconds of no connection. -- mid |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1842 */ |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1843 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1844 return newconn; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1845 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1846 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
932
diff
changeset
|
1847 #endif |