# HG changeset patch # User Ka-Hing Cheung # Date 1189059992 0 # Node ID 9cc67c3d145ec297e99dfaad27b3b640aad7f6d3 # Parent 9968fff36e204680c6c1506ec08250b8982166ab# Parent 1729367f0a4fc00c007aa1f0b75cf779cdcec31d merge of 'cce02af7eb2fb114cb0f640979554b7de3a80e96' and 'db5ad5300e844751f9abf8702f4e4a8369dfef8e' diff -r 9968fff36e20 -r 9cc67c3d145e finch/gntconv.c --- a/finch/gntconv.c Wed Sep 05 04:52:33 2007 +0000 +++ b/finch/gntconv.c Thu Sep 06 06:26:32 2007 +0000 @@ -613,6 +613,7 @@ gnt_tree_set_col_width(GNT_TREE(tree), 0, 1); /* The flag column */ gnt_tree_set_compare_func(GNT_TREE(tree), (GCompareFunc)g_utf8_collate); gnt_tree_set_hash_fns(GNT_TREE(tree), g_str_hash, g_str_equal, g_free); + gnt_tree_set_search_column(GNT_TREE(tree), 1); GNT_WIDGET_SET_FLAGS(tree, GNT_WIDGET_NO_BORDER); gnt_box_add_widget(GNT_BOX(hbox), ggc->tv); gnt_box_add_widget(GNT_BOX(hbox), tree); diff -r 9968fff36e20 -r 9cc67c3d145e finch/libgnt/gntmenu.c --- a/finch/libgnt/gntmenu.c Wed Sep 05 04:52:33 2007 +0000 +++ b/finch/libgnt/gntmenu.c Thu Sep 06 06:26:32 2007 +0000 @@ -221,8 +221,13 @@ { /* check for a trigger key */ GList *iter; + GList *find; GList *nth = g_list_find(menu->list, gnt_tree_get_selection_data(GNT_TREE(menu))); - GList *find = find_item_with_trigger(nth->next, NULL, trigger); + + if (nth == NULL) + return FALSE; + + find = find_item_with_trigger(nth->next, NULL, trigger); if (!find) find = find_item_with_trigger(menu->list, nth->next, trigger); if (!find) diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/certificate.c --- a/libpurple/certificate.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/certificate.c Thu Sep 06 06:26:32 2007 +0000 @@ -580,7 +580,12 @@ "x509", /* Scheme name */ "singleuse", /* Verifier name */ x509_singleuse_start_verify, /* start_verification function */ - x509_singleuse_destroy_request /* Request cleanup operation */ + x509_singleuse_destroy_request, /* Request cleanup operation */ + + NULL, + NULL, + NULL, + NULL }; @@ -872,7 +877,13 @@ x509_ca_get_cert, /* Cert retriever */ x509_ca_put_cert, /* Cert writer */ x509_ca_delete_cert, /* Cert remover */ - x509_ca_get_idlist /* idlist retriever */ + x509_ca_get_idlist, /* idlist retriever */ + + NULL, + NULL, + NULL, + NULL + }; @@ -1034,7 +1045,12 @@ x509_tls_peers_get_cert, /* Cert retriever */ x509_tls_peers_put_cert, /* Cert writer */ x509_tls_peers_delete_cert, /* Cert remover */ - x509_tls_peers_get_idlist /* idlist retriever */ + x509_tls_peers_get_idlist, /* idlist retriever */ + + NULL, + NULL, + NULL, + NULL }; @@ -1459,7 +1475,13 @@ "x509", /* Scheme name */ "tls_cached", /* Verifier name */ x509_tls_cached_start_verify, /* Verification begin */ - x509_tls_cached_destroy_request /* Request cleanup */ + x509_tls_cached_destroy_request,/* Request cleanup */ + + NULL, + NULL, + NULL, + NULL + }; /****************************************************************************/ diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/certificate.h --- a/libpurple/certificate.h Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/certificate.h Thu Sep 06 06:26:32 2007 +0000 @@ -123,6 +123,11 @@ /** Returns a list of IDs stored in the pool */ GList * (* get_idlist)(void); + + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); }; /** A certificate type @@ -241,7 +246,10 @@ /** Retrieve the certificate activation/expiration times */ gboolean (* get_times)(PurpleCertificate *crt, time_t *activation, time_t *expiration); - /* TODO: Fill out this structure */ + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); }; /** A set of operations used to provide logic for verifying a Certificate's @@ -286,6 +294,11 @@ * @param vrq Request to destroy */ void (* destroy_request)(PurpleCertificateVerificationRequest *vrq); + + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); }; /** Structure for a single certificate request diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/cipher.c --- a/libpurple/cipher.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/cipher.c Thu Sep 06 06:26:32 2007 +0000 @@ -2021,7 +2021,7 @@ if (client_nonce == NULL) { purple_cipher_context_destroy(context); - purple_debug_error("cipher", "Required client_nonce missing for MD5-sess digest calculation."); + purple_debug_error("cipher", "Required client_nonce missing for MD5-sess digest calculation.\n"); return NULL; } @@ -2091,7 +2091,7 @@ if (entity == NULL) { purple_cipher_context_destroy(context); - purple_debug_error("cipher", "Required entity missing for auth-int digest calculation."); + purple_debug_error("cipher", "Required entity missing for auth-int digest calculation.\n"); return NULL; } @@ -2118,14 +2118,14 @@ if (nonce_count == NULL) { purple_cipher_context_destroy(context); - purple_debug_error("cipher", "Required nonce_count missing for digest calculation."); + purple_debug_error("cipher", "Required nonce_count missing for digest calculation.\n"); return NULL; } if (client_nonce == NULL) { purple_cipher_context_destroy(context); - purple_debug_error("cipher", "Required client_nonce missing for digest calculation."); + purple_debug_error("cipher", "Required client_nonce missing for digest calculation.\n"); return NULL; } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/connection.c --- a/libpurple/connection.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/connection.c Thu Sep 06 06:26:32 2007 +0000 @@ -436,7 +436,7 @@ g_return_if_fail(gc != NULL); if (text == NULL) { - purple_debug_error("connection", "purple_connection_error: check `text != NULL' failed"); + purple_debug_error("connection", "purple_connection_error: check `text != NULL' failed\n"); text = _("Unknown error"); } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/log.c --- a/libpurple/log.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/log.c Thu Sep 06 06:26:32 2007 +0000 @@ -1380,7 +1380,7 @@ written += fprintf(data->file, "(%s) %s: %s
\n", date, from, msg_fixed); } else { - purple_debug_error("log", "Unhandled message type."); + purple_debug_error("log", "Unhandled message type.\n"); written += fprintf(data->file, "(%s) %s: %s
\n", date, from, msg_fixed); } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/nat-pmp.c --- a/libpurple/nat-pmp.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/nat-pmp.c Thu Sep 06 06:26:32 2007 +0000 @@ -175,20 +175,20 @@ /* Determine the buffer side needed to get the full routing table */ if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) { - purple_debug_warning("nat-pmp", "sysctl: net.route.0.0.dump estimate"); + purple_debug_warning("nat-pmp", "sysctl: net.route.0.0.dump estimate\n"); return NULL; } if (!(buf = malloc(needed))) { - purple_debug_warning("nat-pmp", "malloc"); + purple_debug_warning("nat-pmp", "malloc\n"); return NULL; } /* Read the routing table into buf */ if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) { - purple_debug_warning("nat-pmp", "sysctl: net.route.0.0.dump"); + purple_debug_warning("nat-pmp", "sysctl: net.route.0.0.dump\n"); return NULL; } @@ -231,7 +231,7 @@ sin->sin_addr.s_addr = rti_sin->sin_addr.s_addr; memcpy(sin, rti_info[RTAX_GATEWAY], sizeof(struct sockaddr_in)); - purple_debug_info("nat-pmp", "found a default gateway"); + purple_debug_info("nat-pmp", "found a default gateway\n"); found = TRUE; break; } @@ -266,7 +266,7 @@ if ((pmp_info.status == PURPLE_PMP_STATUS_DISCOVERED) && (pmp_info.publicip != NULL)) { #ifdef PMP_DEBUG - purple_debug_info("nat-pmp", "Returning cached publicip %s",pmp_info.publicip); + purple_debug_info("nat-pmp", "Returning cached publicip %s\n",pmp_info.publicip); #endif return pmp_info.publicip; } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/network.c --- a/libpurple/network.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/network.c Thu Sep 06 06:26:32 2007 +0000 @@ -351,12 +351,13 @@ listen_data->retry = TRUE; listen_data->cb = cb; listen_data->cb_data = cb_data; + listen_data->socket_type = socket_type; /* Attempt a NAT-PMP Mapping, which will return immediately */ if (purple_pmp_create_map(((socket_type == SOCK_STREAM) ? PURPLE_PMP_TYPE_TCP : PURPLE_PMP_TYPE_UDP), actual_port, actual_port, PURPLE_PMP_LIFETIME)) { - purple_debug_info("network", "Created NAT-PMP mapping on port %i",actual_port); + purple_debug_info("network", "Created NAT-PMP mapping on port %i\n",actual_port); /* We want to return listen_data now, and on the next run loop trigger the cb and destroy listen_data */ purple_timeout_add(0, purple_network_finish_pmp_map_cb, listen_data); } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/plugins/offlinemsg.c --- a/libpurple/plugins/offlinemsg.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/plugins/offlinemsg.c Thu Sep 06 06:26:32 2007 +0000 @@ -113,6 +113,10 @@ PurpleConversation *conv; OfflineMessageSetting setting; + if (message == NULL || *message == NULL || + **message == '\0') + return; + buddy = purple_find_buddy(account, who); if (!buddy) return; @@ -122,7 +126,7 @@ if (purple_account_supports_offline_message(account, buddy)) { - purple_debug_info("offlinemsg", "Account \"%s\" supports offline message.", + purple_debug_info("offlinemsg", "Account \"%s\" supports offline messages.\n", purple_account_get_username(account)); return; } @@ -167,8 +171,8 @@ static gboolean plugin_load(PurplePlugin *plugin) { - purple_signal_connect(purple_conversations_get_handle(), "sending-im-msg", - plugin, PURPLE_CALLBACK(sending_msg_cb), plugin); + purple_signal_connect_priority(purple_conversations_get_handle(), "sending-im-msg", + plugin, PURPLE_CALLBACK(sending_msg_cb), plugin, PURPLE_SIGNAL_PRIORITY_HIGHEST); return TRUE; } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/plugins/psychic.c --- a/libpurple/plugins/psychic.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/plugins/psychic.c Thu Sep 06 06:26:32 2007 +0000 @@ -49,7 +49,7 @@ } if(FALSE == purple_privacy_check(acct, name)) { - purple_debug_info("psychic", "user %s is blocked", name); + purple_debug_info("psychic", "user %s is blocked\n", name); return; } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/plugins/ssl/ssl-gnutls.c --- a/libpurple/plugins/ssl/ssl-gnutls.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/plugins/ssl/ssl-gnutls.c Thu Sep 06 06:26:32 2007 +0000 @@ -911,7 +911,13 @@ x509_issuer_dn, /* Issuer Unique ID */ x509_common_name, /* Subject name */ x509_check_name, /* Check subject name */ - x509_times /* Activation/Expiration time */ + x509_times, /* Activation/Expiration time */ + + NULL, + NULL, + NULL, + NULL + }; static PurpleSslOps ssl_ops = diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/plugins/ssl/ssl-nss.c --- a/libpurple/plugins/ssl/ssl-nss.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/plugins/ssl/ssl-nss.c Thu Sep 06 06:26:32 2007 +0000 @@ -522,6 +522,9 @@ /* Make a hash! */ sha1sum = g_byte_array_sized_new(hashlen); + /* glib leaves the size as 0 by default */ + sha1sum->len = hashlen; + st = PK11_HashBuf(SEC_OID_SHA1, sha1sum->data, derCert->data, derCert->len); @@ -638,7 +641,12 @@ NULL, /* Issuer Unique ID */ x509_common_name, /* Subject name */ x509_check_name, /* Check subject name */ - x509_times /* Activation/Expiration time */ + x509_times, /* Activation/Expiration time */ + + NULL, + NULL, + NULL, + NULL }; static PurpleSslOps ssl_ops = diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/bonjour/bonjour.c --- a/libpurple/protocols/bonjour/bonjour.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/bonjour/bonjour.c Thu Sep 06 06:26:32 2007 +0000 @@ -486,45 +486,50 @@ NULL }; -static void -initialize_default_account_values() -{ -#ifdef _WIN32 - char *fullname = NULL; -#else - struct passwd *info; - const char *fullname = NULL; -#endif - char *splitpoint = NULL; - char *tmp; - char hostname[255]; +#ifdef WIN32 +static gboolean _set_default_name_cb(gpointer data) { + gchar *fullname = data; + const char *splitpoint; + GList *tmp = prpl_info.protocol_options; + PurpleAccountOption *option; -#ifndef _WIN32 - /* Try to figure out the user's real name */ - info = getpwuid(getuid()); - if ((info != NULL) && (info->pw_gecos != NULL) && (info->pw_gecos[0] != '\0')) - fullname = info->pw_gecos; - else if ((info != NULL) && (info->pw_name != NULL) && (info->pw_name[0] != '\0')) - fullname = info->pw_name; - else if (((fullname = getlogin()) != NULL) && (fullname[0] != '\0')) - ; - else - fullname = _("Purple Person"); - /* Make sure fullname is valid UTF-8. If not, try to convert it. */ - if (!g_utf8_validate(fullname, -1, NULL)) - { - gchar *tmp; - tmp = g_locale_to_utf8(fullname, -1, NULL, NULL, NULL); - if ((tmp == NULL) || (*tmp == '\0')) - fullname = _("Purple Person"); + if (!fullname) { + purple_debug_info("bonjour", "Unable to look up First and Last name or Username from system; using defaults.\n"); + return FALSE; } -#else + g_free(default_firstname); + g_free(default_lastname); + + /* Split the real name into a first and last name */ + splitpoint = strchr(fullname, ' '); + if (splitpoint != NULL) { + default_firstname = g_strndup(fullname, splitpoint - fullname); + default_lastname = g_strdup(&splitpoint[1]); + } else { + default_firstname = g_strdup(fullname); + default_lastname = g_strdup(""); + } + g_free(fullname); + + + for(; tmp != NULL; tmp = tmp->next) { + option = tmp->data; + if (strcmp("first", purple_account_option_get_setting(option)) == 0) + purple_account_option_set_default_string(option, default_firstname); + else if (strcmp("last", purple_account_option_get_setting(option)) == 0) + purple_account_option_set_default_string(option, default_lastname); + } + + return FALSE; +} + +static gpointer _win32_name_lookup_thread(gpointer data) { + gchar *fullname = NULL; wchar_t username[UNLEN + 1]; DWORD dwLenUsername = UNLEN + 1; - if (!GetUserNameW((LPWSTR) &username, &dwLenUsername)) - purple_debug_warning("bonjour", "Unable to look up username\n"); + GetUserNameW((LPWSTR) &username, &dwLenUsername); if (username != NULL && *username != '\0') { LPBYTE servername = NULL; @@ -532,7 +537,7 @@ NetGetDCName(NULL, NULL, &servername); - purple_debug_info("bonjour", "Looking up the full name from the %s.\n", (servername ? "domain controller" : "local machine")); + /* purple_debug_info("bonjour", "Looking up the full name from the %s.\n", (servername ? "domain controller" : "local machine")); */ if (NetUserGetInfo((LPCWSTR) servername, username, 10, &info) == NERR_Success && info != NULL && ((LPUSER_INFO_10) info)->usri10_full_name != NULL @@ -543,7 +548,7 @@ } /* Fall back to the local machine if we didn't get the full name from the domain controller */ else if (servername != NULL) { - purple_debug_info("bonjour", "Looking up the full name from the local machine"); + /* purple_debug_info("bonjour", "Looking up the full name from the local machine"); */ if (info != NULL) NetApiBufferFree(info); info = NULL; @@ -559,20 +564,54 @@ if (info != NULL) NetApiBufferFree(info); if (servername != NULL) NetApiBufferFree(servername); + + if (!fullname) + fullname = g_utf16_to_utf8(username, -1, NULL, NULL, NULL); } - if (!fullname) { - if (username != NULL && *username != '\0') - fullname = g_utf16_to_utf8(username, -1, NULL, NULL, NULL); - else - fullname = g_strdup(_("Purple Person")); + g_idle_add(_set_default_name_cb, fullname); + + return NULL; +} +#endif + +static void +initialize_default_account_values() +{ +#ifndef _WIN32 + struct passwd *info; +#endif + const char *fullname = NULL, *splitpoint, *tmp; + char hostname[255]; + gchar *conv = NULL; + +#ifndef _WIN32 + /* Try to figure out the user's real name */ + info = getpwuid(getuid()); + if ((info != NULL) && (info->pw_gecos != NULL) && (info->pw_gecos[0] != '\0')) + fullname = info->pw_gecos; + else if ((info != NULL) && (info->pw_name != NULL) && (info->pw_name[0] != '\0')) + fullname = info->pw_name; + else if (((fullname = getlogin()) != NULL) && (fullname[0] != '\0')) + ; +#else + /* The Win32 username lookup functions are synchronous so we do it in a thread */ + g_thread_create(_win32_name_lookup_thread, NULL, FALSE, NULL); +#endif + + /* Make sure fullname is valid UTF-8. If not, try to convert it. */ + if (fullname != NULL && !g_utf8_validate(fullname, -1, NULL)) { + fullname = conv = g_locale_to_utf8(fullname, -1, NULL, NULL, NULL); + if (conv == NULL || *conv == '\0') + fullname = NULL; } -#endif + + if (fullname == NULL) + fullname = _("Purple Person"); /* Split the real name into a first and last name */ splitpoint = strchr(fullname, ' '); - if (splitpoint != NULL) - { + if (splitpoint != NULL) { default_firstname = g_strndup(fullname, splitpoint - fullname); tmp = &splitpoint[1]; @@ -584,16 +623,12 @@ default_lastname = g_strndup(tmp, splitpoint - tmp); else default_lastname = g_strdup(tmp); - } - else - { + } else { default_firstname = g_strdup(fullname); default_lastname = g_strdup(""); } -#ifdef _WIN32 - g_free(fullname); -#endif + g_free(conv); /* Try to figure out a good host name to use */ /* TODO: Avoid 'localhost,' if possible */ diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/bonjour/jabber.c --- a/libpurple/protocols/bonjour/jabber.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/bonjour/jabber.c Thu Sep 06 06:26:32 2007 +0000 @@ -537,7 +537,7 @@ /* Look for the buddy that has opened the conversation and fill information */ address_text = inet_ntoa(their_addr.sin_addr); - purple_debug_info("bonjour", "Received incoming connection from %s\n.", address_text); + purple_debug_info("bonjour", "Received incoming connection from %s.\n", address_text); cbba = g_new0(struct _check_buddy_by_address_t, 1); cbba->address = address_text; cbba->pb = &pb; diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/bonjour/mdns_avahi.c --- a/libpurple/protocols/bonjour/mdns_avahi.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/bonjour/mdns_avahi.c Thu Sep 06 06:26:32 2007 +0000 @@ -188,7 +188,7 @@ purple_debug_error("bonjour", "Collision registering buddy icon data.\n"); break; case AVAHI_ENTRY_GROUP_FAILURE: - purple_debug_error("bonjour", "Error registering buddy icon data: %s\n.", + purple_debug_error("bonjour", "Error registering buddy icon data: %s.\n", avahi_strerror(avahi_client_errno(avahi_entry_group_get_client(g)))); break; case AVAHI_ENTRY_GROUP_UNCOMMITED: @@ -271,7 +271,7 @@ idata->client = avahi_client_new(poll_api, 0, NULL, data, &error); if (idata->client == NULL) { - purple_debug_error("bonjour", "Error initializing Avahi: %s", avahi_strerror(error)); + purple_debug_error("bonjour", "Error initializing Avahi: %s\n", avahi_strerror(error)); avahi_glib_poll_free(idata->glib_poll); g_free(idata); return FALSE; @@ -354,7 +354,7 @@ if (!idata->sb) { purple_debug_error("bonjour", - "Unable to initialize service browser. Error: %s\n.", + "Unable to initialize service browser. Error: %s.\n", avahi_strerror(avahi_client_errno(idata->client))); return FALSE; } @@ -488,7 +488,7 @@ if (!idata->buddy_icon_rec_browser) { purple_debug_error("bonjour", - "Unable to initialize buddy icon record browser. Error: %s\n.", + "Unable to initialize buddy icon record browser. Error: %s.\n", avahi_strerror(avahi_client_errno(session_idata->client))); } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/bonjour/mdns_common.c --- a/libpurple/protocols/bonjour/mdns_common.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/bonjour/mdns_common.c Thu Sep 06 06:26:32 2007 +0000 @@ -207,7 +207,7 @@ /* Advise the daemon that we are waiting for connections */ if (!_mdns_browse(data)) { - purple_debug_error("bonjour", "Unable to get service."); + purple_debug_error("bonjour", "Unable to get service.\n"); return FALSE; } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/bonjour/mdns_win32.c --- a/libpurple/protocols/bonjour/mdns_win32.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/bonjour/mdns_win32.c Thu Sep 06 06:26:32 2007 +0000 @@ -207,7 +207,7 @@ PurpleBuddy *pb = NULL; if (kDNSServiceErr_NoError != errorCode) - purple_debug_error("bonjour", "service browser - callback error"); + purple_debug_error("bonjour", "service browser - callback error\n"); else if (flags & kDNSServiceFlagsAdd) { /* A presence service instance has been discovered... check it isn't us! */ if (purple_utf8_strcasecmp(serviceName, account->username) != 0) { diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/jabber/disco.c --- a/libpurple/protocols/jabber/disco.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/jabber/disco.c Thu Sep 06 06:26:32 2007 +0000 @@ -273,7 +273,7 @@ g_free(js->server_name); js->server_name = g_strdup(name); if (!strcmp(name, "Google Talk")) { - purple_debug_info("jabber", "Google Talk!"); + purple_debug_info("jabber", "Google Talk!\n"); js->googletalk = TRUE; } } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/msn/httpconn.c --- a/libpurple/protocols/msn/httpconn.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/msn/httpconn.c Thu Sep 06 06:26:32 2007 +0000 @@ -181,7 +181,7 @@ { msn_session_set_error(httpconn->session, MSN_ERROR_HTTP_MALFORMED, NULL); - purple_debug_error("msn", "Malformed X-MSN-Messenger field.\n{%s}", + purple_debug_error("msn", "Malformed X-MSN-Messenger field.\n{%s}\n", buf); g_free(body); diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/msn/nexus.c --- a/libpurple/protocols/msn/nexus.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/msn/nexus.c Thu Sep 06 06:26:32 2007 +0000 @@ -188,7 +188,7 @@ purple_ssl_close(nexus->gsc); nexus->gsc = NULL; - purple_debug_misc("msn", "ssl buffer: {%s}", nexus->read_buf); + purple_debug_misc("msn", "ssl buffer: {%s}\n", nexus->read_buf); if (strstr(nexus->read_buf, "HTTP/1.1 302") != NULL) { diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/msn/slplink.c --- a/libpurple/protocols/msn/slplink.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/msn/slplink.c Thu Sep 06 06:26:32 2007 +0000 @@ -49,7 +49,7 @@ tf = g_fopen(tmp, "wb"); if (tf == NULL) { - purple_debug_error("msn", "could not open debug file"); + purple_debug_error("msn", "could not open debug file\n"); return; } pload = msn_message_gen_payload(msg, &pload_size); diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/msn/switchboard.c --- a/libpurple/protocols/msn/switchboard.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/msn/switchboard.c Thu Sep 06 06:26:32 2007 +0000 @@ -771,7 +771,8 @@ msg->ack_cb(msg, msg->ack_data); swboard = cmdproc->data; - swboard->ack_list = g_list_remove(swboard->ack_list, msg); + if (swboard) + swboard->ack_list = g_list_remove(swboard->ack_list, msg); msn_message_unref(msg); } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/myspace/markup.c --- a/libpurple/protocols/myspace/markup.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/myspace/markup.c Thu Sep 06 06:26:32 2007 +0000 @@ -321,7 +321,7 @@ color = xmlnode_get_attrib(root, "v"); if (!color) { - purple_debug_info("msim", "msim_markup_c_to_html: tag w/o v attr"); + purple_debug_info("msim", "msim_markup_c_to_html: tag w/o v attr\n"); *begin = g_strdup(""); *end = g_strdup(""); /* TODO: log as unrecognized */ @@ -349,7 +349,7 @@ if (!color) { *begin = g_strdup(""); *end = g_strdup(""); - purple_debug_info("msim", "msim_markup_b_to_html: w/o v attr"); + purple_debug_info("msim", "msim_markup_b_to_html: w/o v attr\n"); /* TODO: log as unrecognized. */ return; } @@ -374,7 +374,7 @@ name = xmlnode_get_attrib(root, "n"); if (!name) { - purple_debug_info("msim", "msim_markup_i_to_html: w/o n"); + purple_debug_info("msim", "msim_markup_i_to_html: w/o n\n"); *begin = g_strdup(""); *end = g_strdup(""); /* TODO: log as unrecognized */ diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/myspace/myspace.c --- a/libpurple/protocols/myspace/myspace.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/myspace/myspace.c Thu Sep 06 06:26:32 2007 +0000 @@ -932,7 +932,7 @@ username = msim_msg_get_string(msg, "user"); if (!username) { - purple_debug_info("msim", "msim_get_info_cb: no 'user' in msg"); + purple_debug_info("msim", "msim_get_info_cb: no 'user' in msg\n"); return; } @@ -1120,7 +1120,7 @@ "locstring", MSIM_TYPE_STRING, g_strdup(""), NULL)) { - purple_debug_info("msim", "msim_set_status: failed to set status"); + purple_debug_info("msim", "msim_set_status: failed to set status\n"); } } @@ -1182,7 +1182,7 @@ if (!buddies) { - purple_debug_info("msim", "msim_uid2username_from_blist: no buddies?"); + purple_debug_info("msim", "msim_uid2username_from_blist: no buddies?\n"); return NULL; } @@ -1542,7 +1542,7 @@ if (msim_msg_get_integer(msg, "uniquenick") == session->userid) { - purple_debug_info("msim_we_are_logged_on", "TODO: pick username"); + purple_debug_info("msim_we_are_logged_on", "TODO: pick username\n"); /* No username is set. */ purple_notify_error(session->account, _("No username set"), @@ -1781,15 +1781,23 @@ purple_debug_info("msim", "msim_error (sesskey=%d): %s\n", session->sesskey, full_errmsg); - purple_notify_error(session->account, g_strdup(_("MySpaceIM Error")), - full_errmsg, NULL); - /* Destroy session if fatal. */ if (msim_msg_get(msg, "fatal")) { purple_debug_info("msim", "fatal error, closing\n"); + if (err == 260) { + /* Incorrect password */ + session->gc->wants_to_die = TRUE; + if (!purple_account_get_remember_password(session->account)) + purple_account_set_password(session->account, NULL); + } purple_connection_error(session->gc, full_errmsg); + } else { + purple_notify_error(session->account, g_strdup(_("MySpaceIM Error")), + full_errmsg, NULL); } + g_free(full_errmsg); + return TRUE; } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/myspace/zap.c --- a/libpurple/protocols/myspace/zap.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/myspace/zap.c Thu Sep 06 06:26:32 2007 +0000 @@ -126,7 +126,7 @@ zap_string = g_strdup_printf("!!!ZAP_SEND!!!=RTE_BTN_ZAPS_%d", code); if (!msim_send_bm(session, username, zap_string, MSIM_BM_ACTION)) { - purple_debug_info("msim_send_zap_from_menu", "msim_send_bm failed: zapping %s with %s", + purple_debug_info("msim_send_zap_from_menu", "msim_send_bm failed: zapping %s with %s\n", username, zap_string); rc = FALSE; } else { diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/novell/nmrtf.c --- a/libpurple/protocols/novell/nmrtf.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/novell/nmrtf.c Thu Sep 06 06:26:32 2007 +0000 @@ -233,7 +233,7 @@ if (status == NMRTF_OK) return g_strdup(ctx->output->str); - purple_debug_info("novell", "RTF parser failed with error code %d", status); + purple_debug_info("novell", "RTF parser failed with error code %d\n", status); return NULL; } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/null/nullprpl.c --- a/libpurple/protocols/null/nullprpl.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/null/nullprpl.c Thu Sep 06 06:26:32 2007 +0000 @@ -321,7 +321,7 @@ } static void blist_example_menu_item(PurpleBlistNode *node, gpointer userdata) { - purple_debug_info("nullprpl", "example menu item clicked on user", + purple_debug_info("nullprpl", "example menu item clicked on user\n", ((PurpleBuddy *)node)->name); purple_notify_info(NULL, /* plugin handle or PurpleConnection */ diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/oscar/family_auth.c --- a/libpurple/protocols/oscar/family_auth.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/oscar/family_auth.c Thu Sep 06 06:26:32 2007 +0000 @@ -211,7 +211,7 @@ #ifdef USE_XOR_FOR_ICQ /* If we're signing on an ICQ account then use the older, XOR login method */ - if (aim_sn_is_icq(sn)) + if (aim_snvalid_icq(sn)) return goddamnicq2(od, conn, sn, password, ci); #endif @@ -224,7 +224,7 @@ /* Truncate ICQ and AOL passwords, if necessary */ password_len = strlen(password); - if (aim_sn_is_icq(sn) && (password_len > MAXICQPASSLEN)) + if (aim_snvalid_icq(sn) && (password_len > MAXICQPASSLEN)) password_len = MAXICQPASSLEN; else if (truncate_pass && password_len > 8) password_len = 8; @@ -477,7 +477,7 @@ return -EINVAL; #ifdef USE_XOR_FOR_ICQ - if (aim_sn_is_icq(sn)) + if (aim_snvalid_icq(sn)) return goddamnicq(od, conn, sn); #endif diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/oscar/family_feedbag.c --- a/libpurple/protocols/oscar/family_feedbag.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/oscar/family_feedbag.c Thu Sep 06 06:26:32 2007 +0000 @@ -505,13 +505,13 @@ * buddy ID#s, which makes things more efficient. I think. */ - /* Additions */ + /* Deletions */ if (!od->ssi.pending) { - for (cur1=od->ssi.local; cur1 && (n < 15); cur1=cur1->next) { - if (!aim_ssi_itemlist_find(od->ssi.official, cur1->gid, cur1->bid)) { + for (cur1=od->ssi.official; cur1 && (n < 15); cur1=cur1->next) { + if (!aim_ssi_itemlist_find(od->ssi.local, cur1->gid, cur1->bid)) { n++; new = (struct aim_ssi_tmp *)g_malloc(sizeof(struct aim_ssi_tmp)); - new->action = SNAC_SUBTYPE_FEEDBAG_ADD; + new->action = SNAC_SUBTYPE_FEEDBAG_DEL; new->ack = 0xffff; new->name = NULL; new->item = cur1; @@ -525,13 +525,13 @@ } } - /* Deletions */ + /* Additions */ if (!od->ssi.pending) { - for (cur1=od->ssi.official; cur1 && (n < 15); cur1=cur1->next) { - if (!aim_ssi_itemlist_find(od->ssi.local, cur1->gid, cur1->bid)) { + for (cur1=od->ssi.local; cur1 && (n < 15); cur1=cur1->next) { + if (!aim_ssi_itemlist_find(od->ssi.official, cur1->gid, cur1->bid)) { n++; new = (struct aim_ssi_tmp *)g_malloc(sizeof(struct aim_ssi_tmp)); - new->action = SNAC_SUBTYPE_FEEDBAG_DEL; + new->action = SNAC_SUBTYPE_FEEDBAG_ADD; new->ack = 0xffff; new->name = NULL; new->item = cur1; diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/oscar/family_icbm.c --- a/libpurple/protocols/oscar/family_icbm.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/oscar/family_icbm.c Thu Sep 06 06:26:32 2007 +0000 @@ -1461,7 +1461,7 @@ msglen = byte_stream_get16(&mbs); if (msglen > byte_stream_empty(&mbs)) { - purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.", userinfo->sn); + purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->sn); break; } @@ -2101,7 +2101,11 @@ args.uin = byte_stream_getle32(&meat); args.type = byte_stream_getle8(&meat); args.flags = byte_stream_getle8(&meat); - args.msglen = byte_stream_getle16(&meat); + if (args.type == 0x1a) + /* There seems to be a problem with the length in SMS msgs from server, this fixed it */ + args.msglen = block->length - 6; + else + args.msglen = byte_stream_getle16(&meat); args.msg = (gchar *)byte_stream_getraw(&meat, args.msglen); if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/oscar/family_icq.c --- a/libpurple/protocols/oscar/family_icq.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/oscar/family_icq.c Thu Sep 06 06:26:32 2007 +0000 @@ -340,7 +340,6 @@ } #endif -#if 0 /* * Send an SMS message. This is the non-US way. The US-way is to IM * their cell phone number (+19195551234). @@ -369,6 +368,7 @@ const char *timestr; time_t t; struct tm *tm; + gchar *stripped; if (!od || !(conn = flap_connection_findbygroup(od, 0x0015))) return -EINVAL; @@ -380,22 +380,24 @@ tm = gmtime(&t); timestr = purple_utf8_strftime("%a, %d %b %Y %T %Z", tm); + stripped = purple_markup_strip_html(msg); + /* The length of xml included the null terminating character */ - xmllen = 225 + strlen(name) + strlen(msg) + strlen(od->sn) + strlen(alias) + strlen(timestr) + 1; + xmllen = 209 + strlen(name) + strlen(stripped) + strlen(od->sn) + strlen(alias) + strlen(timestr) + 1; xml = g_new(char, xmllen); - snprintf(xml, xmllen, "\n" - "\t%s\n" - "\t%s\n" - "\t1252\n" - "\t%s\n" - "\t%s\n" - "\tYes\n" - "\t\n" - "\n", - name, msg, od->sn, alias, timestr); + snprintf(xml, xmllen, "" + "%s" + "%s" + "1252" + "%s" + "%s" + "Yes" + "" + "", + name, stripped, od->sn, alias, timestr); - bslen = 37 + xmllen; + bslen = 36 + xmllen; frame = flap_frame_new(od, 0x02, 10 + 4 + bslen); @@ -412,7 +414,7 @@ byte_stream_putle16(&frame->data, snacid); /* eh. */ /* From libicq200-0.3.2/src/SNAC-SRV.cpp */ - byte_stream_putle16(&frame->data, 0x8214); + byte_stream_putle16(&frame->data, 0x1482); byte_stream_put16(&frame->data, 0x0001); byte_stream_put16(&frame->data, 0x0016); byte_stream_put32(&frame->data, 0x00000000); @@ -423,14 +425,15 @@ byte_stream_put16(&frame->data, 0x0000); byte_stream_put16(&frame->data, xmllen); byte_stream_putstr(&frame->data, xml); + byte_stream_put8(&frame->data, 0x00); flap_connection_send(conn, frame); g_free(xml); + g_free(stripped); return 0; } -#endif static void aim_icq_freeinfo(struct aim_icq_info *info) { int i; diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/oscar/oscar.c --- a/libpurple/protocols/oscar/oscar.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/oscar/oscar.c Thu Sep 06 06:26:32 2007 +0000 @@ -358,7 +358,7 @@ const char *charset = NULL; char *ret = NULL; - if(aim_sn_is_icq(purple_account_get_username(account))) + if(aim_snvalid_icq(purple_account_get_username(account))) charset = purple_account_get_string(account, "encoding", NULL); if(charset && *charset) @@ -424,7 +424,7 @@ charsetstr1 = "UCS-2BE"; charsetstr2 = "UTF-8"; } else if (charset == AIM_CHARSET_CUSTOM) { - if ((sourcesn != NULL) && aim_sn_is_icq(sourcesn)) + if ((sourcesn != NULL) && aim_snvalid_icq(sourcesn)) charsetstr1 = purple_account_get_string(account, "encoding", OSCAR_DEFAULT_CUSTOM_ENCODING); else charsetstr1 = "ISO-8859-1"; @@ -495,7 +495,7 @@ * capability, and they are online, then attempt to send * as UCS-2BE. */ - if ((destsn != NULL) && aim_sn_is_icq(destsn)) + if ((destsn != NULL) && aim_snvalid_icq(destsn)) userinfo = aim_locate_finduserinfo(od, destsn); if ((userinfo != NULL) && (userinfo->capabilities & OSCAR_CAPABILITY_UNICODE)) @@ -520,7 +520,7 @@ * ICQ then attempt to send as the user specified character encoding. */ charsetstr = "ISO-8859-1"; - if ((destsn != NULL) && aim_sn_is_icq(destsn)) + if ((destsn != NULL) && aim_snvalid_icq(destsn)) charsetstr = purple_account_get_string(account, "encoding", OSCAR_DEFAULT_CUSTOM_ENCODING); /* @@ -815,7 +815,7 @@ if (b != NULL) { if (purple_presence_is_online(presence)) { - if (aim_sn_is_icq(b->name)) { + if (aim_snvalid_icq(b->name)) { PurpleStatus *status = purple_presence_get_active_status(presence); oscar_user_info_add_pair(user_info, _("Status"), purple_status_get_name(status)); } @@ -1019,7 +1019,7 @@ PURPLE_INPUT_READ, flap_connection_recv_cb, conn); if (conn->cookie == NULL) { - if (!aim_sn_is_icq(purple_account_get_username(account))) + if (!aim_snvalid_icq(purple_account_get_username(account))) /* * We don't send this when authenticating an ICQ account * because for some reason ICQ is still using the @@ -1261,7 +1261,7 @@ g_free(buf); } - if (aim_sn_is_icq((purple_account_get_username(account)))) { + if (aim_snvalid_icq((purple_account_get_username(account)))) { od->icq = TRUE; } else { gc->flags |= PURPLE_CONNECTION_HTML; @@ -1752,7 +1752,7 @@ } } - if (aim_sn_is_icq(info->sn)) { + if (aim_snvalid_icq(info->sn)) { if (type & AIM_ICQ_STATE_CHAT) status_id = OSCAR_STATUS_ID_FREE4CHAT; else if (type & AIM_ICQ_STATE_DND) @@ -1987,7 +1987,7 @@ * Note: There *may* be some clients which send messages as HTML formatted - * they need to be special-cased somehow. */ - if (aim_sn_is_icq(purple_account_get_username(account)) && aim_sn_is_icq(userinfo->sn)) { + if (aim_snvalid_icq(purple_account_get_username(account)) && aim_snvalid_icq(userinfo->sn)) { /* being recevied by ICQ from ICQ - escape HTML so it is displayed as sent */ gchar *tmp2 = g_markup_escape_text(tmp, -1); g_free(tmp); @@ -2486,8 +2486,48 @@ } } break; - case 0x1a: { /* Someone has sent you a greeting card or requested buddies? */ - /* This is boring and silly. */ + case 0x1a: { /* Handle SMS or someone has sent you a greeting card or requested buddies? */ + ByteStream qbs; + int smstype, taglen, smslen; + char *tagstr = NULL, *smsmsg = NULL; + xmlnode *xmlroot = NULL, *xmltmp = NULL; + gchar *uin = NULL, *message = NULL; + + /* From libicq2000-0.3.2/src/ICQ.cpp */ + byte_stream_init(&qbs, (guint8 *)args->msg, args->msglen); + byte_stream_advance(&qbs, 21); + smstype = byte_stream_getle16(&qbs); + taglen = byte_stream_getle32(&qbs); + tagstr = byte_stream_getstr(&qbs, taglen); + byte_stream_advance(&qbs, 3); + byte_stream_advance(&qbs, 4); + smslen = byte_stream_getle32(&qbs); + smsmsg = byte_stream_getstr(&qbs, smslen); + + /* Check if this is an SMS being sent from server */ + if ((smstype == 0) && (!strcmp(tagstr, "ICQSMS")) && (smsmsg != NULL)) + { + xmlroot = xmlnode_from_str(smsmsg, -1); + if (xmlroot != NULL) + { + xmltmp = xmlnode_get_child(xmlroot, "sender"); + if (xmltmp != NULL) + uin = xmlnode_get_data(xmltmp); + + xmltmp = xmlnode_get_child(xmlroot, "text"); + if (xmltmp != NULL) + message = xmlnode_get_data(xmltmp); + + if ((uin != NULL) && (message != NULL)) + serv_got_im(gc, uin, message, 0, time(NULL)); + + g_free(uin); + g_free(message); + xmlnode_free(xmlroot); + } + } + g_free(tagstr); + g_free(smsmsg); } break; default: { @@ -2963,7 +3003,7 @@ if (b == NULL) return 1; - if (!aim_sn_is_icq(userinfo->sn)) + if (!aim_snvalid_icq(userinfo->sn)) { if (strcmp(purple_buddy_get_name(b), userinfo->sn)) serv_got_alias(gc, purple_buddy_get_name(b), userinfo->sn); @@ -4154,6 +4194,17 @@ account = purple_connection_get_account(gc); ret = 0; + if (od->icq && aim_snvalid_sms(name)) { + /* + * We're sending to a phone number and this is ICQ, + * so send the message as an SMS using aim_icq_sendsms() + */ + int ret; + purple_debug_info("oscar", "Sending SMS to %s.\n", name); + ret = aim_icq_sendsms(od, name, message, purple_account_get_username(account)); + return (ret >= 0 ? 1 : ret); + } + if (imflags & PURPLE_MESSAGE_AUTO_RESP) tmp1 = purple_str_sub_away_formatters(message, name); else @@ -4254,12 +4305,12 @@ /* * If we're IMing an SMS user or an ICQ user from an ICQ account, then strip HTML. */ - if (aim_sn_is_sms(name)) { + if (aim_snvalid_sms(name)) { /* Messaging an SMS (mobile) user */ tmp2 = purple_markup_strip_html(tmp1); is_html = FALSE; - } else if (aim_sn_is_icq(purple_account_get_username(account))) { - if (aim_sn_is_icq(name)) { + } else if (aim_snvalid_icq(purple_account_get_username(account))) { + if (aim_snvalid_icq(name)) { /* From ICQ to ICQ */ tmp2 = purple_markup_strip_html(tmp1); is_html = FALSE; @@ -4295,7 +4346,7 @@ purple_plugin_oscar_convert_to_best_encoding(gc, name, tmp1, (char **)&args.msg, &args.msglen, &args.charset, &args.charsubset); - purple_debug_info("oscar", "Sending %s as %s because the original was too long.", + purple_debug_info("oscar", "Sending %s as %s because the original was too long.\n", message, (char *)args.msg); } @@ -4321,7 +4372,7 @@ void oscar_get_info(PurpleConnection *gc, const char *name) { OscarData *od = (OscarData *)gc->proto_data; - if (od->icq && aim_sn_is_icq(name)) + if (od->icq && aim_snvalid_icq(name)) aim_icq_getallinfo(od, name); else aim_locate_getinfoshort(od, name, 0x00000003); @@ -4566,7 +4617,7 @@ oscar_set_info_and_status(account, FALSE, NULL, TRUE, status); /* Set the ICQ status for ICQ accounts only */ - if (aim_sn_is_icq(purple_account_get_username(account))) + if (aim_snvalid_icq(purple_account_get_username(account))) oscar_set_status_icq(account, status); } @@ -4776,7 +4827,7 @@ "ssi: syncing local list and server list\n"); if ((timestamp == 0) || (numitems == 0)) { - purple_debug_info("oscar", "Got AIM SSI with a 0 timestamp or 0 numitems--not syncing. This probably means your buddy list is empty.", NULL); + purple_debug_info("oscar", "Got AIM SSI with a 0 timestamp or 0 numitems--not syncing. This probably means your buddy list is empty.\n"); return 1; } @@ -5379,14 +5430,14 @@ purple_plugin_oscar_convert_to_best_encoding(gc, NULL, buf, &buf2, &len, &charset, &charsubset); if ((len > c->maxlen) || (len > c->maxvis)) { - purple_debug_warning("oscar", "Could not send %s because (%i > maxlen %i) or (%i > maxvis %i)", + purple_debug_warning("oscar", "Could not send %s because (%i > maxlen %i) or (%i > maxvis %i)\n", buf2, len, c->maxlen, len, c->maxvis); g_free(buf); g_free(buf2); return -E2BIG; } - purple_debug_info("oscar", "Sending %s as %s because the original was too long.", + purple_debug_info("oscar", "Sending %s as %s because the original was too long.\n", message, buf2); } @@ -5405,30 +5456,30 @@ const char *oscar_list_icon_icq(PurpleAccount *a, PurpleBuddy *b) { - if ((b == NULL) || (b->name == NULL) || aim_sn_is_sms(b->name)) + if ((b == NULL) || (b->name == NULL) || aim_snvalid_sms(b->name)) { - if (a == NULL || aim_sn_is_icq(purple_account_get_username(a))) + if (a == NULL || aim_snvalid_icq(purple_account_get_username(a))) return "icq"; else return "aim"; } - if (aim_sn_is_icq(b->name)) + if (aim_snvalid_icq(b->name)) return "icq"; return "aim"; } const char *oscar_list_icon_aim(PurpleAccount *a, PurpleBuddy *b) { - if ((b == NULL) || (b->name == NULL) || aim_sn_is_sms(b->name)) + if ((b == NULL) || (b->name == NULL) || aim_snvalid_sms(b->name)) { - if (a != NULL && aim_sn_is_icq(purple_account_get_username(a))) + if (a != NULL && aim_snvalid_icq(purple_account_get_username(a))) return "icq"; else return "aim"; } - if (aim_sn_is_icq(b->name)) + if (aim_snvalid_icq(b->name)) return "icq"; return "aim"; } @@ -5712,7 +5763,7 @@ g_return_val_if_fail(account != NULL, NULL); /* Used to flag some statuses as "user settable" or not */ - is_icq = aim_sn_is_icq(purple_account_get_username(account)); + is_icq = aim_snvalid_icq(purple_account_get_username(account)); /* Common status types */ /* Really the available message should only be settable for AIM accounts */ @@ -5920,7 +5971,7 @@ userinfo = aim_locate_finduserinfo(od, buddy->name); menu = NULL; - if (od->icq && aim_sn_is_icq(purple_buddy_get_name(buddy))) + if (od->icq && aim_snvalid_icq(purple_buddy_get_name(buddy))) { act = purple_menu_action_new(_("Get AIM Info"), PURPLE_CALLBACK(oscar_get_aim_info_cb), @@ -6515,7 +6566,7 @@ od = (OscarData *)gc->proto_data; } - return (od != NULL && od->icq && aim_sn_is_icq(purple_account_get_username(account))); + return (od != NULL && od->icq && aim_snvalid_icq(purple_account_get_username(account))); } /* TODO: Find somewhere to put this instead of including it in a bunch of places. diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/oscar/oscar.h --- a/libpurple/protocols/oscar/oscar.h Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/oscar/oscar.h Thu Sep 06 06:26:32 2007 +0000 @@ -1320,6 +1320,7 @@ int aim_icq_getsimpleinfo(OscarData *od, const char *uin); int aim_icq_getalias(OscarData *od, const char *uin); int aim_icq_getallinfo(OscarData *od, const char *uin); +int aim_icq_sendsms(OscarData *od, const char *name, const char *msg, const char *alias); @@ -1458,8 +1459,8 @@ char *aimutil_itemindex(char *toSearch, int theindex, char dl); gboolean aim_snvalid(const char *sn); -gboolean aim_sn_is_icq(const char *sn); -gboolean aim_sn_is_sms(const char *sn); +gboolean aim_snvalid_icq(const char *sn); +gboolean aim_snvalid_sms(const char *sn); int aim_snlen(const char *sn); int aim_sncmp(const char *sn1, const char *sn2); diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/oscar/util.c --- a/libpurple/protocols/oscar/util.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/oscar/util.c Thu Sep 06 06:26:32 2007 +0000 @@ -171,7 +171,7 @@ * * @return TRUE if the screen name is valid, FALSE if not. */ -static gboolean +gboolean aim_snvalid_icq(const char *sn) { int i; @@ -190,7 +190,7 @@ * * @return TRUE if the screen name is valid, FALSE if not. */ -static gboolean +gboolean aim_snvalid_sms(const char *sn) { int i; @@ -221,34 +221,6 @@ } /** - * Determine if a given screen name is an ICQ screen name - * (i.e. it is composed of only numbers). - * - * @param sn A valid AIM or ICQ screen name. - * @return TRUE if the screen name is an ICQ screen name. Otherwise - * FALSE is returned. - */ -gboolean -aim_sn_is_icq(const char *sn) -{ - return aim_snvalid_icq(sn); -} - -/** - * Determine if a given screen name is an SMS number - * (i.e. it begins with a +). - * - * @param sn A valid AIM or ICQ screen name. - * @return TRUE if the screen name is an SMS number. Otherwise - * FALSE is returned. - */ -gboolean -aim_sn_is_sms(const char *sn) -{ - return (sn[0] == '+'); -} - -/** * This takes two screen names and compares them using the rules * on screen names for AIM/AOL. Mainly, this means case and space * insensitivity (all case differences and spacing differences are diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/qq/header_info.c --- a/libpurple/protocols/qq/header_info.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/qq/header_info.c Thu Sep 06 06:26:32 2007 +0000 @@ -35,6 +35,7 @@ #define QQ_CLIENT_0B35 0x0b35 /* GB QQ2003iii build 0304 (offical release) */ #define QQ_CLIENT_0B37 0x0b37 /* GB QQ2003iii build 0304 (April 05 updates) */ #define QQ_CLIENT_0E1B 0x0e1b /* QQ2005? QQ2006? */ +#define QQ_CLIENT_0E35 0x0e35 /* EN QQ2005 V05.0.200.020 */ #define QQ_CLIENT_0F15 0x0f15 /* QQ2006 Spring Festival build */ #define QQ_CLIENT_0F5F 0x0f5f /* QQ2006 final build */ @@ -115,6 +116,8 @@ return "GB QQ2003iii build 0304 (April 5 update)"; case QQ_CLIENT_0E1B: return "QQ2005 or QQ2006"; + case QQ_CLIENT_0E35: + return "En QQ2005 V05.0.200.020"; case QQ_CLIENT_0F15: return "QQ2006 Spring Festival build"; case QQ_CLIENT_0F5F: diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/qq/login_logout.c --- a/libpurple/protocols/qq/login_logout.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/qq/login_logout.c Thu Sep 06 06:26:32 2007 +0000 @@ -380,33 +380,33 @@ void qq_process_request_login_token_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) { - qq_data *qd; + qq_data *qd; gchar *hex_dump; - g_return_if_fail(buf != NULL && buf_len != 0); + g_return_if_fail(buf != NULL && buf_len != 0); - qd = (qq_data *) gc->proto_data; + qd = (qq_data *) gc->proto_data; if (buf[0] == QQ_REQUEST_LOGIN_TOKEN_REPLY_OK) { if (buf[1] != buf_len-2) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", + purple_debug(PURPLE_DEBUG_INFO, "QQ", "Malformed login token reply packet. Packet specifies length of %d, actual length is %d\n", buf[1], buf_len-2); purple_debug(PURPLE_DEBUG_INFO, "QQ", "Attempting to proceed with the actual packet length.\n"); } hex_dump = hex_dump_to_str(buf+2, buf_len-2); purple_debug(PURPLE_DEBUG_INFO, "QQ", - "<<< got a token with %d bytes -> [default] decrypt and dump\n%s", buf_len-2, hex_dump); + "<<< got a token with %d bytes -> [default] decrypt and dump\n%s", buf_len-2, hex_dump); qq_send_packet_login(gc, buf_len-2, buf+2); } else { purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Unknown request login token reply code : %d\n", buf[0]); hex_dump = hex_dump_to_str(buf, buf_len); - purple_debug(PURPLE_DEBUG_WARNING, "QQ", - ">>> %d bytes -> [default] decrypt and dump\n%s", - buf_len, hex_dump); - try_dump_as_gbk(buf, buf_len); + purple_debug(PURPLE_DEBUG_WARNING, "QQ", + ">>> %d bytes -> [default] decrypt and dump\n%s", + buf_len, hex_dump); + try_dump_as_gbk(buf, buf_len); purple_connection_error(gc, _("Error requesting login token")); - } + } g_free(hex_dump); } @@ -463,11 +463,11 @@ default: purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Unknown reply code: %d\n", data[0]); hex_dump = hex_dump_to_str(data, len); - purple_debug(PURPLE_DEBUG_WARNING, "QQ", - ">>> %d bytes -> [default] decrypt and dump\n%s", - buf_len, hex_dump); + purple_debug(PURPLE_DEBUG_WARNING, "QQ", + ">>> %d bytes -> [default] decrypt and dump\n%s", + buf_len, hex_dump); g_free(hex_dump); - try_dump_as_gbk(data, len); + try_dump_as_gbk(data, len); ret = QQ_LOGIN_REPLY_MISC_ERROR; } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/silc/ops.c --- a/libpurple/protocols/silc/ops.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/silc/ops.c Thu Sep 06 06:26:32 2007 +0000 @@ -868,7 +868,7 @@ /* Find buddy by nickname */ b = purple_find_buddy(sg->account, client_entry->nickname); if (!b) { - purple_debug_warning("silc", "WATCH for %s, unknown buddy", + purple_debug_warning("silc", "WATCH for %s, unknown buddy\n", client_entry->nickname); break; } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/silc10/ops.c --- a/libpurple/protocols/silc10/ops.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/silc10/ops.c Thu Sep 06 06:26:32 2007 +0000 @@ -902,7 +902,7 @@ /* Find buddy by nickname */ b = purple_find_buddy(sg->account, client_entry->nickname); if (!b) { - purple_debug_warning("silc", "WATCH for %s, unknown buddy", + purple_debug_warning("silc", "WATCH for %s, unknown buddy\n", client_entry->nickname); break; } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/simple/simple.c --- a/libpurple/protocols/simple/simple.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/simple/simple.c Thu Sep 06 06:26:32 2007 +0000 @@ -1001,7 +1001,7 @@ found = TRUE; } if(!found) { - purple_debug_info("simple", "got unknown mime-type"); + purple_debug_info("simple", "got unknown mime-type\n"); send_sip_response(sip->gc, msg, 415, "Unsupported media type", NULL); } g_free(from); diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/yahoo/yahoo.c --- a/libpurple/protocols/yahoo/yahoo.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Thu Sep 06 06:26:32 2007 +0000 @@ -3446,7 +3446,7 @@ if (!set_cookie) { struct yahoo_data *yd = gc->proto_data; - purple_debug_error("yahoo", "No mail login token; forwarding to login screen."); + purple_debug_error("yahoo", "No mail login token; forwarding to login screen.\n"); url = g_strdup(yd->jp ? YAHOOJP_MAIL_URL : YAHOO_MAIL_URL); } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/yahoo/yahoo_packet.c --- a/libpurple/protocols/yahoo/yahoo_packet.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo_packet.c Thu Sep 06 06:26:32 2007 +0000 @@ -365,7 +365,7 @@ if (ret < 0 && errno == EAGAIN) ret = 0; else if (ret <= 0) { - purple_debug_warning("yahoo", "Only wrote %d of %d bytes!", ret, len); + purple_debug_warning("yahoo", "Only wrote %d of %d bytes!\n", ret, len); g_free(data); return ret; } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/protocols/zephyr/zephyr.c --- a/libpurple/protocols/zephyr/zephyr.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/protocols/zephyr/zephyr.c Thu Sep 06 06:26:32 2007 +0000 @@ -1117,7 +1117,7 @@ bufcur++; if ((bufcur - buf) > (bufsize - 1)) { if ((buf = realloc(buf, bufsize * 2)) == NULL) { - purple_debug_error("zephyr","Ran out of memory"); + purple_debug_error("zephyr","Ran out of memory\n"); exit(-1); } else { bufcur = buf + bufsize; @@ -2218,12 +2218,12 @@ notice.z_message_len = strlen(html_buf2) + strlen(sig) + 2; notice.z_message = buf; notice.z_opcode = g_strdup(opcode); - purple_debug_info("zephyr","About to send notice"); + purple_debug_info("zephyr","About to send notice\n"); if (! ZSendNotice(¬ice, ZAUTH) == ZERR_NONE) { /* XXX handle errors here */ return 0; } - purple_debug_info("zephyr","notice sent"); + purple_debug_info("zephyr","notice sent\n"); g_free(buf); } @@ -2815,19 +2815,19 @@ title = g_strdup_printf("Server subscriptions for %s", zephyr->username); if (zephyr->port == 0) { - purple_debug_error("zephyr", "error while retrieving port"); + purple_debug_error("zephyr", "error while retrieving port\n"); return; } if ((retval = ZRetrieveSubscriptions(zephyr->port,&nsubs)) != ZERR_NONE) { /* XXX better error handling */ - purple_debug_error("zephyr", "error while retrieving subscriptions from server"); + purple_debug_error("zephyr", "error while retrieving subscriptions from server\n"); return; } for(i=0;i", diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/proxy.c --- a/libpurple/proxy.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/proxy.c Thu Sep 06 06:26:32 2007 +0000 @@ -420,7 +420,7 @@ if (ret == 0 && error == EINPROGRESS) { /* No worries - we'll be called again later */ /* TODO: Does this ever happen? */ - purple_debug_info("proxy", "(ret == 0 && error == EINPROGRESS)"); + purple_debug_info("proxy", "(ret == 0 && error == EINPROGRESS)\n"); return; } diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/util.c --- a/libpurple/util.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/util.c Thu Sep 06 06:26:32 2007 +0000 @@ -673,7 +673,7 @@ locale = g_locale_from_utf8(format, -1, NULL, NULL, &err); if (err != NULL) { - purple_debug_error("util", "Format conversion failed in purple_utf8_strftime(): %s", err->message); + purple_debug_error("util", "Format conversion failed in purple_utf8_strftime(): %s\n", err->message); g_error_free(err); locale = g_strdup(format); } @@ -693,7 +693,7 @@ utf8 = g_locale_to_utf8(buf, len, NULL, NULL, &err); if (err != NULL) { - purple_debug_error("util", "Result conversion failed in purple_utf8_strftime(): %s", err->message); + purple_debug_error("util", "Result conversion failed in purple_utf8_strftime(): %s\n", err->message); g_error_free(err); } else diff -r 9968fff36e20 -r 9cc67c3d145e libpurple/xmlnode.c --- a/libpurple/xmlnode.c Wed Sep 05 04:52:33 2007 +0000 +++ b/libpurple/xmlnode.c Thu Sep 06 06:26:32 2007 +0000 @@ -549,7 +549,16 @@ xmlnode_parser_error_libxml(void *user_data, const char *msg, ...) { struct _xmlnode_parser_data *xpd = user_data; + char errmsg[2048]; + va_list args; + xpd->error = TRUE; + + va_start(args, msg); + vsnprintf(errmsg, sizeof(errmsg), msg, args); + va_end(args); + + purple_debug_error("xmlnode", "Error parsing xml file: %s\n", errmsg); } static xmlSAXHandler xmlnode_parser_libxml = { diff -r 9968fff36e20 -r 9cc67c3d145e pidgin/gtkblist.c --- a/pidgin/gtkblist.c Wed Sep 05 04:52:33 2007 +0000 +++ b/pidgin/gtkblist.c Thu Sep 06 06:26:32 2007 +0000 @@ -3101,7 +3101,8 @@ purple_notify_user_info_add_pair(user_info, _("Status"), _("Offline")); } - if (prpl_info && prpl_info->tooltip_text) + if (purple_account_is_connected(b->account) && + prpl_info && prpl_info->tooltip_text) { /* Additional text from the PRPL */ prpl_info->tooltip_text(b, user_info, full); diff -r 9968fff36e20 -r 9cc67c3d145e pidgin/gtkcertmgr.c --- a/pidgin/gtkcertmgr.c Wed Sep 05 04:52:33 2007 +0000 +++ b/pidgin/gtkcertmgr.c Thu Sep 06 06:26:32 2007 +0000 @@ -454,6 +454,9 @@ "text", TPM_HOSTNAME_COLUMN, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column); + + gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), + TPM_HOSTNAME_COLUMN, GTK_SORT_ASCENDING); } /* Get the treeview selector into the struct */ diff -r 9968fff36e20 -r 9cc67c3d145e pidgin/gtkconv.c --- a/pidgin/gtkconv.c Wed Sep 05 04:52:33 2007 +0000 +++ b/pidgin/gtkconv.c Thu Sep 06 06:26:32 2007 +0000 @@ -4497,12 +4497,12 @@ pidgin_conv_motion_cb (GtkWidget *infopane, GdkEventMotion *event, PidginConversation *gtkconv) { int delay = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/blist/tooltip_delay"); - + pidgin_blist_tooltip_destroy(); if (delay == 0) return FALSE; - if (tooltip.timeout != 0) + if (tooltip.timeout != 0) g_source_remove(tooltip.timeout); tooltip.timeout = g_timeout_add(delay, (GSourceFunc)pidgin_conv_tooltip_timeout, gtkconv); @@ -4516,7 +4516,6 @@ PurplePluginProtocolInfo *prpl_info; PurpleConversation *conv = gtkconv->active_conv; PidginChatPane *gtkchat; - PurpleConnection *gc; PurpleBlistNode *node = NULL; PurpleAccount *account; GtkTreePath *path; @@ -4528,8 +4527,11 @@ gtkchat = gtkconv->u.chat; account = purple_conversation_get_account(conv); - gc = account->gc; - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + + if (account->gc == NULL) + return FALSE; + + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(account->gc->prpl); model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); @@ -4543,7 +4545,7 @@ gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1); node = (PurpleBlistNode*)(purple_find_buddy(conv->account, who)); - if (node && prpl_info && (prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) + if (node && prpl_info && (prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) pidgin_blist_draw_tooltip(node, gtkconv->infopane); g_free(who); @@ -4553,20 +4555,26 @@ return FALSE; } -static gboolean +static gboolean pidgin_userlist_motion_cb (GtkWidget *w, GdkEventMotion *event, PidginConversation *gtkconv) { PurpleConversation *conv; + PurpleAccount *account; int delay = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/blist/tooltip_delay"); pidgin_blist_tooltip_destroy(); if (delay == 0) return FALSE; - if (tooltip.timeout != 0) + if (tooltip.timeout != 0) g_source_remove(tooltip.timeout); - + tooltip.timeout = 0; + conv = gtkconv->active_conv; + account = purple_conversation_get_account(conv); + + if (account->gc == NULL) + return FALSE; tooltip.timeout = g_timeout_add(delay, (GSourceFunc)pidgin_userlist_tooltip_timeout, gtkconv); tooltip.gtkconv = gtkconv; @@ -4606,7 +4614,7 @@ gtk_widget_show(gtkconv->infopane_hbox); gtk_widget_add_events(event_box, GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK); - g_signal_connect(G_OBJECT(event_box), "button_press_event", + g_signal_connect(G_OBJECT(event_box), "button-press-event", G_CALLBACK(infopane_press_cb), gtkconv); g_signal_connect(G_OBJECT(event_box), "motion-notify-event", diff -r 9968fff36e20 -r 9cc67c3d145e pidgin/gtknotify.c --- a/pidgin/gtknotify.c Wed Sep 05 04:52:33 2007 +0000 +++ b/pidgin/gtknotify.c Thu Sep 06 06:26:32 2007 +0000 @@ -801,7 +801,7 @@ if(b->label) { button = gtk_button_new_with_label(b->label); } else { - purple_debug_warning("gtknotify", "Missing button label"); + purple_debug_warning("gtknotify", "Missing button label\n"); } break; case PURPLE_NOTIFY_BUTTON_CONTINUE: diff -r 9968fff36e20 -r 9cc67c3d145e pidgin/plugins/mailchk.c --- a/pidgin/plugins/mailchk.c Wed Sep 05 04:52:33 2007 +0000 +++ b/pidgin/plugins/mailchk.c Thu Sep 06 06:26:32 2007 +0000 @@ -118,7 +118,7 @@ void *conn_handle = purple_connections_get_handle(); if (!check_timeout(NULL)) { - purple_debug_warning("mailchk", "Could not read $MAIL or /var/spool/mail/$USER"); + purple_debug_warning("mailchk", "Could not read $MAIL or /var/spool/mail/$USER\n"); return FALSE; } diff -r 9968fff36e20 -r 9cc67c3d145e pidgin/plugins/musicmessaging/musicmessaging.c --- a/pidgin/plugins/musicmessaging/musicmessaging.c Wed Sep 05 04:52:33 2007 +0000 +++ b/pidgin/plugins/musicmessaging/musicmessaging.c Thu Sep 06 06:26:32 2007 +0000 @@ -113,7 +113,7 @@ purple_conv_im_send(PURPLE_CONV_IM(mmconv->conv), to_send->str); - purple_debug_misc("Sent request: %s\n", to_send->str); + purple_debug_misc("musicmessaging", "Sent request: %s\n", to_send->str); } } diff -r 9968fff36e20 -r 9cc67c3d145e pidgin/win32/gtkdocklet-win32.c --- a/pidgin/win32/gtkdocklet-win32.c Wed Sep 05 04:52:33 2007 +0000 +++ b/pidgin/win32/gtkdocklet-win32.c Thu Sep 06 06:26:32 2007 +0000 @@ -450,7 +450,7 @@ hicon = pixbuf_to_hicon(pixbuf); g_object_unref(pixbuf); } else - purple_debug_error("Unable to load pixbuf for %s.\n", stock); + purple_debug_error("docklet", "Unable to load pixbuf for %s.\n", stock); return hicon; }