From: Nathan W. <fac...@us...> - 2003-10-04 21:19:33
|
Update of /cvsroot/gaim/gaim/src/protocols/jabber In directory sc8-pr-cvs1:/tmp/cvs-serv6340/src/protocols/jabber Modified Files: buddy.c jabber.c message.c message.h presence.c Log Message: all sorts of fun jabber stuff including: 1. stop calling gaim_strdup_withhtml() with NULL values 2. real support for headline-type messages 3. fix a stupid presence bug when authorizing people 4. fix login default stuff so people can log in Index: buddy.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/jabber/buddy.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -p -r1.5 -r1.6 --- buddy.c 2 Oct 2003 01:58:26 -0000 1.5 +++ buddy.c 4 Oct 2003 21:19:29 -0000 1.6 @@ -557,28 +557,33 @@ static void jabber_vcard_parse(JabberStr if(resource_name) { jbr = jabber_buddy_find_resource(jb, resource_name); if(jbr) { - char *purdy = gaim_strdup_withhtml(jbr->status); + char *purdy = NULL; + if(jbr->status) + purdy = gaim_strdup_withhtml(jbr->status); g_string_append_printf(info_text, "<b>%s:</b> %s%s%s<br/>\n", _("Status"), jabber_get_state_string(jbr->state), purdy ? ": " : "", purdy ? purdy : ""); - g_free(purdy); + if(purdy) + g_free(purdy); } else { g_string_append_printf(info_text, "<b>%s:</b> %s<br/>\n", _("Status"), _("Unknown")); } } else { for(resources = jb->resources; resources; resources = resources->next) { - char *purdy; + char *purdy = NULL; jbr = resources->data; - purdy = gaim_strdup_withhtml(jbr->status); + if(jbr->status) + purdy = gaim_strdup_withhtml(jbr->status); g_string_append_printf(info_text, "<b>%s:</b> %s<br/>\n", _("Resource"), jbr->name); g_string_append_printf(info_text, "<b>%s:</b> %s%s%s<br/><br/>\n", _("Status"), jabber_get_state_string(jbr->state), purdy ? ": " : "", purdy ? purdy : ""); - g_free(purdy); + if(purdy) + g_free(purdy); } } Index: jabber.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/jabber/jabber.c,v retrieving revision 1.198 retrieving revision 1.199 diff -u -d -p -r1.198 -r1.199 --- jabber.c 2 Oct 2003 04:56:25 -0000 1.198 +++ jabber.c 4 Oct 2003 21:19:29 -0000 1.199 @@ -357,6 +357,13 @@ jabber_login(GaimAccount *account) g_free, NULL); js->user = jabber_id_new(gaim_account_get_username(account)); + if(!js->user->node) { + js->user->node = js->user->domain; + js->user->domain = g_strdup("jabber.org"); + } + if(!js->user->resource) + js->user->resource = g_strdup("Gaim"); + server = connect_server[0] ? connect_server : js->user->domain; jabber_stream_set_state(js, JABBER_STREAM_CONNECTING); Index: message.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/jabber/message.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -p -r1.4 -r1.5 --- message.c 3 Oct 2003 23:14:13 -0000 1.4 +++ message.c 4 Oct 2003 21:19:29 -0000 1.5 @@ -46,11 +46,13 @@ void jabber_message_free(JabberMessage * g_free(jm->xhtml); if(jm->password) g_free(jm->password); + if(jm->etc) + g_list_free(jm->etc); g_free(jm); } -void handle_chat(JabberMessage *jm) +static void handle_chat(JabberMessage *jm) { JabberID *jid = jabber_id_new(jm->from); char *from; @@ -84,7 +86,56 @@ void handle_chat(JabberMessage *jm) jabber_id_free(jid); } -void handle_groupchat(JabberMessage *jm) +static void handle_headline(JabberMessage *jm) +{ + char *title; + GString *body = g_string_new(""); + GList *etc; + + title = g_strdup_printf(_("Message from %s"), jm->from); + + if(jm->xhtml) + g_string_append(body, jm->xhtml); + else if(jm->body) + g_string_append(body, jm->body); + + for(etc = jm->etc; etc; etc = etc->next) { + xmlnode *x = etc->data; + const char *xmlns = xmlnode_get_attrib(x, "xmlns"); + if(xmlns && !strcmp(xmlns, "jabber:x:oob")) { + xmlnode *url, *desc; + char *urltxt, *desctxt; + + url = xmlnode_get_child(x, "url"); + desc = xmlnode_get_child(x, "desc"); + + if(!url || !desc) + continue; + + urltxt = xmlnode_get_data(url); + desctxt = xmlnode_get_data(desc); + + /* I'm all about ugly hacks */ + if(body->len && !strcmp(body->str, jm->body)) + g_string_printf(body, "<a href='%s'>%s</a>", + urltxt, desctxt); + else + g_string_append_printf(body, "<br/><a href='%s'>%s</a>", + urltxt, desctxt); + + g_free(urltxt); + g_free(desctxt); + } + } + + gaim_notify_formatted(jm->js->gc, title, jm->subject ? jm->subject : title, + NULL, body->str, NULL, NULL); + + g_free(title); + g_string_free(body, TRUE); +} + +static void handle_groupchat(JabberMessage *jm) { JabberID *jid = jabber_id_new(jm->from); JabberChat *chat = jabber_chat_find(jm->js, jid->node, jid->domain); @@ -100,7 +151,7 @@ void handle_groupchat(JabberMessage *jm) jabber_id_free(jid); } -void handle_groupchat_invite(JabberMessage *jm) +static void handle_groupchat_invite(JabberMessage *jm) { GHashTable *components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); @@ -115,7 +166,7 @@ void handle_groupchat_invite(JabberMessa serv_got_chat_invite(jm->js->gc, jm->to, jm->from, jm->body, components); } -void handle_error(JabberMessage *jm) +static void handle_error(JabberMessage *jm) { char *buf; @@ -231,6 +282,8 @@ void jabber_message_parse(JabberStream * jm->type = JABBER_MESSAGE_GROUPCHAT_INVITE; } + } else { + jm->etc = g_list_append(jm->etc, child); } } } @@ -238,8 +291,10 @@ void jabber_message_parse(JabberStream * switch(jm->type) { case JABBER_MESSAGE_NORMAL: case JABBER_MESSAGE_CHAT: - case JABBER_MESSAGE_HEADLINE: handle_chat(jm); + break; + case JABBER_MESSAGE_HEADLINE: + handle_headline(jm); break; case JABBER_MESSAGE_GROUPCHAT: handle_groupchat(jm); Index: message.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/jabber/message.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -p -r1.2 -r1.3 --- message.h 2 Oct 2003 02:54:02 -0000 1.2 +++ message.h 4 Oct 2003 21:19:29 -0000 1.3 @@ -47,6 +47,7 @@ typedef struct _JabberMessage { enum { JABBER_MESSAGE_EVENT_COMPOSING = 1 << 1 } events; + GList *etc; } JabberMessage; Index: presence.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/jabber/presence.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -p -r1.5 -r1.6 --- presence.c 2 Oct 2003 04:56:25 -0000 1.5 +++ presence.c 4 Oct 2003 21:19:29 -0000 1.6 @@ -179,6 +179,7 @@ void jabber_presence_parse(JabberStream _("Authorize"), G_CALLBACK(authorize_add_cb), _("Deny"), G_CALLBACK(deny_add_cb)); g_free(msg); + return; } else if(type && (!strcmp(type, "subscribed") || !strcmp(type, "unsubscribed"))) { /* we've been allowed to see their presence, but we don't care */ |