# HG changeset patch # User Paul Aurich # Date 1276892046 0 # Node ID 597840eccfa715fe6368f17e215d5b5b3027a109 # Parent 51d5ec7b16996ef32b46c284bab48a716dc9aa83# Parent 5ec02acb206ba6cff259fc1b9a854d3d8ff14e72 merge of '0627a49f54e3d5317e6a8dd97956ee2abfa32f9d' and '8bc0a157fd0b23d8e7b6dc9b581fc636e9a0f258' diff -r 51d5ec7b1699 -r 597840eccfa7 libpurple/protocols/jabber/jabber.c --- a/libpurple/protocols/jabber/jabber.c Fri Jun 18 20:12:41 2010 +0000 +++ b/libpurple/protocols/jabber/jabber.c Fri Jun 18 20:14:06 2010 +0000 @@ -218,22 +218,25 @@ account = purple_connection_get_account(js->gc); - if((starttls = xmlnode_get_child(packet, "starttls"))) { - if(purple_ssl_is_supported()) { - jabber_send_raw(js, - "", -1); - return TRUE; - } else if(xmlnode_get_child(starttls, "required")) { - purple_connection_error_reason(js->gc, + if(purple_ssl_is_supported()) { + jabber_send_raw(js, + "", -1); + return TRUE; + } + + starttls = xmlnode_get_child(packet, "starttls"); + if(xmlnode_get_child(starttls, "required")) { + purple_connection_error_reason(js->gc, PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT, _("Server requires TLS/SSL, but no TLS/SSL support was found.")); - return TRUE; - } else if(purple_account_get_bool(account, "require_tls", JABBER_DEFAULT_REQUIRE_TLS)) { - purple_connection_error_reason(js->gc, - PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT, + return TRUE; + } + + if(purple_account_get_bool(account, "require_tls", JABBER_DEFAULT_REQUIRE_TLS)) { + purple_connection_error_reason(js->gc, + PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT, _("You require encryption, but no TLS/SSL support was found.")); - return TRUE; - } + return TRUE; } return FALSE; diff -r 51d5ec7b1699 -r 597840eccfa7 libpurple/protocols/oscar/family_icbm.c --- a/libpurple/protocols/oscar/family_icbm.c Fri Jun 18 20:12:41 2010 +0000 +++ b/libpurple/protocols/oscar/family_icbm.c Fri Jun 18 20:14:06 2010 +0000 @@ -2684,9 +2684,9 @@ guchar *cookie; guint8 bnlen; char *xml = NULL; - int hdrlen; + guint16 hdrlen; int curpos; - int num1,num2; + guint16 num1, num2; char *desc, *title, *temp; PurpleAccount *account; PurpleBuddy *buddy; @@ -2701,54 +2701,56 @@ if (channel == 0x0002) { - hdrlen = byte_stream_getle16(bs); - if ( ((hdrlen == 27 ) && (bs->len > (27 + 51)))) { - byte_stream_advance(bs, 51); - num1 = byte_stream_getle16(bs); - num2 = byte_stream_getle16(bs); - purple_debug_misc("oscar", "X-Status: Num1 %i, num2 %i\n",num1, num2); - - if(((num1 == 0x4f00)&&(num2 == 0x3b00))) { - byte_stream_advance(bs, 86); - curpos = byte_stream_curpos(bs); - xml = byte_stream_getstr(bs, bs->len - curpos); - purple_debug_misc("oscar", "X-Status: Received XML reply\n"); - if(xml) { - /* purple_debug_misc("oscar", "X-Status: XML reply: %s\n", (const char*) xml); */ - if ((desc=strstr(xml,"<desc>")) != NULL) { - temp=strstr(xml,"</desc>"); - temp[0]=0; - desc=desc+12; - } - if ((title=strstr(xml,"<title>")) != NULL) { - temp=strstr(xml,"</title>"); - temp[0]=0; - title=title+13; - } else { - title=""; - } - strcpy(xml,title); + hdrlen = byte_stream_getle16(bs); + if (hdrlen == 27 && bs->len > (27 + 51)) { + byte_stream_advance(bs, 51); + num1 = byte_stream_getle16(bs); + num2 = byte_stream_getle16(bs); + purple_debug_misc("oscar", "X-Status: num1 %hu, num2 %hu\n", num1, num2); + + if (num1 == 0x4f00 && num2 == 0x3b00) { + byte_stream_advance(bs, 86); + curpos = byte_stream_curpos(bs); + xml = byte_stream_getstr(bs, bs->len - curpos); + purple_debug_misc("oscar", "X-Status: Received XML reply\n"); + if (xml) { + /* purple_debug_misc("oscar", "X-Status: XML reply: %s\n", xml); */ + desc = strstr(xml, "<desc>"); + if (desc != NULL) { + temp = strstr(xml, "</desc>"); + temp[0] = 0; + desc = desc + 12; + } + title = strstr(xml, "<title>"); + if (title != NULL) { + temp = strstr(xml, "</title>"); + temp[0] = 0; + title = title + 13; + } else { + title = ""; + } + strcpy(xml,title); if (desc) { - strcat(xml, " - "); - strcat(xml, desc); + strcat(xml, " - "); + strcat(xml, desc); } - purple_debug_misc("oscar", "X-Status reply: %s\n", (const char*)xml); - account = purple_connection_get_account(od->gc); - buddy = purple_find_buddy(account, bn); - presence = purple_buddy_get_presence(buddy); - status = purple_presence_get_active_status(presence); - purple_prpl_got_user_status(account, bn, - purple_status_get_id(status), "message", xml, NULL); - } else { - purple_debug_misc("oscar", "X-Status: Can't get XML reply string\n"); + purple_debug_misc("oscar", "X-Status reply: %s\n", xml); + account = purple_connection_get_account(od->gc); + buddy = purple_find_buddy(account, bn); + presence = purple_buddy_get_presence(buddy); + status = purple_presence_get_active_status(presence); + purple_prpl_got_user_status(account, bn, + purple_status_get_id(status), "message", xml, NULL); + } else { + purple_debug_misc("oscar", "X-Status: Can't get XML reply string\n"); } - } else { - purple_debug_misc("oscar", "X-Status: 0x0004, 0x000b not an xstatus reply\n" ); - /* if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, channel, sn, reason); */ + } else { + purple_debug_misc("oscar", "X-Status: 0x0004, 0x000b not an xstatus reply\n"); + /* if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) + ret = userfunc(od, conn, frame, channel, sn, reason); */ } - - } + + } } else if (channel == 0x0004) { /* ICQ message */ switch (reason) { @@ -2884,7 +2886,7 @@ if (!bn) return -EINVAL; - byte_stream_new(&bs, 11+strlen(bn)+2); + byte_stream_new(&bs, 11 + strlen(bn) + 2); snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0014, 0x0000, NULL, 0); @@ -2930,38 +2932,36 @@ char *statxml; int xmllen; - static const guint8 pluginid[] = - { - 0x09, 0x46, 0x13, 0x49, 0x4C, 0x7F, 0x11, 0xD1, - 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 + static const guint8 pluginid[] = { + 0x09, 0x46, 0x13, 0x49, 0x4C, 0x7F, 0x11, 0xD1, + 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; - - static const guint8 c_plugindata[] = - { - 0x1B, 0x00, 0x0A, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xD1, 0x0E, 0x00, 0xF9, 0xD1, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x4F, 0x00, 0x3B, 0x60, 0xB3, 0xEF, 0xD8, 0x2A, 0x6C, 0x45, 0xA4, 0xE0, 0x9C, - 0x5A, 0x5E, 0x67, 0xE8, 0x65, 0x08, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x53, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x20, 0x50, 0x6C, 0x75, 0x67, 0x2D, 0x69, 0x6E, 0x3A, 0x20, 0x52, 0x65, 0x6D, 0x6F, 0x74, - 0x65, 0x20, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x41, - 0x72, 0x72, 0x69, 0x76, 0x65, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00 + + static const guint8 c_plugindata[] = { + 0x1B, 0x00, 0x0A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xD1, 0x0E, 0x00, 0xF9, 0xD1, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x4F, 0x00, 0x3B, 0x60, 0xB3, 0xEF, 0xD8, 0x2A, 0x6C, 0x45, 0xA4, 0xE0, 0x9C, + 0x5A, 0x5E, 0x67, 0xE8, 0x65, 0x08, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x53, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x20, 0x50, 0x6C, 0x75, 0x67, 0x2D, 0x69, 0x6E, 0x3A, 0x20, 0x52, 0x65, 0x6D, 0x6F, 0x74, + 0x65, 0x20, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x41, + 0x72, 0x72, 0x69, 0x76, 0x65, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00 }; - + if (!od || !(conn = flap_connection_findbygroup(od, 0x0004))) return -EINVAL; if (!sn) return -EINVAL; - fmt = "<Q><PluginID>srvMng</PluginID></Q><srv><id>cAwaySrv</id><req><id>AwayStat</id><trans>2</trans><senderId>%s</senderId></req></srv>\r\n"; + fmt = "<Q><PluginID>srvMng</PluginID></Q><srv><id>cAwaySrv</id><req><id>AwayStat</id><trans>2</trans><senderId>%s</senderId></req></srv>\r\n"; account = purple_connection_get_account(od->gc); xmllen = strlen(fmt) - 2 + strlen(account->username); - statxml = (char*) g_malloc(xmllen); + statxml = g_malloc(xmllen); snprintf(statxml, xmllen, fmt, account->username); aim_icbm_makecookie(cookie); @@ -2970,38 +2970,36 @@ + 2 + 2 + 8 + 16 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + sizeof(c_plugindata) + xmllen + 2 + 2); - + snacid = aim_cachesnac(od, 0x0004, 0x0006, 0x0000, NULL, 0); aim_im_puticbm(&bs, cookie, 0x0002, sn); byte_stream_new(&header, (7*2) + 16 + 8 + 2 + sizeof(c_plugindata) + xmllen); /* TLV 0x0005 Stream + Size */ - byte_stream_new(&plugindata, (sizeof(c_plugindata) + xmllen)); - byte_stream_put16(&header, 0x0000); /* Message Type: Request */ byte_stream_putraw(&header, cookie, sizeof(cookie)); /* Message ID */ byte_stream_putraw(&header, pluginid, sizeof(pluginid)); /* Plugin ID */ - + aim_tlvlist_add_16(&inner_tlvlist, 0x000a, 0x0001); aim_tlvlist_add_noval(&inner_tlvlist, 0x000f); - + /* Add Plugin Specific Data */ + byte_stream_new(&plugindata, (sizeof(c_plugindata) + xmllen)); byte_stream_putraw(&plugindata, c_plugindata, sizeof(c_plugindata)); /* Content of TLV 0x2711 */ byte_stream_putstr(&plugindata, statxml); aim_tlvlist_add_raw(&inner_tlvlist, 0x2711, (sizeof(c_plugindata) + xmllen), plugindata.data); - + aim_tlvlist_write(&header, &inner_tlvlist); - - + aim_tlvlist_free(inner_tlvlist); + aim_tlvlist_add_raw(&outer_tlvlist, 0x0005, byte_stream_curpos(&header), header.data); - aim_tlvlist_add_noval(&outer_tlvlist, 0x0003); /* Empty TLV 0x0003 */ - + aim_tlvlist_add_noval(&outer_tlvlist, 0x0003); /* Empty TLV 0x0003 */ + aim_tlvlist_write(&bs, &outer_tlvlist); - + purple_debug_misc("oscar", "X-Status Request\n"); flap_connection_send_snac_with_priority(od, conn, 0x0004, 0x0006, 0x0000, snacid, &bs, TRUE); - aim_tlvlist_free(inner_tlvlist); aim_tlvlist_free(outer_tlvlist); byte_stream_destroy(&header); byte_stream_destroy(&plugindata); @@ -3018,58 +3016,65 @@ aim_snacid_t snacid; PurpleAccount *account; PurpleStatus *status; - const char *fmt; - const char *formatted_msg; - char *msg; - char *statxml; + const char *fmt; + const char *formatted_msg; + char *msg; + char *statxml; const char *title; int len; - + static const guint8 plugindata[] = { - 0x1B, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xD1, 0x0E, 0x00, 0xF9, 0xD1, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x4F, - 0x00, 0x3B, 0x60, 0xB3, 0xEF, 0xD8, 0x2A, 0x6C, 0x45, 0xA4, 0xE0, - 0x9C, 0x5A, 0x5E, 0x67, 0xE8, 0x65, 0x08, 0x00, 0x2A, 0x00, 0x00, - 0x00, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x50, 0x6C, 0x75, - 0x67, 0x2D, 0x69, 0x6E, 0x3A, 0x20, 0x52, 0x65, 0x6D, 0x6F, 0x74, - 0x65, 0x20, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6F, 0x6E, 0x20, 0x41, 0x72, 0x72, 0x69, 0x76, 0x65, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xF3, 0x01, 0x00, 0x00, 0xEF, 0x01, 0x00, 0x00 - }; + 0x1B, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xD1, 0x0E, 0x00, 0xF9, 0xD1, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x4F, + 0x00, 0x3B, 0x60, 0xB3, 0xEF, 0xD8, 0x2A, 0x6C, 0x45, 0xA4, 0xE0, + 0x9C, 0x5A, 0x5E, 0x67, 0xE8, 0x65, 0x08, 0x00, 0x2A, 0x00, 0x00, + 0x00, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x50, 0x6C, 0x75, + 0x67, 0x2D, 0x69, 0x6E, 0x3A, 0x20, 0x52, 0x65, 0x6D, 0x6F, 0x74, + 0x65, 0x20, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6F, 0x6E, 0x20, 0x41, 0x72, 0x72, 0x69, 0x76, 0x65, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF3, 0x01, 0x00, 0x00, 0xEF, 0x01, 0x00, 0x00 + }; fmt = "<ret event='OnRemoteNotification'><srv><id>cAwaySrv</id><val srv_id='cAwaySrv'><Root><CASXtraSetAwayMessage></CASXtraSetAwayMessage>&l t;uin>%s</uin><index>1</index><title>%s</title><desc>%s</desc></Root></val></srv><srv><id>cRandomizerSrv</id><val srv_id='cRandomizerSrv'>undefined</val></srv></ret>\r\n"; - - + if (!od || !(conn = flap_connection_findbygroup(od, 0x0002))) return -EINVAL; if (!sn) return -EINVAL; - + account = purple_connection_get_account(od->gc); - if(!account) return -EINVAL; - -/* if (!strcmp(account->username, sn)) + if (!account) + return -EINVAL; + + /* if (!strcmp(account->username, sn)) icq_im_xstatus_request(od, sn); */ - - status = purple_presence_get_active_status(account->presence); - if (!status) return -EINVAL; - title = purple_status_get_name(status); - if (!title) return -EINVAL; + + status = purple_presence_get_active_status(account->presence); + if (!status) + return -EINVAL; + + title = purple_status_get_name(status); + if (!title) + return -EINVAL; + formatted_msg = purple_status_get_attr_string(status, "message"); - if (!formatted_msg) return -EINVAL; - msg = purple_markup_strip_html(formatted_msg); - if (!msg) return -EINVAL; - len = strlen(fmt)-6+strlen(account->username)+strlen(title)+strlen(msg); - statxml = (char*) g_malloc(len); - - snprintf(statxml, len, fmt, - account->username, title, msg); + if (!formatted_msg) + return -EINVAL; + + msg = purple_markup_strip_html(formatted_msg); + if (!msg) + return -EINVAL; + + len = strlen(fmt) - 6 + strlen(account->username) + strlen(title) + strlen(msg); + statxml = g_malloc(len); + + snprintf(statxml, len, fmt, account->username, title, msg); purple_debug_misc("oscar", "X-Status AutoReply: %s, %s\n", formatted_msg, msg); @@ -3079,8 +3084,8 @@ aim_im_puticbm(&bs, cookie, 0x0002, sn); byte_stream_put16(&bs, 0x0003); byte_stream_putraw(&bs, plugindata, sizeof(plugindata)); - byte_stream_putraw(&bs, (const guint8*)statxml, strlen(statxml)); - + byte_stream_putraw(&bs, (const guint8 *)statxml, strlen(statxml)); + flap_connection_send_snac_with_priority(od, conn, 0x0004, 0x000b, 0x0000, snacid, &bs, TRUE); g_free(statxml); diff -r 51d5ec7b1699 -r 597840eccfa7 libpurple/protocols/yahoo/libymsg.c --- a/libpurple/protocols/yahoo/libymsg.c Fri Jun 18 20:12:41 2010 +0000 +++ b/libpurple/protocols/yahoo/libymsg.c Fri Jun 18 20:14:06 2010 +0000 @@ -401,15 +401,13 @@ PurpleBuddy *b; PurpleGroup *g; GSList *list, *i; - gboolean onlist = 0; + gboolean onlist = FALSE; char *oname = NULL; - char **oname_p = &oname; - GSList **list_p = &list; - - if (!g_hash_table_lookup_extended(ht, purple_normalize(account, name), (gpointer *) oname_p, (gpointer *) list_p)) + + if (g_hash_table_lookup_extended(ht, purple_normalize(account, name), (gpointer *)&oname, (gpointer *)&list)) + g_hash_table_steal(ht, name); + else list = purple_find_buddies(account, name); - else - g_hash_table_steal(ht, name); for (i = list; i; i = i->next) { b = i->data; @@ -418,7 +416,7 @@ purple_debug_misc("yahoo", "Oh good, %s is in the right group (%s).\n", name, group); list = g_slist_delete_link(list, i); - onlist = 1; + onlist = TRUE; break; } } @@ -438,7 +436,7 @@ if (!oname) oname = g_strdup(purple_normalize(account, name)); g_hash_table_insert(ht, oname, list); - } else if (oname) + } else g_free(oname); } @@ -843,12 +841,12 @@ default: break; } - + if (*stat == '1') serv_got_typing(gc, fed_from, 0, PURPLE_TYPING); else serv_got_typing_stopped(gc, fed_from); - + if (fed_from != from) g_free(fed_from);