]> andersk Git - libfaim.git/commitdiff
- Wed Oct 3 11:07:22 PDT 2001
authormid <mid>
Wed, 3 Oct 2001 18:44:59 +0000 (18:44 +0000)
committermid <mid>
Wed, 3 Oct 2001 18:44:59 +0000 (18:44 +0000)
  - Fix awful bug in ft listenestablish.
  - struct aim_userinfo_s becomes aim_userinfo_t.
      - I haven't decided what to do with this.  I like it in its current
          form to an extent, but it is also not flexible enough.  But it would
          become too complex and cumbersome if I were to do it more flexibly.
      - Also added a few accessor functions that should be used instead of
          directly accessing the struct, particularly for the capabilities.

14 files changed:
CHANGES
include/aim.h
include/aim_internal.h
src/buddylist.c
src/chat.c
src/ft.c
src/im.c
src/info.c
src/login.c
src/tlv.c
utils/faimtest/chat.c
utils/faimtest/faimtest.c
utils/faimtest/faimtest.h
utils/faimtest/ft.c

diff --git a/CHANGES b/CHANGES
index 7057e7ea7dd1b575e1903697938969b70703a588..1ccb4ddfdea22b43d2ac664157bd4027b4d897ca 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,15 @@
 
 No release numbers
 ------------------
+ - Wed Oct  3 11:07:22 PDT 2001
+  - Fix awful bug in ft listenestablish.
+  - struct aim_userinfo_s becomes aim_userinfo_t.
+      - I haven't decided what to do with this.  I like it in its current
+          form to an extent, but it is also not flexible enough.  But it would
+          become too complex and cumbersome if I were to do it more flexibly.
+      - Also added a few accessor functions that should be used instead of
+          directly accessing the struct, particularly for the capabilities.
+
  - Wed Sep 19 18:50:34 PDT 2001
   - Remove non-standard default features from aim_send_im_ext.
     - Sadly, AOL 5.0 ignores messages with non-standard features.  Once
