src/protocols/oscar/rxqueue.c

Tue, 07 Mar 2006 10:33:22 +0000

author
Stu Tomlinson <nosnilmot@pidgin.im>
date
Tue, 07 Mar 2006 10:33:22 +0000
changeset 13452
1aeb81a13082
parent 13263
7e84acb27008
permissions
-rw-r--r--

[gaim-migrate @ 15826]
Fix bug 1444462 - No info displayed in tooltip for AIM contact

This was caused by unescaped entities in the available message.

13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
1 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
2 * Gaim's oscar protocol plugin
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
3 * This file is the legal property of its developers.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
4 * Please see the AUTHORS file distributed alongside this file.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
5 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
6 * This library is free software; you can redistribute it and/or
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
8 * License as published by the Free Software Foundation; either
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
9 * version 2 of the License, or (at your option) any later version.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
10 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
11 * This library is distributed in the hope that it will be useful,
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
14 * Lesser General Public License for more details.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
15 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
17 * License along with this library; if not, write to the Free Software
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
19 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
20
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 /*
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22 * This file contains the management routines for the receive
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23 * (incoming packet) queue. The actual packet handlers are in
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8735
diff changeset
24 * rxhandlers.c.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
27 #include "oscar.h"
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
28
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
29 #ifndef _WIN32
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
30 #include <sys/socket.h>
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31 #endif
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
33 /*
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
35 */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36 faim_internal int aim_recv(int fd, void *buf, size_t count)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
37 {
10267
05279096b8c8 [gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents: 8880
diff changeset
38 int left, cur;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
39
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
40 for (cur = 0, left = count; left; ) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
41 int ret;
10267
05279096b8c8 [gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents: 8880
diff changeset
42
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
43 ret = recv(fd, ((unsigned char *)buf)+cur, left, 0);
2808
0127a534662c [gaim-migrate @ 2821]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2706
diff changeset
44
0127a534662c [gaim-migrate @ 2821]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2706
diff changeset
45 /* Of course EOF is an error, only morons disagree with that. */
0127a534662c [gaim-migrate @ 2821]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2706
diff changeset
46 if (ret <= 0)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
47 return -1;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
48
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
49 cur += ret;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
50 left -= ret;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
51 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
52
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
53 return cur;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
54 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
55
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
56 /*
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
57 * Read into a byte stream. Will not read more than count, but may read
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
58 * less if there is not enough room in the stream buffer.
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
59 */
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
60 faim_internal int aim_bstream_recv(ByteStream *bs, int fd, size_t count)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
61 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
62 int red = 0;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
63
12427
f30e2b05622c [gaim-migrate @ 14734]
Richard Laager <rlaager@pidgin.im>
parents: 11253
diff changeset
64 if (!bs || (fd < 0))
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
65 return -1;
10267
05279096b8c8 [gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents: 8880
diff changeset
66
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
67 if (count > (bs->len - bs->offset))
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
68 count = bs->len - bs->offset; /* truncate to remaining space */
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
69
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
70 if (count) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
71
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
72 red = aim_recv(fd, bs->data + bs->offset, count);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
73
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
74 if (red <= 0)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
75 return -1;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
76 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
77
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
78 bs->offset += red;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
79
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
80 return red;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
81 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
82
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
83 /**
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
84 * Free an FlapFrame
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
85 *
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
86 * @param frame The frame to free.
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
87 * @return -1 on error; 0 on success.
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
88 */
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
89 faim_internal void aim_frame_destroy(FlapFrame *frame)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
90 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
91
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
92 free(frame->data.data); /* XXX aim_bstream_free */
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
93 free(frame);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
94
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
95 return;
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
96 }
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
97
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
98 /*
13232
149d582e5fbb [gaim-migrate @ 15596]
Mark Doliner <markdoliner@pidgin.im>
parents: 12427
diff changeset
99 * Read a FLAP header from conn into fr, and return the number of
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
100 * bytes in the payload.
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
101 *
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
102 * @return -1 on error, otherwise return the length of the payload.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
103 */
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
104 static int aim_get_command_flap(OscarSession *sess, OscarConnection *conn, FlapFrame *fr)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
105 {
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
106 guint8 hdr_raw[6];
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
107 ByteStream hdr;
10267
05279096b8c8 [gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents: 8880
diff changeset
108
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
109 fr->hdrtype = AIM_FRAMETYPE_FLAP;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
110
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
111 /*
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
112 * Read FLAP header. Six bytes total.
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
113 *
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
114 * Byte # | Description
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
115 * -------|-------------
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
116 * 0x00 | Always 0x2a
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
117 * 0x01 | Channel number, usually "2." "1" is used during login,
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
118 * | 4 is used during logoff.
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
119 * 0x02 | Sequence number, 2 bytes.
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
120 * 0x04 | Number of data bytes that follow, 2 bytes.
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
121 */
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
122 aim_bstream_init(&hdr, hdr_raw, sizeof(hdr_raw));
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
123 if (aim_bstream_recv(&hdr, conn->fd, 6) < 6) {
13255
b318f395092d [gaim-migrate @ 15620]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
124 aim_conn_close(sess, conn);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
125 return -1;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
126 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
127
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
128 aim_bstream_rewind(&hdr);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
129
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
130 /*
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
131 * This shouldn't happen unless the socket breaks, the server breaks,
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
132 * or we break. We must handle it just in case.
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
133 */
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
134 if (aimbs_get8(&hdr) != 0x2a) {
11253
81cbd43ef85e [gaim-migrate @ 13422]
Mark Doliner <markdoliner@pidgin.im>
parents: 11214
diff changeset
135 gaim_debug_misc("oscar", "Invalid FLAP frame received on FLAP connection!");
13255
b318f395092d [gaim-migrate @ 15620]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
136 aim_conn_close(sess, conn);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
137 return -1;
10267
05279096b8c8 [gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents: 8880
diff changeset
138 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
139
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
140 fr->hdr.flap.channel = aimbs_get8(&hdr);
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
141 fr->hdr.flap.seqnum = aimbs_get16(&hdr);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
142
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
143 return aimbs_get16(&hdr);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
144 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
145
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
146 /*
13255
b318f395092d [gaim-migrate @ 15620]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
147 * Read a rendezvous header from conn into fr, and return the number of
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
148 * bytes in the payload.
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
149 *
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
150 * @return -1 on error, otherwise return the length of the payload.
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
151 */
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
152 static int aim_get_command_rendezvous(OscarSession *sess, OscarConnection *conn, FlapFrame *fr)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
153 {
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
154 guint8 hdr_raw[8];
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
155 ByteStream hdr;
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
156
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
157 fr->hdrtype = AIM_FRAMETYPE_OFT;
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
158
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
159 /*
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
160 * Read rendezvous header
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
161 */
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
162 aim_bstream_init(&hdr, hdr_raw, sizeof(hdr_raw));
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
163 if (aim_bstream_recv(&hdr, conn->fd, 8) < 8) {
13255
b318f395092d [gaim-migrate @ 15620]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
164 aim_conn_close(sess, conn);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
165 return -1;
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
166 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
167
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
168 aim_bstream_rewind(&hdr);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
169
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
170 aimbs_getrawbuf(&hdr, fr->hdr.rend.magic, 4);
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
171 fr->hdr.rend.hdrlen = aimbs_get16(&hdr);
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
172 fr->hdr.rend.type = aimbs_get16(&hdr);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
173
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
174 return fr->hdr.rend.hdrlen - 8;
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
175 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
176
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
177 /*
13232
149d582e5fbb [gaim-migrate @ 15596]
Mark Doliner <markdoliner@pidgin.im>
parents: 12427
diff changeset
178 * Grab a single command sequence off the socket, and enqueue it in
149d582e5fbb [gaim-migrate @ 15596]
Mark Doliner <markdoliner@pidgin.im>
parents: 12427
diff changeset
179 * the incoming event queue in a separate struct.
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
180 *
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
181 * @return 0 on success, otherwise return the error number.
13232
149d582e5fbb [gaim-migrate @ 15596]
Mark Doliner <markdoliner@pidgin.im>
parents: 12427
diff changeset
182 * "Success" doesn't mean we have new data, it just means
149d582e5fbb [gaim-migrate @ 15596]
Mark Doliner <markdoliner@pidgin.im>
parents: 12427
diff changeset
183 * the connection isn't dead.
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
184 */
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
185 faim_export int aim_get_command(OscarSession *sess, OscarConnection *conn)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
186 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
187 FlapFrame *fr;
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
188 int payloadlen;
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
189
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
190 if (!sess || !conn)
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 3960
diff changeset
191 return -EINVAL;
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
192
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
193 if (conn->fd == -1)
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
194 return -1; /* it's an aim_conn_close()'d connection */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
195
11214
253372056e12 [gaim-migrate @ 13346]
Jonathan Clark <ardentlygnarly@users.sourceforge.net>
parents: 10271
diff changeset
196 /* If stdin is closed, then zero becomes a valid fd
253372056e12 [gaim-migrate @ 13346]
Jonathan Clark <ardentlygnarly@users.sourceforge.net>
parents: 10271
diff changeset
197 if (conn->fd < 3)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
198 return -1;
11214
253372056e12 [gaim-migrate @ 13346]
Jonathan Clark <ardentlygnarly@users.sourceforge.net>
parents: 10271
diff changeset
199 */
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
200
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
201 if (conn->status & AIM_CONN_STATUS_INPROGRESS)
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
202 return aim_conn_completeconnect(sess, conn);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
203
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
204 if (!(fr = (FlapFrame *)calloc(sizeof(FlapFrame), 1)))
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 3960
diff changeset
205 return -ENOMEM;
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
206
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
207 /*
13255
b318f395092d [gaim-migrate @ 15620]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
208 * Rendezvous (client to client) connections do not speak FLAP, so this
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
209 * function will break on them.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 2931
diff changeset
210 */
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
211 if (conn->type == AIM_CONN_TYPE_RENDEZVOUS)
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
212 payloadlen = aim_get_command_rendezvous(sess, conn, fr);
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
213 else if (conn->type == AIM_CONN_TYPE_LISTENER) {
11253
81cbd43ef85e [gaim-migrate @ 13422]
Mark Doliner <markdoliner@pidgin.im>
parents: 11214
diff changeset
214 gaim_debug_misc("oscar", "AIM_CONN_TYPE_LISTENER on fd %d\n", conn->fd);
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
215 free(fr);
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
216 return -1;
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
217 } else
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
218 payloadlen = aim_get_command_flap(sess, conn, fr);
5927
f83c9f4afb60 [gaim-migrate @ 6367]
Ryan McCabe
parents: 5414
diff changeset
219
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
220 if (payloadlen < 0) {
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
221 free(fr);
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
222 return -1;
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
223 }
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
224
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
225 if (payloadlen > 0) {
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
226 guint8 *payload = NULL;
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
227
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13232
diff changeset
228 if (!(payload = (guint8 *) malloc(payloadlen))) {
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
229 aim_frame_destroy(fr);
5927
f83c9f4afb60 [gaim-migrate @ 6367]
Ryan McCabe
parents: 5414
diff changeset
230 return -1;
f83c9f4afb60 [gaim-migrate @ 6367]
Ryan McCabe
parents: 5414
diff changeset
231 }
f83c9f4afb60 [gaim-migrate @ 6367]
Ryan McCabe
parents: 5414
diff changeset
232
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
233 aim_bstream_init(&fr->data, payload, payloadlen);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
234
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
235 /* read the payload */
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
236 if (aim_bstream_recv(&fr->data, conn->fd, payloadlen) < payloadlen) {
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
237 aim_frame_destroy(fr); /* free's payload */
13255
b318f395092d [gaim-migrate @ 15620]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
238 aim_conn_close(sess, conn);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
239 return -1;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
240 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
241 } else
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
242 aim_bstream_init(&fr->data, NULL, 0);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
243
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
244 aim_bstream_rewind(&fr->data);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
245
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
246 fr->conn = conn;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
247
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
248 /* Enqueue this puppy */
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
249 fr->next = NULL; /* this will always be at the bottom */
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
250 if (sess->queue_incoming == NULL)
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
251 sess->queue_incoming = fr;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
252 else {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
253 FlapFrame *cur;
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
254 for (cur = sess->queue_incoming; cur->next; cur = cur->next);
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
255 cur->next = fr;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
256 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
257
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
258 fr->conn->lastactivity = time(NULL);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
259
10267
05279096b8c8 [gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents: 8880
diff changeset
260 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
261 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
262
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
263 /*
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 7806
diff changeset
264 * Purge receive queue of all handled commands (->handled==1).
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
265 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
266 */
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
267 faim_export void aim_purge_rxqueue(OscarSession *sess)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
268 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
269 FlapFrame *cur, **prev;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
270
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
271 for (prev = &sess->queue_incoming; (cur = *prev); ) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
272 if (cur->handled) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
273 *prev = cur->next;
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
274 aim_frame_destroy(cur);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
275 } else
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
276 prev = &cur->next;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
277 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
278
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
279 return;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
280 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
281
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
282 /*
13263
7e84acb27008 [gaim-migrate @ 15628]
Mark Doliner <markdoliner@pidgin.im>
parents: 13255
diff changeset
283 * Since aim_get_command will oscar_connection_destroy dead connections, we need
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
284 * to clean up the rxqueue of unprocessed connections on that socket.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
285 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
286 * XXX: this is something that was handled better in the old connection
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
287 * handling method, but eh.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
288 */
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
289 faim_internal void aim_rxqueue_cleanbyconn(OscarSession *sess, OscarConnection *conn)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
290 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
291 FlapFrame *currx;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
292
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
293 for (currx = sess->queue_incoming; currx; currx = currx->next) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
294 if ((!currx->handled) && (currx->conn == conn))
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
295 currx->handled = 1;
10267
05279096b8c8 [gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents: 8880
diff changeset
296 }
7806
072628543b7d [gaim-migrate @ 8453]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
297
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
298 return;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
299 }

mercurial