Mercurial > pidgin
annotate libfaim/aim_rxqueue.c @ 1106:5bc8fdacd2cb
[gaim-migrate @ 1116]
lots of changes.
buddy.c: just in general tried to get things to work better. moving things in the edit list window and signing off should be handled better in the main buddy list window (watch out for flashes).
gaim.h: removed toc-specific things and moved them to toc.c and rvous.c as needed.
gtkhtml.c: possible fix for AOL 6.0 problems (I wasn't able to reproduce the problem before or after the fix, but i fixed what i think might have been causing the problem).
multi.c: moved LOGIN_STEPS from gaim.h here and actually use it now
oscar.c: moved an oscar-specific struct definition from gaim.h here and also handle problems better
perl.c: fix for stupid problem
rvous.c: first pass at attempt to be able to remove toc.c and rvous.c (though this will never happen; gaim will support toc as long as aol does) without cruft. gaim is now only dependent on toc.c and rvous.c for toc_build_config and parse_toc_buddy_list, which gaim needs to save and read its buddy list.
toc.c: rewrote the signin process so that the read()'s won't block. it's not actually a non-blocking read; it's just that it won't ever get to the read until there's data to be read (thanks to the gdk_input watcher). this means the cancel button should work after it's connected, but it's still not a non-blocking connect.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Mon, 20 Nov 2000 07:24:18 +0000 |
| parents | efcacae6acdb |
| children | ed8855ae6632 |
| rev | line source |
|---|---|
| 2 | 1 /* |
| 237 | 2 * aim_rxqueue.c |
| 3 * | |
| 4 * This file contains the management routines for the receive | |
| 5 * (incoming packet) queue. The actual packet handlers are in | |
| 6 * aim_rxhandlers.c. | |
| 2 | 7 */ |
| 8 | |
|
283
0f14e6d8a51b
[gaim-migrate @ 293]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
279
diff
changeset
|
9 #include <faim/aim.h> |
|
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
10 |
|
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
11 #ifndef _WIN32 |
|
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
12 #include <sys/socket.h> |
|
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
13 #endif |
|
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
14 |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
15 /* |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
16 * Since not all implementations support MSG_WAITALL, define |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
17 * an alternate guarenteed read function... |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
18 * |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
19 * We keep recv() for systems that can do it because it means |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
20 * a single system call for the entire packet, where read may |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
21 * take more for a badly fragmented packet. |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
22 * |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
23 */ |
|
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
24 faim_internal int aim_recv(int fd, void *buf, size_t count) |
|
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
25 { |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
26 #ifdef MSG_WAITALL |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
27 return recv(fd, buf, count, MSG_WAITALL); |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
28 #else |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
29 int left, ret, cur = 0; |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
30 |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
31 left = count; |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
32 |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
33 while (left) { |
|
889
e1da6a6ec42b
[gaim-migrate @ 899]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
34 ret = recv(fd, ((unsigned char *)buf)+cur, left, 0); |
|
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
35 if (ret == -1) |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
36 return -1; |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
37 if (ret == 0) |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
38 return cur; |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
39 |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
40 cur += ret; |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
41 left -= ret; |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
42 } |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
43 |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
44 return cur; |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
45 #endif |
|
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
46 } |
| 2 | 47 |
| 48 /* | |
| 237 | 49 * Grab a single command sequence off the socket, and enqueue |
| 50 * it in the incoming event queue in a seperate struct. | |
| 51 */ | |
|
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
52 faim_export int aim_get_command(struct aim_session_t *sess, struct aim_conn_t *conn) |
| 2 | 53 { |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
54 unsigned char generic[6]; |
| 237 | 55 struct command_rx_struct *newrx = NULL; |
| 2 | 56 |
| 237 | 57 if (!sess || !conn) |
| 58 return 0; | |
| 2 | 59 |
| 237 | 60 if (conn->fd < 3) /* can happen when people abuse the interface */ |
| 61 return 0; | |
| 2 | 62 |
|
1081
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
889
diff
changeset
|
63 if (conn->status & AIM_CONN_STATUS_INPROGRESS) |
|
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
889
diff
changeset
|
64 return aim_conn_completeconnect(sess, conn); |
|
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
889
diff
changeset
|
65 |
| 237 | 66 /* |
|
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
67 * Rendezvous (client-client) connections do not speak |
|
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
68 * FLAP, so this function will break on them. |
|
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
69 */ |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
70 if (conn->type == AIM_CONN_TYPE_RENDEZVOUS) |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
71 return aim_get_command_rendezvous(sess, conn); |
|
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
445
diff
changeset
|
72 if (conn->type == AIM_CONN_TYPE_RENDEZVOUS_OUT) |
|
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
445
diff
changeset
|
73 return 0; |
|
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
74 |
|
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
75 /* |
| 237 | 76 * Read FLAP header. Six bytes: |
| 77 * | |
| 78 * 0 char -- Always 0x2a | |
| 79 * 1 char -- Channel ID. Usually 2 -- 1 and 4 are used during login. | |
| 80 * 2 short -- Sequence number | |
| 81 * 4 short -- Number of data bytes that follow. | |
| 82 */ | |
|
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
83 faim_mutex_lock(&conn->active); |
|
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
84 if (aim_recv(conn->fd, generic, 6) < 6){ |
|
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
445
diff
changeset
|
85 aim_conn_close(conn); |
|
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
86 faim_mutex_unlock(&conn->active); |
| 237 | 87 return -1; |
| 88 } | |
| 2 | 89 |
| 237 | 90 /* |
| 91 * This shouldn't happen unless the socket breaks, the server breaks, | |
| 92 * or we break. We must handle it just in case. | |
| 93 */ | |
| 94 if (generic[0] != 0x2a) { | |
| 95 faimdprintf(1, "Bad incoming data!"); | |
|
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
445
diff
changeset
|
96 aim_conn_close(conn); |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
97 faim_mutex_unlock(&conn->active); |
| 237 | 98 return -1; |
| 99 } | |
| 2 | 100 |
| 101 /* allocate a new struct */ | |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
102 if (!(newrx = (struct command_rx_struct *)malloc(sizeof(struct command_rx_struct)))) { |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
103 faim_mutex_unlock(&conn->active); |
| 237 | 104 return -1; |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
105 } |
| 237 | 106 memset(newrx, 0x00, sizeof(struct command_rx_struct)); |
| 2 | 107 |
| 237 | 108 newrx->lock = 1; /* lock the struct */ |
| 109 | |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
110 /* we're doing OSCAR if we're here */ |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
111 newrx->hdrtype = AIM_FRAMETYPE_OSCAR; |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
112 |
| 237 | 113 /* store channel -- byte 2 */ |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
114 newrx->hdr.oscar.type = (char) generic[1]; |
| 2 | 115 |
| 116 /* store seqnum -- bytes 3 and 4 */ | |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
117 newrx->hdr.oscar.seqnum = aimutil_get16(generic+2); |
| 2 | 118 |
| 119 /* store commandlen -- bytes 5 and 6 */ | |
| 237 | 120 newrx->commandlen = aimutil_get16(generic+4); |
| 121 | |
| 122 newrx->nofree = 0; /* free by default */ | |
| 2 | 123 |
| 124 /* malloc for data portion */ | |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
125 if (!(newrx->data = (u_char *) malloc(newrx->commandlen))) { |
| 237 | 126 free(newrx); |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
127 faim_mutex_unlock(&conn->active); |
| 237 | 128 return -1; |
| 129 } | |
| 2 | 130 |
| 131 /* read the data portion of the packet */ | |
|
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
132 if (aim_recv(conn->fd, newrx->data, newrx->commandlen) < newrx->commandlen){ |
| 237 | 133 free(newrx->data); |
| 134 free(newrx); | |
|
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
445
diff
changeset
|
135 aim_conn_close(conn); |
|
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
136 faim_mutex_unlock(&conn->active); |
| 237 | 137 return -1; |
| 138 } | |
|
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
139 faim_mutex_unlock(&conn->active); |
| 2 | 140 |
| 237 | 141 newrx->conn = conn; |
| 2 | 142 |
| 237 | 143 newrx->next = NULL; /* this will always be at the bottom */ |
| 144 newrx->lock = 0; /* unlock */ | |
| 2 | 145 |
| 146 /* enqueue this packet */ | |
| 237 | 147 if (sess->queue_incoming == NULL) { |
| 148 sess->queue_incoming = newrx; | |
| 149 } else { | |
| 150 struct command_rx_struct *cur; | |
| 151 | |
| 152 /* | |
| 153 * This append operation takes a while. It might be faster | |
| 154 * if we maintain a pointer to the last entry in the queue | |
| 155 * and just update that. Need to determine if the overhead | |
| 156 * to maintain that is lower than the overhead for this loop. | |
| 157 */ | |
| 158 for (cur = sess->queue_incoming; cur->next; cur = cur->next) | |
| 159 ; | |
| 160 cur->next = newrx; | |
| 161 } | |
| 162 | |
| 163 newrx->conn->lastactivity = time(NULL); | |
| 2 | 164 |
| 165 return 0; | |
| 166 } | |
| 167 | |
| 168 /* | |
| 237 | 169 * Purge recieve queue of all handled commands (->handled==1). Also |
| 170 * allows for selective freeing using ->nofree so that the client can | |
| 171 * keep the data for various purposes. | |
| 172 * | |
| 173 * If ->nofree is nonzero, the frame will be delinked from the global list, | |
| 174 * but will not be free'ed. The client _must_ keep a pointer to the | |
| 175 * data -- libfaim will not! If the client marks ->nofree but | |
| 176 * does not keep a pointer, it's lost forever. | |
| 177 * | |
| 2 | 178 */ |
|
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
179 faim_export void aim_purge_rxqueue(struct aim_session_t *sess) |
| 2 | 180 { |
| 237 | 181 struct command_rx_struct *cur = NULL; |
| 182 struct command_rx_struct *tmp; | |
| 2 | 183 |
| 237 | 184 if (sess->queue_incoming == NULL) |
| 185 return; | |
| 186 | |
| 187 if (sess->queue_incoming->next == NULL) { | |
| 188 if (sess->queue_incoming->handled) { | |
| 189 tmp = sess->queue_incoming; | |
| 190 sess->queue_incoming = NULL; | |
| 191 | |
| 192 if (!tmp->nofree) { | |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
193 if (tmp->hdrtype == AIM_FRAMETYPE_OFT) |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
194 free(tmp->hdr.oft.hdr2); |
| 237 | 195 free(tmp->data); |
| 196 free(tmp); | |
| 197 } else | |
| 198 tmp->next = NULL; | |
| 2 | 199 } |
| 237 | 200 return; |
| 201 } | |
| 2 | 202 |
| 237 | 203 for(cur = sess->queue_incoming; cur->next != NULL; ) { |
| 204 if (cur->next->handled) { | |
| 205 tmp = cur->next; | |
| 206 cur->next = tmp->next; | |
| 207 if (!tmp->nofree) { | |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
208 if (tmp->hdrtype == AIM_FRAMETYPE_OFT) |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
209 free(tmp->hdr.oft.hdr2); |
| 237 | 210 free(tmp->data); |
| 211 free(tmp); | |
| 212 } else | |
| 213 tmp->next = NULL; | |
| 214 } | |
| 215 cur = cur->next; | |
| 2 | 216 |
| 237 | 217 /* |
| 218 * Be careful here. Because of the way we just | |
| 219 * manipulated the pointer, cur may be NULL and | |
| 220 * the for() will segfault doing the check unless | |
| 221 * we find this case first. | |
| 222 */ | |
| 223 if (cur == NULL) | |
| 224 break; | |
| 225 } | |
| 226 | |
| 227 return; | |
| 2 | 228 } |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
229 |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
230 /* |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
231 * Since aim_get_command will aim_conn_kill dead connections, we need |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
232 * to clean up the rxqueue of unprocessed connections on that socket. |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
233 * |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
234 * XXX: this is something that was handled better in the old connection |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
235 * handling method, but eh. |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
236 */ |
|
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
237 faim_internal void aim_rxqueue_cleanbyconn(struct aim_session_t *sess, struct aim_conn_t *conn) |
|
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
238 { |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
239 struct command_rx_struct *currx; |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
240 |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
241 for (currx = sess->queue_incoming; currx; currx = currx->next) { |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
242 if ((!currx->handled) && (currx->conn == conn)) |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
243 currx->handled = 1; |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
244 } |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
245 return; |
|
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
246 } |
