comparison src/protocols/oscar/rxqueue.c @ 10267:9cafe038c95e

[gaim-migrate @ 11413] This is some white-space cleanup for oscar, and send an empty channel 4 FLAP when disconnecting. This would have hopefully fixed the problem Luke was seeing where his AIM account wasn't being signed offline for a few hours. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Fri, 26 Nov 2004 03:52:00 +0000
parents ec3e041dc3bd
children 361c9170d8af
comparison
equal deleted inserted replaced
10266:2a9ec10e0c4c 10267:9cafe038c95e
3 * (incoming packet) queue. The actual packet handlers are in 3 * (incoming packet) queue. The actual packet handlers are in
4 * rxhandlers.c. 4 * rxhandlers.c.
5 */ 5 */
6 6
7 #define FAIM_INTERNAL 7 #define FAIM_INTERNAL
8 #include <aim.h> 8 #include <aim.h>
9 9
10 #ifndef _WIN32 10 #ifndef _WIN32
11 #include <sys/socket.h> 11 #include <sys/socket.h>
12 #endif 12 #endif
13 13
14 /* 14 /*
15 * 15 *
16 */ 16 */
17 faim_internal int aim_recv(int fd, void *buf, size_t count) 17 faim_internal int aim_recv(int fd, void *buf, size_t count)
18 { 18 {
19 int left, cur; 19 int left, cur;
20 20
21 for (cur = 0, left = count; left; ) { 21 for (cur = 0, left = count; left; ) {
22 int ret; 22 int ret;
23 23
24 ret = recv(fd, ((unsigned char *)buf)+cur, left, 0); 24 ret = recv(fd, ((unsigned char *)buf)+cur, left, 0);
25 25
26 /* Of course EOF is an error, only morons disagree with that. */ 26 /* Of course EOF is an error, only morons disagree with that. */
27 if (ret <= 0) 27 if (ret <= 0)
28 return -1; 28 return -1;
42 { 42 {
43 int red = 0; 43 int red = 0;
44 44
45 if (!bs || (fd < 0) || (count < 0)) 45 if (!bs || (fd < 0) || (count < 0))
46 return -1; 46 return -1;
47 47
48 if (count > (bs->len - bs->offset)) 48 if (count > (bs->len - bs->offset))
49 count = bs->len - bs->offset; /* truncate to remaining space */ 49 count = bs->len - bs->offset; /* truncate to remaining space */
50 50
51 if (count) { 51 if (count) {
52 52
84 */ 84 */
85 static int aim_get_command_flap(aim_session_t *sess, aim_conn_t *conn, aim_frame_t *fr) 85 static int aim_get_command_flap(aim_session_t *sess, aim_conn_t *conn, aim_frame_t *fr)
86 { 86 {
87 fu8_t hdr_raw[6]; 87 fu8_t hdr_raw[6];
88 aim_bstream_t hdr; 88 aim_bstream_t hdr;
89 89
90 fr->hdrtype = AIM_FRAMETYPE_FLAP; 90 fr->hdrtype = AIM_FRAMETYPE_FLAP;
91 91
92 /* 92 /*
93 * Read FLAP header. Six bytes total. 93 * Read FLAP header. Six bytes total.
94 * 94 *
100 * 0x02 | Sequence number, 2 bytes. 100 * 0x02 | Sequence number, 2 bytes.
101 * 0x04 | Number of data bytes that follow, 2 bytes. 101 * 0x04 | Number of data bytes that follow, 2 bytes.
102 */ 102 */
103 aim_bstream_init(&hdr, hdr_raw, sizeof(hdr_raw)); 103 aim_bstream_init(&hdr, hdr_raw, sizeof(hdr_raw));
104 if (aim_bstream_recv(&hdr, conn->fd, 6) < 6) { 104 if (aim_bstream_recv(&hdr, conn->fd, 6) < 6) {
105 aim_conn_close(conn); 105 aim_conn_close(sess, conn);
106 return -1; 106 return -1;
107 } 107 }
108 108
109 aim_bstream_rewind(&hdr); 109 aim_bstream_rewind(&hdr);
110 110
112 * This shouldn't happen unless the socket breaks, the server breaks, 112 * This shouldn't happen unless the socket breaks, the server breaks,
113 * or we break. We must handle it just in case. 113 * or we break. We must handle it just in case.
114 */ 114 */
115 if (aimbs_get8(&hdr) != 0x2a) { 115 if (aimbs_get8(&hdr) != 0x2a) {
116 faimdprintf(sess, 0, "Invalid FLAP frame received on FLAP connection!"); 116 faimdprintf(sess, 0, "Invalid FLAP frame received on FLAP connection!");
117 aim_conn_close(conn); 117 aim_conn_close(sess, conn);
118 return -1; 118 return -1;
119 } 119 }
120 120
121 fr->hdr.flap.channel = aimbs_get8(&hdr); 121 fr->hdr.flap.channel = aimbs_get8(&hdr);
122 fr->hdr.flap.seqnum = aimbs_get16(&hdr); 122 fr->hdr.flap.seqnum = aimbs_get16(&hdr);
123 123
124 return aimbs_get16(&hdr); 124 return aimbs_get16(&hdr);
140 /* 140 /*
141 * Read rendezvous header 141 * Read rendezvous header
142 */ 142 */
143 aim_bstream_init(&hdr, hdr_raw, sizeof(hdr_raw)); 143 aim_bstream_init(&hdr, hdr_raw, sizeof(hdr_raw));
144 if (aim_bstream_recv(&hdr, conn->fd, 8) < 8) { 144 if (aim_bstream_recv(&hdr, conn->fd, 8) < 8) {
145 aim_conn_close(conn); 145 aim_conn_close(sess, conn);
146 return -1; 146 return -1;
147 } 147 }
148 148
149 aim_bstream_rewind(&hdr); 149 aim_bstream_rewind(&hdr);
150 150
210 aim_bstream_init(&fr->data, payload, payloadlen); 210 aim_bstream_init(&fr->data, payload, payloadlen);
211 211
212 /* read the payload */ 212 /* read the payload */
213 if (aim_bstream_recv(&fr->data, conn->fd, payloadlen) < payloadlen) { 213 if (aim_bstream_recv(&fr->data, conn->fd, payloadlen) < payloadlen) {
214 aim_frame_destroy(fr); /* free's payload */ 214 aim_frame_destroy(fr); /* free's payload */
215 aim_conn_close(conn); 215 aim_conn_close(sess, conn);
216 return -1; 216 return -1;
217 } 217 }
218 } else 218 } else
219 aim_bstream_init(&fr->data, NULL, 0); 219 aim_bstream_init(&fr->data, NULL, 0);
220 220
232 cur->next = fr; 232 cur->next = fr;
233 } 233 }
234 234
235 fr->conn->lastactivity = time(NULL); 235 fr->conn->lastactivity = time(NULL);
236 236
237 return 0; 237 return 0;
238 } 238 }
239 239
240 /* 240 /*
241 * Purge receive queue of all handled commands (->handled==1). 241 * Purge receive queue of all handled commands (->handled==1).
242 * 242 *
268 aim_frame_t *currx; 268 aim_frame_t *currx;
269 269
270 for (currx = sess->queue_incoming; currx; currx = currx->next) { 270 for (currx = sess->queue_incoming; currx; currx = currx->next) {
271 if ((!currx->handled) && (currx->conn == conn)) 271 if ((!currx->handled) && (currx->conn == conn))
272 currx->handled = 1; 272 currx->handled = 1;
273 } 273 }
274 274
275 return; 275 return;
276 } 276 }