Mercurial > pidgin
diff libfaim/aim_rxqueue.c @ 503:6e318907bcce
[gaim-migrate @ 513]
bringing gaim up to latest libfaim
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Tue, 18 Jul 2000 05:37:39 +0000 |
parents | e4c34ca88d9b |
children | 9a123b171f46 |
line wrap: on
line diff
--- a/libfaim/aim_rxqueue.c Tue Jul 18 05:23:25 2000 +0000 +++ b/libfaim/aim_rxqueue.c Tue Jul 18 05:37:39 2000 +0000 @@ -29,6 +29,8 @@ */ if (conn->type == AIM_CONN_TYPE_RENDEZVOUS) return aim_get_command_rendezvous(sess, conn); + if (conn->type == AIM_CONN_TYPE_RENDEZVOUS_OUT) + return 0; /* * Read FLAP header. Six bytes: @@ -40,7 +42,7 @@ */ faim_mutex_lock(&conn->active); if (read(conn->fd, generic, 6) < 6){ - aim_conn_kill(sess, &conn); + aim_conn_close(conn); faim_mutex_unlock(&conn->active); return -1; } @@ -51,6 +53,7 @@ */ if (generic[0] != 0x2a) { faimdprintf(1, "Bad incoming data!"); + aim_conn_close(conn); faim_mutex_unlock(&conn->active); return -1; } @@ -89,7 +92,7 @@ if (read(conn->fd, newrx->data, newrx->commandlen) < newrx->commandlen){ free(newrx->data); free(newrx); - aim_conn_kill(sess, &conn); + aim_conn_close(conn); faim_mutex_unlock(&conn->active); return -1; } @@ -122,82 +125,6 @@ return 0; } -int aim_get_command_rendezvous(struct aim_session_t *sess, struct aim_conn_t *conn) -{ - unsigned char hdrbuf1[6]; - unsigned char *hdr = NULL; - int hdrlen, hdrtype; - int payloadlength = 0; - int flags = 0; - char *snptr = NULL; - - if (read(conn->fd, hdrbuf1, 6) < 6) { - perror("read"); - printf("faim: rend: read error\n"); - aim_conn_kill(sess, &conn); - return -1; - } - - hdrlen = aimutil_get16(hdrbuf1+4); - - hdrlen -= 6; - hdr = malloc(hdrlen); - - faim_mutex_lock(&conn->active); - if (read(conn->fd, hdr, hdrlen) < hdrlen) { - perror("read"); - printf("faim: rend: read2 error\n"); - free(hdr); - faim_mutex_unlock(&conn->active); - aim_conn_kill(sess, &conn); - return -1; - } - - hdrtype = aimutil_get16(hdr); - - switch (hdrtype) { - case 0x0001: { - payloadlength = aimutil_get32(hdr+22); - flags = aimutil_get16(hdr+32); - snptr = hdr+38; - - printf("OFT frame: %04x / %04x / %04x / %s\n", hdrtype, payloadlength, flags, snptr); - - if (flags == 0x000e) { - printf("directim: %s has started typing\n", snptr); - } else if ((flags == 0x0000) && payloadlength) { - unsigned char *buf; - buf = malloc(payloadlength+1); - - /* XXX theres got to be a better way */ - faim_mutex_lock(&conn->active); - if (recv(conn->fd, buf, payloadlength, MSG_WAITALL) < payloadlength) { - perror("read"); - printf("faim: rend: read3 error\n"); - free(buf); - faim_mutex_unlock(&conn->active); - aim_conn_kill(sess, &conn); - return -1; - } - faim_mutex_unlock(&conn->active); - buf[payloadlength] = '\0'; - printf("directim: %s/%04x/%04x/%s\n", snptr, payloadlength, flags, buf); - aim_send_im_direct(sess, conn, buf); - free(buf); - } - break; - } - default: - printf("OFT frame: type %04x\n", hdrtype); - /* data connection may be unreliable here */ - break; - } /* switch */ - - free(hdr); - - return 0; -} - /* * Purge recieve queue of all handled commands (->handled==1). Also * allows for selective freeing using ->nofree so that the client can