From: mid Date: Sun, 11 Mar 2001 05:57:21 +0000 (+0000) Subject: - Sun Mar 11 05:51:45 UTC 2001 (jbm) X-Git-Tag: rel_0_99_2~67 X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/commitdiff_plain/9e8c42253137dc988d9efff551c0840ff8480b1b - Sun Mar 11 05:51:45 UTC 2001 (jbm) - Split off aim_internal.h - Add aim_tx_cleanqueue() - Remove sn from directim callback (use priv) --- diff --git a/CHANGES b/CHANGES index a1166ff..480e74d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,11 @@ No release numbers ------------------ + - Sun Mar 11 05:51:45 UTC 2001 (jbm) + - Split off aim_internal.h + - Add aim_tx_cleanqueue() + - Remove sn from directim callback (use priv) + - Mon Mar 5 01:19:48 UTC 2001 - Fix typo in last CHANGES entry. - Add fix from Eric to keep efence from complaining about malloc(0) diff --git a/include/Makefile.am b/include/Makefile.am index 8f18c9b..3cc2a01 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -1,4 +1,4 @@ -pkginclude_HEADERS = aim.h faimconfig.h aim_cbtypes.h +pkginclude_HEADERS = aim.h aim_internal.h faimconfig.h aim_cbtypes.h noinst_HEADERS = md5.h diff --git a/include/aim.h b/include/aim.h index 0cef221..57cc9ca 100644 --- a/include/aim.h +++ b/include/aim.h @@ -441,12 +441,6 @@ faim_export void aim_conn_kill(struct aim_session_t *sess, struct aim_conn_t **d typedef int (*rxcallback_t)(struct aim_session_t *, struct command_rx_struct *, ...); -#ifdef FAIM_INTERNAL -faim_internal unsigned long aim_genericreq_n(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short subtype); -faim_internal unsigned long aim_genericreq_l(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short subtype, u_long *); -faim_internal unsigned long aim_genericreq_s(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short subtype, u_short *); -#endif - /* aim_login.c */ faim_export int aim_sendconnack(struct aim_session_t *sess, struct aim_conn_t *conn); faim_export int aim_request_login (struct aim_session_t *sess, struct aim_conn_t *conn, char *sn); @@ -457,25 +451,6 @@ faim_export int aim_sendserverready(struct aim_session_t *sess, struct aim_conn_ faim_export unsigned long aim_sendredirect(struct aim_session_t *sess, struct aim_conn_t *conn, unsigned short servid, char *ip, char *cookie); faim_export void aim_purge_rxqueue(struct aim_session_t *); -#ifdef FAIM_INTERNAL -faim_internal int aim_authkeyparse(struct aim_session_t *sess, struct command_rx_struct *command); -faim_internal void aim_rxqueue_cleanbyconn(struct aim_session_t *sess, struct aim_conn_t *conn); -faim_internal int aim_recv(int fd, void *buf, size_t count); - -faim_internal int aim_parse_unknown(struct aim_session_t *, struct command_rx_struct *command, ...); -faim_internal int aim_get_command_rendezvous(struct aim_session_t *sess, struct aim_conn_t *conn); - -faim_internal int aim_tx_sendframe(struct aim_session_t *sess, struct command_tx_struct *cur); -faim_internal unsigned int aim_get_next_txseqnum(struct aim_conn_t *); -faim_internal struct command_tx_struct *aim_tx_new(struct aim_session_t *sess, struct aim_conn_t *conn, unsigned char framing, int chan, int datalen); -faim_internal int aim_tx_enqueue(struct aim_session_t *, struct command_tx_struct *); -faim_internal int aim_tx_printqueue(struct aim_session_t *); -faim_internal int aim_parse_hostonline(struct aim_session_t *sess, struct command_rx_struct *command, ...); -faim_internal int aim_parse_hostversions(struct aim_session_t *sess, struct command_rx_struct *command, ...); -faim_internal int aim_parse_accountconfirm(struct aim_session_t *sess, struct command_rx_struct *command); -faim_internal int aim_parse_infochange(struct aim_session_t *sess, struct command_rx_struct *command); -#endif /* FAIM_INTERNAL */ - #define AIM_TX_QUEUED 0 /* default */ #define AIM_TX_IMMEDIATE 1 #define AIM_TX_USER 2 @@ -497,37 +472,6 @@ faim_export int aim_conn_setlatency(struct aim_conn_t *conn, int newval); faim_export int aim_conn_addhandler(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short type, rxcallback_t newhandler, u_short flags); faim_export int aim_clearhandlers(struct aim_conn_t *conn); -#ifdef FAIM_INTERNAL -faim_internal rxcallback_t aim_callhandler(struct aim_session_t *sess, struct aim_conn_t *conn, u_short family, u_short type); -#endif - -#ifdef FAIM_INTERNAL -/* - * Generic SNAC structure. Rarely if ever used. - */ -struct aim_snac_t { - u_long id; - u_short family; - u_short type; - u_short flags; - void *data; - time_t issuetime; - struct aim_snac_t *next; -}; -faim_internal void aim_initsnachash(struct aim_session_t *sess); -faim_internal unsigned long aim_newsnac(struct aim_session_t *, struct aim_snac_t *newsnac); -faim_internal unsigned long aim_cachesnac(struct aim_session_t *sess, const unsigned short family, const unsigned short type, const unsigned short flags, const void *data, const int datalen); -faim_internal struct aim_snac_t *aim_remsnac(struct aim_session_t *, u_long id); -faim_internal int aim_cleansnacs(struct aim_session_t *, int maxage); -faim_internal int aim_putsnac(u_char *, int, int, int, u_long); -#endif /* FAIM_INTERNAL */ - -#ifdef FAIM_INTERNAL -faim_internal void aim_connrst(struct aim_session_t *); -faim_internal struct aim_conn_t *aim_conn_getnext(struct aim_session_t *); -faim_internal struct aim_conn_t *aim_cloneconn(struct aim_session_t *sess, struct aim_conn_t *src); -#endif /* FAIM_INTERNAL */ - faim_export void aim_conn_close(struct aim_conn_t *deadconn); faim_export struct aim_conn_t *aim_newconn(struct aim_session_t *, int type, char *dest); faim_export int aim_conngetmaxfd(struct aim_session_t *); @@ -585,39 +529,9 @@ faim_export unsigned long aim_icq_setstatus(struct aim_session_t *sess, struct a faim_export struct aim_fileheader_t *aim_getlisting(struct aim_session_t *sess, FILE *); -#ifdef FAIM_INTERNAL -faim_internal int aim_oft_buildheader(unsigned char *,struct aim_fileheader_t *); -faim_internal int aim_listenestablish(u_short); -faim_internal int aim_tx_destroy(struct command_tx_struct *); -#endif /* FAIM_INTERNAL */ - /* aim_rxhandlers.c */ faim_export int aim_rxdispatch(struct aim_session_t *); -#ifdef FAIM_INTERNAL -faim_internal int aim_authparse(struct aim_session_t *, struct command_rx_struct *); -faim_internal int aim_handleredirect_middle(struct aim_session_t *, struct command_rx_struct *, ...); -faim_internal int aim_parse_unknown(struct aim_session_t *, struct command_rx_struct *, ...); -faim_internal int aim_parse_generalerrs(struct aim_session_t *, struct command_rx_struct *command, ...); -faim_internal int aim_parsemotd_middle(struct aim_session_t *sess, struct command_rx_struct *command, ...); - -/* these are used by aim_*_clientready */ -#define AIM_TOOL_JAVA 0x0001 -#define AIM_TOOL_MAC 0x0002 -#define AIM_TOOL_WIN16 0x0003 -#define AIM_TOOL_WIN32 0x0004 -#define AIM_TOOL_MAC68K 0x0005 -#define AIM_TOOL_MACPPC 0x0006 -#define AIM_TOOL_NEWWIN 0x0010 -struct aim_tool_version { - unsigned short group; - unsigned short version; - unsigned short tool; - unsigned short toolversion; -}; - -#endif /* FAIM_INTERNAL */ - #define AIM_CLIENTTYPE_UNKNOWN 0x0000 #define AIM_CLIENTTYPE_MC 0x0001 #define AIM_CLIENTTYPE_WINAIM 0x0002 @@ -632,13 +546,6 @@ faim_export unsigned short aim_fingerprintclient(unsigned char *msghdr, int len) faim_export unsigned long aim_ads_clientready(struct aim_session_t *sess, struct aim_conn_t *conn); faim_export unsigned long aim_ads_requestads(struct aim_session_t *sess, struct aim_conn_t *conn); -#ifdef FAIM_INTERNAL -faim_internal int aim_parse_ratechange_middle(struct aim_session_t *sess, struct command_rx_struct *command); - -faim_internal int aim_parse_evilnotify_middle(struct aim_session_t *sess, struct command_rx_struct *command); -faim_internal int aim_parse_msgack_middle(struct aim_session_t *sess, struct command_rx_struct *command); -#endif /* FAIM_INTERNAL */ - /* aim_im.c */ struct aim_directim_priv { unsigned char cookie[8]; @@ -699,15 +606,6 @@ faim_export struct aim_conn_t * aim_directim_initiate(struct aim_session_t *, st faim_export struct aim_conn_t *aim_directim_connect(struct aim_session_t *, struct aim_conn_t *, struct aim_directim_priv *); faim_export unsigned long aim_seticbmparam(struct aim_session_t *, struct aim_conn_t *conn); -#ifdef FAIM_INTERNAL -faim_internal int aim_parse_incoming_im_middle(struct aim_session_t *, struct command_rx_struct *); -faim_internal int aim_parse_outgoing_im_middle(struct aim_session_t *, struct command_rx_struct *); -faim_internal int aim_parse_msgerror_middle(struct aim_session_t *, struct command_rx_struct *); -faim_internal int aim_negchan_middle(struct aim_session_t *sess, struct command_rx_struct *command); -faim_internal int aim_parse_bosrights(struct aim_session_t *sess, struct command_rx_struct *command, ...); -faim_internal int aim_parse_missedcall(struct aim_session_t *sess, struct command_rx_struct *command); -#endif /* FAIM_INTERNAL */ - faim_export struct aim_conn_t *aim_getfile_initiate(struct aim_session_t *sess, struct aim_conn_t *conn, char *destsn); faim_export int aim_oft_getfile_request(struct aim_session_t *sess, struct aim_conn_t *conn, const unsigned char *name, const int size); faim_export int aim_oft_getfile_ack(struct aim_session_t *sess, struct aim_conn_t *conn); @@ -723,13 +621,6 @@ faim_export int aim_oft_getfile_end(struct aim_session_t *sess, struct aim_conn_ #define AIM_CAPS_GAMES 0x40 #define AIM_CAPS_SAVESTOCKS 0x80 -#ifdef FAIM_INTERNAL -extern u_char aim_caps[8][16]; -faim_internal unsigned short aim_getcap(struct aim_session_t *sess, unsigned char *capblock, int buflen); -faim_internal int aim_putcap(unsigned char *capblock, int buflen, u_short caps); -#endif /* FAIM_INTERNAL */ - - #define AIM_GETINFO_GENERALINFO 0x00001 #define AIM_GETINFO_AWAYMESSAGE 0x00003 @@ -765,16 +656,6 @@ struct aim_invite_priv { #define AIM_COOKIETYPE_OFTIMAGE 0x14 #define AIM_COOKIETYPE_OFTICON 0x15 -#ifdef FAIM_INTERNAL -faim_internal int aim_cachecookie(struct aim_session_t *sess, struct aim_msgcookie_t *cookie); -faim_internal struct aim_msgcookie_t *aim_uncachecookie(struct aim_session_t *sess, unsigned char *cookie, int type); -faim_internal struct aim_msgcookie_t *aim_mkcookie(unsigned char *, int, void *); -faim_internal struct aim_msgcookie_t *aim_checkcookie(struct aim_session_t *, const unsigned char *, const int); -faim_internal int aim_freecookie(struct aim_session_t *sess, struct aim_msgcookie_t *cookie); -faim_internal int aim_msgcookie_gettype(int reqclass); -faim_internal int aim_cookie_free(struct aim_session_t *sess, struct aim_msgcookie_t *cookie); -#endif /* FAIM_INTERNAL */ - faim_export int aim_handlerendconnect(struct aim_session_t *sess, struct aim_conn_t *cur); #define AIM_TRANSFER_DENY_NOTSUPPORTED 0x0000 @@ -783,15 +664,6 @@ faim_export int aim_handlerendconnect(struct aim_session_t *sess, struct aim_con faim_export unsigned long aim_denytransfer(struct aim_session_t *sess, struct aim_conn_t *conn, char *sender, char *cookie, unsigned short code); faim_export struct aim_conn_t *aim_accepttransfer(struct aim_session_t *sess, struct aim_conn_t *conn, char *sn, char *cookie, char *ip, unsigned short listingfiles, unsigned short listingtotsize, unsigned short listingsize, unsigned int listingchecksum, unsigned short rendid); -#ifdef FAIM_INTERNAL -faim_internal int aim_extractuserinfo(struct aim_session_t *sess, unsigned char *, struct aim_userinfo_s *); -faim_internal int aim_parse_userinfo_middle(struct aim_session_t *, struct command_rx_struct *); -faim_internal int aim_parse_oncoming_middle(struct aim_session_t *, struct command_rx_struct *); -faim_internal int aim_parse_offgoing_middle(struct aim_session_t *, struct command_rx_struct *); -faim_internal int aim_putuserinfo(u_char *buf, int buflen, struct aim_userinfo_s *info); -faim_internal int aim_parse_locateerr(struct aim_session_t *sess, struct command_rx_struct *command); -#endif /* FAIM_INTERNAL */ - faim_export unsigned long aim_getinfo(struct aim_session_t *, struct aim_conn_t *, const char *, unsigned short); faim_export int aim_sendbuddyoncoming(struct aim_session_t *sess, struct aim_conn_t *conn, struct aim_userinfo_s *info); faim_export int aim_sendbuddyoffgoing(struct aim_session_t *sess, struct aim_conn_t *conn, char *sn); @@ -806,18 +678,9 @@ faim_export unsigned long aim_auth_changepasswd(struct aim_session_t *, struct a faim_export unsigned long aim_add_buddy(struct aim_session_t *, struct aim_conn_t *, char *); faim_export unsigned long aim_remove_buddy(struct aim_session_t *, struct aim_conn_t *, char *); -#ifdef FAIM_INTERNAL -faim_internal int aim_parse_buddyrights(struct aim_session_t *sess, struct command_rx_struct *command, ...); -#endif /* FAIM_INTERNAL */ - /* aim_search.c */ faim_export u_long aim_usersearch_address(struct aim_session_t *, struct aim_conn_t *, char *); -#ifdef FAIM_INTERNAL -faim_internal unsigned long aim_parse_searcherror(struct aim_session_t *, struct command_rx_struct *); -faim_internal unsigned long aim_parse_searchreply(struct aim_session_t *, struct command_rx_struct *); -#endif - struct aim_chat_roominfo { u_short exchange; char *name; @@ -848,15 +711,6 @@ faim_export unsigned long aim_chat_invite(struct aim_session_t *sess, struct aim faim_export u_long aim_chatnav_createroom(struct aim_session_t *sess, struct aim_conn_t *conn, char *name, u_short exchange); faim_export int aim_chat_leaveroom(struct aim_session_t *sess, char *name); -#ifdef FAIM_INTERNAL -faim_internal int aim_chat_readroominfo(u_char *buf, struct aim_chat_roominfo *outinfo); -faim_internal int aim_chat_parse_infoupdate(struct aim_session_t *sess, struct command_rx_struct *command); -faim_internal int aim_chat_parse_joined(struct aim_session_t *sess, struct command_rx_struct *command); -faim_internal int aim_chat_parse_leave(struct aim_session_t *sess, struct command_rx_struct *command); -faim_internal int aim_chat_parse_incoming(struct aim_session_t *sess, struct command_rx_struct *command); -faim_internal int aim_chatnav_parse_info(struct aim_session_t *sess, struct command_rx_struct *command); -#endif /* FAIM_INTERNAL */ - /* aim_util.c */ #ifdef AIMUTIL_USEMACROS /* @@ -905,14 +759,7 @@ faim_export char *aim_getbuilddate(void); faim_export char *aim_getbuildtime(void); faim_export char *aim_getbuildstring(void); -#ifdef FAIM_INTERNAL -faim_internal void faimdprintf(struct aim_session_t *sess, int dlevel, const char *format, ...); - -/* why the hell wont cpp let you use #error inside #define's? */ -#define printf() printf called inside libfaim -#define sprintf() unbounded sprintf used inside libfaim - -#endif /* FAIM_INTERNAL */ +#include #endif /* __AIM_H__ */ diff --git a/src/conn.c b/src/conn.c index e296f9f..1482dba 100644 --- a/src/conn.c +++ b/src/conn.c @@ -112,6 +112,8 @@ faim_export void aim_conn_kill(struct aim_session_t *sess, struct aim_conn_t **d if (!deadconn || !*deadconn) return; + aim_tx_cleanqueue(sess, *deadconn); + faim_mutex_lock(&sess->connlistlock); if (sess->connlist == NULL) ; @@ -540,7 +542,8 @@ faim_export int aim_conn_in_sess(struct aim_session_t *sess, struct aim_conn_t * * */ faim_export struct aim_conn_t *aim_select(struct aim_session_t *sess, - struct timeval *timeout, int *status) + struct timeval *timeout, + int *status) { struct aim_conn_t *cur; fd_set fds, wfds; @@ -568,6 +571,7 @@ faim_export struct aim_conn_t *aim_select(struct aim_session_t *sess, return cur; } else if (cur->status & AIM_CONN_STATUS_INPROGRESS) { FD_SET(cur->fd, &wfds); + haveconnecting++; } FD_SET(cur->fd, &fds); diff --git a/src/ft.c b/src/ft.c index 958a75c..5ad960f 100644 --- a/src/ft.c +++ b/src/ft.c @@ -998,7 +998,7 @@ faim_internal int aim_get_command_rendezvous(struct aim_session_t *sess, struct faim_mutex_unlock(&conn->active); aim_conn_close(conn); return -1; - } + } hdrtype = aimutil_get16(hdr); switch (hdrtype) { @@ -1019,7 +1019,7 @@ faim_internal int aim_get_command_rendezvous(struct aim_session_t *sess, struct snptr = (char *)hdr+38; strncpy(priv->sn, snptr, MAXSNLEN); - faimdprintf(sess, 2, "faim: OFT frame: %04x / %04x / %04x / %s\n", hdrtype, payloadlength, flags, snptr); + faimdprintf(sess, 2, "faim: OFT frame: %04x / %04x / %04x / %s\n", hdrtype, payloadlength, flags, priv->sn); free(hdr); hdr = NULL; @@ -1027,7 +1027,7 @@ faim_internal int aim_get_command_rendezvous(struct aim_session_t *sess, struct if (flags == 0x000e) { faim_mutex_unlock(&conn->active); if ( (userfunc = aim_callhandler(sess, conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING)) ) - return userfunc(sess, NULL, snptr); + return userfunc(sess, NULL, conn); } else { if ((flags == 0x0000) && payloadlength) { @@ -1049,12 +1049,12 @@ faim_internal int aim_get_command_rendezvous(struct aim_session_t *sess, struct faim_mutex_unlock(&conn->active); msg[payloadlength] = 0x00; - faimdprintf(sess, 2, "faim: directim: %s/%04x/%04x/%s\n", snptr, payloadlength, flags, msg); + faimdprintf(sess, 2, "faim: directim: %s/%04x/%04x/%s\n", priv->sn, payloadlength, flags, msg); if ( (userfunc = aim_callhandler(sess, conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING)) ) - i = userfunc(sess, NULL, conn, snptr, msg); + i = userfunc(sess, NULL, conn, msg); else { - faimdprintf(sess, 0, "directim: %s/%04x/%04x/%s\n", snptr, payloadlength, flags, msg); + faimdprintf(sess, 0, "directim: %s/%04x/%04x/%s\n", priv->sn, payloadlength, flags, msg); i = 1; } @@ -1348,7 +1348,8 @@ faim_internal int aim_get_command_rendezvous(struct aim_session_t *sess, struct int i; struct aim_fileheader_t *fh; - fh = aim_oft_getfh(hdr); + if(!(fh = aim_oft_getfh(hdr))) + return -1; free(hdr); hdr = NULL; @@ -1378,6 +1379,7 @@ faim_internal int aim_get_command_rendezvous(struct aim_session_t *sess, struct break; } } /* switch */ + if (hdr) { faimdprintf(sess, 0, "hdr wasn't freed by a rendezvous switch case (hdrtype: %0x04x)!\n", hdrtype); free(hdr); diff --git a/src/txqueue.c b/src/txqueue.c index 2a1a92a..49a669f 100644 --- a/src/txqueue.c +++ b/src/txqueue.c @@ -24,7 +24,11 @@ * chan = channel for OSCAR, hdrtype for OFT * */ -faim_internal struct command_tx_struct *aim_tx_new(struct aim_session_t *sess, struct aim_conn_t *conn, unsigned char framing, int chan, int datalen) +faim_internal struct command_tx_struct *aim_tx_new(struct aim_session_t *sess, + struct aim_conn_t *conn, + unsigned char framing, + int chan, + int datalen) { struct command_tx_struct *newtx; @@ -158,7 +162,9 @@ static int aim_tx_enqueue__immediate(struct aim_session_t *sess, struct command_ return 0; } -faim_export int aim_tx_setenqueue(struct aim_session_t *sess, int what, int (*func)(struct aim_session_t *, struct command_tx_struct *)) +faim_export int aim_tx_setenqueue(struct aim_session_t *sess, + int what, + int (*func)(struct aim_session_t *, struct command_tx_struct *)) { if (!sess) return -1; @@ -429,3 +435,31 @@ faim_export void aim_tx_purgequeue(struct aim_session_t *sess) } return; } + +/** + * aim_tx_cleanqueue - get rid of packets waiting for tx on a dying conn + * @sess: session + * @conn: connection that's dying + * + * for now this simply marks all packets as sent and lets them + * disappear without warning. + * + * doesn't respect command_tx_struct locks. + */ + +faim_export int aim_tx_cleanqueue(struct aim_session_t *sess, struct aim_conn_t *conn) +{ + struct command_tx_struct *cur = NULL; + + if(!sess || !conn) + return -1; + + /* we don't respect locks here */ + for(cur = sess->queue_outgoing; cur; cur = cur->next) + if(cur->conn == conn) + cur->sent = 1; + + return 0; +} + + diff --git a/utils/faimtest/faimtest.c b/utils/faimtest/faimtest.c index c403ab7..454018f 100644 --- a/utils/faimtest/faimtest.c +++ b/utils/faimtest/faimtest.c @@ -1245,16 +1245,21 @@ int faimtest_directim_connect(struct aim_session_t *sess, struct command_rx_stru int faimtest_directim_incoming(struct aim_session_t *sess, struct command_rx_struct *command, ...) { va_list ap; - char *sn = NULL, *msg = NULL; + char *msg = NULL; struct aim_conn_t *conn; + struct aim_directim_priv *priv; va_start(ap, command); conn = va_arg(ap, struct aim_conn_t *); - sn = va_arg(ap, char *); msg = va_arg(ap, char *); va_end(ap); - dvprintf("faimtest: Directim from %s: %s\n", sn, msg); + if(!(priv = conn->priv)) { + dvprintf("faimtest: directim: no private struct on conn with fd %d\n", conn->fd); + return -1; + } + + dvprintf("faimtest: Directim from %s: %s\n", priv->sn, msg); if (!strncmp(msg, "sendmsg", 7)) { int i; i = atoi(msg+8); @@ -1300,13 +1305,19 @@ int faimtest_directim_disconnect(struct aim_session_t *sess, struct command_rx_s int faimtest_directim_typing(struct aim_session_t *sess, struct command_rx_struct *command, ...) { va_list ap; - char *sn; - + struct aim_conn_t *conn; + struct aim_directim_priv *priv; + va_start(ap, command); - sn = va_arg(ap, char *); + conn = va_arg(ap, struct aim_conn_t *); va_end(ap); + + if(!(priv = (struct aim_directim_priv *)conn->priv)) { + dvprintf("faimtest: no private struct on conn with fd %d!\n", conn->fd); + return -1; + } - dvprintf("faimtest: ohmigod! %s has started typing (DirectIM). He's going to send you a message! *squeal*\n", sn); + dvprintf("faimtest: ohmigod! %s has started typing (DirectIM). He's going to send you a message! *squeal*\n", priv->sn); return 1; }