X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/blobdiff_plain/fd0b7da6fe45e0a7a9f81621cfa4293b79f17d86..89bce17768d14f77b0a3fa612d56372f3b6ded5c:/aim_chat.c diff --git a/aim_chat.c b/aim_chat.c index 1d09b1b..85331ed 100644 --- a/aim_chat.c +++ b/aim_chat.c @@ -25,6 +25,10 @@ faim_export struct aim_conn_t *aim_chat_getconn(struct aim_session_t *sess, char for (cur = sess->connlist; cur; cur = cur->next) { if (cur->type != AIM_CONN_TYPE_CHAT) continue; + if (!cur->priv) { + printf("faim: chat: chat connection with no name! (fd = %d)\n", cur->fd); + continue; + } if (strcmp((char *)cur->priv, name) == 0) break; } @@ -38,8 +42,10 @@ faim_export int aim_chat_attachname(struct aim_conn_t *conn, char *roomname) if (!conn || !roomname) return -1; - conn->priv = malloc(strlen(roomname)+1); - strcpy(conn->priv, roomname); + if (conn->priv) + free(conn->priv); + + conn->priv = strdup(roomname); return 0; } @@ -149,10 +155,8 @@ faim_export unsigned long aim_chat_join(struct aim_session_t *sess, i+= aimutil_put16(newpacket->data+i, 2+1+strlen(roomname)+2); i+= aimutil_put16(newpacket->data+i, exchange); i+= aimutil_put8(newpacket->data+i, strlen(roomname)); - memcpy(newpacket->data+i, roomname, strlen(roomname)); - i+= strlen(roomname); - //i+= aimutil_putstr(newpacket->data+i, roomname, strlen(roomname)); - i+= aimutil_put16(newpacket->data+i, 0x0000); + i+= aimutil_putstr(newpacket->data+i, roomname, strlen(roomname)); + i+= aimutil_put16(newpacket->data+i, 0x0000); /* instance? */ /* * Chat hack. @@ -163,8 +167,8 @@ faim_export unsigned long aim_chat_join(struct aim_session_t *sess, * redirect! * */ - sess->pendingjoin = (char *)malloc(strlen(roomname)+1); - strcpy(sess->pendingjoin, roomname); + sess->pendingjoin = strdup(roomname); + sess->pendingjoinexchange = exchange; newpacket->lock = 0; aim_tx_enqueue(sess, newpacket); @@ -552,7 +556,7 @@ faim_export int aim_chat_leaveroom(struct aim_session_t *sess, char *name) struct aim_conn_t *conn; if ((conn = aim_chat_getconn(sess, name))) - aim_conn_kill(sess, &conn); + aim_conn_close(conn); if (!conn) return -1; @@ -574,7 +578,10 @@ faim_export unsigned long aim_chat_invite(struct aim_session_t *sess, int i,curbyte=0; if (!sess || !conn || !sn || !msg || !roomname) - return 0; + return -1; + + if (conn->type != AIM_CONN_TYPE_BOS) + return -1; if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 1152+strlen(sn)+strlen(roomname)+strlen(msg)))) return -1;