index 91111dd78792890f365e850dc9847523e78af6d9..100e0b43602b2f768bc3cb9e34a0e706e9845dbf 100644 (file)
@@ -375,21 +375,31 @@ typedef struct aim_session_s {
 /*
  * AIM User Info, Standard Form.
  */
-struct aim_userinfo_s {
+typedef struct {
        char sn[MAXSNLEN+1];
        fu16_t warnlevel;
        fu16_t idletime;
        fu16_t flags;
        fu32_t membersince;
        fu32_t onlinesince;
-       fu32_t sessionlen;  
+       fu32_t sessionlen; 
+       int capspresent;
        fu16_t capabilities;
        struct {
                fu16_t status;
                fu32_t ipaddr;
                fu8_t crap[0x25]; /* until we figure it out... */
        } icqinfo;
-};
+} aim_userinfo_t;
+
+faim_export const char *aim_userinfo_sn(aim_userinfo_t *ui);
+faim_export fu16_t aim_userinfo_flags(aim_userinfo_t *ui);
+faim_export fu16_t aim_userinfo_idle(aim_userinfo_t *ui);
+faim_export float aim_userinfo_warnlevel(aim_userinfo_t *ui);
+faim_export time_t aim_userinfo_membersince(aim_userinfo_t *ui);
+faim_export time_t aim_userinfo_onlinesince(aim_userinfo_t *ui);
+faim_export fu32_t aim_userinfo_sessionlen(aim_userinfo_t *ui);
+faim_export int aim_userinfo_hascap(aim_userinfo_t *ui, fu16_t cap);
 
 #define AIM_FLAG_UNCONFIRMED   0x0001 /* "damned transients" */
 #define AIM_FLAG_ADMINISTRATOR 0x0002
@@ -449,7 +459,7 @@ faim_internal int aim_addtlvtochain32(aim_tlvlist_t **list, const fu16_t type, c
 faim_internal int aim_addtlvtochain_raw(aim_tlvlist_t **list, const fu16_t t, const fu16_t l, const fu8_t *v);
 faim_internal int aim_addtlvtochain_caps(aim_tlvlist_t **list, const fu16_t t, const fu16_t caps);
 faim_internal int aim_addtlvtochain_noval(aim_tlvlist_t **list, const fu16_t type);
-faim_internal int aim_addtlvtochain_userinfo(aim_tlvlist_t **list, fu16_t type, struct aim_userinfo_s *ui);
+faim_internal int aim_addtlvtochain_userinfo(aim_tlvlist_t **list, fu16_t type, aim_userinfo_t *ui);
 faim_internal int aim_addtlvtochain_frozentlvlist(aim_tlvlist_t **list, fu16_t type, aim_tlvlist_t **tl);
 faim_internal int aim_counttlvchain(aim_tlvlist_t **list);
 faim_internal int aim_sizetlvchain(aim_tlvlist_t **list);
@@ -835,7 +845,7 @@ faim_export int aim_denytransfer(aim_session_t *sess, aim_conn_t *conn, const ch
 faim_export aim_conn_t *aim_accepttransfer(aim_session_t *sess, aim_conn_t *conn, const char *sn, const fu8_t *cookie, const fu8_t *ip, fu16_t listingfiles, fu16_t listingtotsize, fu16_t listingsize, fu32_t listingchecksum, fu16_t rendid);
 
 faim_export int aim_getinfo(aim_session_t *, aim_conn_t *, const char *, unsigned short);
-faim_export int aim_sendbuddyoncoming(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *info);
+faim_export int aim_sendbuddyoncoming(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *info);
 faim_export int aim_sendbuddyoffgoing(aim_session_t *sess, aim_conn_t *conn, const char *sn);
 
 #define AIM_IMPARAM_FLAG_CHANMSGS_ALLOWED      0x00000001
index b82e1cd2a52ca0689effd1c4409b3585d6d30085..1de7758c719c2aa32e15d93a4c91cb3abfdf0c99 100644 (file)
@@ -160,8 +160,8 @@ faim_internal int aim_freecookie(aim_session_t *sess, aim_msgcookie_t *cookie);
 faim_internal int aim_msgcookie_gettype(int reqclass);
 faim_internal int aim_cookie_free(aim_session_t *sess, aim_msgcookie_t *cookie);
 
-faim_internal int aim_extractuserinfo(aim_session_t *sess, aim_bstream_t *bs, struct aim_userinfo_s *);
-faim_internal int aim_putuserinfo(aim_bstream_t *bs, struct aim_userinfo_s *info);
+faim_internal int aim_extractuserinfo(aim_session_t *sess, aim_bstream_t *bs, aim_userinfo_t *);
+faim_internal int aim_putuserinfo(aim_bstream_t *bs, aim_userinfo_t *info);
 
 faim_internal int aim_chat_readroominfo(aim_bstream_t *bs, struct aim_chat_roominfo *outinfo);
 
index c80957677ac212e2c5b66fb807bc8d9c7b212b35..f68626c2c28724a0f1b975c203d11bafe2b76874 100644 (file)
@@ -13,7 +13,7 @@
  */
 static int buddychange(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
 {
-       struct aim_userinfo_s userinfo;
+       aim_userinfo_t userinfo;
        aim_rxcallback_t userfunc;
 
        aim_extractuserinfo(sess, bs, &userinfo);
index ba96e27b2310873979b0495a034bfeefe232f068..4dc491dd85b04f892e19d9e06b94ab8697e999dd 100644 (file)
@@ -389,7 +389,7 @@ faim_export int aim_chat_invite(aim_session_t *sess, aim_conn_t *conn, const cha
  */
 static int infoupdate(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
 {
-       struct aim_userinfo_s *userinfo = NULL;
+       aim_userinfo_t *userinfo = NULL;
        aim_rxcallback_t userfunc;
        int ret = 0;
        int usercount = 0;
@@ -443,7 +443,7 @@ static int infoupdate(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, a
                tmptlv = aim_gettlv(tlvlist, 0x0073, 1);
 
                /* Allocate enough userinfo structs for all occupants */
-               userinfo = calloc(usercount, sizeof(struct aim_userinfo_s));
+               userinfo = calloc(usercount, sizeof(aim_userinfo_t));
 
                aim_bstream_init(&occbs, tmptlv->value, tmptlv->length);
 
@@ -551,13 +551,13 @@ static int infoupdate(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, a
 
 static int userlistchange(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
 {
-       struct aim_userinfo_s *userinfo = NULL;
+       aim_userinfo_t *userinfo = NULL;
        aim_rxcallback_t userfunc;
        int curcount = 0, ret = 0;
 
        while (aim_bstream_empty(bs)) {
                curcount++;
-               userinfo = realloc(userinfo, curcount * sizeof(struct aim_userinfo_s));
+               userinfo = realloc(userinfo, curcount * sizeof(aim_userinfo_t));
                aim_extractuserinfo(sess, bs, &userinfo[curcount-1]);
        }
 
@@ -594,7 +594,7 @@ static int userlistchange(aim_session_t *sess, aim_module_t *mod, aim_frame_t *r
  */
 static int incomingmsg(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
 {
-       struct aim_userinfo_s userinfo;
+       aim_userinfo_t userinfo;
        aim_rxcallback_t userfunc;      
        int ret = 0;
        fu8_t *cookie;
@@ -603,7 +603,7 @@ static int incomingmsg(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx,
        char *msg = NULL;
        aim_msgcookie_t *ck;
 
-       memset(&userinfo, 0, sizeof(struct aim_userinfo_s));
+       memset(&userinfo, 0, sizeof(aim_userinfo_t));
 
        /*
         * ICBM Cookie.  Uncache it.
index 7a27cab6b915210edc2f0689dd9fda5096b3177c..e85ac242e3e6e9df5dfd56f8927eeeb76c992e69 100644 (file)
--- a/src/ft.c
+++ b/src/ft.c
@@ -825,7 +825,7 @@ static int listenestablish(fu16_t portnum)
                return -1;
        }
 
-       if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on) != 0)) {
+       if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) != 0) {
                perror("setsockopt(listenfd)");
                close(listenfd);
                return -1;
index 20bd1ba32b0d4775d3fa16f8734a10c8c2586864..b47b14c66fcb39ff8a9b31c13ce931db96e0eecf 100644 (file)
--- a/src/im.c
+++ b/src/im.c
@@ -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,7 +955,7 @@ 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;
@@ -979,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;
@@ -1005,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;
@@ -1038,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;
@@ -1083,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];
@@ -1145,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;
@@ -1204,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;
@@ -1357,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.
@@ -1542,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)) { 
 
index 99330b56117af1bcbc6e50af944985ee492f4b9a..5a01c0764bffab30c77fce8fbc57263b5d10add9 100644 (file)
@@ -43,6 +43,79 @@ faim_export int aim_getinfo(aim_session_t *sess, aim_conn_t *conn, const char *s
        return 0;
 }
 
+faim_export const char *aim_userinfo_sn(aim_userinfo_t *ui)
+{
+
+       if (!ui)
+               return NULL;
+
+       return ui->sn;
+}
+
+faim_export fu16_t aim_userinfo_flags(aim_userinfo_t *ui)
+{
+
+       if (!ui)
+               return 0;
+
+       return ui->flags;
+}
+
+faim_export fu16_t aim_userinfo_idle(aim_userinfo_t *ui)
+{
+
+       if (!ui)
+               return 0;
+
+       return ui->idletime;
+}
+
+faim_export float aim_userinfo_warnlevel(aim_userinfo_t *ui)
+{
+
+       if (!ui)
+               return 0.00;
+
+       return (ui->warnlevel / 10);
+}
+
+faim_export time_t aim_userinfo_membersince(aim_userinfo_t *ui)
+{
+
+       if (!ui)
+               return 0;
+
+       return (time_t)ui->membersince;
+}
+
+faim_export time_t aim_userinfo_onlinesince(aim_userinfo_t *ui)
+{
+
+       if (!ui)
+               return 0;
+
+       return (time_t)ui->onlinesince;
+}
+
+faim_export fu32_t aim_userinfo_sessionlen(aim_userinfo_t *ui)
+{
+
+       if (!ui)
+               return 0;
+
+       return ui->sessionlen;
+}
+
+faim_export int aim_userinfo_hascap(aim_userinfo_t *ui, fu16_t cap)
+{
+
+       if (!ui || !ui->capspresent)
+               return -1;
+
+       return !!(ui->capabilities & cap);
+}
+
+
 /*
  * Capability blocks.  
  */
@@ -158,7 +231,7 @@ faim_internal int aim_putcap(aim_bstream_t *bs, fu16_t caps)
  * AIM is fairly regular about providing user info.  This is a generic 
  * routine to extract it in its standard form.
  */
-faim_internal int aim_extractuserinfo(aim_session_t *sess, aim_bstream_t *bs, struct aim_userinfo_s *outinfo)
+faim_internal int aim_extractuserinfo(aim_session_t *sess, aim_bstream_t *bs, aim_userinfo_t *outinfo)
 {
        int curtlv, tlvcnt;
        fu8_t snlen;
@@ -167,7 +240,7 @@ faim_internal int aim_extractuserinfo(aim_session_t *sess, aim_bstream_t *bs, st
                return -EINVAL;
 
        /* Clear out old data first */
-       memset(outinfo, 0x00, sizeof(struct aim_userinfo_s));
+       memset(outinfo, 0x00, sizeof(aim_userinfo_t));
 
        /*
         * Screen name.  Stored as an unterminated string prepended with a 
@@ -283,6 +356,7 @@ faim_internal int aim_extractuserinfo(aim_session_t *sess, aim_bstream_t *bs, st
                         *
                         */
                        outinfo->capabilities = aim_getcap(sess, bs, length);
+                       outinfo->capspresent = 1;
 
                } else if (type == 0x000e) {
                        /*
@@ -337,7 +411,7 @@ faim_internal int aim_extractuserinfo(aim_session_t *sess, aim_bstream_t *bs, st
 /*
  * Inverse of aim_extractuserinfo()
  */
-faim_internal int aim_putuserinfo(aim_bstream_t *bs, struct aim_userinfo_s *info)
+faim_internal int aim_putuserinfo(aim_bstream_t *bs, aim_userinfo_t *info)
 {
        aim_tlvlist_t *tlvlist = NULL;
 
@@ -373,7 +447,7 @@ faim_internal int aim_putuserinfo(aim_bstream_t *bs, struct aim_userinfo_s *info
        return 0;
 }
 
-faim_export int aim_sendbuddyoncoming(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *info)
+faim_export int aim_sendbuddyoncoming(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *info)
 {
        aim_frame_t *fr;
        aim_snacid_t snacid;
@@ -469,7 +543,7 @@ static int rights(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_m
 
 static int userinfo(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
 {
-       struct aim_userinfo_s userinfo;
+       aim_userinfo_t userinfo;
        char *text_encoding = NULL, *text = NULL;
        aim_rxcallback_t userfunc;
        aim_tlvlist_t *tlvlist;
index 85ea9d085e698cbd4764c1dfc63ad07f79ce3c3c..ba4bed7c670c43542bb94877eee82d978a3863ee 100644 (file)
@@ -617,9 +617,9 @@ static int evilnotify(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, a
 {
        aim_rxcallback_t userfunc;
        fu16_t newevil;
-       struct aim_userinfo_s userinfo;
+       aim_userinfo_t userinfo;
 
-       memset(&userinfo, 0, sizeof(struct aim_userinfo_s));
+       memset(&userinfo, 0, sizeof(aim_userinfo_t));
        
        newevil = aimbs_get16(bs);
 
index f7510057cc9626028aeef23c8e17a81808037ec3..a4b7f7efb5035f83725efa0c4033fe606c1d979a 100644 (file)
--- a/src/tlv.c
+++ b/src/tlv.c
@@ -266,6 +266,9 @@ faim_internal int aim_addtlvtochain_caps(aim_tlvlist_t **list, const fu16_t t, c
        fu8_t buf[16*16]; /* icky fixed length buffer */
        aim_bstream_t bs;
 
+       if (!caps)
+               return 0; /* nothing there anyway */
+
        aim_bstream_init(&bs, buf, sizeof(buf));
 
        aim_putcap(&bs, caps);
@@ -273,7 +276,7 @@ faim_internal int aim_addtlvtochain_caps(aim_tlvlist_t **list, const fu16_t t, c
        return aim_addtlvtochain_raw(list, t, aim_bstream_curpos(&bs), buf);
 }
 
-faim_internal int aim_addtlvtochain_userinfo(aim_tlvlist_t **list, fu16_t type, struct aim_userinfo_s *ui)
+faim_internal int aim_addtlvtochain_userinfo(aim_tlvlist_t **list, fu16_t type, aim_userinfo_t *ui)
 {
        fu8_t buf[1024]; /* bleh */
        aim_bstream_t bs;
index e9a5f8009e67e2f3cb32b7c0c20ef86fa0bb2198..12183dcec996c161b235506b15e5e39888db2d84 100644 (file)
@@ -4,12 +4,12 @@
 static int faimtest_chat_join(aim_session_t *sess, aim_frame_t *fr, ...)
 {
        va_list ap;
-       struct aim_userinfo_s *userinfo;
+       aim_userinfo_t *userinfo;
        int count, i;
 
        va_start(ap, fr);
        count = va_arg(ap, int);
-       userinfo = va_arg(ap, struct aim_userinfo_s *);
+       userinfo = va_arg(ap, aim_userinfo_t *);
        va_end(ap);
 
        dvprintf("faimtest: chat: %s:  New occupants have joined:\n", (char *)fr->conn->priv);
@@ -22,12 +22,12 @@ static int faimtest_chat_join(aim_session_t *sess, aim_frame_t *fr, ...)
 static int faimtest_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...)
 {
        va_list ap;
-       struct aim_userinfo_s *userinfo;
+       aim_userinfo_t *userinfo;
        int count , i;
 
        va_start(ap, fr);
        count = va_arg(ap, int);
-       userinfo = va_arg(ap, struct aim_userinfo_s *);
+       userinfo = va_arg(ap, aim_userinfo_t *);
        va_end(ap);
 
        dvprintf("faimtest: chat: %s:  Some occupants have left:\n", (char *)fr->conn->priv);
@@ -41,7 +41,7 @@ static int faimtest_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...)
 static int faimtest_chat_infoupdate(aim_session_t *sess, aim_frame_t *fr, ...)
 {
        va_list ap;
-       struct aim_userinfo_s *userinfo;
+       aim_userinfo_t *userinfo;
        struct aim_chat_roominfo *roominfo;
        char *roomname;
        int usercount, i;
@@ -54,7 +54,7 @@ static int faimtest_chat_infoupdate(aim_session_t *sess, aim_frame_t *fr, ...)
        roominfo = va_arg(ap, struct aim_chat_roominfo *);
        roomname = va_arg(ap, char *);
        usercount = va_arg(ap, int);
-       userinfo = va_arg(ap, struct aim_userinfo_s *);
+       userinfo = va_arg(ap, aim_userinfo_t *);
        roomdesc = va_arg(ap, char *);
        unknown_c9 = (fu16_t)va_arg(ap, unsigned int);
        creationtime = va_arg(ap, fu32_t);
@@ -86,12 +86,12 @@ static int faimtest_chat_infoupdate(aim_session_t *sess, aim_frame_t *fr, ...)
 static int faimtest_chat_incomingmsg(aim_session_t *sess, aim_frame_t *fr, ...)
 {
        va_list ap;
-       struct aim_userinfo_s *userinfo;
+       aim_userinfo_t *userinfo;
        char *msg;
        char tmpbuf[1152];
 
        va_start(ap, fr);
-       userinfo = va_arg(ap, struct aim_userinfo_s *); 
+       userinfo = va_arg(ap, aim_userinfo_t *);        
        msg = va_arg(ap, char *);
        va_end(ap);
 
index 45367aa2485bd1ebed9880ae3e08a46afa66bed4..73156318d38edbe2418fe85bd2af93a97bd1e4b3 100644 (file)
@@ -938,21 +938,21 @@ static void printuserflags(fu16_t flags)
 
 static int faimtest_parse_userinfo(aim_session_t *sess, aim_frame_t *fr, ...)
 {
-       struct aim_userinfo_s *userinfo;
+       aim_userinfo_t *userinfo;
        char *prof_encoding = NULL;
        char *prof = NULL;
        fu16_t inforeq = 0;
 
        va_list ap;
        va_start(ap, fr);
-       userinfo = va_arg(ap, struct aim_userinfo_s *);
+       userinfo = va_arg(ap, aim_userinfo_t *);
        prof_encoding = va_arg(ap, char *);
        prof = va_arg(ap, char *);
        inforeq = (fu16_t)va_arg(ap, unsigned int);
        va_end(ap);
 
        dvprintf("faimtest: userinfo: sn: %s\n", userinfo->sn);
-       dvprintf("faimtest: userinfo: warnlevel: 0x%04x\n", userinfo->warnlevel);
+       dvprintf("faimtest: userinfo: warnlevel: %f\n", aim_userinfo_warnlevel(userinfo));
        dvprintf("faimtest: userinfo: flags: 0x%04x = ", userinfo->flags);
        printuserflags(userinfo->flags);
        dinlineprintf("\n");
@@ -973,7 +973,7 @@ static int faimtest_parse_userinfo(aim_session_t *sess, aim_frame_t *fr, ...)
        return 1;
 }
 
-static int faimtest_handlecmd(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *userinfo, const char *tmpstr)
+static int faimtest_handlecmd(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, const char *tmpstr)
 {
        struct faimtest_priv *priv = (struct faimtest_priv *)sess->aux_data;
 
@@ -1237,7 +1237,7 @@ static int faimtest_handlecmd(aim_session_t *sess, aim_conn_t *conn, struct aim_
 /*
  * Channel 1: Standard Message
  */
-static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch1_args *args)
+static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch1_args *args)
 {
        struct faimtest_priv *priv = (struct faimtest_priv *)sess->aux_data;
        char *tmpstr;
@@ -1247,7 +1247,7 @@ static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *con
 
        dvprintf("faimtest: icbm: sn = \"%s\"\n", userinfo->sn);
        dvprintf("faimtest: icbm: probable client type: %d\n", clienttype);
-       dvprintf("faimtest: icbm: warnlevel = 0x%04x\n", userinfo->warnlevel);
+       dvprintf("faimtest: icbm: warnlevel = %f\n", aim_userinfo_warnlevel(userinfo));
        dvprintf("faimtest: icbm: flags = 0x%04x = ", userinfo->flags);
        printuserflags(userinfo->flags);
        dinlineprintf("\n");
@@ -1255,7 +1255,7 @@ static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *con
        dvprintf("faimtest: icbm: membersince = %lu\n", userinfo->membersince);
        dvprintf("faimtest: icbm: onlinesince = %lu\n", userinfo->onlinesince);
        dvprintf("faimtest: icbm: idletime = 0x%04x\n", userinfo->idletime);
-       dvprintf("faimtest: icbm: capabilities = 0x%04x\n", userinfo->capabilities);
+       dvprintf("faimtest: icbm: capabilities = %s = 0x%04x\n", userinfo->capspresent ? "present" : "not present", userinfo->capabilities);
 
        dprintf("faimtest: icbm: icbmflags = ");
        if (args->icbmflags & AIM_IMFLAGS_AWAY)
@@ -1364,13 +1364,13 @@ static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *con
 /*
  * Channel 2: Rendevous Request
  */
-static int faimtest_parse_incoming_im_chan2(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args)
+static int faimtest_parse_incoming_im_chan2(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args)
 {
 
        if (args->reqclass == AIM_CAPS_VOICE) {
 
                dvprintf("faimtest: voice invitation: source sn = %s\n", userinfo->sn);
-               dvprintf("faimtest: voice invitation: \twarnlevel = 0x%04x\n", userinfo->warnlevel);
+               dvprintf("faimtest: voice invitation: \twarnlevel = %f\n", aim_userinfo_warnlevel(userinfo));
                dvprintf("faimtest: voice invitation: \tclass = 0x%04x = ", userinfo->flags);
                printuserflags(userinfo->flags);
                dinlineprintf("\n");
@@ -1389,7 +1389,7 @@ static int faimtest_parse_incoming_im_chan2(aim_session_t *sess, aim_conn_t *con
        } else if (args->reqclass == AIM_CAPS_CHAT) {
 
                dvprintf("faimtest: chat invitation: source sn = %s\n", userinfo->sn);
-               dvprintf("faimtest: chat invitation: \twarnlevel = 0x%04x\n", userinfo->warnlevel);
+               dvprintf("faimtest: chat invitation: \twarnlevel = %f\n", aim_userinfo_warnlevel(userinfo));
                dvprintf("faimtest: chat invitation: \tclass = 0x%04x = ", userinfo->flags);
                printuserflags(userinfo->flags);
                dinlineprintf("\n");
@@ -1430,13 +1430,13 @@ static int faimtest_parse_incoming_im_chan2(aim_session_t *sess, aim_conn_t *con
 static int faimtest_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...)
 {
        fu16_t channel;
-       struct aim_userinfo_s *userinfo;
+       aim_userinfo_t *userinfo;
        va_list ap;
        int ret = 0;
 
        va_start(ap, fr);
        channel = (fu16_t)va_arg(ap, unsigned int);
-       userinfo = va_arg(ap, struct aim_userinfo_s *);
+       userinfo = va_arg(ap, aim_userinfo_t *);
 
        if (channel == 1) {
                struct aim_incomingim_ch1_args *args;
@@ -1463,14 +1463,14 @@ static int faimtest_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...)
 
 static int faimtest_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...)
 {
-       struct aim_userinfo_s *userinfo;
+       aim_userinfo_t *userinfo;
 
        va_list ap;
        va_start(ap, fr);
-       userinfo = va_arg(ap, struct aim_userinfo_s *);
+       userinfo = va_arg(ap, aim_userinfo_t *);
        va_end(ap);
 
-       dvprintf("%ld  %s is now online (flags: %04x = %s%s%s%s%s%s%s%s) (caps = 0x%04x)\n",
+       dvprintf("%ld  %s is now online (flags: %04x = %s%s%s%s%s%s%s%s) (caps = %s = 0x%04x)\n",
                        time(NULL),
                        userinfo->sn, userinfo->flags,
                        (userinfo->flags&AIM_FLAG_UNCONFIRMED)?" UNCONFIRMED":"",
@@ -1481,20 +1481,21 @@ static int faimtest_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...)
                        (userinfo->flags&AIM_FLAG_AWAY)?" AWAY":"",
                        (userinfo->flags&AIM_FLAG_UNKNOWN40)?" UNKNOWN40":"",
                        (userinfo->flags&AIM_FLAG_UNKNOWN80)?" UNKNOWN80":"",
+                       userinfo->capspresent ? "present" : "not present",
                        userinfo->capabilities);
        return 1;
 }
 
 static int faimtest_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...)
 {
-       struct aim_userinfo_s *userinfo;
+       aim_userinfo_t *userinfo;
        va_list ap;
        
        va_start(ap, fr);
-       userinfo = va_arg(ap, struct aim_userinfo_s *);
+       userinfo = va_arg(ap, aim_userinfo_t *);
        va_end(ap);
 
-       dvprintf("%ld  %s is now offline (flags: %04x = %s%s%s%s%s%s%s%s) (caps = 0x%04x)\n",
+       dvprintf("%ld  %s is now offline (flags: %04x = %s%s%s%s%s%s%s%s) (caps = %s = 0x%04x)\n",
                         time(NULL),
                         userinfo->sn, userinfo->flags,
                         (userinfo->flags&AIM_FLAG_UNCONFIRMED)?" UNCONFIRMED":"",
@@ -1505,6 +1506,7 @@ static int faimtest_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...)
                         (userinfo->flags&AIM_FLAG_AWAY)?" AWAY":"",
                         (userinfo->flags&AIM_FLAG_UNKNOWN40)?" UNKNOWN40":"",
                         (userinfo->flags&AIM_FLAG_UNKNOWN80)?" UNKNOWN80":"",
+                        userinfo->capspresent ? "present" : "not present",
                         userinfo->capabilities);
 
        return 1;
@@ -1569,11 +1571,11 @@ static int faimtest_parse_misses(aim_session_t *sess, aim_frame_t *fr, ...)
 
        va_list ap;
        fu16_t chan, nummissed, reason;
-       struct aim_userinfo_s *userinfo;
+       aim_userinfo_t *userinfo;
 
        va_start(ap, fr);
        chan = (fu16_t)va_arg(ap, unsigned int);
-       userinfo = va_arg(ap, struct aim_userinfo_s *);
+       userinfo = va_arg(ap, aim_userinfo_t *);
        nummissed = (fu16_t)va_arg(ap, unsigned int);
        reason = (fu16_t)va_arg(ap, unsigned int);
        va_end(ap);
@@ -1691,11 +1693,11 @@ static int faimtest_parse_evilnotify(aim_session_t *sess, aim_frame_t *fr, ...)
 {
        va_list ap;
        fu16_t newevil;
-       struct aim_userinfo_s *userinfo;
+       aim_userinfo_t *userinfo;
 
        va_start(ap, fr);
        newevil = (fu16_t)va_arg(ap, unsigned int);
-       userinfo = va_arg(ap, struct aim_userinfo_s *);
+       userinfo = va_arg(ap, aim_userinfo_t *);
        va_end(ap);
 
        /*
index abd95eec1d561bb97e7de6a1f4e008a0f62c1d52..f4e7051a0d183302c15f9d718be5b86e8a80ea5b 100644 (file)
@@ -48,9 +48,9 @@ void addcb_bos(aim_session_t *sess, aim_conn_t *bosconn);
 
 /* ft.c */
 void getfile_start(aim_session_t *sess, aim_conn_t *conn, const char *sn);
-void getfile_requested(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args);
+void getfile_requested(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args);
 void directim_start(aim_session_t *sess, aim_conn_t *conn, const char *sn);
-void directim_requested(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args);
+void directim_requested(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args);
 
 /* chat.c */
 void chatnav_redirect(aim_session_t *sess, const char *ip, const fu8_t *cookie);
index 17f010a2b90cf6f4aae3b6a027d9fbd6b56f48ac..cb20a71bfd5e0d2e52a4e7626c5a6d738f08e461 100644 (file)
@@ -390,7 +390,7 @@ void getfile_start(aim_session_t *sess, aim_conn_t *conn, const char *sn)
        return;
 }
 
-void getfile_requested(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args)
+void getfile_requested(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args)
 {
        struct faimtest_priv *priv = (struct faimtest_priv *)sess->aux_data;
        aim_conn_t *newconn;
@@ -448,7 +448,7 @@ void directim_start(aim_session_t *sess, aim_conn_t *conn, const char *sn)
        return;
 }
 
-void directim_requested(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args)
+void directim_requested(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args)
 {
        aim_conn_t *newconn;
 
This page took 0.114416 seconds and 5 git commands to generate.