diff options
author | Indent <please@skip.me> | 2015-02-19 02:47:20 -0300 |
---|---|---|
committer | dequis <dx@dxzone.com.ar> | 2015-02-20 19:50:54 -0300 |
commit | 5ebff60479fc7a9f7f50ac03b124c91d4e6ebe11 (patch) | |
tree | 9fc0d50cb1f4bc9768d9f00de94eafd876bb55b0 /protocols/oscar/oscar.c | |
parent | af359b4316f9d392c6b752495a1b2ed631576ed8 (diff) |
Reindent everything to K&R style with tabs
Used uncrustify, with the configuration file in ./doc/uncrustify.cfg
Commit author set to "Indent <please@skip.me>" so that it's easier to
skip while doing git blame.
Diffstat (limited to 'protocols/oscar/oscar.c')
-rw-r--r-- | protocols/oscar/oscar.c | 1511 |
1 files changed, 834 insertions, 677 deletions
diff --git a/protocols/oscar/oscar.c b/protocols/oscar/oscar.c index 1c74e7a2..22244f6c 100644 --- a/protocols/oscar/oscar.c +++ b/protocols/oscar/oscar.c @@ -49,25 +49,25 @@ #define USEROPT_AUTH 0 #define USEROPT_AUTHPORT 1 -#define UC_AOL 0x02 -#define UC_ADMIN 0x04 -#define UC_UNCONFIRMED 0x08 -#define UC_NORMAL 0x10 -#define UC_AB 0x20 -#define UC_WIRELESS 0x40 +#define UC_AOL 0x02 +#define UC_ADMIN 0x04 +#define UC_UNCONFIRMED 0x08 +#define UC_NORMAL 0x10 +#define UC_AB 0x20 +#define UC_WIRELESS 0x40 #define AIMHASHDATA "http://gaim.sourceforge.net/aim_data.php3" #define OSCAR_GROUP "Friends" #define BUF_LEN 2048 -#define BUF_LONG ( BUF_LEN * 2 ) +#define BUF_LONG (BUF_LEN * 2) /* Don't know if support for UTF8 is really working. For now it's UTF16 here. static int gaim_caps = AIM_CAPS_UTF8; */ static int gaim_caps = AIM_CAPS_INTEROP | AIM_CAPS_ICHAT | AIM_CAPS_ICQSERVERRELAY | AIM_CAPS_CHAT; -static guint8 gaim_features[] = {0x01, 0x01, 0x01, 0x02}; +static guint8 gaim_features[] = { 0x01, 0x01, 0x01, 0x02 }; struct oscar_data { aim_session_t *sess; @@ -93,7 +93,7 @@ struct oscar_data { gboolean killme, no_reconnect; gboolean icq; GSList *evilhack; - + GHashTable *ips; struct { @@ -138,13 +138,19 @@ struct icq_auth { guint32 uin; }; -static char *extract_name(const char *name) { +static char *extract_name(const char *name) +{ char *tmp; int i, j; char *x = strchr(name, '-'); - if (!x) return g_strdup(name); + + if (!x) { + return g_strdup(name); + } x = strchr(++x, '-'); - if (!x) return g_strdup(name); + if (!x) { + return g_strdup(name); + } tmp = g_strdup(++x); for (i = 0, j = 0; x[i]; i++) { @@ -155,7 +161,7 @@ static char *extract_name(const char *name) { } strncpy(hex, x + ++i, 2); hex[2] = 0; i++; - tmp[j++] = (char)strtol(hex, NULL, 16); + tmp[j++] = (char) strtol(hex, NULL, 16); } tmp[j] = 0; @@ -163,14 +169,16 @@ static char *extract_name(const char *name) { } static struct chat_connection *find_oscar_chat_by_conn(struct im_connection *ic, - aim_conn_t *conn) { - GSList *g = ((struct oscar_data *)ic->proto_data)->oscar_chats; + aim_conn_t *conn) +{ + GSList *g = ((struct oscar_data *) ic->proto_data)->oscar_chats; struct chat_connection *c = NULL; while (g) { - c = (struct chat_connection *)g->data; - if (c->conn == conn) + c = (struct chat_connection *) g->data; + if (c->conn == conn) { break; + } g = g->next; c = NULL; } @@ -178,41 +186,41 @@ static struct chat_connection *find_oscar_chat_by_conn(struct im_connection *ic, return c; } -static int gaim_parse_auth_resp (aim_session_t *, aim_frame_t *, ...); -static int gaim_parse_login (aim_session_t *, aim_frame_t *, ...); -static int gaim_parse_logout (aim_session_t *, aim_frame_t *, ...); -static int gaim_handle_redirect (aim_session_t *, aim_frame_t *, ...); -static int gaim_parse_oncoming (aim_session_t *, aim_frame_t *, ...); -static int gaim_parse_offgoing (aim_session_t *, aim_frame_t *, ...); +static int gaim_parse_auth_resp(aim_session_t *, aim_frame_t *, ...); +static int gaim_parse_login(aim_session_t *, aim_frame_t *, ...); +static int gaim_parse_logout(aim_session_t *, aim_frame_t *, ...); +static int gaim_handle_redirect(aim_session_t *, aim_frame_t *, ...); +static int gaim_parse_oncoming(aim_session_t *, aim_frame_t *, ...); +static int gaim_parse_offgoing(aim_session_t *, aim_frame_t *, ...); static int gaim_parse_incoming_im(aim_session_t *, aim_frame_t *, ...); -static int gaim_parse_misses (aim_session_t *, aim_frame_t *, ...); -static int gaim_parse_motd (aim_session_t *, aim_frame_t *, ...); -static int gaim_chatnav_info (aim_session_t *, aim_frame_t *, ...); -static int gaim_chat_join (aim_session_t *, aim_frame_t *, ...); -static int gaim_chat_leave (aim_session_t *, aim_frame_t *, ...); -static int gaim_chat_info_update (aim_session_t *, aim_frame_t *, ...); +static int gaim_parse_misses(aim_session_t *, aim_frame_t *, ...); +static int gaim_parse_motd(aim_session_t *, aim_frame_t *, ...); +static int gaim_chatnav_info(aim_session_t *, aim_frame_t *, ...); +static int gaim_chat_join(aim_session_t *, aim_frame_t *, ...); +static int gaim_chat_leave(aim_session_t *, aim_frame_t *, ...); +static int gaim_chat_info_update(aim_session_t *, aim_frame_t *, ...); static int gaim_chat_incoming_msg(aim_session_t *, aim_frame_t *, ...); -static int gaim_parse_ratechange (aim_session_t *, aim_frame_t *, ...); -static int gaim_bosrights (aim_session_t *, aim_frame_t *, ...); -static int conninitdone_bos (aim_session_t *, aim_frame_t *, ...); -static int conninitdone_admin (aim_session_t *, aim_frame_t *, ...); -static int conninitdone_chat (aim_session_t *, aim_frame_t *, ...); -static int conninitdone_chatnav (aim_session_t *, aim_frame_t *, ...); -static int gaim_parse_msgerr (aim_session_t *, aim_frame_t *, ...); +static int gaim_parse_ratechange(aim_session_t *, aim_frame_t *, ...); +static int gaim_bosrights(aim_session_t *, aim_frame_t *, ...); +static int conninitdone_bos(aim_session_t *, aim_frame_t *, ...); +static int conninitdone_admin(aim_session_t *, aim_frame_t *, ...); +static int conninitdone_chat(aim_session_t *, aim_frame_t *, ...); +static int conninitdone_chatnav(aim_session_t *, aim_frame_t *, ...); +static int gaim_parse_msgerr(aim_session_t *, aim_frame_t *, ...); static int gaim_parse_locaterights(aim_session_t *, aim_frame_t *, ...); static int gaim_parse_buddyrights(aim_session_t *, aim_frame_t *, ...); -static int gaim_parse_locerr (aim_session_t *, aim_frame_t *, ...); -static int gaim_icbm_param_info (aim_session_t *, aim_frame_t *, ...); -static int gaim_parse_genericerr (aim_session_t *, aim_frame_t *, ...); -static int gaim_selfinfo (aim_session_t *, aim_frame_t *, ...); -static int gaim_offlinemsg (aim_session_t *, aim_frame_t *, ...); -static int gaim_offlinemsgdone (aim_session_t *, aim_frame_t *, ...); -static int gaim_ssi_parserights (aim_session_t *, aim_frame_t *, ...); -static int gaim_ssi_parselist (aim_session_t *, aim_frame_t *, ...); -static int gaim_ssi_parseack (aim_session_t *, aim_frame_t *, ...); -static int gaim_parsemtn (aim_session_t *, aim_frame_t *, ...); -static int gaim_icqinfo (aim_session_t *, aim_frame_t *, ...); -static int gaim_parseaiminfo (aim_session_t *, aim_frame_t *, ...); +static int gaim_parse_locerr(aim_session_t *, aim_frame_t *, ...); +static int gaim_icbm_param_info(aim_session_t *, aim_frame_t *, ...); +static int gaim_parse_genericerr(aim_session_t *, aim_frame_t *, ...); +static int gaim_selfinfo(aim_session_t *, aim_frame_t *, ...); +static int gaim_offlinemsg(aim_session_t *, aim_frame_t *, ...); +static int gaim_offlinemsgdone(aim_session_t *, aim_frame_t *, ...); +static int gaim_ssi_parserights(aim_session_t *, aim_frame_t *, ...); +static int gaim_ssi_parselist(aim_session_t *, aim_frame_t *, ...); +static int gaim_ssi_parseack(aim_session_t *, aim_frame_t *, ...); +static int gaim_parsemtn(aim_session_t *, aim_frame_t *, ...); +static int gaim_icqinfo(aim_session_t *, aim_frame_t *, ...); +static int gaim_parseaiminfo(aim_session_t *, aim_frame_t *, ...); static char *msgerrreason[] = { "Invalid error", @@ -267,8 +275,9 @@ static char *normalize(const char *s) } static gboolean oscar_callback(gpointer data, gint source, - b_input_condition condition) { - aim_conn_t *conn = (aim_conn_t *)data; + b_input_condition condition) +{ + aim_conn_t *conn = (aim_conn_t *) data; aim_session_t *sess = aim_conn_getsess(conn); struct im_connection *ic = sess ? sess->aux_data : NULL; struct oscar_data *odata; @@ -277,50 +286,54 @@ static gboolean oscar_callback(gpointer data, gint source, /* ic is null. we return, else we seg SIGSEG on next line. */ return FALSE; } - + if (!g_slist_find(get_connections(), ic)) { - /* oh boy. this is probably bad. i guess the only thing we + /* oh boy. this is probably bad. i guess the only thing we * can really do is return? */ return FALSE; } - odata = (struct oscar_data *)ic->proto_data; + odata = (struct oscar_data *) ic->proto_data; if (condition & B_EV_IO_READ) { if (aim_get_command(odata->sess, conn) >= 0) { aim_rxdispatch(odata->sess); - if (odata->killme) - imc_logout(ic, !odata->no_reconnect); + if (odata->killme) { + imc_logout(ic, !odata->no_reconnect); + } } else { if ((conn->type == AIM_CONN_TYPE_BOS) || - !(aim_getconn_type(odata->sess, AIM_CONN_TYPE_BOS))) { + !(aim_getconn_type(odata->sess, AIM_CONN_TYPE_BOS))) { imcb_error(ic, _("Disconnected.")); imc_logout(ic, TRUE); } else if (conn->type == AIM_CONN_TYPE_CHAT) { struct chat_connection *c = find_oscar_chat_by_conn(ic, conn); c->conn = NULL; - if (c->inpa > 0) + if (c->inpa > 0) { b_event_remove(c->inpa); + } c->inpa = 0; c->fd = -1; aim_conn_kill(odata->sess, &conn); imcb_error(sess->aux_data, _("You have been disconnected from chat room %s."), c->name); } else if (conn->type == AIM_CONN_TYPE_CHATNAV) { - if (odata->cnpa > 0) + if (odata->cnpa > 0) { b_event_remove(odata->cnpa); + } odata->cnpa = 0; while (odata->create_rooms) { struct create_room *cr = odata->create_rooms->data; g_free(cr->name); odata->create_rooms = - g_slist_remove(odata->create_rooms, cr); + g_slist_remove(odata->create_rooms, cr); g_free(cr); imcb_error(sess->aux_data, _("Chat is currently unavailable")); } aim_conn_kill(odata->sess, &conn); } else if (conn->type == AIM_CONN_TYPE_AUTH) { - if (odata->paspa > 0) + if (odata->paspa > 0) { b_event_remove(odata->paspa); + } odata->paspa = 0; aim_conn_kill(odata->sess, &conn); } else { @@ -331,7 +344,7 @@ static gboolean oscar_callback(gpointer data, gint source, /* WTF??? */ return FALSE; } - + return TRUE; } @@ -359,8 +372,8 @@ static gboolean oscar_login_connect(gpointer data, gint source, b_input_conditio aim_conn_completeconnect(sess, conn); ic->inpa = b_input_add(conn->fd, B_EV_IO_READ, - oscar_callback, conn); - + oscar_callback, conn); + return FALSE; } @@ -368,35 +381,37 @@ static void oscar_init(account_t *acc) { set_t *s; gboolean icq = g_ascii_isdigit(acc->user[0]); - + if (icq) { set_add(&acc->set, "ignore_auth_requests", "false", set_eval_bool, acc); set_add(&acc->set, "old_icq_auth", "false", set_eval_bool, acc); } - + s = set_add(&acc->set, "server", icq ? AIM_DEFAULT_LOGIN_SERVER_ICQ - : AIM_DEFAULT_LOGIN_SERVER_AIM, set_eval_account, acc); + : AIM_DEFAULT_LOGIN_SERVER_AIM, set_eval_account, acc); s->flags |= SET_NOSAVE | ACC_SET_OFFLINE_ONLY; - + if (icq) { s = set_add(&acc->set, "web_aware", "false", set_eval_bool, acc); s->flags |= ACC_SET_OFFLINE_ONLY; } - + acc->flags |= ACC_FLAG_AWAY_MESSAGE; } -static void oscar_login(account_t *acc) { +static void oscar_login(account_t *acc) +{ aim_session_t *sess; aim_conn_t *conn; struct im_connection *ic = imcb_new(acc); struct oscar_data *odata = ic->proto_data = g_new0(struct oscar_data, 1); - if (g_ascii_isdigit(acc->user[0])) + if (g_ascii_isdigit(acc->user[0])) { odata->icq = TRUE; - else + } else { ic->flags |= OPT_DOES_HTML; + } sess = g_new0(aim_session_t, 1); @@ -414,7 +429,7 @@ static void oscar_login(account_t *acc) { imc_logout(ic, TRUE); return; } - + imcb_log(ic, _("Signon: %s"), ic->acc->user); aim_conn_addhandler(sess, conn, 0x0017, 0x0007, gaim_parse_login, 0); @@ -431,13 +446,15 @@ static void oscar_login(account_t *acc) { aim_request_login(sess, conn, ic->acc->user); } -static void oscar_logout(struct im_connection *ic) { - struct oscar_data *odata = (struct oscar_data *)ic->proto_data; - +static void oscar_logout(struct im_connection *ic) +{ + struct oscar_data *odata = (struct oscar_data *) ic->proto_data; + while (odata->oscar_chats) { struct chat_connection *n = odata->oscar_chats->data; - if (n->inpa > 0) + if (n->inpa > 0) { b_event_remove(n->inpa); + } g_free(n->name); g_free(n->show); odata->oscar_chats = g_slist_remove(odata->oscar_chats, n); @@ -449,20 +466,27 @@ static void oscar_logout(struct im_connection *ic) { odata->create_rooms = g_slist_remove(odata->create_rooms, cr); g_free(cr); } - if (odata->ips) + if (odata->ips) { g_hash_table_destroy(odata->ips); - if (odata->email) + } + if (odata->email) { g_free(odata->email); - if (odata->newp) + } + if (odata->newp) { g_free(odata->newp); - if (odata->oldp) + } + if (odata->oldp) { g_free(odata->oldp); - if (ic->inpa > 0) + } + if (ic->inpa > 0) { b_event_remove(ic->inpa); - if (odata->cnpa > 0) + } + if (odata->cnpa > 0) { b_event_remove(odata->cnpa); - if (odata->paspa > 0) + } + if (odata->paspa > 0) { b_event_remove(odata->paspa); + } aim_session_kill(odata->sess); g_free(odata->sess); odata->sess = NULL; @@ -470,7 +494,8 @@ static void oscar_logout(struct im_connection *ic) { ic->proto_data = NULL; } -static gboolean oscar_bos_connect(gpointer data, gint source, b_input_condition cond) { +static gboolean oscar_bos_connect(gpointer data, gint source, b_input_condition cond) +{ struct im_connection *ic = data; struct oscar_data *odata; aim_session_t *sess; @@ -493,20 +518,22 @@ static gboolean oscar_bos_connect(gpointer data, gint source, b_input_condition aim_conn_completeconnect(sess, bosconn); ic->inpa = b_input_add(bosconn->fd, B_EV_IO_READ, - oscar_callback, bosconn); + oscar_callback, bosconn); imcb_log(ic, _("Connection established, cookie sent")); - + return FALSE; } -static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; struct aim_authresp_info *info; int i; char *host; int port; aim_conn_t *bosconn; struct im_connection *ic = sess->aux_data; - struct oscar_data *od = ic->proto_data; + struct oscar_data *od = ic->proto_data; + port = AIM_LOGIN_PORT; va_start(ap, fr); @@ -520,11 +547,12 @@ static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { imcb_error(ic, _("Incorrect nickname or password.")); { int max = od->icq ? 8 : 16; - if (strlen(ic->acc->pass) > max) + if (strlen(ic->acc->pass) > max) { imcb_log(ic, "Note that the maximum password " "length supported by this protocol is " "%d characters, try logging in using " "a shorter password.", max); + } } // plugin_event(event_error, (void *)980, 0, 0, 0); break; @@ -535,7 +563,9 @@ static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { case 0x18: /* connecting too frequently */ od->no_reconnect = TRUE; - imcb_error(ic, _("You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer.")); + imcb_error(ic, + _( + "You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer.")); break; case 0x1c: /* client too old */ @@ -588,10 +618,10 @@ static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MTN, gaim_parsemtn, 0); aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_parse_logout, 0); - ((struct oscar_data *)ic->proto_data)->conn = bosconn; - for (i = 0; i < (int)strlen(info->bosip); i++) { + ((struct oscar_data *) ic->proto_data)->conn = bosconn; + for (i = 0; i < (int) strlen(info->bosip); i++) { if (info->bosip[i] == ':') { - port = atoi(&(info->bosip[i+1])); + port = atoi(&(info->bosip[i + 1])); break; } } @@ -613,9 +643,10 @@ static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { /* size of icbmui.ocm, the largest module in AIM 3.5 */ #define AIM_MAX_FILE_SIZE 98304 -static int gaim_parse_login(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_login(aim_session_t *sess, aim_frame_t *fr, ...) +{ #if 0 - struct client_info_s info = {"gaim", 4, 1, 2010, "us", "en", 0x0004, 0x0000, 0x04b}; + struct client_info_s info = { "gaim", 4, 1, 2010, "us", "en", 0x0004, 0x0000, 0x04b }; #else struct client_info_s info = AIM_CLIENTINFO_KNOWNGOOD; #endif @@ -632,7 +663,8 @@ static int gaim_parse_login(aim_session_t *sess, aim_frame_t *fr, ...) { return 1; } -static int gaim_parse_logout(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_logout(aim_session_t *sess, aim_frame_t *fr, ...) +{ struct im_connection *ic = sess->aux_data; struct oscar_data *odata = ic->proto_data; int code; @@ -641,22 +673,23 @@ static int gaim_parse_logout(aim_session_t *sess, aim_frame_t *fr, ...) { va_start(ap, fr); code = va_arg(ap, int); va_end(ap); - - imcb_error( ic, "Connection aborted by server: %s", code == 1 ? - "someone else logged in with your account" : - "unknown reason" ); - + + imcb_error(ic, "Connection aborted by server: %s", code == 1 ? + "someone else logged in with your account" : + "unknown reason"); + /* Tell BitlBee to disable auto_reconnect if code == 1, since that means a concurrent login somewhere else. */ odata->no_reconnect = code == 1; - + /* DO NOT log out here! Just tell the callback to do it. */ odata->killme = TRUE; return 1; } -static int conninitdone_chat(aim_session_t *sess, aim_frame_t *fr, ...) { +static int conninitdone_chat(aim_session_t *sess, aim_frame_t *fr, ...) +{ struct im_connection *ic = sess->aux_data; struct chat_connection *chatcon; struct groupchat *c = NULL; @@ -672,18 +705,20 @@ static int conninitdone_chat(aim_session_t *sess, aim_frame_t *fr, ...) { chatcon = find_oscar_chat_by_conn(ic, fr->conn); chatcon->id = id; - + c = bee_chat_by_title(ic->bee, ic, chatcon->show); - if (c && !c->data) + if (c && !c->data) { chatcon->cnv = c; - else + } else { chatcon->cnv = imcb_chat_new(ic, chatcon->show); + } chatcon->cnv->data = chatcon; return 1; } -static int conninitdone_chatnav(aim_session_t *sess, aim_frame_t *fr, ...) { +static int conninitdone_chatnav(aim_session_t *sess, aim_frame_t *fr, ...) +{ aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CTN, AIM_CB_CTN_ERROR, gaim_parse_genericerr, 0); aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CTN, AIM_CB_CTN_INFO, gaim_chatnav_info, 0); @@ -695,7 +730,8 @@ static int conninitdone_chatnav(aim_session_t *sess, aim_frame_t *fr, ...) { return 1; } -static gboolean oscar_chatnav_connect(gpointer data, gint source, b_input_condition cond) { +static gboolean oscar_chatnav_connect(gpointer data, gint source, b_input_condition cond) +{ struct im_connection *ic = data; struct oscar_data *odata; aim_session_t *sess; @@ -717,8 +753,8 @@ static gboolean oscar_chatnav_connect(gpointer data, gint source, b_input_condit aim_conn_completeconnect(sess, tstconn); odata->cnpa = b_input_add(tstconn->fd, B_EV_IO_READ, - oscar_callback, tstconn); - + oscar_callback, tstconn); + return FALSE; } @@ -745,8 +781,8 @@ static gboolean oscar_auth_connect(gpointer data, gint source, b_input_condition aim_conn_completeconnect(sess, tstconn); odata->paspa = b_input_add(tstconn->fd, B_EV_IO_READ, - oscar_callback, tstconn); - + oscar_callback, tstconn); + return FALSE; } @@ -780,15 +816,16 @@ static gboolean oscar_chat_connect(gpointer data, gint source, b_input_condition aim_conn_completeconnect(sess, ccon->conn); ccon->inpa = b_input_add(tstconn->fd, - B_EV_IO_READ, - oscar_callback, tstconn); + B_EV_IO_READ, + oscar_callback, tstconn); odata->oscar_chats = g_slist_append(odata->oscar_chats, ccon); - + return FALSE; } /* Hrmph. I don't know how to make this look better. --mid */ -static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; struct aim_redirect_data *redir; struct im_connection *ic = sess->aux_data; @@ -802,22 +839,23 @@ static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { va_end(ap); port = AIM_LOGIN_PORT; - for (i = 0; i < (int)strlen(redir->ip); i++) { + for (i = 0; i < (int) strlen(redir->ip); i++) { if (redir->ip[i] == ':') { - port = atoi(&(redir->ip[i+1])); + port = atoi(&(redir->ip[i + 1])); break; } } host = g_strndup(redir->ip, i); - switch(redir->group) { + switch (redir->group) { case 0x7: /* Authorizer */ tstconn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); if (tstconn == NULL) { g_free(host); return 1; } - aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_admin, 0); + aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_admin, + 0); // aim_conn_addhandler(sess, tstconn, 0x0007, 0x0003, gaim_info_change, 0); // aim_conn_addhandler(sess, tstconn, 0x0007, 0x0005, gaim_info_change, 0); // aim_conn_addhandler(sess, tstconn, 0x0007, 0x0007, gaim_account_confirm, 0); @@ -837,7 +875,8 @@ static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { g_free(host); return 1; } - aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chatnav, 0); + aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, + conninitdone_chatnav, 0); tstconn->status |= AIM_CONN_STATUS_INPROGRESS; tstconn->fd = proxy_connect(host, port, oscar_chatnav_connect, ic); @@ -849,7 +888,7 @@ static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { aim_sendcookie(sess, tstconn, redir->cookie); break; case 0xe: /* Chat */ - { + { struct chat_connection *ccon; tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHAT, NULL); @@ -858,7 +897,8 @@ static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { return 1; } - aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chat, 0); + aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chat, + 0); ccon = g_new0(struct chat_connection, 1); ccon->conn = tstconn; @@ -868,7 +908,7 @@ static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { ccon->exchange = redir->chat.exchange; ccon->instance = redir->chat.instance; ccon->show = extract_name(redir->chat.room); - + ccon->conn->status |= AIM_CONN_STATUS_INPROGRESS; ccon->conn->fd = proxy_connect(host, port, oscar_chat_connect, ccon); if (ccon->conn->fd < 0) { @@ -880,8 +920,8 @@ static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { return 1; } aim_sendcookie(sess, tstconn, redir->cookie); - } - break; + } + break; default: /* huh? */ break; } @@ -890,7 +930,8 @@ static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { return 1; } -static int gaim_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...) +{ struct im_connection *ic = sess->aux_data; struct oscar_data *od = ic->proto_data; aim_userinfo_t *info; @@ -899,51 +940,58 @@ static int gaim_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...) { char *tmp, *state_string = NULL; va_list ap; + va_start(ap, fr); info = va_arg(ap, aim_userinfo_t *); va_end(ap); if ((!od->icq) && (info->present & AIM_USERINFO_PRESENT_FLAGS)) { - if (info->flags & AIM_FLAG_AWAY) + if (info->flags & AIM_FLAG_AWAY) { flags |= OPT_AWAY; + } } - + /* Maybe this should be done just for AIM contacts, not sure. */ - if (info->flags & AIM_FLAG_WIRELESS) + if (info->flags & AIM_FLAG_WIRELESS) { flags |= OPT_MOBILE; - + } + if (info->present & AIM_USERINFO_PRESENT_ICQEXTSTATUS) { if (!(info->icqinfo.status & AIM_ICQ_STATE_CHAT) && - (info->icqinfo.status != AIM_ICQ_STATE_NORMAL)) { + (info->icqinfo.status != AIM_ICQ_STATE_NORMAL)) { flags |= OPT_AWAY; } - - if( info->icqinfo.status & AIM_ICQ_STATE_DND ) + + if (info->icqinfo.status & AIM_ICQ_STATE_DND) { state_string = "Do Not Disturb"; - else if( info->icqinfo.status & AIM_ICQ_STATE_OUT ) + } else if (info->icqinfo.status & AIM_ICQ_STATE_OUT) { state_string = "Not Available"; - else if( info->icqinfo.status & AIM_ICQ_STATE_BUSY ) + } else if (info->icqinfo.status & AIM_ICQ_STATE_BUSY) { state_string = "Occupied"; - else if( info->icqinfo.status & AIM_ICQ_STATE_INVISIBLE ) + } else if (info->icqinfo.status & AIM_ICQ_STATE_INVISIBLE) { state_string = "Invisible"; + } } if (info->present & AIM_USERINFO_PRESENT_IDLE) { time(&time_idle); - time_idle -= info->idletime*60; + time_idle -= info->idletime * 60; } - if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN) + if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN) { signon = time(NULL) - info->sessionlen; + } if (info->present & AIM_USERINFO_PRESENT_ICQIPADDR) { uint32_t *uin = g_new0(uint32_t, 1); - - if (od->ips == NULL) + + if (od->ips == NULL) { od->ips = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL); - - if (sscanf(info->sn, "%d", uin) == 1) + } + + if (sscanf(info->sn, "%d", uin) == 1) { g_hash_table_insert(od->ips, uin, (gpointer) (long) info->icqinfo.ipaddr); + } } tmp = normalize(info->sn); @@ -954,7 +1002,8 @@ static int gaim_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...) { return 1; } -static int gaim_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...) +{ aim_userinfo_t *info; va_list ap; struct im_connection *ic = sess->aux_data; @@ -963,42 +1012,46 @@ static int gaim_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...) { info = va_arg(ap, aim_userinfo_t *); va_end(ap); - imcb_buddy_status(ic, normalize(info->sn), 0, NULL, NULL ); + imcb_buddy_status(ic, normalize(info->sn), 0, NULL, NULL); return 1; } -static int incomingim_chan1(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch1_args *args) { +static int incomingim_chan1(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, + struct aim_incomingim_ch1_args *args) +{ char *tmp = g_malloc(BUF_LONG + 1); struct im_connection *ic = sess->aux_data; int flags = 0; - - if (args->icbmflags & AIM_IMFLAGS_AWAY) + + if (args->icbmflags & AIM_IMFLAGS_AWAY) { flags |= OPT_AWAY; - + } + if ((args->icbmflags & AIM_IMFLAGS_UNICODE) || (args->icbmflags & AIM_IMFLAGS_ISO_8859_1)) { char *src; - - if (args->icbmflags & AIM_IMFLAGS_UNICODE) + + if (args->icbmflags & AIM_IMFLAGS_UNICODE) { src = "UCS-2BE"; - else + } else { src = "ISO8859-1"; - + } + /* Try to use iconv first to convert the message to UTF8 - which is what BitlBee expects */ if (do_iconv(src, "UTF-8", args->msg, tmp, args->msglen, BUF_LONG) >= 0) { // Successfully converted! } else if (args->icbmflags & AIM_IMFLAGS_UNICODE) { int i; - + for (i = 0, tmp[0] = '\0'; i < args->msglen; i += 2) { unsigned short uni; - - uni = ((args->msg[i] & 0xff) << 8) | (args->msg[i+1] & 0xff); - + + uni = ((args->msg[i] & 0xff) << 8) | (args->msg[i + 1] & 0xff); + if ((uni < 128) || ((uni >= 160) && (uni <= 255))) { /* ISO 8859-1 */ - g_snprintf(tmp+strlen(tmp), BUF_LONG-strlen(tmp), "%c", uni); + g_snprintf(tmp + strlen(tmp), BUF_LONG - strlen(tmp), "%c", uni); } else { /* something else, do UNICODE entity */ - g_snprintf(tmp+strlen(tmp), BUF_LONG-strlen(tmp), "&#%04x;", uni); + g_snprintf(tmp + strlen(tmp), BUF_LONG - strlen(tmp), "&#%04x;", uni); } } } else { @@ -1008,31 +1061,34 @@ static int incomingim_chan1(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_ g_snprintf(tmp, BUF_LONG, "%s", args->msg); } else { aim_mpmsg_section_t *part; - + *tmp = 0; for (part = args->mpmsg.parts; part; part = part->next) { if (part->data) { - g_strlcat(tmp, (char*) part->data, BUF_LONG); + g_strlcat(tmp, (char *) part->data, BUF_LONG); g_strlcat(tmp, "\n", BUF_LONG); } } } - + strip_linefeed(tmp); imcb_buddy_msg(ic, normalize(userinfo->sn), tmp, flags, 0); g_free(tmp); - + return 1; } void oscar_accept_chat(void *data); void oscar_reject_chat(void *data); - -static int incomingim_chan2(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args) { + +static int incomingim_chan2(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, + struct aim_incomingim_ch2_args *args) +{ struct im_connection *ic = sess->aux_data; - if (args->status != AIM_RENDEZVOUS_PROPOSE) + if (args->status != AIM_RENDEZVOUS_PROPOSE) { return 1; + } if (args->reqclass & AIM_CAPS_CHAT) { char *name = extract_name(args->info.chat.roominfo.name); @@ -1050,14 +1106,15 @@ static int incomingim_chan2(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_ inv->ic = ic; inv->exchange = *exch; inv->name = g_strdup(name); - + imcb_ask(ic, txt, inv, oscar_accept_chat, oscar_reject_chat); - - if (name) + + if (name) { g_free(name); + } } else if (args->reqclass & AIM_CAPS_ICQRTF) { // TODO: constify - char text[strlen(args->info.rtfmsg.rtfmsg)+1]; + char text[strlen(args->info.rtfmsg.rtfmsg) + 1]; strncpy(text, args->info.rtfmsg.rtfmsg, sizeof(text)); imcb_buddy_msg(ic, normalize(userinfo->sn), text, 0, 0); } @@ -1065,32 +1122,34 @@ static int incomingim_chan2(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_ return 1; } -static void gaim_icq_authgrant(void *data_) { +static void gaim_icq_authgrant(void *data_) +{ struct icq_auth *data = data_; char *uin; - struct oscar_data *od = (struct oscar_data *)data->ic->proto_data; - + struct oscar_data *od = (struct oscar_data *) data->ic->proto_data; + uin = g_strdup_printf("%u", data->uin); aim_ssi_auth_reply(od->sess, od->conn, uin, 1, ""); // char *message = 0; // aim_send_im_ch4(od->sess, uin, AIM_ICQMSG_AUTHGRANTED, &message); imcb_ask_add(data->ic, uin, NULL); - + g_free(uin); g_free(data); } -static void gaim_icq_authdeny(void *data_) { +static void gaim_icq_authdeny(void *data_) +{ struct icq_auth *data = data_; char *uin, *message; - struct oscar_data *od = (struct oscar_data *)data->ic->proto_data; - + struct oscar_data *od = (struct oscar_data *) data->ic->proto_data; + uin = g_strdup_printf("%u", data->uin); message = g_strdup_printf("No reason given."); aim_ssi_auth_reply(od->sess, od->conn, uin, 0, ""); // aim_send_im_ch4(od->sess, uin, AIM_ICQMSG_AUTHDENIED, message); g_free(message); - + g_free(uin); g_free(data); } @@ -1098,84 +1157,94 @@ static void gaim_icq_authdeny(void *data_) { /* * For when other people ask you for authorization */ -static void gaim_icq_authask(struct im_connection *ic, guint32 uin, char *msg) { +static void gaim_icq_authask(struct im_connection *ic, guint32 uin, char *msg) +{ struct icq_auth *data; char *reason = NULL; char *dialog_msg; - if (set_getbool(&ic->acc->set, "ignore_auth_requests")) + if (set_getbool(&ic->acc->set, "ignore_auth_requests")) { return; - + } + data = g_new(struct icq_auth, 1); - if (strlen(msg) > 6) + if (strlen(msg) > 6) { reason = msg + 6; - - dialog_msg = g_strdup_printf("The user %u wants to add you to their buddy list for the following reason: %s", uin, reason ? reason : "No reason given."); + } + + dialog_msg = g_strdup_printf("The user %u wants to add you to their buddy list for the following reason: %s", + uin, reason ? reason : "No reason given."); data->ic = ic; data->uin = uin; imcb_ask(ic, dialog_msg, data, gaim_icq_authgrant, gaim_icq_authdeny); g_free(dialog_msg); } -static int incomingim_chan4(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch4_args *args) { +static int incomingim_chan4(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, + struct aim_incomingim_ch4_args *args) +{ struct im_connection *ic = sess->aux_data; switch (args->type) { - case 0x0001: { /* An almost-normal instant message. Mac ICQ sends this. It's peculiar. */ - char *uin, *message; - uin = g_strdup_printf("%u", args->uin); - message = g_strdup(args->msg); - strip_linefeed(message); - imcb_buddy_msg(ic, normalize(uin), message, 0, 0); - g_free(uin); - g_free(message); - } break; - - case 0x0004: { /* Someone sent you a URL */ - char *uin, *message; - char **m; - - uin = g_strdup_printf("%u", args->uin); - m = g_strsplit(args->msg, "\376", 2); - - if ((strlen(m[0]) != 0)) { - message = g_strjoinv(" -- ", m); - } else { - message = m[1]; - } + case 0x0001: { /* An almost-normal instant message. Mac ICQ sends this. It's peculiar. */ + char *uin, *message; + uin = g_strdup_printf("%u", args->uin); + message = g_strdup(args->msg); + strip_linefeed(message); + imcb_buddy_msg(ic, normalize(uin), message, 0, 0); + g_free(uin); + g_free(message); + } break; + + case 0x0004: { /* Someone sent you a URL */ + char *uin, *message; + char **m; + + uin = g_strdup_printf("%u", args->uin); + m = g_strsplit(args->msg, "\376", 2); + + if ((strlen(m[0]) != 0)) { + message = g_strjoinv(" -- ", m); + } else { + message = m[1]; + } + + strip_linefeed(message); + imcb_buddy_msg(ic, normalize(uin), message, 0, 0); + g_free(uin); + g_free(m); + g_free(message); + } break; - strip_linefeed(message); - imcb_buddy_msg(ic, normalize(uin), message, 0, 0); - g_free(uin); - g_free(m); - g_free(message); - } break; - - case 0x0006: { /* Someone requested authorization */ - gaim_icq_authask(ic, args->uin, args->msg); - } break; + case 0x0006: { /* Someone requested authorization */ + gaim_icq_authask(ic, args->uin, args->msg); + } break; - case 0x0007: { /* Someone has denied you authorization */ - imcb_log(sess->aux_data, "The user %u has denied your request to add them to your contact list for the following reason:\n%s", args->uin, args->msg ? args->msg : _("No reason given.") ); - } break; + case 0x0007: { /* Someone has denied you authorization */ + imcb_log(sess->aux_data, + "The user %u has denied your request to add them to your contact list for the following reason:\n%s", args->uin, + args->msg ? args->msg : _("No reason given.")); + } break; - case 0x0008: { /* Someone has granted you authorization */ - imcb_log(sess->aux_data, "The user %u has granted your request to add them to your contact list for the following reason:\n%s", args->uin, args->msg ? args->msg : _("No reason given.") ); - } break; + case 0x0008: { /* Someone has granted you authorization */ + imcb_log(sess->aux_data, + "The user %u has granted your request to add them to your contact list for the following reason:\n%s", args->uin, + args->msg ? args->msg : _("No reason given.")); + } break; - case 0x0012: { - /* Ack for authorizing/denying someone. Or possibly an ack for sending any system notice */ - } break; + case 0x0012: { + /* Ack for authorizing/denying someone. Or possibly an ack for sending any system notice */ + } break; - default: {; - } break; + default: {; } break; } return 1; } -static int gaim_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...) +{ int channel, ret = 0; aim_userinfo_t *userinfo; va_list ap; @@ -1185,26 +1254,25 @@ static int gaim_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...) { userinfo = va_arg(ap, aim_userinfo_t *); switch (channel) { - case 1: { /* standard message */ - struct aim_incomingim_ch1_args *args; - args = va_arg(ap, struct aim_incomingim_ch1_args *); - ret = incomingim_chan1(sess, fr->conn, userinfo, args); - } break; + case 1: { /* standard message */ + struct aim_incomingim_ch1_args *args; + args = va_arg(ap, struct aim_incomingim_ch1_args *); + ret = incomingim_chan1(sess, fr->conn, userinfo, args); + } break; - case 2: { /* rendevous */ - struct aim_incomingim_ch2_args *args; - args = va_arg(ap, struct aim_incomingim_ch2_args *); - ret = incomingim_chan2(sess, fr->conn, userinfo, args); - } break; + case 2: { /* rendevous */ + struct aim_incomingim_ch2_args *args; + args = va_arg(ap, struct aim_incomingim_ch2_args *); + ret = incomingim_chan2(sess, fr->conn, userinfo, args); + } break; - case 4: { /* ICQ */ - struct aim_incomingim_ch4_args *args; - args = va_arg(ap, struct aim_incomingim_ch4_args *); - ret = incomingim_chan4(sess, fr->conn, userinfo, args); - } break; + case 4: { /* ICQ */ + struct aim_incomingim_ch4_args *args; + args = va_arg(ap, struct aim_incomingim_ch4_args *); + ret = incomingim_chan4(sess, fr->conn, userinfo, args); + } break; - default: {; - } break; + default: {; } break; } va_end(ap); @@ -1212,7 +1280,8 @@ static int gaim_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...) { return ret; } -static int gaim_parse_misses(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_misses(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; guint16 nummissed, reason; aim_userinfo_t *userinfo; @@ -1220,183 +1289,190 @@ static int gaim_parse_misses(aim_session_t *sess, aim_frame_t *fr, ...) { va_start(ap, fr); va_arg(ap, unsigned int); /* chan */ userinfo = va_arg(ap, aim_userinfo_t *); - nummissed = (guint16)va_arg(ap, unsigned int); - reason = (guint16)va_arg(ap, unsigned int); + nummissed = (guint16) va_arg(ap, unsigned int); + reason = (guint16) va_arg(ap, unsigned int); va_end(ap); - switch(reason) { - case 0: - /* Invalid (0) */ - imcb_error(sess->aux_data, - nummissed == 1 ? - _("You missed %d message from %s because it was invalid.") : - _("You missed %d messages from %s because they were invalid."), - nummissed, - userinfo->sn); - break; - case 1: - /* Message too large */ - imcb_error(sess->aux_data, - nummissed == 1 ? - _("You missed %d message from %s because it was too large.") : - _("You missed %d messages from %s because they were too large."), - nummissed, - userinfo->sn); - break; - case 2: - /* Rate exceeded */ - imcb_error(sess->aux_data, - nummissed == 1 ? - _("You missed %d message from %s because the rate limit has been exceeded.") : - _("You missed %d messages from %s because the rate limit has been exceeded."), - nummissed, - userinfo->sn); - break; - case 3: - /* Evil Sender */ - imcb_error(sess->aux_data, - nummissed == 1 ? - _("You missed %d message from %s because it was too evil.") : - _("You missed %d messages from %s because they are too evil."), - nummissed, - userinfo->sn); - break; - case 4: - /* Evil Receiver */ - imcb_error(sess->aux_data, - nummissed == 1 ? - _("You missed %d message from %s because you are too evil.") : - _("You missed %d messages from %s because you are too evil."), - nummissed, - userinfo->sn); - break; - default: - imcb_error(sess->aux_data, - nummissed == 1 ? - _("You missed %d message from %s for unknown reasons.") : - _("You missed %d messages from %s for unknown reasons."), - nummissed, - userinfo->sn); - break; + switch (reason) { + case 0: + /* Invalid (0) */ + imcb_error(sess->aux_data, + nummissed == 1 ? + _("You missed %d message from %s because it was invalid.") : + _("You missed %d messages from %s because they were invalid."), + nummissed, + userinfo->sn); + break; + case 1: + /* Message too large */ + imcb_error(sess->aux_data, + nummissed == 1 ? + _("You missed %d message from %s because it was too large.") : + _("You missed %d messages from %s because they were too large."), + nummissed, + userinfo->sn); + break; + case 2: + /* Rate exceeded */ + imcb_error(sess->aux_data, + nummissed == 1 ? + _("You missed %d message from %s because the rate limit has been exceeded.") : + _("You missed %d messages from %s because the rate limit has been exceeded."), + nummissed, + userinfo->sn); + break; + case 3: + /* Evil Sender */ + imcb_error(sess->aux_data, + nummissed == 1 ? + _("You missed %d message from %s because it was too evil.") : + _("You missed %d messages from %s because they are too evil."), + nummissed, + userinfo->sn); + break; + case 4: + /* Evil Receiver */ + imcb_error(sess->aux_data, + nummissed == 1 ? + _("You missed %d message from %s because you are too evil.") : + _("You missed %d messages from %s because you are too evil."), + nummissed, + userinfo->sn); + break; + default: + imcb_error(sess->aux_data, + nummissed == 1 ? + _("You missed %d message from %s for unknown reasons.") : + _("You missed %d messages from %s for unknown reasons."), + nummissed, + userinfo->sn); + break; } return 1; } -static int gaim_parse_genericerr(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_genericerr(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; guint16 reason; va_start(ap, fr); - reason = (guint16)va_arg(ap, unsigned int); + reason = (guint16) va_arg(ap, unsigned int); va_end(ap); imcb_error(sess->aux_data, _("SNAC threw error: %s"), - reason < msgerrreasonlen ? msgerrreason[reason] : "Unknown error"); + reason < msgerrreasonlen ? msgerrreason[reason] : "Unknown error"); return 1; } -static int gaim_parse_msgerr(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_msgerr(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; char *destn; guint16 reason; va_start(ap, fr); - reason = (guint16)va_arg(ap, unsigned int); + reason = (guint16) va_arg(ap, unsigned int); destn = va_arg(ap, char *); va_end(ap); imcb_error(sess->aux_data, _("Your message to %s did not get sent: %s"), destn, - (reason < msgerrreasonlen) ? msgerrreason[reason] : _("Reason unknown")); + (reason < msgerrreasonlen) ? msgerrreason[reason] : _("Reason unknown")); return 1; } -static int gaim_parse_locerr(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_locerr(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; char *destn; guint16 reason; va_start(ap, fr); - reason = (guint16)va_arg(ap, unsigned int); + reason = (guint16) va_arg(ap, unsigned int); destn = va_arg(ap, char *); va_end(ap); imcb_error(sess->aux_data, _("User information for %s unavailable: %s"), destn, - (reason < msgerrreasonlen) ? msgerrreason[reason] : _("Reason unknown")); + (reason < msgerrreasonlen) ? msgerrreason[reason] : _("Reason unknown")); return 1; } -static int gaim_parse_motd(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_motd(aim_session_t *sess, aim_frame_t *fr, ...) +{ guint16 id; va_list ap; va_start(ap, fr); - id = (guint16)va_arg(ap, unsigned int); + id = (guint16) va_arg(ap, unsigned int); va_arg(ap, char *); /* msg */ va_end(ap); - if (id < 4) + if (id < 4) { imcb_error(sess->aux_data, _("Your connection may be lost.")); + } return 1; } -static int gaim_chatnav_info(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_chatnav_info(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; guint16 type; struct im_connection *ic = sess->aux_data; - struct oscar_data *odata = (struct oscar_data *)ic->proto_data; + struct oscar_data *odata = (struct oscar_data *) ic->proto_data; va_start(ap, fr); - type = (guint16)va_arg(ap, unsigned int); - - switch(type) { - case 0x0002: { - va_arg(ap, unsigned int); /* maxrooms */ - va_arg(ap, int); /* exchangecount */ - va_arg(ap, struct aim_chat_exchangeinfo *); /* exchanges */ - va_end(ap); - - while (odata->create_rooms) { - struct create_room *cr = odata->create_rooms->data; - aim_chatnav_createroom(sess, fr->conn, cr->name, cr->exchange); - g_free(cr->name); - odata->create_rooms = g_slist_remove(odata->create_rooms, cr); - g_free(cr); - } - } - break; - case 0x0008: { - char *ck; - guint16 instance, exchange; - - va_arg(ap, char *); /* fqcn */ - instance = (guint16)va_arg(ap, unsigned int); - exchange = (guint16)va_arg(ap, unsigned int); - va_arg(ap, unsigned int); /* flags */ - va_arg(ap, guint32); /* createtime */ - va_arg(ap, unsigned int); /* maxmsglen */ - va_arg(ap, unsigned int); /* maxoccupancy */ - va_arg(ap, int); /* createperms */ - va_arg(ap, unsigned int); /* unknown */ - va_arg(ap, char *); /* name */ - ck = va_arg(ap, char *); - va_end(ap); - - aim_chat_join(odata->sess, odata->conn, exchange, ck, instance); - } - break; - default: - va_end(ap); - break; + type = (guint16) va_arg(ap, unsigned int); + + switch (type) { + case 0x0002: { + va_arg(ap, unsigned int); /* maxrooms */ + va_arg(ap, int); /* exchangecount */ + va_arg(ap, struct aim_chat_exchangeinfo *); /* exchanges */ + va_end(ap); + + while (odata->create_rooms) { + struct create_room *cr = odata->create_rooms->data; + aim_chatnav_createroom(sess, fr->conn, cr->name, cr->exchange); + g_free(cr->name); + odata->create_rooms = g_slist_remove(odata->create_rooms, cr); + g_free(cr); + } + } + break; + case 0x0008: { + char *ck; + guint16 instance, exchange; + + va_arg(ap, char *); /* fqcn */ + instance = (guint16) va_arg(ap, unsigned int); + exchange = (guint16) va_arg(ap, unsigned int); + va_arg(ap, unsigned int); /* flags */ + va_arg(ap, guint32); /* createtime */ + va_arg(ap, unsigned int); /* maxmsglen */ + va_arg(ap, unsigned int); /* maxoccupancy */ + va_arg(ap, int); /* createperms */ + va_arg(ap, unsigned int); /* unknown */ + va_arg(ap, char *); /* name */ + ck = va_arg(ap, char *); + va_end(ap); + + aim_chat_join(odata->sess, odata->conn, exchange, ck, instance); + } + break; + default: + va_end(ap); + break; } return 1; } -static int gaim_chat_join(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_chat_join(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; int count, i; aim_userinfo_t *info; @@ -1410,16 +1486,19 @@ static int gaim_chat_join(aim_session_t *sess, aim_frame_t *fr, ...) { va_end(ap); c = find_oscar_chat_by_conn(g, fr->conn); - if (!c) + if (!c) { return 1; + } - for (i = 0; i < count; i++) + for (i = 0; i < count; i++) { imcb_chat_add_buddy(c->cnv, normalize(info[i].sn)); + } return 1; } -static int gaim_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; int count, i; aim_userinfo_t *info; @@ -1433,16 +1512,19 @@ static int gaim_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...) { va_end(ap); c = find_oscar_chat_by_conn(g, fr->conn); - if (!c) + if (!c) { return 1; + } - for (i = 0; i < count; i++) + for (i = 0; i < count; i++) { imcb_chat_remove_buddy(c->cnv, normalize(info[i].sn), NULL); + } return 1; } -static int gaim_chat_info_update(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_chat_info_update(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; guint16 maxmsglen, maxvisiblemsglen; struct im_connection *ic = sess->aux_data; @@ -1456,10 +1538,10 @@ static int gaim_chat_info_update(aim_session_t *sess, aim_frame_t *fr, ...) { va_arg(ap, char *); /* roomdesc */ va_arg(ap, int); /* unknown_c9 */ va_arg(ap, unsigned long); /* creationtime */ - maxmsglen = (guint16)va_arg(ap, int); + maxmsglen = (guint16) va_arg(ap, int); va_arg(ap, int); /* unknown_d2 */ va_arg(ap, int); /* unknown_d5 */ - maxvisiblemsglen = (guint16)va_arg(ap, int); + maxvisiblemsglen = (guint16) va_arg(ap, int); va_end(ap); ccon->maxlen = maxmsglen; @@ -1468,7 +1550,8 @@ static int gaim_chat_info_update(aim_session_t *sess, aim_frame_t *fr, ...) { return 1; } -static int gaim_chat_incoming_msg(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_chat_incoming_msg(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; aim_userinfo_t *info; char *msg; @@ -1488,42 +1571,44 @@ static int gaim_chat_incoming_msg(aim_session_t *sess, aim_frame_t *fr, ...) { return 1; } -static int gaim_parse_ratechange(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_ratechange(aim_session_t *sess, aim_frame_t *fr, ...) +{ #if 0 static const char *codes[5] = { "invalid", - "change", - "warning", - "limit", - "limit cleared", + "change", + "warning", + "limit", + "limit cleared", }; #endif va_list ap; guint16 code; guint32 windowsize, clear, currentavg; - va_start(ap, fr); - code = (guint16)va_arg(ap, unsigned int); + va_start(ap, fr); + code = (guint16) va_arg(ap, unsigned int); va_arg(ap, unsigned int); /* rateclass */ - windowsize = (guint32)va_arg(ap, unsigned long); - clear = (guint32)va_arg(ap, unsigned long); + windowsize = (guint32) va_arg(ap, unsigned long); + clear = (guint32) va_arg(ap, unsigned long); va_arg(ap, unsigned long); /* alert */ va_arg(ap, unsigned long); /* limit */ va_arg(ap, unsigned long); /* disconnect */ - currentavg = (guint32)va_arg(ap, unsigned long); + currentavg = (guint32) va_arg(ap, unsigned long); va_arg(ap, unsigned long); /* maxavg */ va_end(ap); /* XXX fix these values */ if (code == AIM_RATE_CODE_CHANGE) { - if (currentavg >= clear) + if (currentavg >= clear) { aim_conn_setlatency(fr->conn, 0); + } } else if (code == AIM_RATE_CODE_WARNING) { - aim_conn_setlatency(fr->conn, windowsize/4); + aim_conn_setlatency(fr->conn, windowsize / 4); } else if (code == AIM_RATE_CODE_LIMIT) { imcb_error(sess->aux_data, _("The last message was not sent because you are over the rate limit. " - "Please wait 10 seconds and try again.")); - aim_conn_setlatency(fr->conn, windowsize/2); + "Please wait 10 seconds and try again.")); + aim_conn_setlatency(fr->conn, windowsize / 2); } else if (code == AIM_RATE_CODE_CLEARLIMIT) { aim_conn_setlatency(fr->conn, 0); } @@ -1531,11 +1616,13 @@ static int gaim_parse_ratechange(aim_session_t *sess, aim_frame_t *fr, ...) { return 1; } -static int gaim_selfinfo(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_selfinfo(aim_session_t *sess, aim_frame_t *fr, ...) +{ return 1; } -static int conninitdone_bos(aim_session_t *sess, aim_frame_t *fr, ...) { +static int conninitdone_bos(aim_session_t *sess, aim_frame_t *fr, ...) +{ aim_reqpersonalinfo(sess, fr->conn); aim_bos_reqlocaterights(sess, fr->conn); @@ -1546,12 +1633,13 @@ static int conninitdone_bos(aim_session_t *sess, aim_frame_t *fr, ...) { aim_bos_reqrights(sess, fr->conn); aim_bos_setgroupperm(sess, fr->conn, AIM_FLAG_ALLUSERS); aim_bos_setprivacyflags(sess, fr->conn, AIM_PRIVFLAGS_ALLOWIDLE | - AIM_PRIVFLAGS_ALLOWMEMBERSINCE); + AIM_PRIVFLAGS_ALLOWMEMBERSINCE); return 1; } -static int conninitdone_admin(aim_session_t *sess, aim_frame_t *fr, ...) { +static int conninitdone_admin(aim_session_t *sess, aim_frame_t *fr, ...) +{ struct im_connection *ic = sess->aux_data; struct oscar_data *od = ic->proto_data; @@ -1588,7 +1676,8 @@ static int conninitdone_admin(aim_session_t *sess, aim_frame_t *fr, ...) { return 1; } -static int gaim_icbm_param_info(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_icbm_param_info(aim_session_t *sess, aim_frame_t *fr, ...) +{ struct aim_icbmparameters *params; va_list ap; @@ -1611,52 +1700,54 @@ static int gaim_parse_locaterights(aim_session_t *sess, aim_frame_t *fr, ...) va_list ap; guint16 maxsiglen; struct im_connection *ic = sess->aux_data; - struct oscar_data *odata = (struct oscar_data *)ic->proto_data; + struct oscar_data *odata = (struct oscar_data *) ic->proto_data; va_start(ap, fr); maxsiglen = va_arg(ap, int); va_end(ap); - odata->rights.maxsiglen = odata->rights.maxawaymsglen = (guint)maxsiglen; + odata->rights.maxsiglen = odata->rights.maxawaymsglen = (guint) maxsiglen; /* FIXME: It seems we're not really using this, and it broke now that struct aim_user is dead. aim_bos_setprofile(sess, fr->conn, ic->user->user_info, NULL, gaim_caps); */ - + return 1; } -static int gaim_parse_buddyrights(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_parse_buddyrights(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; guint16 maxbuddies, maxwatchers; struct im_connection *ic = sess->aux_data; - struct oscar_data *odata = (struct oscar_data *)ic->proto_data; + struct oscar_data *odata = (struct oscar_data *) ic->proto_data; va_start(ap, fr); - maxbuddies = (guint16)va_arg(ap, unsigned int); - maxwatchers = (guint16)va_arg(ap, unsigned int); + maxbuddies = (guint16) va_arg(ap, unsigned int); + maxwatchers = (guint16) va_arg(ap, unsigned int); va_end(ap); - odata->rights.maxbuddies = (guint)maxbuddies; - odata->rights.maxwatchers = (guint)maxwatchers; + odata->rights.maxbuddies = (guint) maxbuddies; + odata->rights.maxwatchers = (guint) maxwatchers; return 1; } -static int gaim_bosrights(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_bosrights(aim_session_t *sess, aim_frame_t *fr, ...) +{ guint16 maxpermits, maxdenies; va_list ap; struct im_connection *ic = sess->aux_data; - struct oscar_data *odata = (struct oscar_data *)ic->proto_data; + struct oscar_data *odata = (struct oscar_data *) ic->proto_data; va_start(ap, fr); - maxpermits = (guint16)va_arg(ap, unsigned int); - maxdenies = (guint16)va_arg(ap, unsigned int); + maxpermits = (guint16) va_arg(ap, unsigned int); + maxdenies = (guint16) va_arg(ap, unsigned int); va_end(ap); - odata->rights.maxpermits = (guint)maxpermits; - odata->rights.maxdenies = (guint)maxdenies; + odata->rights.maxpermits = (guint) maxpermits; + odata->rights.maxdenies = (guint) maxdenies; aim_clientready(sess, fr->conn); @@ -1668,7 +1759,8 @@ static int gaim_bosrights(aim_session_t *sess, aim_frame_t *fr, ...) { return 1; } -static int gaim_offlinemsg(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_offlinemsg(aim_session_t *sess, aim_frame_t *fr, ...) +{ va_list ap; struct aim_icq_offlinemsg *msg; struct im_connection *ic = sess->aux_data; @@ -1678,56 +1770,59 @@ static int gaim_offlinemsg(aim_session_t *sess, aim_frame_t *fr, ...) { va_end(ap); switch (msg->type) { - case 0x0001: { /* Basic offline message */ - char sender[32]; - char *dialog_msg = g_strdup(msg->msg); - time_t t = get_time(msg->year, msg->month, msg->day, msg->hour, msg->minute, 0); - g_snprintf(sender, sizeof(sender), "%u", msg->sender); - strip_linefeed(dialog_msg); - imcb_buddy_msg(ic, normalize(sender), dialog_msg, 0, t); - g_free(dialog_msg); - } break; - - case 0x0004: { /* Someone sent you a URL */ - char sender[32]; - char *dialog_msg; - char **m; - - time_t t = get_time(msg->year, msg->month, msg->day, msg->hour, msg->minute, 0); - g_snprintf(sender, sizeof(sender), "%u", msg->sender); - - m = g_strsplit(msg->msg, "\376", 2); - - if ((strlen(m[0]) != 0)) { - dialog_msg = g_strjoinv(" -- ", m); - } else { - dialog_msg = m[1]; - } - - strip_linefeed(dialog_msg); - imcb_buddy_msg(ic, normalize(sender), dialog_msg, 0, t); - g_free(dialog_msg); - g_free(m); - } break; - - case 0x0006: { /* Authorization request */ - gaim_icq_authask(ic, msg->sender, msg->msg); - } break; - - case 0x0007: { /* Someone has denied you authorization */ - imcb_log(sess->aux_data, "The user %u has denied your request to add them to your contact list for the following reason:\n%s", msg->sender, msg->msg ? msg->msg : _("No reason given.") ); - } break; - - case 0x0008: { /* Someone has granted you authorization */ - imcb_log(sess->aux_data, "The user %u has granted your request to add them to your contact list for the following reason:\n%s", msg->sender, msg->msg ? msg->msg : _("No reason given.") ); - } break; - - case 0x0012: { - /* Ack for authorizing/denying someone. Or possibly an ack for sending any system notice */ - } break; - - default: {; + case 0x0001: { /* Basic offline message */ + char sender[32]; + char *dialog_msg = g_strdup(msg->msg); + time_t t = get_time(msg->year, msg->month, msg->day, msg->hour, msg->minute, 0); + g_snprintf(sender, sizeof(sender), "%u", msg->sender); + strip_linefeed(dialog_msg); + imcb_buddy_msg(ic, normalize(sender), dialog_msg, 0, t); + g_free(dialog_msg); + } break; + + case 0x0004: { /* Someone sent you a URL */ + char sender[32]; + char *dialog_msg; + char **m; + + time_t t = get_time(msg->year, msg->month, msg->day, msg->hour, msg->minute, 0); + g_snprintf(sender, sizeof(sender), "%u", msg->sender); + + m = g_strsplit(msg->msg, "\376", 2); + + if ((strlen(m[0]) != 0)) { + dialog_msg = g_strjoinv(" -- ", m); + } else { + dialog_msg = m[1]; } + + strip_linefeed(dialog_msg); + imcb_buddy_msg(ic, normalize(sender), dialog_msg, 0, t); + g_free(dialog_msg); + g_free(m); + } break; + + case 0x0006: { /* Authorization request */ + gaim_icq_authask(ic, msg->sender, msg->msg); + } break; + + case 0x0007: { /* Someone has denied you authorization */ + imcb_log(sess->aux_data, + "The user %u has denied your request to add them to your contact list for the following reason:\n%s", msg->sender, + msg->msg ? msg->msg : _("No reason given.")); + } break; + + case 0x0008: { /* Someone has granted you authorization */ + imcb_log(sess->aux_data, + "The user %u has granted your request to add them to your contact list for the following reason:\n%s", msg->sender, + msg->msg ? msg->msg : _("No reason given.")); + } break; + + case 0x0012: { + /* Ack for authorizing/denying someone. Or possibly an ack for sending any system notice */ + } break; + + default: {; } } return 1; @@ -1739,27 +1834,34 @@ static int gaim_offlinemsgdone(aim_session_t *sess, aim_frame_t *fr, ...) return 1; } -static void oscar_keepalive(struct im_connection *ic) { - struct oscar_data *odata = (struct oscar_data *)ic->proto_data; +static void oscar_keepalive(struct im_connection *ic) +{ + struct oscar_data *odata = (struct oscar_data *) ic->proto_data; + aim_flap_nop(odata->sess, odata->conn); } -static int oscar_buddy_msg(struct im_connection *ic, char *name, char *message, int imflags) { - struct oscar_data *odata = (struct oscar_data *)ic->proto_data; +static int oscar_buddy_msg(struct im_connection *ic, char *name, char *message, int imflags) +{ + struct oscar_data *odata = (struct oscar_data *) ic->proto_data; int ret = 0, len = strlen(message); + if (imflags & OPT_AWAY) { ret = aim_send_im(odata->sess, name, AIM_IMFLAGS_AWAY, message); } else { struct aim_sendimext_args args; char *s; - + args.flags = AIM_IMFLAGS_ACK; - if (odata->icq) + if (odata->icq) { args.flags |= AIM_IMFLAGS_OFFLINE; - for (s = message; *s; s++) - if (*s & 128) + } + for (s = message; *s; s++) { + if (*s & 128) { break; - + } + } + /* Message contains high ASCII chars, time for some translation! */ if (*s) { s = g_malloc(BUF_LONG); @@ -1773,59 +1875,66 @@ static int oscar_buddy_msg(struct im_connection *ic, char *name, char *message, len = ret; } else { /* OOF, translation failed... Oh well.. */ - g_free( s ); + g_free(s); s = message; } } else { s = message; } - + args.features = gaim_features; args.featureslen = sizeof(gaim_features); - + args.destsn = name; args.msg = s; args.msglen = len; - + ret = aim_send_im_ext(odata->sess, &args); - + if (s != message) { g_free(s); } } - if (ret >= 0) + if (ret >= 0) { return 1; + } return ret; } -static void oscar_get_info(struct im_connection *g, char *name) { - struct oscar_data *odata = (struct oscar_data *)g->proto_data; - if (odata->icq) +static void oscar_get_info(struct im_connection *g, char *name) +{ + struct oscar_data *odata = (struct oscar_data *) g->proto_data; + + if (odata->icq) { aim_icq_getallinfo(odata->sess, name); - else { + } else { aim_getinfo(odata->sess, odata->conn, name, AIM_GETINFO_AWAYMESSAGE); aim_getinfo(odata->sess, odata->conn, name, AIM_GETINFO_GENERALINFO); } } -static void oscar_get_away(struct im_connection *g, char *who) { - struct oscar_data *odata = (struct oscar_data *)g->proto_data; +static void oscar_get_away(struct im_connection *g, char *who) +{ + struct oscar_data *odata = (struct oscar_data *) g->proto_data; + if (odata->icq) { /** FIXME(wilmer): Hmm, lost the ability to get away msgs here, do we care to get that back? struct buddy *budlight = imcb_find_buddy(g, who); if (budlight) - if ((budlight->uc & 0xff80) >> 7) - if (budlight->caps & AIM_CAPS_ICQSERVERRELAY) - aim_send_im_ch2_geticqmessage(odata->sess, who, (budlight->uc & 0xff80) >> 7); + if ((budlight->uc & 0xff80) >> 7) + if (budlight->caps & AIM_CAPS_ICQSERVERRELAY) + aim_send_im_ch2_geticqmessage(odata->sess, who, (budlight->uc & 0xff80) >> 7); */ - } else + } else { aim_getinfo(odata->sess, odata->conn, who, AIM_GETINFO_AWAYMESSAGE); + } } static void oscar_set_away_aim(struct im_connection *ic, struct oscar_data *od, const char *state, const char *message) { - if (state == NULL) + if (state == NULL) { state = ""; + } if (!g_strcasecmp(state, _("Visible"))) { aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_NORMAL); @@ -1837,8 +1946,9 @@ static void oscar_set_away_aim(struct im_connection *ic, struct oscar_data *od, message = state; } - if (od->rights.maxawaymsglen == 0) + if (od->rights.maxawaymsglen == 0) { imcb_error(ic, "oscar_set_away_aim called before locate rights received"); + } aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_NORMAL); @@ -1851,7 +1961,8 @@ static void oscar_set_away_aim(struct im_connection *ic, struct oscar_data *od, } if (strlen(message) > od->rights.maxawaymsglen) { - imcb_error(ic, "Maximum away message length of %d bytes exceeded, truncating", od->rights.maxawaymsglen); + imcb_error(ic, "Maximum away message length of %d bytes exceeded, truncating", + od->rights.maxawaymsglen); } ic->away = g_strndup(message, od->rights.maxawaymsglen); @@ -1904,7 +2015,7 @@ static void oscar_set_away_icq(struct im_connection *ic, struct oscar_data *od, aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_INVISIBLE); ic->away = g_strdup(msg); } else { - if (no_message) { + if (no_message) { aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_NORMAL); } else { aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_AWAY); @@ -1918,36 +2029,48 @@ static void oscar_set_away_icq(struct im_connection *ic, struct oscar_data *od, static void oscar_set_away(struct im_connection *ic, char *state, char *message) { - struct oscar_data *od = (struct oscar_data *)ic->proto_data; + struct oscar_data *od = (struct oscar_data *) ic->proto_data; oscar_set_away_aim(ic, od, state, message); - if (od->icq) + if (od->icq) { oscar_set_away_icq(ic, od, state, message); + } return; } -static void oscar_add_buddy(struct im_connection *g, char *name, char *group) { - struct oscar_data *odata = (struct oscar_data *)g->proto_data; +static void oscar_add_buddy(struct im_connection *g, char *name, char *group) +{ + struct oscar_data *odata = (struct oscar_data *) g->proto_data; bee_user_t *bu; - - if (group && (bu = bee_user_by_handle(g->bee, g, name)) && bu->group) + + if (group && (bu = bee_user_by_handle(g->bee, g, name)) && bu->group) { aim_ssi_movebuddy(odata->sess, odata->conn, bu->group->name, group, name); - else + } else { aim_ssi_addbuddies(odata->sess, odata->conn, group ? : OSCAR_GROUP, &name, 1, 0); + } } -static void oscar_remove_buddy(struct im_connection *g, char *name, char *group) { - struct oscar_data *odata = (struct oscar_data *)g->proto_data; +static void oscar_remove_buddy(struct im_connection *g, char *name, char *group) +{ + struct oscar_data *odata = (struct oscar_data *) g->proto_data; struct aim_ssi_item *ssigroup; - while ((ssigroup = aim_ssi_itemlist_findparent(odata->sess->ssi.items, name)) && !aim_ssi_delbuddies(odata->sess, odata->conn, ssigroup->name, &name, 1)); + + while ((ssigroup = + aim_ssi_itemlist_findparent(odata->sess->ssi.items, + name)) && + !aim_ssi_delbuddies(odata->sess, odata->conn, ssigroup->name, &name, 1)) { + ; + } } -static int gaim_ssi_parserights(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_ssi_parserights(aim_session_t *sess, aim_frame_t *fr, ...) +{ return 1; } -static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) { +static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) +{ struct im_connection *ic = sess->aux_data; struct aim_ssi_item *curitem, *curgroup = NULL; int tmp; @@ -1955,172 +2078,185 @@ static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) { /* Add from server list to local list */ tmp = 0; - for (curitem=sess->ssi.items; curitem; curitem=curitem->next) { + for (curitem = sess->ssi.items; curitem; curitem = curitem->next) { nrm = curitem->name ? normalize(curitem->name) : NULL; - + switch (curitem->type) { - case 0x0000: /* Buddy */ - if ((curitem->name) && (!imcb_buddy_by_handle(ic, nrm))) { - char *realname = NULL; - - if (curitem->data && aim_gettlv(curitem->data, 0x0131, 1)) - realname = aim_gettlv_str(curitem->data, 0x0131, 1); - - imcb_add_buddy(ic, nrm, curgroup ? (curgroup->gid == curitem->gid ? curgroup->name : NULL) : NULL); - - if (realname) { - imcb_buddy_nick_hint(ic, nrm, realname); - imcb_rename_buddy(ic, nrm, realname); - g_free(realname); - } + case 0x0000: /* Buddy */ + if ((curitem->name) && (!imcb_buddy_by_handle(ic, nrm))) { + char *realname = NULL; + + if (curitem->data && aim_gettlv(curitem->data, 0x0131, 1)) { + realname = aim_gettlv_str(curitem->data, 0x0131, 1); } - break; - case 0x0001: /* Group */ - curgroup = curitem; - break; + imcb_add_buddy(ic, nrm, + curgroup ? (curgroup->gid == + curitem->gid ? curgroup->name : NULL) : NULL); - case 0x0002: /* Permit buddy */ - if (curitem->name) { - GSList *list; - for (list=ic->permit; (list && aim_sncmp(curitem->name, list->data)); list=list->next); - if (!list) { - char *name; - name = g_strdup(nrm); - ic->permit = g_slist_append(ic->permit, name); - tmp++; - } + if (realname) { + imcb_buddy_nick_hint(ic, nrm, realname); + imcb_rename_buddy(ic, nrm, realname); + g_free(realname); } - break; + } + break; - case 0x0003: /* Deny buddy */ - if (curitem->name) { - GSList *list; - for (list=ic->deny; (list && aim_sncmp(curitem->name, list->data)); list=list->next); - if (!list) { - char *name; - name = g_strdup(nrm); - ic->deny = g_slist_append(ic->deny, name); - tmp++; - } + case 0x0001: /* Group */ + curgroup = curitem; + break; + + case 0x0002: /* Permit buddy */ + if (curitem->name) { + GSList *list; + for (list = ic->permit; (list && aim_sncmp(curitem->name, list->data)); + list = list->next) { + ; } - break; + if (!list) { + char *name; + name = g_strdup(nrm); + ic->permit = g_slist_append(ic->permit, name); + tmp++; + } + } + break; - case 0x0004: /* Permit/deny setting */ - if (curitem->data) { - guint8 permdeny; - if ((permdeny = aim_ssi_getpermdeny(sess->ssi.items)) && (permdeny != ic->permdeny)) { - ic->permdeny = permdeny; - tmp++; - } + case 0x0003: /* Deny buddy */ + if (curitem->name) { + GSList *list; + for (list = ic->deny; + (list && aim_sncmp(curitem->name, list->data)); list = list->next) { + ; } - break; + if (!list) { + char *name; + name = g_strdup(nrm); + ic->deny = g_slist_append(ic->deny, name); + tmp++; + } + } + break; - case 0x0005: /* Presence setting */ - /* We don't want to change Gaim's setting because it applies to all accounts */ - break; + case 0x0004: /* Permit/deny setting */ + if (curitem->data) { + guint8 permdeny; + if ((permdeny = aim_ssi_getpermdeny(sess->ssi.items)) && (permdeny != ic->permdeny)) { + ic->permdeny = permdeny; + tmp++; + } + } + break; + + case 0x0005: /* Presence setting */ + /* We don't want to change Gaim's setting because it applies to all accounts */ + break; } /* End of switch on curitem->type */ } /* End of for loop */ aim_ssi_enable(sess, fr->conn); - + /* Request offline messages, now that the buddy list is complete. */ aim_icq_reqofflinemsgs(sess); - + /* Now that we have a buddy list, we can tell BitlBee that we're online. */ imcb_connected(ic); - + return 1; } -static int gaim_ssi_parseack( aim_session_t *sess, aim_frame_t *fr, ... ) +static int gaim_ssi_parseack(aim_session_t *sess, aim_frame_t *fr, ...) { aim_snac_t *origsnac; va_list ap; - va_start( ap, fr ); - origsnac = va_arg( ap, aim_snac_t * ); - va_end( ap ); - - if( origsnac && origsnac->family == AIM_CB_FAM_SSI && origsnac->type == AIM_CB_SSI_ADD && origsnac->data ) - { - int i, st, count = aim_bstream_empty( &fr->data ); + va_start(ap, fr); + origsnac = va_arg(ap, aim_snac_t *); + va_end(ap); + + if (origsnac && origsnac->family == AIM_CB_FAM_SSI && origsnac->type == AIM_CB_SSI_ADD && origsnac->data) { + int i, st, count = aim_bstream_empty(&fr->data); char *list; - - if( count & 1 ) - { + + if (count & 1) { /* Hmm, the length should be even... */ - imcb_error( sess->aux_data, "Received SSI ACK package with non-even length"); - return( 0 ); + imcb_error(sess->aux_data, "Received SSI ACK package with non-even length"); + return(0); } count >>= 1; - + list = (char *) origsnac->data; - for( i = 0; i < count; i ++ ) - { - struct aim_ssi_item *ssigroup = aim_ssi_itemlist_findparent( sess->ssi.items, list ); + for (i = 0; i < count; i++) { + struct aim_ssi_item *ssigroup = aim_ssi_itemlist_findparent(sess->ssi.items, list); char *group = ssigroup ? ssigroup->name : NULL; - - st = aimbs_get16( &fr->data ); - if( st == 0x00 ) - { - imcb_add_buddy( sess->aux_data, normalize(list), group ); - } - else if( st == 0x0E ) - { - imcb_log( sess->aux_data, "Buddy %s can't be added without authorization, requesting authorization", list ); - - aim_ssi_auth_request( sess, fr->conn, list, "" ); - aim_ssi_addbuddies( sess, fr->conn, OSCAR_GROUP, &list, 1, 1 ); - } - else if( st == 0x0A ) - { - imcb_error( sess->aux_data, "Buddy %s is already in your list", list ); - } - else - { - imcb_error( sess->aux_data, "Error while adding buddy: 0x%04x", st ); + + st = aimbs_get16(&fr->data); + if (st == 0x00) { + imcb_add_buddy(sess->aux_data, normalize(list), group); + } else if (st == 0x0E) { + imcb_log(sess->aux_data, + "Buddy %s can't be added without authorization, requesting authorization", + list); + + aim_ssi_auth_request(sess, fr->conn, list, ""); + aim_ssi_addbuddies(sess, fr->conn, OSCAR_GROUP, &list, 1, 1); + } else if (st == 0x0A) { + imcb_error(sess->aux_data, "Buddy %s is already in your list", list); + } else { + imcb_error(sess->aux_data, "Error while adding buddy: 0x%04x", st); } - list += strlen( list ) + 1; + list += strlen(list) + 1; } } - - return( 1 ); + + return(1); } -static void oscar_add_permit(struct im_connection *ic, char *who) { - struct oscar_data *od = (struct oscar_data *)ic->proto_data; +static void oscar_add_permit(struct im_connection *ic, char *who) +{ + struct oscar_data *od = (struct oscar_data *) ic->proto_data; + if (od->icq) { aim_ssi_auth_reply(od->sess, od->conn, who, 1, ""); } else { - if (od->sess->ssi.received_data) + if (od->sess->ssi.received_data) { aim_ssi_addpord(od->sess, od->conn, &who, 1, AIM_SSI_TYPE_PERMIT); + } } } -static void oscar_add_deny(struct im_connection *ic, char *who) { - struct oscar_data *od = (struct oscar_data *)ic->proto_data; +static void oscar_add_deny(struct im_connection *ic, char *who) +{ + struct oscar_data *od = (struct oscar_data *) ic->proto_data; + if (od->icq) { aim_ssi_auth_reply(od->sess, od->conn, who, 0, ""); } else { - if (od->sess->ssi.received_data) + if (od->sess->ssi.received_data) { aim_ssi_addpord(od->sess, od->conn, &who, 1, AIM_SSI_TYPE_DENY); + } } } -static void oscar_rem_permit(struct im_connection *ic, char *who) { - struct oscar_data *od = (struct oscar_data *)ic->proto_data; +static void oscar_rem_permit(struct im_connection *ic, char *who) +{ + struct oscar_data *od = (struct oscar_data *) ic->proto_data; + if (!od->icq) { - if (od->sess->ssi.received_data) + if (od->sess->ssi.received_data) { aim_ssi_delpord(od->sess, od->conn, &who, 1, AIM_SSI_TYPE_PERMIT); + } } } -static void oscar_rem_deny(struct im_connection *ic, char *who) { - struct oscar_data *od = (struct oscar_data *)ic->proto_data; +static void oscar_rem_deny(struct im_connection *ic, char *who) +{ + struct oscar_data *od = (struct oscar_data *) ic->proto_data; + if (!od->icq) { - if (od->sess->ssi.received_data) + if (od->sess->ssi.received_data) { aim_ssi_delpord(od->sess, od->conn, &who, 1, AIM_SSI_TYPE_DENY); + } } } @@ -2158,14 +2294,15 @@ static int gaim_icqinfo(aim_session_t *sess, aim_frame_t *fr, ...) info = va_arg(ap, struct aim_icq_info *); va_end(ap); - if (!info->uin) + if (!info->uin) { return 0; + } str = g_string_sized_new(512); g_snprintf(who, sizeof(who), "%u", info->uin); - g_string_printf(str, "%s: %s - %s: %s", _("UIN"), who, _("Nick"), - info->nick ? info->nick : "-"); + g_string_printf(str, "%s: %s - %s: %s", _("UIN"), who, _("Nick"), + info->nick ? info->nick : "-"); g_string_append_printf(str, "\n%s: %s", _("First Name"), info->first); g_string_append_printf(str, "\n%s: %s", _("Last Name"), info->last); g_string_append_printf(str, "\n%s: %s", _("Email Address"), info->email); @@ -2180,15 +2317,16 @@ static int gaim_icqinfo(aim_session_t *sess, aim_frame_t *fr, ...) (ip >> 24), (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff); } g_string_append_printf(str, "\n%s: %s", _("Mobile Phone"), info->mobile); - if (info->gender != 0) - g_string_append_printf(str, "\n%s: %s", _("Gender"), info->gender==1 ? _("Female") : _("Male")); + if (info->gender != 0) { + g_string_append_printf(str, "\n%s: %s", _("Gender"), info->gender == 1 ? _("Female") : _("Male")); + } if (info->birthyear || info->birthmonth || info->birthday) { char date[30]; struct tm tm; memset(&tm, 0, sizeof(struct tm)); - tm.tm_mday = (int)info->birthday; - tm.tm_mon = (int)info->birthmonth-1; - tm.tm_year = (int)info->birthyear%100; + tm.tm_mday = (int) info->birthday; + tm.tm_mon = (int) info->birthmonth - 1; + tm.tm_year = (int) info->birthyear % 100; strftime(date, sizeof(date), "%Y-%m-%d", &tm); g_string_append_printf(str, "\n%s: %s", _("Birthday"), date); } @@ -2199,19 +2337,25 @@ static int gaim_icqinfo(aim_session_t *sess, aim_frame_t *fr, ...) } g_string_append_printf(str, "\n%s: %s", _("Personal Web Page"), info->personalwebpage); if (info->info && info->info[0]) { - g_string_sprintfa(str, "\n%s:\n%s\n%s", _("Additional Information"), - info->info, _("End of Additional Information")); + g_string_sprintfa(str, "\n%s:\n%s\n%s", _("Additional Information"), + info->info, _("End of Additional Information")); } g_string_append_c(str, '\n'); - if ((info->homeaddr && (info->homeaddr[0])) || (info->homecity && info->homecity[0]) || (info->homestate && info->homestate[0]) || (info->homezip && info->homezip[0])) { + if ((info->homeaddr && + (info->homeaddr[0])) || + (info->homecity && + info->homecity[0]) || (info->homestate && info->homestate[0]) || (info->homezip && info->homezip[0])) { g_string_append_printf(str, "%s:", _("Home Address")); g_string_append_printf(str, "\n%s: %s", _("Address"), info->homeaddr); g_string_append_printf(str, "\n%s: %s", _("City"), info->homecity); - g_string_append_printf(str, "\n%s: %s", _("State"), info->homestate); + g_string_append_printf(str, "\n%s: %s", _("State"), info->homestate); g_string_append_printf(str, "\n%s: %s", _("Zip Code"), info->homezip); g_string_append_c(str, '\n'); } - if ((info->workaddr && info->workaddr[0]) || (info->workcity && info->workcity[0]) || (info->workstate && info->workstate[0]) || (info->workzip && info->workzip[0])) { + if ((info->workaddr && + info->workaddr[0]) || + (info->workcity && + info->workcity[0]) || (info->workstate && info->workstate[0]) || (info->workzip && info->workzip[0])) { g_string_append_printf(str, "%s:", _("Work Address")); g_string_append_printf(str, "\n%s: %s", _("Address"), info->workaddr); g_string_append_printf(str, "\n%s: %s", _("City"), info->workcity); @@ -2219,7 +2363,11 @@ static int gaim_icqinfo(aim_session_t *sess, aim_frame_t *fr, ...) g_string_append_printf(str, "\n%s: %s", _("Zip Code"), info->workzip); g_string_append_c(str, '\n'); } - if ((info->workcompany && info->workcompany[0]) || (info->workdivision && info->workdivision[0]) || (info->workposition && info->workposition[0]) || (info->workwebpage && info->workwebpage[0])) { + if ((info->workcompany && + info->workcompany[0]) || + (info->workdivision && + info->workdivision[0]) || + (info->workposition && info->workposition[0]) || (info->workwebpage && info->workwebpage[0])) { g_string_append_printf(str, "%s:", _("Work Information")); g_string_append_printf(str, "\n%s: %s", _("Company"), info->workcompany); g_string_append_printf(str, "\n%s: %s", _("Division"), info->workdivision); @@ -2246,19 +2394,19 @@ static char *oscar_encoding_extract(const char *encoding) /* Make sure encoding begins with charset= */ if (strncmp(encoding, "text/plain; charset=", 20) && - strncmp(encoding, "text/aolrtf; charset=", 21) && - strncmp(encoding, "text/x-aolrtf; charset=", 23)) - { + strncmp(encoding, "text/aolrtf; charset=", 21) && + strncmp(encoding, "text/x-aolrtf; charset=", 23)) { return NULL; } begin = strchr(encoding, '"'); end = strrchr(encoding, '"'); - if ((begin == NULL) || (end == NULL) || (begin >= end)) + if ((begin == NULL) || (end == NULL) || (begin >= end)) { return NULL; + } - ret = g_strndup(begin+1, (end-1) - begin); + ret = g_strndup(begin + 1, (end - 1) - begin); return ret; } @@ -2287,7 +2435,7 @@ static char *oscar_encoding_to_utf8(char *encoding, char *text, int textlen) * that was specified. So we assume it's UTF-8 and hope for the best. */ if (*utf8 == 0) { - strncpy(utf8, text, textlen); + strncpy(utf8, text, textlen); } return utf8; @@ -2311,13 +2459,14 @@ static int gaim_parseaiminfo(aim_session_t *sess, aim_frame_t *fr, ...) text_length = va_arg(ap, int); va_end(ap); - if(text_encoding) + if (text_encoding) { extracted_encoding = oscar_encoding_extract(text_encoding); - if(infotype == AIM_GETINFO_GENERALINFO) { + } + if (infotype == AIM_GETINFO_GENERALINFO) { /*Display idle time*/ char buff[256]; struct tm idletime; - if(userinfo->idletime) { + if (userinfo->idletime) { memset(&idletime, 0, sizeof(struct tm)); idletime.tm_mday = (userinfo->idletime / 60) / 24; idletime.tm_hour = (userinfo->idletime / 60) % 24; @@ -2326,20 +2475,20 @@ static int gaim_parseaiminfo(aim_session_t *sess, aim_frame_t *fr, ...) strftime(buff, 256, _("%d days %H hours %M minutes"), &idletime); imcb_log(ic, "%s: %s", _("Idle Time"), buff); } - - if(text) { + + if (text) { utf8 = oscar_encoding_to_utf8(extracted_encoding, text, text_length); imcb_log(ic, "%s\n%s", _("User Info"), utf8); } else { imcb_log(ic, _("No user info available.")); } - } else if(infotype == AIM_GETINFO_AWAYMESSAGE && userinfo->flags & AIM_FLAG_AWAY) { + } else if (infotype == AIM_GETINFO_AWAYMESSAGE && userinfo->flags & AIM_FLAG_AWAY) { utf8 = oscar_encoding_to_utf8(extracted_encoding, text, text_length); imcb_log(ic, "%s\n%s", _("Away Message"), utf8); } g_free(utf8); - + return 1; } @@ -2355,48 +2504,50 @@ int gaim_parsemtn(aim_session_t *sess, aim_frame_t *fr, ...) sn = va_arg(ap, char*); type2 = va_arg(ap, int); va_end(ap); - - if(type2 == 0x0002) { + + if (type2 == 0x0002) { /* User is typing */ imcb_buddy_typing(ic, normalize(sn), OPT_TYPING); - } - else if (type2 == 0x0001) { + } else if (type2 == 0x0001) { /* User has typed something, but is not actively typing (stale) */ imcb_buddy_typing(ic, normalize(sn), OPT_THINKING); - } - else { + } else { /* User has stopped typing */ imcb_buddy_typing(ic, normalize(sn), 0); } - + return 1; } int oscar_send_typing(struct im_connection *ic, char * who, int typing) { struct oscar_data *od = ic->proto_data; - return( aim_im_sendmtn(od->sess, 1, who, (typing & OPT_TYPING) ? 0x0002 : 0x0000) ); + + return(aim_im_sendmtn(od->sess, 1, who, (typing & OPT_TYPING) ? 0x0002 : 0x0000)); } void oscar_chat_msg(struct groupchat *c, char *message, int msgflags) { struct im_connection *ic = c->ic; - struct oscar_data * od = (struct oscar_data*)ic->proto_data; + struct oscar_data * od = (struct oscar_data*) ic->proto_data; struct chat_connection * ccon; int ret; guint8 len = strlen(message); guint16 flags; char *s; - - if (!(ccon = c->data)) + + if (!(ccon = c->data)) { return; - - for (s = message; *s; s++) - if (*s & 128) + } + + for (s = message; *s; s++) { + if (*s & 128) { break; - + } + } + flags = AIM_CHATFLAGS_NOREFLECT; - + /* Message contains high ASCII chars, time for some translation! */ if (*s) { s = g_malloc(BUF_LONG); @@ -2410,46 +2561,48 @@ void oscar_chat_msg(struct groupchat *c, char *message, int msgflags) len = ret; } else { /* OOF, translation failed... Oh well.. */ - g_free( s ); + g_free(s); s = message; } } else { s = message; } - + ret = aim_chat_send_im(od->sess, ccon->conn, flags, s, len); - - if (s != message) { + + if (s != message) { g_free(s); - } - + } + /* return (ret >= 0); */ } void oscar_chat_invite(struct groupchat *c, char *who, char *message) { struct im_connection *ic = c->ic; - struct oscar_data * od = (struct oscar_data *)ic->proto_data; + struct oscar_data * od = (struct oscar_data *) ic->proto_data; struct chat_connection *ccon; - - if (!(ccon = c->data)) + + if (!(ccon = c->data)) { return; - + } + aim_chat_invite(od->sess, od->conn, who, message ? message : "", - ccon->exchange, ccon->name, 0x0); + ccon->exchange, ccon->name, 0x0); } void oscar_chat_kill(struct im_connection *ic, struct chat_connection *cc) { - struct oscar_data *od = (struct oscar_data *)ic->proto_data; + struct oscar_data *od = (struct oscar_data *) ic->proto_data; /* Notify the conversation window that we've left the chat */ imcb_chat_free(cc->cnv); /* Destroy the chat_connection */ od->oscar_chats = g_slist_remove(od->oscar_chats, cc); - if (cc->inpa > 0) + if (cc->inpa > 0) { b_event_remove(cc->inpa); + } aim_conn_kill(od->sess, &cc->conn); g_free(cc->name); g_free(cc->show); @@ -2458,66 +2611,69 @@ void oscar_chat_kill(struct im_connection *ic, struct chat_connection *cc) void oscar_chat_leave(struct groupchat *c) { - if (!c->data) + if (!c->data) { return; + } oscar_chat_kill(c->ic, c->data); } struct groupchat *oscar_chat_join_internal(struct im_connection *ic, const char *room, - const char *nick, const char *password, int exchange_number) + const char *nick, const char *password, int exchange_number) { - struct oscar_data * od = (struct oscar_data *)ic->proto_data; + struct oscar_data * od = (struct oscar_data *) ic->proto_data; struct groupchat *ret = imcb_chat_new(ic, room); aim_conn_t * cur; - if((cur = aim_getconn_type(od->sess, AIM_CONN_TYPE_CHATNAV))) { + if ((cur = aim_getconn_type(od->sess, AIM_CONN_TYPE_CHATNAV))) { aim_chatnav_createroom(od->sess, cur, room, exchange_number); - + return ret; } else { struct create_room * cr = g_new0(struct create_room, 1); - + cr->exchange = exchange_number; cr->name = g_strdup(room); od->create_rooms = g_slist_append(od->create_rooms, cr); aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_CHATNAV); - + return ret; } } struct groupchat *oscar_chat_join(struct im_connection *ic, const char *room, - const char *nick, const char *password, set_t **sets) + const char *nick, const char *password, set_t **sets) { return oscar_chat_join_internal(ic, room, nick, password, set_getint(sets, "exchange_number")); } struct groupchat *oscar_chat_with(struct im_connection * ic, char *who) { - struct oscar_data * od = (struct oscar_data *)ic->proto_data; + struct oscar_data * od = (struct oscar_data *) ic->proto_data; struct groupchat *ret; static int chat_id = 0; char * chatname, *s; - + chatname = g_strdup_printf("%s%s%d", g_ascii_isdigit(*ic->acc->user) ? "icq" : "", ic->acc->user, chat_id++); - - for (s = chatname; *s; s ++) - if (!g_ascii_isalnum(*s)) + + for (s = chatname; *s; s++) { + if (!g_ascii_isalnum(*s)) { *s = '0'; - + } + } + ret = oscar_chat_join_internal(ic, chatname, NULL, NULL, 4); aim_chat_invite(od->sess, od->conn, who, "", 4, chatname, 0x0); g_free(chatname); - + return ret; } void oscar_accept_chat(void *data) { struct aim_chat_invitation * inv = data; - + oscar_chat_join_internal(inv->ic, inv->name, NULL, NULL, 4); g_free(inv->name); g_free(inv); @@ -2526,7 +2682,7 @@ void oscar_accept_chat(void *data) void oscar_reject_chat(void *data) { struct aim_chat_invitation * inv = data; - + g_free(inv->name); g_free(inv); } @@ -2541,11 +2697,12 @@ void oscar_chat_free_settings(account_t *acc, set_t **head) set_del(head, "exchange_number"); } -void oscar_initmodule() +void oscar_initmodule() { struct prpl *ret = g_new0(struct prpl, 1); + ret->name = "oscar"; - ret->mms = 2343; /* this guess taken from libotr UPGRADING file */ + ret->mms = 2343; /* this guess taken from libotr UPGRADING file */ ret->away_states = oscar_away_states; ret->init = oscar_init; ret->login = oscar_login; @@ -2569,7 +2726,7 @@ void oscar_initmodule() ret->rem_permit = oscar_rem_permit; ret->rem_deny = oscar_rem_deny; ret->send_typing = oscar_send_typing; - + ret->handle_cmp = aim_sncmp; register_protocol(ret); |