]> andersk Git - libfaim.git/blobdiff - src/im.c
- Wed Oct 3 11:07:22 PDT 2001
[libfaim.git] / src / im.c
index 4a604d8f4e5f212ad28c4b9f55d316a6a499137e..b47b14c66fcb39ff8a9b31c13ce931db96e0eecf 100644 (file)
--- a/src/im.c
+++ b/src/im.c
@@ -145,7 +145,7 @@ faim_export fu32_t aim_iconsum(const fu8_t *buf, int buflen)
 faim_export int aim_send_im_ext(aim_session_t *sess, aim_conn_t *conn, struct aim_sendimext_args *args)
 {
        static const fu8_t deffeatures[] = {
-               0x01, 0x01, 0x01, 0x02, 0x42,
+               0x01, 0x01, 0x01, 0x02
        };
        int i, msgtlvlen;
        aim_frame_t *fr;
@@ -794,7 +794,7 @@ static int incomingim_ch1_parsemsgs(aim_session_t *sess, fu8_t *data, int len, s
  *             0101 000b 0000 0000 3c2f 4854 4d4c 3e   another ASCII part
  *
  */
-static int incomingim_ch1(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, fu16_t channel, struct aim_userinfo_s *userinfo, aim_bstream_t *bs, fu8_t *cookie)
+static int incomingim_ch1(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, fu16_t channel, aim_userinfo_t *userinfo, aim_bstream_t *bs, fu8_t *cookie)
 {
        fu16_t type, length;
        aim_rxcallback_t userfunc;
@@ -893,7 +893,7 @@ static int incomingim_ch1(aim_session_t *sess, aim_module_t *mod, aim_frame_t *r
        return ret;
 }
 
-static int incomingim_ch2_buddylist(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
+static int incomingim_ch2_buddylist(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
 {
        aim_rxcallback_t userfunc;
        int ret = 0;
@@ -955,14 +955,15 @@ static int incomingim_ch2_buddylist(aim_session_t *sess, aim_module_t *mod, aim_
        return ret;
 }
 
-static int incomingim_ch2_buddyicon(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
+static int incomingim_ch2_buddyicon(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
 {
        aim_rxcallback_t userfunc;
        int ret = 0;
        aim_tlv_t *miscinfo;
        aim_bstream_t tbs;
 
-       miscinfo = aim_gettlv(list2, 0x2711, 1);
+       if (!(miscinfo = aim_gettlv(list2, 0x2711, 1)))
+               return 0;
        aim_bstream_init(&tbs, miscinfo->value, miscinfo->length);
 
        args->info.icon.checksum = aimbs_get32(&tbs);
@@ -978,7 +979,7 @@ static int incomingim_ch2_buddyicon(aim_session_t *sess, aim_module_t *mod, aim_
        return ret;
 }
 
-static int incomingim_ch2_voice(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
+static int incomingim_ch2_voice(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
 {
        aim_msgcookie_t *cachedcook;
        int ret = 0;
@@ -1004,7 +1005,7 @@ static int incomingim_ch2_voice(aim_session_t *sess, aim_module_t *mod, aim_fram
        return ret;
 }
 
-static int incomingim_ch2_chat(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
+static int incomingim_ch2_chat(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
 {
        aim_tlv_t *miscinfo;
        aim_bstream_t tbs;
@@ -1037,7 +1038,7 @@ static int incomingim_ch2_chat(aim_session_t *sess, aim_module_t *mod, aim_frame
        return ret;
 }
 
-static int incomingim_ch2_getfile(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
+static int incomingim_ch2_getfile(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
 {
        char ip[30];
        aim_msgcookie_t *cachedcook;
@@ -1082,7 +1083,7 @@ static int incomingim_ch2_getfile(aim_session_t *sess, aim_module_t *mod, aim_fr
        return ret;
 }
 
-static int incomingim_ch2_sendfile(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
+static int incomingim_ch2_sendfile(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
 {
 #if 0
        char ip[30];
@@ -1144,7 +1145,7 @@ static int incomingim_ch2_sendfile(aim_session_t *sess, aim_module_t *mod, aim_f
        return 0;
 }
 
-static int incomingim_ch2_imimage(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
+static int incomingim_ch2_imimage(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args, aim_tlvlist_t *list2)
 {
        aim_rxcallback_t userfunc;
        int ret = 0;
@@ -1203,7 +1204,7 @@ static int incomingim_ch2_imimage(aim_session_t *sess, aim_module_t *mod, aim_fr
 }
 
 /* XXX Ugh.  I think its obvious. */
-static int incomingim_ch2(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, fu16_t channel, struct aim_userinfo_s *userinfo, aim_tlvlist_t *tlvlist, fu8_t *cookie)
+static int incomingim_ch2(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, fu16_t channel, aim_userinfo_t *userinfo, aim_tlvlist_t *tlvlist, fu8_t *cookie)
 {
        aim_tlv_t *block1;
        aim_tlvlist_t *list2;
@@ -1356,9 +1357,9 @@ static int incomingim(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, a
        int i, ret = 0;
        fu8_t cookie[8];
        fu16_t channel;
-       struct aim_userinfo_s userinfo;
+       aim_userinfo_t userinfo;
 
-       memset(&userinfo, 0x00, sizeof(struct aim_userinfo_s));
+       memset(&userinfo, 0x00, sizeof(aim_userinfo_t));
 
        /*
         * Read ICBM Cookie.  And throw away.
@@ -1541,7 +1542,7 @@ static int missedcall(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, a
        int ret = 0;
        aim_rxcallback_t userfunc;
        fu16_t channel, nummissed, reason;
-       struct aim_userinfo_s userinfo;
+       aim_userinfo_t userinfo;
 
        while (aim_bstream_empty(bs)) { 
 
@@ -1574,6 +1575,9 @@ static int clienterr(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, ai
        if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
                 ret = userfunc(sess, rx, channel, sn, reason);
 
+       free(ck);
+       free(sn);
+
        return ret;
 }
 
@@ -1583,6 +1587,7 @@ static int msgack(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_m
        fu16_t type;
        fu8_t snlen, *ck;
        char *sn;
+       int ret = 0;
 
        ck = aimbs_getraw(bs, 8);
        type = aimbs_get16(bs);
@@ -1590,12 +1595,12 @@ static int msgack(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_m
        sn = aimbs_getstr(bs, snlen);
 
        if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
-               return userfunc(sess, rx, type, sn);
+               ret = userfunc(sess, rx, type, sn);
 
        free(sn);
        free(ck);
 
-       return 0;
+       return ret;
 }
 
 static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
This page took 0.043103 seconds and 4 git commands to generate.