# HG changeset patch
# User masca@cpw.pidgin.im
# Date 1288589161 0
# Node ID 734c5c08b5dd6df54ee39b5e71a79bc4add603ac
# Parent 29c3443419c3457d3b1bab903863c3238216457e# Parent 555862567b38b955874636488cdbf2c1ff5483b9
propagate from branch 'im.pidgin.soc.2010.msn-tlc' (head f9e92250cfa7d84022736153e2c970889805aaab)
to branch 'im.pidgin.pidgin' (head 28463210563e214424c638428d438ae2f4dd0b0e)
diff -r 555862567b38 -r 734c5c08b5dd ChangeLog
--- a/ChangeLog Sat Oct 30 17:45:46 2010 +0000
+++ b/ChangeLog Mon Nov 01 05:26:01 2010 +0000
@@ -1,6 +1,34 @@
Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
-version 2.7.5 (MM/DD/YYYY):
+version 2.7.6 (??/??/????):
+
+version 2.7.5 (10/31/2010):
+ General:
+ * Added Verisign Class 3 Public CA - G2 root CA.
+
+ Pidgin:
+ * Properly differentiate between bn and bn_IN in the Translation
+ Information dialog.
+
+ AIM and/or ICQ:
+ * Display the "Authorize buddy?" minidialog when the requestor has an
+ empty nickname. (#12810)
+ * New ICQ accounts default to proper ICQ servers. Old accounts using one
+ of the old default servers will be silently migrated to use the proper
+ servers.
+ * ICQ accounts using clientLogin now use the correct ICQ servers. This is
+ separate from the server settings mentioned above.
+ * '<' should no longer cause ICQ status messages to be truncated in some
+ locations. (#11964, #12593)
+ * Fix sending messages to chat rooms. (#12768)
+
+ Bonjour:
+ * Don't crash when attempting to log into a Bonjour account and init
+ failed.
+
+ Windows-Specific Changes:
+ * Quote the path stored in the registry when the "run at startup" option
+ in the Windows Pidgin Options plugin is used. (#12781)
version 2.7.4 (10/20/2010):
General:
diff -r 555862567b38 -r 734c5c08b5dd ChangeLog.API
--- a/ChangeLog.API Sat Oct 30 17:45:46 2010 +0000
+++ b/ChangeLog.API Mon Nov 01 05:26:01 2010 +0000
@@ -1,6 +1,9 @@
Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
-version 2.7.5 (MM/DD/YYYY):
+version 2.7.6 (??/??/????):
+
+version 2.7.5 (10/31/2010):
+ * No changes
version 2.7.4 (10/20/2010):
Perl:
diff -r 555862567b38 -r 734c5c08b5dd NEWS
--- a/NEWS Sat Oct 30 17:45:46 2010 +0000
+++ b/NEWS Mon Nov 01 05:26:01 2010 +0000
@@ -2,7 +2,12 @@
Our development blog is available at: http://planet.pidgin.im
-2.7.5 (MM/DD/YYYY):
+2.7.6 (??/??/????):
+
+2.7.5 (10/31/2010):
+ John: A bugfix release for all of you! This time we fixed a bunch of
+ bugs ranging from annoying regressions to long-standing bugs we didn't
+ realize until now were bugs. Enjoy!
2.7.4 (10/20/2010):
John: This release came at this particular time due to some security
diff -r 555862567b38 -r 734c5c08b5dd configure.ac
--- a/configure.ac Sat Oct 30 17:45:46 2010 +0000
+++ b/configure.ac Mon Nov 01 05:26:01 2010 +0000
@@ -46,7 +46,7 @@
m4_define([purple_lt_current], [7])
m4_define([purple_major_version], [2])
m4_define([purple_minor_version], [7])
-m4_define([purple_micro_version], [5])
+m4_define([purple_micro_version], [6])
m4_define([purple_version_suffix], [devel])
m4_define([purple_version],
[purple_major_version.purple_minor_version.purple_micro_version])
@@ -55,7 +55,7 @@
m4_define([gnt_lt_current], [8])
m4_define([gnt_major_version], [2])
m4_define([gnt_minor_version], [8])
-m4_define([gnt_micro_version], [2])
+m4_define([gnt_micro_version], [3])
m4_define([gnt_version_suffix], [devel])
m4_define([gnt_version],
[gnt_major_version.gnt_minor_version.gnt_micro_version])
diff -r 555862567b38 -r 734c5c08b5dd libpurple/account.c
--- a/libpurple/account.c Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/account.c Mon Nov 01 05:26:01 2010 +0000
@@ -513,6 +513,29 @@
}
static void
+migrate_icq_server(PurpleAccount *account)
+{
+ /* Migrate the login server setting for ICQ accounts. See
+ * 'mtn log --last 1 --no-graph --from b6d7712e90b68610df3bd2d8cbaf46d94c8b3794'
+ * for details on the change. */
+
+ if(purple_strequal(purple_account_get_protocol_id(account), "prpl-icq")) {
+ const char *tmp = purple_account_get_string(account, "server", NULL);
+
+ /* Non-secure server */
+ if(purple_strequal(tmp, "login.messaging.aol.com") ||
+ purple_strequal(tmp, "login.oscar.aol.com"))
+ purple_account_set_string(account, "server", "login.icq.com");
+
+ /* Secure server */
+ if(purple_strequal(tmp, "slogin.oscar.aol.com"))
+ purple_account_set_string(account, "server", "slogin.icq.com");
+ }
+
+ return;
+}
+
+static void
migrate_xmpp_encryption(PurpleAccount *account)
{
/* When this is removed, nuke the "old_ssl" and "require_tls" settings */
@@ -598,6 +621,9 @@
/* we do this here because we need access to account settings to determine
* if we can/should migrate an old Yahoo! JAPAN account */
migrate_yahoo_japan(account);
+ /* we do this here because we need access to account settings to determine
+ * if we can/should migrate an ICQ account's server setting */
+ migrate_icq_server(account);
/* we do this here because we need to do it before the user views the
* Edit Account dialog. */
migrate_xmpp_encryption(account);
diff -r 555862567b38 -r 734c5c08b5dd libpurple/connection.c
--- a/libpurple/connection.c Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/connection.c Mon Nov 01 05:26:01 2010 +0000
@@ -135,7 +135,7 @@
!(prpl_info->options & OPT_PROTO_NO_PASSWORD) &&
!(prpl_info->options & OPT_PROTO_PASSWORD_OPTIONAL))
{
- purple_debug_error("connection", "Can not connect to account %s without "
+ purple_debug_error("connection", "Cannot connect to account %s without "
"a password.\n", purple_account_get_username(account));
return;
}
@@ -210,7 +210,7 @@
!(prpl_info->options & OPT_PROTO_NO_PASSWORD) &&
!(prpl_info->options & OPT_PROTO_PASSWORD_OPTIONAL))
{
- purple_debug_error("connection", "Can not connect to account %s without "
+ purple_debug_error("connection", "Cannot connect to account %s without "
"a password.\n", purple_account_get_username(account));
return;
}
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/clientlogin.c
--- a/libpurple/protocols/oscar/clientlogin.c Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/clientlogin.c Mon Nov 01 05:26:01 2010 +0000
@@ -42,8 +42,36 @@
#include "cipher.h"
#include "core.h"
-#define URL_CLIENT_LOGIN "https://api.screenname.aol.com/auth/clientLogin"
-#define URL_START_OSCAR_SESSION "https://api.oscar.aol.com/aim/startOSCARSession"
+#define AIM_LOGIN_HOST "api.screenname.aol.com"
+#define ICQ_LOGIN_HOST "api.login.icq.net"
+
+#define AIM_API_HOST "api.oscar.aol.com"
+#define ICQ_API_HOST "api.icq.net"
+
+#define CLIENT_LOGIN_PAGE "/auth/clientLogin"
+#define START_OSCAR_SESSION_PAGE "/aim/startOSCARSession"
+
+#define HTTPS_FORMAT_URL(host, page) "https://" host page
+
+static const gchar *client_login_urls[] = {
+ HTTPS_FORMAT_URL(AIM_LOGIN_HOST, CLIENT_LOGIN_PAGE),
+ HTTPS_FORMAT_URL(ICQ_LOGIN_HOST, CLIENT_LOGIN_PAGE),
+};
+
+static const gchar *start_oscar_session_urls[] = {
+ HTTPS_FORMAT_URL(AIM_API_HOST, START_OSCAR_SESSION_PAGE),
+ HTTPS_FORMAT_URL(ICQ_API_HOST, START_OSCAR_SESSION_PAGE),
+};
+
+static const gchar *get_client_login_url(OscarData *od)
+{
+ return client_login_urls[od->icq];
+}
+
+static const gchar *get_start_oscar_session_url(OscarData *od)
+{
+ return start_oscar_session_urls[od->icq];
+}
/*
* Using clientLogin requires a developer ID. This key is for libpurple.
@@ -125,6 +153,7 @@
static gboolean parse_start_oscar_session_response(PurpleConnection *gc, const gchar *response, gsize response_len, char **host, unsigned short *port, char **cookie, char **tls_certname)
{
+ OscarData *od = purple_connection_get_protocol_data(gc);
xmlnode *response_node, *tmp_node, *data_node;
xmlnode *host_node = NULL, *port_node = NULL, *cookie_node = NULL, *tls_node = NULL;
gboolean use_tls;
@@ -142,7 +171,7 @@
"response as XML: %s\n", response);
/* Note to translators: %s in this string is a URL */
msg = generate_error_message(response_node,
- URL_START_OSCAR_SESSION);
+ get_start_oscar_session_url(od));
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
g_free(msg);
@@ -165,7 +194,7 @@
purple_debug_error("oscar", "startOSCARSession response was "
"missing statusCode: %s\n", response);
msg = generate_error_message(response_node,
- URL_START_OSCAR_SESSION);
+ get_start_oscar_session_url(od));
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
g_free(msg);
@@ -203,7 +232,7 @@
else {
char *msg;
msg = generate_error_message(response_node,
- URL_START_OSCAR_SESSION);
+ get_start_oscar_session_url(od));
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_OTHER_ERROR, msg);
g_free(msg);
@@ -216,15 +245,13 @@
g_free(tmp);
/* Make sure we have everything else */
- if (data_node == NULL || host_node == NULL ||
- port_node == NULL || cookie_node == NULL ||
- (use_tls && tls_node == NULL))
+ if (data_node == NULL || host_node == NULL || port_node == NULL || cookie_node == NULL)
{
char *msg;
purple_debug_error("oscar", "startOSCARSession response was missing "
"something: %s\n", response);
msg = generate_error_message(response_node,
- URL_START_OSCAR_SESSION);
+ get_start_oscar_session_url(od));
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
g_free(msg);
@@ -237,17 +264,21 @@
tmp = xmlnode_get_data_unescaped(port_node);
*cookie = xmlnode_get_data_unescaped(cookie_node);
- if (use_tls)
- *tls_certname = xmlnode_get_data_unescaped(tls_node);
+ if (use_tls) {
+ if (tls_node != NULL) {
+ *tls_certname = xmlnode_get_data_unescaped(tls_node);
+ } else {
+ purple_debug_warning("oscar", "useTls was 1, but we haven't received a tlsCertName to use. We will not do SSL to BOS.\n");
+ }
+ }
- if (*host == NULL || **host == '\0' || tmp == NULL || *tmp == '\0' || *cookie == NULL || **cookie == '\0' ||
- (use_tls && (*tls_certname == NULL || **tls_certname == '\0')))
+ if (*host == NULL || **host == '\0' || tmp == NULL || *tmp == '\0' || *cookie == NULL || **cookie == '\0')
{
char *msg;
purple_debug_error("oscar", "startOSCARSession response was missing "
"something: %s\n", response);
msg = generate_error_message(response_node,
- URL_START_OSCAR_SESSION);
+ get_start_oscar_session_url(od));
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
g_free(msg);
@@ -284,7 +315,7 @@
/* Note to translators: The first %s is a URL, the second is an
error message. */
tmp = g_strdup_printf(_("Error requesting %s: %s"),
- URL_START_OSCAR_SESSION, error_message);
+ get_start_oscar_session_url(od), error_message);
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp);
g_free(tmp);
@@ -326,9 +357,9 @@
oscar_get_ui_info_int(od->icq ? "prpl-icq-distid"
: "prpl-aim-distid", 0x00000611),
get_client_key(od), hosttime, use_tls);
- signature = generate_signature("GET", URL_START_OSCAR_SESSION,
+ signature = generate_signature("GET", get_start_oscar_session_url(od),
query_string, session_key);
- url = g_strdup_printf(URL_START_OSCAR_SESSION "?%s&sig_sha256=%s",
+ url = g_strdup_printf("%s?%s&sig_sha256=%s", get_start_oscar_session_url(od),
query_string, signature);
g_free(query_string);
g_free(signature);
@@ -367,6 +398,7 @@
*/
static gboolean parse_client_login_response(PurpleConnection *gc, const gchar *response, gsize response_len, char **token, char **secret, time_t *hosttime)
{
+ OscarData *od = purple_connection_get_protocol_data(gc);
xmlnode *response_node, *tmp_node, *data_node;
xmlnode *secret_node = NULL, *hosttime_node = NULL, *token_node = NULL, *tokena_node = NULL;
char *tmp;
@@ -379,7 +411,7 @@
purple_debug_error("oscar", "clientLogin could not parse "
"response as XML: %s\n", response);
msg = generate_error_message(response_node,
- URL_CLIENT_LOGIN);
+ get_client_login_url(od));
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
g_free(msg);
@@ -403,7 +435,7 @@
purple_debug_error("oscar", "clientLogin response was "
"missing statusCode: %s\n", response);
msg = generate_error_message(response_node,
- URL_CLIENT_LOGIN);
+ get_client_login_url(od));
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
g_free(msg);
@@ -446,7 +478,7 @@
} else {
char *msg;
msg = generate_error_message(response_node,
- URL_CLIENT_LOGIN);
+ get_client_login_url(od));
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_OTHER_ERROR, msg);
g_free(msg);
@@ -465,7 +497,7 @@
purple_debug_error("oscar", "clientLogin response was missing "
"something: %s\n", response);
msg = generate_error_message(response_node,
- URL_CLIENT_LOGIN);
+ get_client_login_url(od));
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
g_free(msg);
@@ -483,7 +515,7 @@
purple_debug_error("oscar", "clientLogin response was missing "
"something: %s\n", response);
msg = generate_error_message(response_node,
- URL_CLIENT_LOGIN);
+ get_client_login_url(od));
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
g_free(msg);
@@ -520,10 +552,10 @@
gchar *tmp;
if (error_message != NULL)
tmp = g_strdup_printf(_("Error requesting %s: %s"),
- URL_CLIENT_LOGIN, error_message);
+ get_client_login_url(od), error_message);
else
tmp = g_strdup_printf(_("Error requesting %s"),
- URL_CLIENT_LOGIN);
+ get_client_login_url(od));
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp);
g_free(tmp);
@@ -599,7 +631,7 @@
/* Send the POST request */
od->url_data = purple_util_fetch_url_request_len_with_account(
- purple_connection_get_account(gc), URL_CLIENT_LOGIN,
+ purple_connection_get_account(gc), get_client_login_url(od),
TRUE, NULL, FALSE, request->str, FALSE, -1,
client_login_cb, od);
g_string_free(request, TRUE);
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/family_icbm.c
--- a/libpurple/protocols/oscar/family_icbm.c Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/family_icbm.c Mon Nov 01 05:26:01 2010 +0000
@@ -1691,7 +1691,7 @@
purple_debug_misc("oscar", "X-Status: Received XML reply\n");
if (xml) {
GString *xstatus;
- char *tmp1, *tmp2;
+ char *tmp1, *tmp2, *unescaped_xstatus;
/* purple_debug_misc("oscar", "X-Status: XML reply: %s\n", xml); */
@@ -1709,29 +1709,32 @@
tmp1 += 12;
tmp2 = strstr(tmp1, "</desc>");
if (tmp2 != NULL) {
- if (xstatus->len > 0)
+ if (xstatus->len > 0 && tmp2 > tmp1)
g_string_append(xstatus, " - ");
g_string_append_len(xstatus, tmp1, tmp2 - tmp1);
}
}
- if (xstatus->len > 0) {
- purple_debug_misc("oscar", "X-Status reply: %s\n", xstatus->str);
+ unescaped_xstatus = purple_unescape_text(xstatus->str);
+ g_string_free(xstatus, TRUE);
+ if (*unescaped_xstatus) {
+ purple_debug_misc("oscar", "X-Status reply: %s\n", unescaped_xstatus);
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", xstatus->str, NULL);
+ status = purple_presence_get_status(presence, "mood");
+ if (status) {
+ purple_prpl_got_user_status(account, bn,
+ "mood",
+ PURPLE_MOOD_NAME, purple_status_get_attr_string(status, PURPLE_MOOD_NAME),
+ PURPLE_MOOD_COMMENT, unescaped_xstatus, NULL);
+ }
}
- g_string_free(xstatus, TRUE);
+ g_free(unescaped_xstatus);
} 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); */
}
}
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/family_icq.c
--- a/libpurple/protocols/oscar/family_icq.c Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/family_icq.c Mon Nov 01 05:26:01 2010 +0000
@@ -408,27 +408,27 @@
return 0;
}
-static int
+static void
gotalias(OscarData *od, struct aim_icq_info *info)
{
PurpleConnection *gc = od->gc;
PurpleAccount *account = purple_connection_get_account(gc);
- gchar who[16], *utf8;
PurpleBuddy *b;
+ gchar *utf8 = oscar_utf8_try_convert(account, od, info->nick);
- if (info->nick[0] && (utf8 = oscar_utf8_try_convert(account, od, info->nick))) {
- if (info->for_auth_request) {
- oscar_auth_recvrequest(gc, g_strdup_printf("%u", info->uin), utf8, info->auth_request_reason);
- } else {
+ if (info->for_auth_request) {
+ oscar_auth_recvrequest(gc, g_strdup_printf("%u", info->uin), utf8, info->auth_request_reason);
+ } else {
+ if (utf8 && *utf8) {
+ gchar who[16];
g_snprintf(who, sizeof(who), "%u", info->uin);
serv_got_alias(gc, who, utf8);
if ((b = purple_find_buddy(account, who))) {
purple_blist_node_set_string((PurpleBlistNode*)b, "servernick", utf8);
}
- g_free(utf8);
}
+ g_free(utf8);
}
- return 1;
}
/**
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/family_oservice.c
--- a/libpurple/protocols/oscar/family_oservice.c Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/family_oservice.c Mon Nov 01 05:26:01 2010 +0000
@@ -1041,63 +1041,45 @@
static int
aim_parse_extstatus(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
{
- guint16 type;
- guint8 flags, length;
-
- type = byte_stream_get16(bs);
- flags = byte_stream_get8(bs);
- length = byte_stream_get8(bs);
-
- /*
- * A flag of 0x01 could mean "this is the checksum we have for you"
- * A flag of 0x40 could mean "I don't have your icon, upload it"
- */
-
- switch (type) {
- case 0x0000:
- case 0x0001: { /* buddy icon checksum */
- /* not sure what the difference between 1 and 0 is */
- guint8 *md5 = byte_stream_getraw(bs, length);
+ guint16 type = byte_stream_get16(bs);
+ if (type == 0x0000 || type == 0x0001) {
+ /* buddy icon checksum */
+ /* not sure what the difference between 1 and 0 is */
+ guint8 flags = byte_stream_get8(bs);
+ guint8 length = byte_stream_get8(bs);
+ guint8 *md5 = byte_stream_getraw(bs, length);
- if ((flags == 0x00) || (flags == 0x41)) {
- if (!flap_connection_getbytype(od, SNAC_FAMILY_BART) && !od->iconconnecting) {
- od->iconconnecting = TRUE;
- od->set_icon = TRUE;
- aim_srv_requestnew(od, SNAC_FAMILY_BART);
- } else {
- PurpleAccount *account = purple_connection_get_account(od->gc);
- PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account);
- if (img == NULL) {
- aim_ssi_delicon(od);
- } else {
-
- purple_debug_info("oscar",
- "Uploading icon to icon server\n");
- aim_bart_upload(od, purple_imgstore_get_data(img),
- purple_imgstore_get_size(img));
- purple_imgstore_unref(img);
- }
- }
- } else if (flags == 0x81) {
+ if ((flags == 0x00) || (flags == 0x41)) {
+ if (!flap_connection_getbytype(od, SNAC_FAMILY_BART) && !od->iconconnecting) {
+ od->iconconnecting = TRUE;
+ od->set_icon = TRUE;
+ aim_srv_requestnew(od, SNAC_FAMILY_BART);
+ } else {
PurpleAccount *account = purple_connection_get_account(od->gc);
PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account);
- if (img == NULL)
+ if (img == NULL) {
aim_ssi_delicon(od);
- else {
- aim_ssi_seticon(od, md5, length);
+ } else {
+
+ purple_debug_info("oscar",
+ "Uploading icon to icon server\n");
+ aim_bart_upload(od, purple_imgstore_get_data(img),
+ purple_imgstore_get_size(img));
purple_imgstore_unref(img);
}
}
-
- g_free(md5);
- } break;
+ } else if (flags == 0x81) {
+ PurpleAccount *account = purple_connection_get_account(od->gc);
+ PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account);
+ if (img == NULL)
+ aim_ssi_delicon(od);
+ else {
+ aim_ssi_seticon(od, md5, length);
+ purple_imgstore_unref(img);
+ }
+ }
- case 0x0002: {
- /* We just set an available message? */
- /* there is a second length that is just for the message */
- char *msg = byte_stream_getstr(bs, byte_stream_get16(bs));
- g_free(msg);
- } break;
+ g_free(md5);
}
return 0;
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/flap_connection.c
--- a/libpurple/protocols/oscar/flap_connection.c Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/flap_connection.c Mon Nov 01 05:26:01 2010 +0000
@@ -435,11 +435,16 @@
aim_rxcallback_t userfunc;
conn = data;
+ /* Explicitly added for debugging #5927. Don't re-order this, only
+ * consider removing it.
+ */
+ purple_debug_info("oscar", "Destroying FLAP connection %p\n", conn);
+
od = conn->od;
account = purple_connection_get_account(od->gc);
- purple_debug_info("oscar", "Destroying oscar connection of "
- "type 0x%04hx. Disconnect reason is %d\n",
+ purple_debug_info("oscar", "Destroying oscar connection (%p) of "
+ "type 0x%04hx. Disconnect reason is %d\n", conn,
conn->type, conn->disconnect_reason);
od->oscar_connections = g_slist_remove(od->oscar_connections, conn);
@@ -575,7 +580,7 @@
return;
purple_debug_info("oscar", "Scheduling destruction of FLAP "
- "connection of type 0x%04hx\n", conn->type);
+ "connection %p of type 0x%04hx\n", conn, conn->type);
conn->disconnect_reason = reason;
g_free(conn->error_message);
conn->error_message = g_strdup(error_message);
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/libaim.c
--- a/libpurple/protocols/oscar/libaim.c Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/libaim.c Mon Nov 01 05:26:01 2010 +0000
@@ -143,7 +143,7 @@
static void
init_plugin(PurplePlugin *plugin)
{
- oscar_init(plugin);
+ oscar_init(plugin, FALSE);
}
PURPLE_INIT_PLUGIN(aim, init_plugin, info);
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/libicq.c
--- a/libpurple/protocols/oscar/libicq.c Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/libicq.c Mon Nov 01 05:26:01 2010 +0000
@@ -155,7 +155,7 @@
{
PurpleAccountOption *option;
- oscar_init(plugin);
+ oscar_init(plugin, TRUE);
option = purple_account_option_string_new(_("Encoding"), "encoding", OSCAR_DEFAULT_CUSTOM_ENCODING);
prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/oscar.c
--- a/libpurple/protocols/oscar/oscar.c Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/oscar.c Mon Nov 01 05:26:01 2010 +0000
@@ -612,6 +612,18 @@
aim_ssi_setpresence(od, presence | AIM_SSI_PRESENCE_FLAG_NORECENTBUDDIES);
}
+static const gchar *login_servers[] = {
+ AIM_DEFAULT_LOGIN_SERVER,
+ AIM_DEFAULT_SSL_LOGIN_SERVER,
+ ICQ_DEFAULT_LOGIN_SERVER,
+ ICQ_DEFAULT_SSL_LOGIN_SERVER,
+};
+
+static const gchar *get_login_server(gboolean is_icq, gboolean use_ssl)
+{
+ return login_servers[is_icq*2 + use_ssl];
+}
+
void
oscar_login(PurpleAccount *account)
{
@@ -725,7 +737,7 @@
return;
}
- server = purple_account_get_string(account, "server", OSCAR_DEFAULT_SSL_LOGIN_SERVER);
+ server = purple_account_get_string(account, "server", get_login_server(od->icq, TRUE));
/*
* If the account's server is what the oscar prpl has offered as
@@ -734,27 +746,27 @@
* do what we know is best for them and change the setting out
* from under them to the SSL login server.
*/
- if (!strcmp(server, OSCAR_DEFAULT_LOGIN_SERVER) || !strcmp(server, OSCAR_OLD_LOGIN_SERVER)) {
+ if (!strcmp(server, get_login_server(od->icq, FALSE))) {
purple_debug_info("oscar", "Account uses SSL, so changing server to default SSL server\n");
- purple_account_set_string(account, "server", OSCAR_DEFAULT_SSL_LOGIN_SERVER);
- server = OSCAR_DEFAULT_SSL_LOGIN_SERVER;
+ purple_account_set_string(account, "server", get_login_server(od->icq, TRUE));
+ server = get_login_server(od->icq, TRUE);
}
newconn->gsc = purple_ssl_connect(account, server,
purple_account_get_int(account, "port", OSCAR_DEFAULT_LOGIN_PORT),
ssl_connection_established_cb, ssl_connection_error_cb, newconn);
} else {
- server = purple_account_get_string(account, "server", OSCAR_DEFAULT_LOGIN_SERVER);
+ server = purple_account_get_string(account, "server", get_login_server(od->icq, FALSE));
/*
* See the comment above. We do the reverse here. If they don't want
* SSL but their server is set to OSCAR_DEFAULT_SSL_LOGIN_SERVER,
* set it back to the default.
*/
- if (!strcmp(server, OSCAR_DEFAULT_SSL_LOGIN_SERVER)) {
+ if (!strcmp(server, get_login_server(od->icq, TRUE))) {
purple_debug_info("oscar", "Account does not use SSL, so changing server back to non-SSL\n");
- purple_account_set_string(account, "server", OSCAR_DEFAULT_LOGIN_SERVER);
- server = OSCAR_DEFAULT_LOGIN_SERVER;
+ purple_account_set_string(account, "server", get_login_server(od->icq, FALSE));
+ server = get_login_server(od->icq, FALSE);
}
newconn->connect_data = purple_proxy_connect(NULL, account, server,
@@ -969,8 +981,8 @@
conn->cookie = g_memdup(cookie, cookielen);
/*
- * tls_certname is only set (and must be set if we get this far) if
- * SSL is enabled.
+ * Use SSL only if the server provided us with a tls_certname. The server might not specify a tls_certname even if we requested to use TLS,
+ * and that is something we should be prepared to.
*/
if (tls_certname)
{
@@ -1292,6 +1304,8 @@
{
PurpleConnection *gc;
PurpleAccount *account;
+ PurpleBuddy *buddy = NULL;
+ PurpleStatus *previous_status = NULL;
struct buddyinfo *bi;
time_t time_idle = 0, signon = 0;
int type = 0;
@@ -1301,8 +1315,6 @@
aim_userinfo_t *info;
char *message = NULL;
char *itmsurl = NULL;
- char *tmp;
- const char *tmp2;
gc = od->gc;
account = purple_connection_get_account(gc);
@@ -1314,6 +1326,11 @@
g_return_val_if_fail(info != NULL, 1);
g_return_val_if_fail(info->bn != NULL, 1);
+ buddy = purple_find_buddy(account, info->bn);
+ if (buddy) {
+ previous_status = purple_presence_get_active_status(purple_buddy_get_presence(buddy));
+ }
+
/*
* If this is an AIM buddy and their name has formatting, set their
* server alias.
@@ -1377,40 +1394,33 @@
status_id = OSCAR_STATUS_ID_AVAILABLE;
}
- if (info->flags & AIM_FLAG_WIRELESS)
- {
+ if (info->flags & AIM_FLAG_WIRELESS) {
purple_prpl_got_user_status(account, info->bn, OSCAR_STATUS_ID_MOBILE, NULL);
} else {
purple_prpl_got_user_status_deactive(account, info->bn, OSCAR_STATUS_ID_MOBILE);
}
- if (info->status != NULL && info->status[0] != '\0') {
- /* Grab the available message */
- message = oscar_encoding_to_utf8(info->status_encoding, info->status, info->status_len);
+ /* Empty status means we should unset the status message. NULL status means we should keep it from the previous active status.
+ * Same goes for itmsurl (which is available only for the "available" status).
+ */
+ if (info->status != NULL) {
+ message = (info->status_len > 0) ? oscar_encoding_to_utf8(info->status_encoding, info->status, info->status_len) : NULL;
+ } else if (previous_status != NULL) {
+ message = g_strdup(purple_status_get_attr_string(previous_status, "message"));
}
- tmp2 = tmp = (message ? purple_markup_escape_text(message, -1) : NULL);
-
if (strcmp(status_id, OSCAR_STATUS_ID_AVAILABLE) == 0) {
- if (info->itmsurl_encoding && info->itmsurl && info->itmsurl_len) {
- /* Grab the iTunes Music Store URL */
- itmsurl = oscar_encoding_to_utf8(info->itmsurl_encoding, info->itmsurl, info->itmsurl_len);
+ if (info->itmsurl != NULL) {
+ itmsurl = (info->itmsurl_len > 0) ? oscar_encoding_to_utf8(info->itmsurl_encoding, info->itmsurl, info->itmsurl_len) : NULL;
+ } else if (previous_status != NULL && purple_status_is_available(previous_status)) {
+ itmsurl = g_strdup(purple_status_get_attr_string(previous_status, "itmsurl"));
}
-
- if (tmp2 == NULL && itmsurl != NULL)
- /*
- * The message can't be NULL because NULL means it was the
- * last attribute, so the itmsurl would get ignored below.
- */
- tmp2 = "";
-
- purple_prpl_got_user_status(account, info->bn, status_id,
- "message", tmp2, "itmsurl", itmsurl, NULL);
+ purple_debug_info("oscar", "Activating status '%s' for buddy %s, message = '%s', itmsurl = '%s'\n", status_id, info->bn, message, itmsurl);
+ purple_prpl_got_user_status(account, info->bn, status_id, "message", message, "itmsurl", itmsurl, NULL);
+ } else {
+ purple_debug_info("oscar", "Activating status '%s' for buddy %s, message = '%s'\n", status_id, info->bn, message);
+ purple_prpl_got_user_status(account, info->bn, status_id, "message", message, NULL);
}
- else
- purple_prpl_got_user_status(account, info->bn, status_id, "message", tmp2, NULL);
-
- g_free(tmp);
g_free(message);
g_free(itmsurl);
@@ -4569,7 +4579,7 @@
od = purple_connection_get_protocol_data(gc);
userinfo = aim_locate_finduserinfo(od, purple_buddy_get_name(b));
- oscar_user_info_append_status(gc, user_info, b, userinfo, /* strip_html_tags */ TRUE);
+ oscar_user_info_append_status(gc, user_info, b, userinfo, /* use_html_status */ FALSE);
if (full)
oscar_user_info_append_extra_info(gc, user_info, b, userinfo);
@@ -4607,13 +4617,9 @@
message = purple_status_get_attr_string(status, "message");
if (message != NULL)
{
- gchar *tmp1, *tmp2;
- tmp1 = purple_markup_strip_html(message);
- purple_util_chrreplace(tmp1, '\n', ' ');
- tmp2 = g_markup_escape_text(tmp1, -1);
- ret = oscar_util_format_string(tmp2, purple_account_get_username(account));
- g_free(tmp1);
- g_free(tmp2);
+ gchar *tmp = oscar_util_format_string(message, purple_account_get_username(account));
+ ret = purple_markup_escape_text(tmp, -1);
+ g_free(tmp);
}
else if (purple_status_is_available(status))
{
@@ -5666,13 +5672,13 @@
return FALSE;
}
-void oscar_init(PurplePlugin *plugin)
+void oscar_init(PurplePlugin *plugin, gboolean is_icq)
{
PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin);
PurpleAccountOption *option;
static gboolean init = FALSE;
- option = purple_account_option_string_new(_("Server"), "server", OSCAR_DEFAULT_LOGIN_SERVER);
+ option = purple_account_option_string_new(_("Server"), "server", get_login_server(is_icq, FALSE));
prpl_info->protocol_options = g_list_append(prpl_info->protocol_options, option);
option = purple_account_option_int_new(_("Port"), "port", OSCAR_DEFAULT_LOGIN_PORT);
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/oscar.h
--- a/libpurple/protocols/oscar/oscar.h Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/oscar.h Mon Nov 01 05:26:01 2010 +0000
@@ -1304,7 +1304,7 @@
/* userinfo.c - displaying user information */
-void oscar_user_info_append_status(PurpleConnection *gc, PurpleNotifyUserInfo *user_info, PurpleBuddy *b, aim_userinfo_t *userinfo, gboolean strip_html_tags);
+void oscar_user_info_append_status(PurpleConnection *gc, PurpleNotifyUserInfo *user_info, PurpleBuddy *b, aim_userinfo_t *userinfo, gboolean use_html_status);
void oscar_user_info_append_extra_info(PurpleConnection *gc, PurpleNotifyUserInfo *user_info, PurpleBuddy *b, aim_userinfo_t *userinfo);
void oscar_user_info_display_error(OscarData *od, guint16 error_reason, char *buddy);
void oscar_user_info_display_icq(OscarData *od, struct aim_icq_info *info);
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/oscarcommon.h
--- a/libpurple/protocols/oscar/oscarcommon.h Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/oscarcommon.h Mon Nov 01 05:26:01 2010 +0000
@@ -32,10 +32,13 @@
#include "notify.h"
#include "status.h"
-#define OSCAR_DEFAULT_LOGIN_SERVER "login.messaging.aol.com"
+#define AIM_DEFAULT_LOGIN_SERVER "login.oscar.aol.com"
+#define AIM_DEFAULT_SSL_LOGIN_SERVER "slogin.oscar.aol.com"
+#define ICQ_DEFAULT_LOGIN_SERVER "login.icq.com"
+#define ICQ_DEFAULT_SSL_LOGIN_SERVER "slogin.icq.com"
+
#define OSCAR_DEFAULT_LOGIN_PORT 5190
-#define OSCAR_DEFAULT_SSL_LOGIN_SERVER "slogin.oscar.aol.com"
-#define OSCAR_OLD_LOGIN_SERVER "login.oscar.aol.com"
+
#ifndef _WIN32
#define OSCAR_DEFAULT_CUSTOM_ENCODING "ISO-8859-1"
#else
@@ -96,4 +99,4 @@
gboolean oscar_offline_message(const PurpleBuddy *buddy);
void oscar_format_username(PurpleConnection *gc, const char *nick);
GList *oscar_actions(PurplePlugin *plugin, gpointer context);
-void oscar_init(PurplePlugin *plugin);
+void oscar_init(PurplePlugin *plugin, gboolean is_icq);
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/peer.c
--- a/libpurple/protocols/oscar/peer.c Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/peer.c Mon Nov 01 05:26:01 2010 +0000
@@ -879,7 +879,9 @@
}
conn->verified_connect_data = purple_proxy_connect(NULL, account,
- (conn->proxyip != NULL) ? conn->proxyip : PEER_PROXY_SERVER,
+ (conn->proxyip != NULL)
+ ? conn->proxyip
+ : (conn->od->icq ? ICQ_PEER_PROXY_SERVER : AIM_PEER_PROXY_SERVER),
PEER_PROXY_PORT,
peer_proxy_connection_established_cb, conn);
if (conn->verified_connect_data != NULL)
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/peer.h
--- a/libpurple/protocols/oscar/peer.h Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/peer.h Mon Nov 01 05:26:01 2010 +0000
@@ -58,7 +58,8 @@
/*
* For peer proxying
*/
-#define PEER_PROXY_SERVER "ars.oscar.aol.com"
+#define AIM_PEER_PROXY_SERVER "ars.oscar.aol.com"
+#define ICQ_PEER_PROXY_SERVER "ars.icq.com"
#define PEER_PROXY_PORT 5190 /* The port we should always connect to */
#define PEER_PROXY_PACKET_VERSION 0x044a
diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/userinfo.c
--- a/libpurple/protocols/oscar/userinfo.c Sat Oct 30 17:45:46 2010 +0000
+++ b/libpurple/protocols/oscar/userinfo.c Mon Nov 01 05:26:01 2010 +0000
@@ -173,17 +173,17 @@
* @param user_info A PurpleNotifyUserInfo object to which status information will be added
* @param b The PurpleBuddy whose status is desired. This or the aim_userinfo_t (or both) must be passed to oscar_user_info_append_status().
* @param userinfo The aim_userinfo_t of the buddy whose status is desired. This or the PurpleBuddy (or both) must be passed to oscar_user_info_append_status().
- * @param strip_html_tags If strip_html_tags is TRUE, tags embedded in the status message will be stripped, returning a non-formatted string. The string will still be HTML escaped.
+ * @param use_html_status If TRUE, prefer HTML-formatted away message over plaintext available message.
*/
void
-oscar_user_info_append_status(PurpleConnection *gc, PurpleNotifyUserInfo *user_info, PurpleBuddy *b, aim_userinfo_t *userinfo, gboolean strip_html_tags)
+oscar_user_info_append_status(PurpleConnection *gc, PurpleNotifyUserInfo *user_info, PurpleBuddy *b, aim_userinfo_t *userinfo, gboolean use_html_status)
{
PurpleAccount *account = purple_connection_get_account(gc);
OscarData *od;
PurplePresence *presence = NULL;
PurpleStatus *status = NULL;
gchar *message = NULL, *itmsurl = NULL, *tmp;
- gboolean is_away;
+ gboolean escaping_needed = TRUE;
od = purple_connection_get_protocol_data(gc);
@@ -205,9 +205,10 @@
the "message" attribute of the status contains only the plaintext
message. */
if (userinfo) {
- if ((userinfo->flags & AIM_FLAG_AWAY) && userinfo->away_len > 0 && userinfo->away != NULL && userinfo->away_encoding != NULL) {
+ if ((userinfo->flags & AIM_FLAG_AWAY) && use_html_status && userinfo->away_len > 0 && userinfo->away != NULL && userinfo->away_encoding != NULL) {
/* Away message */
message = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len);
+ escaping_needed = FALSE;
} else {
/*
* Available message or non-HTML away message (because that's
@@ -227,44 +228,26 @@
itmsurl = g_strdup(purple_status_get_attr_string(status, "itmsurl"));
}
- is_away = ((status && !purple_status_is_available(status)) ||
- (userinfo && (userinfo->flags & AIM_FLAG_AWAY)));
-
- if (strip_html_tags) {
- /* Away messages are HTML, but available messages were originally plain text.
- * We therefore need to strip away messages but not available messages if we're asked to remove HTML tags.
- */
- /*
- * It seems like the above comment no longer applies. All messages need
- * to be escaped.
- */
- if (message) {
- gchar *tmp2;
- tmp = purple_markup_strip_html(message);
- g_free(message);
- tmp2 = g_markup_escape_text(tmp, -1);
- g_free(tmp);
- message = tmp2;
- }
-
- } else {
- if (itmsurl) {
- tmp = g_strdup_printf("%s",
- itmsurl, message);
+ if (message) {
+ tmp = oscar_util_format_string(message, purple_account_get_username(account));
+ g_free(message);
+ message = tmp;
+ if (escaping_needed) {
+ tmp = purple_markup_escape_text(message, -1);
g_free(message);
message = tmp;
}
}
- g_free(itmsurl);
- if (message) {
- tmp = oscar_util_format_string(message, purple_account_get_username(account));
+ if (use_html_status && itmsurl) {
+ tmp = g_strdup_printf("%s", itmsurl, message);
g_free(message);
message = tmp;
}
if (b) {
if (purple_presence_is_online(presence)) {
+ gboolean is_away = ((status && !purple_status_is_available(status)) || (userinfo && (userinfo->flags & AIM_FLAG_AWAY)));
if (oscar_util_valid_name_icq(purple_buddy_get_name(b)) || is_away || !message || !(*message)) {
/* Append the status name for online ICQ statuses, away AIM statuses, and for all buddies with no message.
* If the status name and the message are the same, only show one. */
@@ -299,12 +282,22 @@
if (presence) {
const char *mood;
- const char *description;
+ const char *comment;
+ char *description;
status = purple_presence_get_status(presence, "mood");
- mood = purple_status_get_attr_string(status, PURPLE_MOOD_NAME);
- description = icq_get_custom_icon_description(mood);
- if (description && *description)
- purple_notify_user_info_add_pair(user_info, _("Mood"), _(description));
+ mood = icq_get_custom_icon_description(purple_status_get_attr_string(status, PURPLE_MOOD_NAME));
+ if (mood) {
+ comment = purple_status_get_attr_string(status, PURPLE_MOOD_COMMENT);
+ if (comment) {
+ char *escaped_comment = purple_markup_escape_text(comment, -1);
+ description = g_strdup_printf("%s (%s)", _(mood), escaped_comment);
+ g_free(escaped_comment);
+ } else {
+ description = g_strdup(_(mood));
+ }
+ purple_notify_user_info_add_pair(user_info, _("Mood"), description);
+ g_free(description);
+ }
}
purple_notify_user_info_add_pair(user_info, _("Status"), message);
@@ -458,7 +451,7 @@
}
oscar_user_info_convert_and_add_hyperlink(account, od, user_info, _("Personal Web Page"), info->email, "");
if (buddy != NULL)
- oscar_user_info_append_status(gc, user_info, buddy, /* aim_userinfo_t */ NULL, /* strip_html_tags */ FALSE);
+ oscar_user_info_append_status(gc, user_info, buddy, /* aim_userinfo_t */ NULL, /* use_html_status */ TRUE);
oscar_user_info_convert_and_add(account, od, user_info, _("Additional Information"), info->info);
purple_notify_user_info_add_section_break(user_info);
@@ -504,7 +497,7 @@
PurpleNotifyUserInfo *user_info = purple_notify_user_info_new();
gchar *tmp = NULL, *info_utf8 = NULL, *base_profile_url = NULL;
- oscar_user_info_append_status(gc, user_info, /* PurpleBuddy */ NULL, userinfo, /* strip_html_tags */ FALSE);
+ oscar_user_info_append_status(gc, user_info, /* PurpleBuddy */ NULL, userinfo, /* use_html_status */ TRUE);
if ((userinfo->present & AIM_USERINFO_PRESENT_IDLE) && userinfo->idletime != 0) {
tmp = purple_str_seconds_to_string(userinfo->idletime*60);
diff -r 555862567b38 -r 734c5c08b5dd pidgin/gtkaccount.c
--- a/pidgin/gtkaccount.c Sat Oct 30 17:45:46 2010 +0000
+++ b/pidgin/gtkaccount.c Mon Nov 01 05:26:01 2010 +0000
@@ -2468,6 +2468,7 @@
GtkWidget *alert;
GdkPixbuf *prpl_icon;
struct auth_request *aa;
+ gboolean have_valid_alias = alias && *alias;
gc = purple_account_get_connection(account);
if (message != NULL && *message == '\0')
@@ -2475,9 +2476,9 @@
buffer = g_strdup_printf(_("%s%s%s%s wants to add you (%s) to his or her buddy list%s%s"),
remote_user,
- (alias != NULL ? " (" : ""),
- (alias != NULL ? alias : ""),
- (alias != NULL ? ")" : ""),
+ (have_valid_alias ? " (" : ""),
+ (have_valid_alias ? alias : ""),
+ (have_valid_alias ? ")" : ""),
(id != NULL
? id
: (purple_connection_get_display_name(gc) != NULL
diff -r 555862567b38 -r 734c5c08b5dd pidgin/gtkdialogs.c
--- a/pidgin/gtkdialogs.c Sat Oct 30 17:45:46 2010 +0000
+++ b/pidgin/gtkdialogs.c Mon Nov 01 05:26:01 2010 +0000
@@ -151,7 +151,7 @@
{N_("Bengali"), "bn", "Israt Jahan", "israt@ankur.org.bd"},
{N_("Bengali"), "bn", "Jamil Ahmed", "jamil@bengalinux.org"},
{N_("Bengali"), "bn", "Samia Nimatullah", "mailsamia2001@yahoo.com"},
- {N_("Bengali-India"), "bn", "Runa Bhattacharjee", "runab@fedoraproject.org"},
+ {N_("Bengali-India"), "bn_IN", "Runa Bhattacharjee", "runab@fedoraproject.org"},
{N_("Bosnian"), "bs", "Lejla Hadzialic", "lejlah@gmail.com"},
{N_("Catalan"), "ca", "Josep Puigdemont", "josep.puigdemont@gmail.com"},
{N_("Valencian-Catalan"), "ca@valencia", "Toni Hermoso", "toniher@softcatala.org"},
diff -r 555862567b38 -r 734c5c08b5dd pidgin/minidialog.c
--- a/pidgin/minidialog.c Sat Oct 30 17:45:46 2010 +0000
+++ b/pidgin/minidialog.c Mon Nov 01 05:26:01 2010 +0000
@@ -332,6 +332,7 @@
break;
case PROP_CUSTOM_ICON:
gtk_image_set_from_pixbuf(priv->icon, g_value_get_object(value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
diff -r 555862567b38 -r 734c5c08b5dd pidgin/plugins/win32/winprefs/winprefs.c
--- a/pidgin/plugins/win32/winprefs/winprefs.c Sat Oct 30 17:45:46 2010 +0000
+++ b/pidgin/plugins/win32/winprefs/winprefs.c Mon Nov 01 05:26:01 2010 +0000
@@ -267,16 +267,15 @@
}
static GtkWidget* get_config_frame(PurplePlugin *plugin) {
- GtkWidget *ret, *vbox, *button, *language_sel;
+ GtkWidget *ret;
+ GtkWidget *vbox;
+ GtkWidget *button;
char *run_key_val;
char *tmp;
ret = gtk_vbox_new(FALSE, 18);
gtk_container_set_border_width(GTK_CONTAINER(ret), 12);
- vbox = pidgin_make_frame(ret, _("Language"));
- language_sel = gtk_option_menu_new();
-
/* Autostart */
vbox = pidgin_make_frame(ret, _("Startup"));
tmp = g_strdup_printf(_("_Start %s on Windows startup"), PIDGIN_NAME);
diff -r 555862567b38 -r 734c5c08b5dd pidgin/win32/nsis/pidgin-installer.nsi
--- a/pidgin/win32/nsis/pidgin-installer.nsi Sat Oct 30 17:45:46 2010 +0000
+++ b/pidgin/win32/nsis/pidgin-installer.nsi Mon Nov 01 05:26:01 2010 +0000
@@ -549,6 +549,7 @@
Delete "$INSTDIR\ca-certs\ValiCert_Class_2_VA.crt"
Delete "$INSTDIR\ca-certs\VeriSign_Class3_Extended_Validation_CA.pem"
Delete "$INSTDIR\ca-certs\Verisign_Class3_Primary_CA.pem"
+ Delete "$INSTDIR\ca-certs\VeriSign_Class_3_Public_Primary_Certification_Authority_-_G2.pem"
Delete "$INSTDIR\ca-certs\VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem"
Delete "$INSTDIR\ca-certs\VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5_2.pem"
Delete "$INSTDIR\ca-certs\VeriSign_International_Server_Class_3_CA.pem"
diff -r 555862567b38 -r 734c5c08b5dd po/ChangeLog
--- a/po/ChangeLog Sat Oct 30 17:45:46 2010 +0000
+++ b/po/ChangeLog Mon Nov 01 05:26:01 2010 +0000
@@ -1,6 +1,9 @@
Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
+version 2.7.6
+
version 2.7.5
+ * German translation updated (Björn Voigt, Jochen Kemnade)
* Romanian translation updated (Mişu Moldovan)
version 2.7.4
diff -r 555862567b38 -r 734c5c08b5dd po/de.po
--- a/po/de.po Sat Oct 30 17:45:46 2010 +0000
+++ b/po/de.po Mon Nov 01 05:26:01 2010 +0000
@@ -11,8 +11,8 @@
msgstr ""
"Project-Id-Version: de\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-21 00:11-0400\n"
-"PO-Revision-Date: 2010-10-20 21:23+0200\n"
+"POT-Creation-Date: 2010-10-28 19:57+0200\n"
+"PO-Revision-Date: 2010-10-28 19:50+0200\n"
"Last-Translator: Björn Voigt \n"
"Language-Team: German \n"
"Language: de\n"
@@ -7843,10 +7843,10 @@
msgstr "Privatsphärenoptionen setzen..."
msgid "Show Visible List"
-msgstr "Zeige Liste „Sichtbar“"
+msgstr "Zeige Liste „Immer sichtbar“"
msgid "Show Invisible List"
-msgstr "Zeige Liste „Unsichtbar“"
+msgstr "Zeige Liste „Immer unsichtbar“"
#. AIM actions
msgid "Confirm Account"
@@ -8115,13 +8115,13 @@
"einem Rechtsklick anklicken und „%s“ auswählen."
msgid "Visible List"
-msgstr "Liste Sichtbar"
+msgstr "Liste \"Immer sichtbar\""
msgid "These buddies will see your status when you switch to \"Invisible\""
-msgstr "Diese Buddys werden Ihren Status sehen wenn Sie „unsichtbar“ sind"
+msgstr "Diese Buddys werden Ihren Status sehen, wenn Sie „unsichtbar“ sind"
msgid "Invisible List"
-msgstr "Liste Unsichtbar"
+msgstr "Liste \"Immer unsichtbar\""
msgid "These buddies will always see you as offline"
msgstr "Für diese Buddys werden Sie immer als offline angezeigt"
@@ -12448,6 +12448,9 @@
msgid "Lao"
msgstr "Laotisch"
+msgid "Maithili"
+msgstr "Maithili"
+
msgid "Macedonian"
msgstr "Makedonisch"
diff -r 555862567b38 -r 734c5c08b5dd po/ro.po
--- a/po/ro.po Sat Oct 30 17:45:46 2010 +0000
+++ b/po/ro.po Mon Nov 01 05:26:01 2010 +0000
@@ -15363,7 +15363,7 @@
"from http://pidgin.im/download/windows/ ."
msgstr ""
"Eroare la descărcarea GTK+ ($R2).$\\rAceastă componentă este necesară pentru "
-"funcționarea Pidgin. Dacă reîncercarea eșuează, încercați varianta „Offline "
+"funcţionarea Pidgin. Dacă reîncercarea eşuează, încercaţi varianta „Offline "
"Installer” de la http://pidgin.im/download/windows/ ."
#. $R2 will display the URL that the Debug Symbols failed to download from
@@ -15372,7 +15372,7 @@
"use the 'Offline Installer' from http://pidgin.im/download/windows/ ."
msgstr ""
"Eroare la instalarea simbolurilor de depanare ($R2).$\\rDacă reîncercarea "
-"eșuează, încercați varianta 'Offline Installer' from http://pidgin.im/"
+"eşuează, încercaţi varianta 'Offline Installer' from http://pidgin.im/"
"download/windows/ ."
#. $R3 will display the URL that the Dictionary failed to download from
@@ -15383,7 +15383,7 @@
"%20Pidgin#manual_win32_spellcheck_installation"
msgstr ""
"Eroare la instalarea verificării ortografice ($R3).$\\rDacă reîncercarea "
-"eșuează, găsiți instrucțiuni de instalare manuală la: http://developer."
+"eşuează, găsiţi instrucţiuni de instalare manuală la: http://developer."
"pidgin.im/wiki/Installing%20Pidgin#manual_win32_spellcheck_installation"
#. Installer Subsection Text
@@ -15408,7 +15408,7 @@
"Runtime?"
msgstr ""
"Pidgin necesită o instalare GTK+ compatibilă (care nu pare să fie prezentă "
-"deja).$\\rSigur doriți să omiteți instalarea bibliotecilor GTK+?"
+"deja).$\\rSigur doriţi să omiteţi instalarea bibliotecilor GTK+?"
#. Installer Subsection Text
msgid "Shortcuts"
diff -r 555862567b38 -r 734c5c08b5dd po/stats.pl
--- a/po/stats.pl Sat Oct 30 17:45:46 2010 +0000
+++ b/po/stats.pl Mon Nov 01 05:26:01 2010 +0000
@@ -27,6 +27,7 @@
$lang{'ca@valencia'} = "Catalan (Valencian)";
$lang{'be@latin'} = "Belarusian (Latin)";
+$lang{bn_IN} = "Bengali-India";
$lang{en_AU} = "English (Australian)";
$lang{en_CA} = "English (Canadian)";
$lang{en_GB} = "English (British)";
diff -r 555862567b38 -r 734c5c08b5dd share/ca-certs/Makefile.am
--- a/share/ca-certs/Makefile.am Sat Oct 30 17:45:46 2010 +0000
+++ b/share/ca-certs/Makefile.am Mon Nov 01 05:26:01 2010 +0000
@@ -15,6 +15,7 @@
ValiCert_Class_2_VA.pem \
Verisign_RSA_Secure_Server_CA.pem \
Verisign_Class3_Primary_CA.pem \
+ VeriSign_Class_3_Public_Primary_Certification_Authority_-_G2.pem \
VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem \
VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5_2.pem
diff -r 555862567b38 -r 734c5c08b5dd share/ca-certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G2.pem
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/ca-certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G2.pem Mon Nov 01 05:26:01 2010 +0000
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
+pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
+13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
+U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
+F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
+oJ2daZH9
+-----END CERTIFICATE-----