From 7b0bc7f291e7a34e59c1f4418a195343e3fc1c81 Mon Sep 17 00:00:00 2001 From: mid Date: Wed, 3 Oct 2001 18:44:59 +0000 Subject: [PATCH] - 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. --- CHANGES | 9 +++++ include/aim.h | 20 +++++++--- include/aim_internal.h | 4 +- src/buddylist.c | 2 +- src/chat.c | 12 +++--- src/ft.c | 2 +- src/im.c | 24 +++++------ src/info.c | 84 ++++++++++++++++++++++++++++++++++++--- src/login.c | 4 +- src/tlv.c | 5 ++- utils/faimtest/chat.c | 16 ++++---- utils/faimtest/faimtest.c | 46 +++++++++++---------- utils/faimtest/faimtest.h | 4 +- utils/faimtest/ft.c | 4 +- 14 files changed, 167 insertions(+), 69 deletions(-) diff --git a/CHANGES b/CHANGES index 7057e7e..1ccb4dd 100644 --- 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 diff --git a/include/aim.h b/include/aim.h index 91111dd..100e0b4 100644 --- a/include/aim.h +++ b/include/aim.h @@ -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 diff --git a/include/aim_internal.h b/include/aim_internal.h index b82e1cd..1de7758 100644 --- a/include/aim_internal.h +++ b/include/aim_internal.h @@ -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); diff --git a/src/buddylist.c b/src/buddylist.c index c809576..f68626c 100644 --- a/src/buddylist.c +++ b/src/buddylist.c @@ -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); diff --git a/src/chat.c b/src/chat.c index ba96e27..4dc491d 100644 --- a/src/chat.c +++ b/src/chat.c @@ -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. diff --git a/src/ft.c b/src/ft.c index 7a27cab..e85ac24 100644 --- 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; diff --git a/src/im.c b/src/im.c index 20bd1ba..b47b14c 100644 --- 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)) { diff --git a/src/info.c b/src/info.c index 99330b5..5a01c07 100644 --- a/src/info.c +++ b/src/info.c @@ -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; diff --git a/src/login.c b/src/login.c index 85ea9d0..ba4bed7 100644 --- a/src/login.c +++ b/src/login.c @@ -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); diff --git a/src/tlv.c b/src/tlv.c index f751005..a4b7f7e 100644 --- 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; diff --git a/utils/faimtest/chat.c b/utils/faimtest/chat.c index e9a5f80..12183dc 100644 --- a/utils/faimtest/chat.c +++ b/utils/faimtest/chat.c @@ -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); diff --git a/utils/faimtest/faimtest.c b/utils/faimtest/faimtest.c index 45367aa..7315631 100644 --- a/utils/faimtest/faimtest.c +++ b/utils/faimtest/faimtest.c @@ -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); /* diff --git a/utils/faimtest/faimtest.h b/utils/faimtest/faimtest.h index abd95ee..f4e7051 100644 --- a/utils/faimtest/faimtest.h +++ b/utils/faimtest/faimtest.h @@ -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); diff --git a/utils/faimtest/ft.c b/utils/faimtest/ft.c index 17f010a..cb20a71 100644 --- a/utils/faimtest/ft.c +++ b/utils/faimtest/ft.c @@ -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; -- 2.45.1