aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/oscar/rxqueue.c
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/oscar/rxqueue.c')
-rw-r--r--protocols/oscar/rxqueue.c192
1 files changed, 113 insertions, 79 deletions
diff --git a/protocols/oscar/rxqueue.c b/protocols/oscar/rxqueue.c
index 9ac8466e..e5c52376 100644
--- a/protocols/oscar/rxqueue.c
+++ b/protocols/oscar/rxqueue.c
@@ -6,7 +6,7 @@
* aim_rxhandlers.c.
*/
-#include <aim.h>
+#include <aim.h>
#include <sys/socket.h>
@@ -15,16 +15,17 @@
*/
int aim_recv(int fd, void *buf, size_t count)
{
- int left, cur;
+ int left, cur;
for (cur = 0, left = count; left; ) {
int ret;
-
- ret = recv(fd, ((unsigned char *)buf)+cur, left, 0);
+
+ ret = recv(fd, ((unsigned char *) buf) + cur, left, 0);
/* Of course EOF is an error, only morons disagree with that. */
- if (ret <= 0)
+ if (ret <= 0) {
return -1;
+ }
cur += ret;
left -= ret;
@@ -41,18 +42,21 @@ static int aim_bstream_recv(aim_bstream_t *bs, int fd, size_t count)
{
int red = 0;
- if (!bs || (fd < 0) || (count < 0))
+ if (!bs || (fd < 0) || (count < 0)) {
return -1;
-
- if (count > (bs->len - bs->offset))
+ }
+
+ if (count > (bs->len - bs->offset)) {
count = bs->len - bs->offset; /* truncate to remaining space */
+ }
if (count) {
red = aim_recv(fd, bs->data + bs->offset, count);
- if (red <= 0)
+ if (red <= 0) {
return -1;
+ }
}
bs->offset += red;
@@ -62,9 +66,10 @@ static int aim_bstream_recv(aim_bstream_t *bs, int fd, size_t count)
int aim_bstream_init(aim_bstream_t *bs, guint8 *data, int len)
{
-
- if (!bs)
+
+ if (!bs) {
return -1;
+ }
bs->data = data;
bs->len = len;
@@ -86,8 +91,9 @@ int aim_bstream_curpos(aim_bstream_t *bs)
int aim_bstream_setpos(aim_bstream_t *bs, int off)
{
- if (off > bs->len)
+ if (off > bs->len) {
return -1;
+ }
bs->offset = off;
@@ -105,9 +111,10 @@ void aim_bstream_rewind(aim_bstream_t *bs)
int aim_bstream_advance(aim_bstream_t *bs, int n)
{
- if (aim_bstream_empty(bs) < n)
+ if (aim_bstream_empty(bs) < n) {
return 0; /* XXX throw an exception */
+ }
bs->offset += n;
return n;
@@ -115,76 +122,83 @@ int aim_bstream_advance(aim_bstream_t *bs, int n)
guint8 aimbs_get8(aim_bstream_t *bs)
{
-
- if (aim_bstream_empty(bs) < 1)
+
+ if (aim_bstream_empty(bs) < 1) {
return 0; /* XXX throw an exception */
-
+
+ }
bs->offset++;
-
+
return aimutil_get8(bs->data + bs->offset - 1);
}
guint16 aimbs_get16(aim_bstream_t *bs)
{
-
- if (aim_bstream_empty(bs) < 2)
+
+ if (aim_bstream_empty(bs) < 2) {
return 0; /* XXX throw an exception */
-
+
+ }
bs->offset += 2;
-
+
return aimutil_get16(bs->data + bs->offset - 2);
}
guint32 aimbs_get32(aim_bstream_t *bs)
{
-
- if (aim_bstream_empty(bs) < 4)
+
+ if (aim_bstream_empty(bs) < 4) {
return 0; /* XXX throw an exception */
-
+
+ }
bs->offset += 4;
-
+
return aimutil_get32(bs->data + bs->offset - 4);
}
guint8 aimbs_getle8(aim_bstream_t *bs)
{
-
- if (aim_bstream_empty(bs) < 1)
+
+ if (aim_bstream_empty(bs) < 1) {
return 0; /* XXX throw an exception */
-
+
+ }
bs->offset++;
-
+
return aimutil_getle8(bs->data + bs->offset - 1);
}
guint16 aimbs_getle16(aim_bstream_t *bs)
{
-
- if (aim_bstream_empty(bs) < 2)
+
+ if (aim_bstream_empty(bs) < 2) {
return 0; /* XXX throw an exception */
-
+
+ }
bs->offset += 2;
-
+
return aimutil_getle16(bs->data + bs->offset - 2);
}
guint32 aimbs_getle32(aim_bstream_t *bs)
{
-
- if (aim_bstream_empty(bs) < 4)
+
+ if (aim_bstream_empty(bs) < 4) {
return 0; /* XXX throw an exception */
-
+
+ }
bs->offset += 4;
-
+
return aimutil_getle32(bs->data + bs->offset - 4);
}
int aimbs_put8(aim_bstream_t *bs, guint8 v)
{
- if (aim_bstream_empty(bs) < 1)
+ if (aim_bstream_empty(bs) < 1) {
return 0; /* XXX throw an exception */
+ }
bs->offset += aimutil_put8(bs->data + bs->offset, v);
return 1;
@@ -193,9 +207,10 @@ int aimbs_put8(aim_bstream_t *bs, guint8 v)
int aimbs_put16(aim_bstream_t *bs, guint16 v)
{
- if (aim_bstream_empty(bs) < 2)
+ if (aim_bstream_empty(bs) < 2) {
return 0; /* XXX throw an exception */
+ }
bs->offset += aimutil_put16(bs->data + bs->offset, v);
return 2;
@@ -204,9 +219,10 @@ int aimbs_put16(aim_bstream_t *bs, guint16 v)
int aimbs_put32(aim_bstream_t *bs, guint32 v)
{
- if (aim_bstream_empty(bs) < 4)
+ if (aim_bstream_empty(bs) < 4) {
return 0; /* XXX throw an exception */
+ }
bs->offset += aimutil_put32(bs->data + bs->offset, v);
return 1;
@@ -215,9 +231,10 @@ int aimbs_put32(aim_bstream_t *bs, guint32 v)
int aimbs_putle8(aim_bstream_t *bs, guint8 v)
{
- if (aim_bstream_empty(bs) < 1)
+ if (aim_bstream_empty(bs) < 1) {
return 0; /* XXX throw an exception */
+ }
bs->offset += aimutil_putle8(bs->data + bs->offset, v);
return 1;
@@ -226,9 +243,10 @@ int aimbs_putle8(aim_bstream_t *bs, guint8 v)
int aimbs_putle16(aim_bstream_t *bs, guint16 v)
{
- if (aim_bstream_empty(bs) < 2)
+ if (aim_bstream_empty(bs) < 2) {
return 0; /* XXX throw an exception */
+ }
bs->offset += aimutil_putle16(bs->data + bs->offset, v);
return 2;
@@ -237,9 +255,10 @@ int aimbs_putle16(aim_bstream_t *bs, guint16 v)
int aimbs_putle32(aim_bstream_t *bs, guint32 v)
{
- if (aim_bstream_empty(bs) < 4)
+ if (aim_bstream_empty(bs) < 4) {
return 0; /* XXX throw an exception */
+ }
bs->offset += aimutil_putle32(bs->data + bs->offset, v);
return 1;
@@ -248,8 +267,9 @@ int aimbs_putle32(aim_bstream_t *bs, guint32 v)
int aimbs_getrawbuf(aim_bstream_t *bs, guint8 *buf, int len)
{
- if (aim_bstream_empty(bs) < len)
+ if (aim_bstream_empty(bs) < len) {
return 0;
+ }
memcpy(buf, bs->data + bs->offset, len);
bs->offset += len;
@@ -261,8 +281,9 @@ guint8 *aimbs_getraw(aim_bstream_t *bs, int len)
{
guint8 *ob;
- if (!(ob = g_malloc(len)))
+ if (!(ob = g_malloc(len))) {
return NULL;
+ }
if (aimbs_getrawbuf(bs, ob, len) < len) {
g_free(ob);
@@ -276,25 +297,27 @@ char *aimbs_getstr(aim_bstream_t *bs, int len)
{
guint8 *ob;
- if (!(ob = g_malloc(len+1)))
+ if (!(ob = g_malloc(len + 1))) {
return NULL;
+ }
if (aimbs_getrawbuf(bs, ob, len) < len) {
g_free(ob);
return NULL;
}
-
+
ob[len] = '\0';
- return (char *)ob;
+ return (char *) ob;
}
int aimbs_putraw(aim_bstream_t *bs, const guint8 *v, int len)
{
- if (aim_bstream_empty(bs) < len)
+ if (aim_bstream_empty(bs) < len) {
return 0; /* XXX throw an exception */
+ }
memcpy(bs->data + bs->offset, v, len);
bs->offset += len;
@@ -304,12 +327,14 @@ int aimbs_putraw(aim_bstream_t *bs, const guint8 *v, int len)
int aimbs_putbs(aim_bstream_t *bs, aim_bstream_t *srcbs, int len)
{
- if (aim_bstream_empty(srcbs) < len)
+ if (aim_bstream_empty(srcbs) < len) {
return 0; /* XXX throw exception (underrun) */
- if (aim_bstream_empty(bs) < len)
+ }
+ if (aim_bstream_empty(bs) < len) {
return 0; /* XXX throw exception (overflow) */
+ }
memcpy(bs->data + bs->offset, srcbs->data + srcbs->offset, len);
bs->offset += len;
srcbs->offset += len;
@@ -318,10 +343,10 @@ int aimbs_putbs(aim_bstream_t *bs, aim_bstream_t *srcbs, int len)
}
/**
- * aim_frame_destroy - free aim_frame_t
- * @frame: the frame to free
+ * aim_frame_destroy - free aim_frame_t
+ * @frame: the frame to free
*
- * returns -1 on error; 0 on success.
+ * returns -1 on error; 0 on success.
*
*/
void aim_frame_destroy(aim_frame_t *frame)
@@ -330,7 +355,7 @@ void aim_frame_destroy(aim_frame_t *frame)
g_free(frame->data.data); /* XXX aim_bstream_free */
g_free(frame);
-}
+}
/*
@@ -343,34 +368,37 @@ int aim_get_command(aim_session_t *sess, aim_conn_t *conn)
aim_bstream_t flaphdr;
aim_frame_t *newrx;
guint16 payloadlen;
-
- if (!sess || !conn)
+
+ if (!sess || !conn) {
return 0;
+ }
- if (conn->fd == -1)
+ if (conn->fd == -1) {
return -1; /* its a aim_conn_close()'d connection */
+ }
/* KIDS, THIS IS WHAT HAPPENS IF YOU USE CODE WRITTEN FOR GUIS IN A DAEMON!
-
+
And wouldn't it make sense to return something that prevents this function
from being called again IMMEDIATELY (and making the program suck up all
CPU time)?...
-
+
if (conn->fd < 3)
- return 0;
+ return 0;
*/
- if (conn->status & AIM_CONN_STATUS_INPROGRESS)
+ if (conn->status & AIM_CONN_STATUS_INPROGRESS) {
return aim_conn_completeconnect(sess, conn);
+ }
aim_bstream_init(&flaphdr, flaphdr_raw, sizeof(flaphdr_raw));
/*
* Read FLAP header. Six bytes:
- *
+ *
* 0 char -- Always 0x2a
* 1 char -- Channel ID. Usually 2 -- 1 and 4 are used during login.
- * 2 short -- Sequence number
+ * 2 short -- Sequence number
* 4 short -- Number of data bytes that follow.
*/
if (aim_bstream_recv(&flaphdr, conn->fd, 6) < 6) {
@@ -390,15 +418,16 @@ int aim_get_command(aim_session_t *sess, aim_conn_t *conn)
imcb_error(sess->aux_data, "FLAP framing disrupted");
aim_conn_close(conn);
return -1;
- }
+ }
/* allocate a new struct */
- if (!(newrx = (aim_frame_t *)g_new0(aim_frame_t,1)))
+ if (!(newrx = (aim_frame_t *) g_new0(aim_frame_t, 1))) {
return -1;
+ }
/* we're doing FLAP if we're here */
newrx->hdrtype = AIM_FRAMETYPE_FLAP;
-
+
newrx->hdr.flap.type = aimbs_get8(&flaphdr);
newrx->hdr.flap.seqnum = aimbs_get16(&flaphdr);
payloadlen = aimbs_get16(&flaphdr);
@@ -421,8 +450,9 @@ int aim_get_command(aim_session_t *sess, aim_conn_t *conn)
aim_conn_close(conn);
return -1;
}
- } else
+ } else {
aim_bstream_init(&newrx->data, NULL, 0);
+ }
aim_bstream_rewind(&newrx->data);
@@ -431,27 +461,28 @@ int aim_get_command(aim_session_t *sess, aim_conn_t *conn)
newrx->next = NULL; /* this will always be at the bottom */
- if (!sess->queue_incoming)
+ if (!sess->queue_incoming) {
sess->queue_incoming = newrx;
- else {
+ } else {
aim_frame_t *cur;
- for (cur = sess->queue_incoming; cur->next; cur = cur->next)
+ for (cur = sess->queue_incoming; cur->next; cur = cur->next) {
;
+ }
cur->next = newrx;
}
newrx->conn->lastactivity = time(NULL);
- return 0;
+ return 0;
}
/*
* Purge recieve queue of all handled commands (->handled==1). Also
* allows for selective freeing using ->nofree so that the client can
- * keep the data for various purposes.
+ * keep the data for various purposes.
*
- * If ->nofree is nonzero, the frame will be delinked from the global list,
+ * If ->nofree is nonzero, the frame will be delinked from the global list,
* but will not be free'ed. The client _must_ keep a pointer to the
* data -- libfaim will not! If the client marks ->nofree but
* does not keep a pointer, it's lost forever.
@@ -465,12 +496,14 @@ void aim_purge_rxqueue(aim_session_t *sess)
if (cur->handled) {
*prev = cur->next;
-
- if (!cur->nofree)
+
+ if (!cur->nofree) {
aim_frame_destroy(cur);
+ }
- } else
+ } else {
prev = &cur->next;
+ }
}
return;
@@ -488,9 +521,10 @@ void aim_rxqueue_cleanbyconn(aim_session_t *sess, aim_conn_t *conn)
aim_frame_t *currx;
for (currx = sess->queue_incoming; currx; currx = currx->next) {
- if ((!currx->handled) && (currx->conn == conn))
+ if ((!currx->handled) && (currx->conn == conn)) {
currx->handled = 1;
- }
+ }
+ }
return;
}