Mercurial > pidgin
annotate libfaim/aim_rxqueue.c @ 936:311b3f72e7b9
[gaim-migrate @ 946]
Sha la la la la la la, mmm, uh huh
Was down at the linux expo, starin' at this blue octane,
Mr. Flynn strikes up a conversation, with a black haired CS Major.
She codes in C while her father hacks, oh, she's suddenly geeky.
We all want something geeky, man I wish I was geeky.
So come hack in silence down through the morning,
sha la la la la la la la, yeah, uhh huh, yeah.
Cut up Mark Spencer, show me some of that free software, and pass
me a laptop, Mr. Flynn!
Believe in me! Help me believe in anything, cuz, I wanna be someone
geeky! Mr. Flynn and Me, tell each other linux tales, and we stare
at the beautiful penguins, it's lookin' at you, oh no no, it's looking
at me. Smiling in the CRT, Mp3's on the stero, when everyone's geeky,
you can never be lonely. Well I'm gonna hack a program, syntax highlighting
in blue and red and black and grey. All of the beautiful colours are very
very meaningingful.
Well you know C is my favorite language, I felt
so symbolic yesterday. If I knew R. Stallman, I'd buy myself a grey keyboard
and hack! Mr. Flynn and me look into the future! We stare at the beautiful
Penguins, it's lookin at me, I dont think so, It's looking at me. Hacking in
the CRT, I bought myself a grey keyboard, When everbody's geeky, I will never
be lonely. I will never be lonely. I'm never gonna be .. loonely.
I wanna be a penguin. Eeh -- everybody wanna pass as birds, they all wanna be
big big birds, but we got different reasons for that. Believe in me, cuz I
don't believe in anything. And I, wanna be someone, geeky, geeky, geeky,
yeaaaah! Mr. Flynn and me, storming through the expo, and we stare at the
beautiful penguin! It's coming for you, man there's got to be one for me!
I wanna be L. Torvalds, Mr. Flynn wishes he was someone just a little more
geeky, when everybody loves you, oh son! It's just about as geeky as you can
be! Mr. Flynn and me .. starin' at the penguins, when I look at slashdot I
wanna see me, staring right back at me. We all wanna be big geeks, but we
dont know why and we don't know how .. when everybody loves me I'll be just
about as geeky as I can be ... Mr. Flynn and me.. gonna be big geeks.
**bows and cheers**
Thank You, Thank You.
committer: Tailor Script <tailor@pidgin.im>
author | Rob Flynn <gaim@robflynn.com> |
---|---|
date | Sun, 24 Sep 2000 22:48:54 +0000 |
parents | e1da6a6ec42b |
children | efcacae6acdb |
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 |
237 | 63 /* |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
64 * Rendezvous (client-client) connections do not speak |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
65 * FLAP, so this function will break on them. |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
66 */ |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
67 if (conn->type == AIM_CONN_TYPE_RENDEZVOUS) |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
68 return aim_get_command_rendezvous(sess, conn); |
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
445
diff
changeset
|
69 if (conn->type == AIM_CONN_TYPE_RENDEZVOUS_OUT) |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
445
diff
changeset
|
70 return 0; |
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
71 |
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
72 /* |
237 | 73 * Read FLAP header. Six bytes: |
74 * | |
75 * 0 char -- Always 0x2a | |
76 * 1 char -- Channel ID. Usually 2 -- 1 and 4 are used during login. | |
77 * 2 short -- Sequence number | |
78 * 4 short -- Number of data bytes that follow. | |
79 */ | |
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
80 faim_mutex_lock(&conn->active); |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
81 if (aim_recv(conn->fd, generic, 6) < 6){ |
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
445
diff
changeset
|
82 aim_conn_close(conn); |
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
83 faim_mutex_unlock(&conn->active); |
237 | 84 return -1; |
85 } | |
2 | 86 |
237 | 87 /* |
88 * This shouldn't happen unless the socket breaks, the server breaks, | |
89 * or we break. We must handle it just in case. | |
90 */ | |
91 if (generic[0] != 0x2a) { | |
92 faimdprintf(1, "Bad incoming data!"); | |
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
445
diff
changeset
|
93 aim_conn_close(conn); |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
94 faim_mutex_unlock(&conn->active); |
237 | 95 return -1; |
96 } | |
2 | 97 |
98 /* allocate a new struct */ | |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
99 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
|
100 faim_mutex_unlock(&conn->active); |
237 | 101 return -1; |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
102 } |
237 | 103 memset(newrx, 0x00, sizeof(struct command_rx_struct)); |
2 | 104 |
237 | 105 newrx->lock = 1; /* lock the struct */ |
106 | |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
107 /* we're doing OSCAR if we're here */ |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
108 newrx->hdrtype = AIM_FRAMETYPE_OSCAR; |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
109 |
237 | 110 /* store channel -- byte 2 */ |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
111 newrx->hdr.oscar.type = (char) generic[1]; |
2 | 112 |
113 /* store seqnum -- bytes 3 and 4 */ | |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
114 newrx->hdr.oscar.seqnum = aimutil_get16(generic+2); |
2 | 115 |
116 /* store commandlen -- bytes 5 and 6 */ | |
237 | 117 newrx->commandlen = aimutil_get16(generic+4); |
118 | |
119 newrx->nofree = 0; /* free by default */ | |
2 | 120 |
121 /* malloc for data portion */ | |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
122 if (!(newrx->data = (u_char *) malloc(newrx->commandlen))) { |
237 | 123 free(newrx); |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
124 faim_mutex_unlock(&conn->active); |
237 | 125 return -1; |
126 } | |
2 | 127 |
128 /* read the data portion of the packet */ | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
129 if (aim_recv(conn->fd, newrx->data, newrx->commandlen) < newrx->commandlen){ |
237 | 130 free(newrx->data); |
131 free(newrx); | |
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
445
diff
changeset
|
132 aim_conn_close(conn); |
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
133 faim_mutex_unlock(&conn->active); |
237 | 134 return -1; |
135 } | |
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
136 faim_mutex_unlock(&conn->active); |
2 | 137 |
237 | 138 newrx->conn = conn; |
2 | 139 |
237 | 140 newrx->next = NULL; /* this will always be at the bottom */ |
141 newrx->lock = 0; /* unlock */ | |
2 | 142 |
143 /* enqueue this packet */ | |
237 | 144 if (sess->queue_incoming == NULL) { |
145 sess->queue_incoming = newrx; | |
146 } else { | |
147 struct command_rx_struct *cur; | |
148 | |
149 /* | |
150 * This append operation takes a while. It might be faster | |
151 * if we maintain a pointer to the last entry in the queue | |
152 * and just update that. Need to determine if the overhead | |
153 * to maintain that is lower than the overhead for this loop. | |
154 */ | |
155 for (cur = sess->queue_incoming; cur->next; cur = cur->next) | |
156 ; | |
157 cur->next = newrx; | |
158 } | |
159 | |
160 newrx->conn->lastactivity = time(NULL); | |
2 | 161 |
162 return 0; | |
163 } | |
164 | |
165 /* | |
237 | 166 * Purge recieve queue of all handled commands (->handled==1). Also |
167 * allows for selective freeing using ->nofree so that the client can | |
168 * keep the data for various purposes. | |
169 * | |
170 * If ->nofree is nonzero, the frame will be delinked from the global list, | |
171 * but will not be free'ed. The client _must_ keep a pointer to the | |
172 * data -- libfaim will not! If the client marks ->nofree but | |
173 * does not keep a pointer, it's lost forever. | |
174 * | |
2 | 175 */ |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
176 faim_export void aim_purge_rxqueue(struct aim_session_t *sess) |
2 | 177 { |
237 | 178 struct command_rx_struct *cur = NULL; |
179 struct command_rx_struct *tmp; | |
2 | 180 |
237 | 181 if (sess->queue_incoming == NULL) |
182 return; | |
183 | |
184 if (sess->queue_incoming->next == NULL) { | |
185 if (sess->queue_incoming->handled) { | |
186 tmp = sess->queue_incoming; | |
187 sess->queue_incoming = NULL; | |
188 | |
189 if (!tmp->nofree) { | |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
190 if (tmp->hdrtype == AIM_FRAMETYPE_OFT) |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
191 free(tmp->hdr.oft.hdr2); |
237 | 192 free(tmp->data); |
193 free(tmp); | |
194 } else | |
195 tmp->next = NULL; | |
2 | 196 } |
237 | 197 return; |
198 } | |
2 | 199 |
237 | 200 for(cur = sess->queue_incoming; cur->next != NULL; ) { |
201 if (cur->next->handled) { | |
202 tmp = cur->next; | |
203 cur->next = tmp->next; | |
204 if (!tmp->nofree) { | |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
205 if (tmp->hdrtype == AIM_FRAMETYPE_OFT) |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
206 free(tmp->hdr.oft.hdr2); |
237 | 207 free(tmp->data); |
208 free(tmp); | |
209 } else | |
210 tmp->next = NULL; | |
211 } | |
212 cur = cur->next; | |
2 | 213 |
237 | 214 /* |
215 * Be careful here. Because of the way we just | |
216 * manipulated the pointer, cur may be NULL and | |
217 * the for() will segfault doing the check unless | |
218 * we find this case first. | |
219 */ | |
220 if (cur == NULL) | |
221 break; | |
222 } | |
223 | |
224 return; | |
2 | 225 } |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
226 |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
227 /* |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
228 * 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
|
229 * to clean up the rxqueue of unprocessed connections on that socket. |
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 * 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
|
232 * handling method, but eh. |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
233 */ |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
234 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
|
235 { |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
236 struct command_rx_struct *currx; |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
237 |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
238 for (currx = sess->queue_incoming; currx; currx = currx->next) { |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
239 if ((!currx->handled) && (currx->conn == conn)) |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
240 currx->handled = 1; |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
241 } |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
242 return; |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
243 } |