# HG changeset patch # User Sadrul Habib Chowdhury # Date 1206161763 0 # Node ID a8a26b4d84584912815c2bc48ecd324a5d335c8f # Parent 128f6cb57829454df7c4475fd3fd0b48356d4848# Parent 06f195789c3ef430163d795e58f947f609dc4f7d propagate from branch 'im.pidgin.pidgin' (head 86f8b3e5d789c691f873f515a92fe8e111dcab6e) to branch 'im.pidgin.pidgin.vv.ticket34' (head 49c87e1875454a84f007720923563cf82dc8862b) diff -r 128f6cb57829 -r a8a26b4d8458 COPYRIGHT --- a/COPYRIGHT Sat Mar 22 04:51:58 2008 +0000 +++ b/COPYRIGHT Sat Mar 22 04:56:03 2008 +0000 @@ -325,6 +325,7 @@ Jason Roth Jean-Francois Roy Peter Ruibal +Michael Ruprecht Sam S. Thanumalayan S. Tomasz Sałaciński diff -r 128f6cb57829 -r a8a26b4d8458 ChangeLog --- a/ChangeLog Sat Mar 22 04:51:58 2008 +0000 +++ b/ChangeLog Sat Mar 22 04:56:03 2008 +0000 @@ -16,6 +16,8 @@ * Fix a crash when starting if you have a Zephyr account * Increase XMPP ping timeout to 120 seconds, to prevent poor network connections from timing out unnecessarily. + * Don't crash on XMPP forms with empty default values. + * Fix issues with CHAP authentication for SOCKS5 proxies. Pidgin: * Remove a workaround for older versions gstreamer that was causing diff -r 128f6cb57829 -r a8a26b4d8458 configure.ac --- a/configure.ac Sat Mar 22 04:51:58 2008 +0000 +++ b/configure.ac Sat Mar 22 04:56:03 2008 +0000 @@ -166,7 +166,7 @@ dnl Checks for header files. AC_HEADER_STDC AC_HEADER_SYS_WAIT -AC_CHECK_HEADERS_ONCE(arpa/nameser_compat.h fcntl.h sys/time.h unistd.h locale.h signal.h stdint.h regex.h) +AC_CHECK_HEADERS(arpa/nameser_compat.h fcntl.h sys/time.h unistd.h locale.h signal.h stdint.h regex.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST @@ -1093,7 +1093,7 @@ AC_ARG_WITH(zephyr, [AC_HELP_STRING([--with-zephyr=PREFIX], [compile Zephyr plugin against external libzephyr])], zephyr="$withval", zephyr="no") AM_CONDITIONAL(EXTERNAL_LIBZEPHYR, test "x$zephyr" != "xno") -AC_CHECK_HEADERS_ONCE(sys/utsname.h) +AC_CHECK_HEADERS(sys/utsname.h) AC_CHECK_FUNC(uname) AC_ARG_ENABLE(fortify, [AC_HELP_STRING([--disable-fortify], [compile without FORTIFY_SOURCE support])], , enable_fortify=yes) @@ -1421,7 +1421,7 @@ oldCPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $PERL_CFLAGS" - AC_CHECK_HEADERS_ONCE(EXTERN.h) + AC_CHECK_HEADERS(EXTERN.h) AC_CHECK_HEADERS(perl.h, [], enable_perl=no, [#if HAVE_EXTERN_H # include @@ -2143,13 +2143,13 @@ AC_MSG_RESULT(no) AC_CHECK_FUNCS(gethostid lrand48) AC_CHECK_FUNCS(memcpy memmove random strchr strerror vprintf) -AC_CHECK_HEADERS_ONCE(malloc.h paths.h sgtty.h stdarg.h sys/cdefs.h) -AC_CHECK_HEADERS_ONCE(sys/file.h sys/filio.h sys/ioctl.h sys/msgbuf.h) -AC_CHECK_HEADERS_ONCE(sys/select.h sys/uio.h sys/utsname.h sys/wait.h) -AC_CHECK_HEADERS_ONCE(termios.h) +AC_CHECK_HEADERS(malloc.h paths.h sgtty.h stdarg.h sys/cdefs.h) +AC_CHECK_HEADERS(sys/file.h sys/filio.h sys/ioctl.h sys/msgbuf.h) +AC_CHECK_HEADERS(sys/select.h sys/uio.h sys/utsname.h sys/wait.h) +AC_CHECK_HEADERS(termios.h) # sys/sysctl.h on OpenBSD 4.2 requires sys/param.h -AC_CHECK_HEADERS_ONCE(sys/param.h) +AC_CHECK_HEADERS(sys/param.h) AC_CHECK_HEADERS(sys/sysctl.h, [], [], [[ #ifdef HAVE_PARAM_H @@ -2157,7 +2157,7 @@ #endif ]]) -AC_CHECK_HEADERS_ONCE(sys/socket.h) +AC_CHECK_HEADERS(sys/socket.h) AC_VAR_TIMEZONE_EXTERNALS AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff, diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/account.c --- a/libpurple/account.c Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/account.c Sat Mar 22 04:56:03 2008 +0000 @@ -751,6 +751,7 @@ description = g_strdup(""); current_error = g_new0(PurpleConnectionErrorInfo, 1); + PURPLE_DBUS_REGISTER_POINTER(current_error, PurpleConnectionErrorInfo); current_error->type = type; current_error->description = description; @@ -1009,6 +1010,7 @@ purple_log_free(account->system_log); priv = PURPLE_ACCOUNT_GET_PRIVATE(account); + PURPLE_DBUS_UNREGISTER_POINTER(priv->current_error); g_free(priv->current_error); g_free(priv); @@ -2365,8 +2367,7 @@ } static void -set_current_error(PurpleAccount *account, - PurpleConnectionErrorInfo *new_err) +set_current_error(PurpleAccount *account, PurpleConnectionErrorInfo *new_err) { PurpleAccountPrivate *priv; PurpleConnectionErrorInfo *old_err; @@ -2389,6 +2390,7 @@ if(old_err) g_free(old_err->description); + PURPLE_DBUS_UNREGISTER_POINTER(old_err); g_free(old_err); } @@ -2406,6 +2408,7 @@ g_return_if_fail(account != NULL); err = g_new0(PurpleConnectionErrorInfo, 1); + PURPLE_DBUS_REGISTER_POINTER(err, PurpleConnectionErrorInfo); err->type = type; err->description = g_strdup(description); diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/nat-pmp.c --- a/libpurple/nat-pmp.c Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/nat-pmp.c Sat Mar 22 04:56:03 2008 +0000 @@ -182,7 +182,7 @@ if (!(buf = malloc(needed))) { - purple_debug_warning("nat-pmp", "malloc\n"); + purple_debug_warning("nat-pmp", "Failed to malloc %i\n", needed); return NULL; } @@ -232,7 +232,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\n"); + purple_debug_info("nat-pmp", "Found a default gateway\n"); found = TRUE; break; } @@ -455,7 +455,8 @@ { success = (resp->opcode == (req.opcode + 128)); if (!success) - purple_debug_info("nat-pmp", "The opcode for the response from the NAT device does not match the request opcode!\n"); + purple_debug_info("nat-pmp", "The opcode for the response from the NAT device (%i) does not match the request opcode (%i + 128 = %i)!\n", + resp->opcode, req.opcode, req.opcode + 128); } #ifdef PMP_DEBUG @@ -492,7 +493,8 @@ success = purple_pmp_create_map(((type == PURPLE_PMP_TYPE_UDP) ? PMP_MAP_OPCODE_UDP : PMP_MAP_OPCODE_TCP), privateport, 0, 0); if (!success) - purple_debug_warning("nat-pmp", "Failed to properly destroy mapping for %d!\n", privateport); + purple_debug_warning("nat-pmp", "Failed to properly destroy mapping for %s port %d!\n", + ((type == PURPLE_PMP_TYPE_UDP) ? "UDP" : "TCP"), privateport); return success; } diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/plugins/test.pl --- a/libpurple/plugins/test.pl Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/plugins/test.pl Sat Mar 22 04:56:03 2008 +0000 @@ -1,6 +1,4 @@ -#!/usr/bin/env perl -w - -use Gaim; +use Purple; %PLUGIN_INFO = ( perl_api_version => 2, @@ -8,51 +6,37 @@ version => '1.0', summary => 'Provides as a test base for the perl plugin.', description => 'Provides as a test base for the perl plugin.', - author => 'Christian Hammond ', + author => 'Etan Reisner ', url => 'http://pidgin.im', - load => "plugin_load", - unload => "plugin_unload" + load => "plugin_load" ); -sub account_away_cb { - Gaim::debug_info("perl test plugin", "In account_away_cb\n"); - - my ($account, $state, $message, $data) = @_; - - Gaim::debug_info("perl test plugin", "Account " . - $account->get_username() . " went away.\n"); - Gaim::debug_info("perl test plugin", $data . "\n"); -} - sub plugin_init { return %PLUGIN_INFO; } +sub account_status_cb { + my ($account, $old, $new, $data) = @_; + + Purple::Debug::info("perl test plugin", "In account_status_cb\n"); + + Purple::Debug::info("perl test plugin", "Account " . + $account->get_username() . " changed status.\n"); + Purple::Debug::info("perl test plugin", $data . "\n"); +} + sub plugin_load { - Gaim::debug_info("perl test plugin", "plugin_load\n"); my $plugin = shift; - Gaim::debug_info("perl test plugin", "Listing accounts.\n"); - foreach $account (Gaim::accounts()) { - Gaim::debug_info("perl test plugin", $account->get_username() . "\n"); + Purple::Debug::info("perl test plugin", "plugin_load\n"); + + Purple::Debug::info("perl test plugin", "Listing accounts.\n"); + foreach $account (Purple::Accounts::get_all()) { + Purple::Debug::info("perl test plugin", $account->get_username() . "\n"); } - Gaim::debug_info("perl test plugin", "Listing buddy list.\n"); - foreach $group (Gaim::BuddyList::groups()) { - Gaim::debug_info("perl test plugin", - $group->get_name() . ":\n"); - - foreach $buddy ($group->buddies()) { - Gaim::debug_info("perl test plugin", - " " . $buddy->get_name() . "\n"); - } - } - - Gaim::signal_connect(Gaim::Accounts::handle, "account-away", - $plugin, \&account_away_cb, "test"); + Purple::Signal::connect(Purple::Accounts::get_handle(), + "account-status-changed", $plugin, + \&account_status_cb, "test"); } - -sub plugin_unload { - my $plugin = shift; -} diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/protocols/jabber/Makefile.mingw --- a/libpurple/protocols/jabber/Makefile.mingw Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/protocols/jabber/Makefile.mingw Sat Mar 22 04:56:03 2008 +0000 @@ -83,7 +83,7 @@ -lpurple ifeq ($(CYRUS_SASL), 1) -CYRUS_SASL_TOP := $(WIN32_DEV_TOP)/cyrus-sasl-2.1.22 +CYRUS_SASL_TOP := $(WIN32_DEV_TOP)/cyrus-sasl-2.1.22-daa1 INCLUDE_PATHS += -I$(CYRUS_SASL_TOP)/include LIB_PATHS += -L$(CYRUS_SASL_TOP)/lib LIBS += -llibsasl diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/protocols/jabber/auth.c --- a/libpurple/protocols/jabber/auth.c Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/protocols/jabber/auth.c Sat Mar 22 04:56:03 2008 +0000 @@ -490,6 +490,12 @@ { char *mech_name = xmlnode_get_data(mechnode); #ifdef HAVE_CYRUS_SASL + /* Skip the GSSAPI mechanism unless it's enabled for this account */ + if (mech_name && !strcmp(mech_name, "GSSAPI") && + !purple_account_get_bool(js->gc->account, "auth_gssapi", TRUE)) { + continue; + } + g_string_append(js->sasl_mechs, mech_name); g_string_append_c(js->sasl_mechs, ' '); #else diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/protocols/jabber/libxmpp.c --- a/libpurple/protocols/jabber/libxmpp.c Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/protocols/jabber/libxmpp.c Sat Mar 22 04:56:03 2008 +0000 @@ -224,6 +224,14 @@ prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); +#ifdef HAVE_CYRUS_SASL + option = purple_account_option_bool_new( + _("Use GSSAPI (Kerberos v5) for authentication"), + "auth_gssapi", TRUE); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, + option); +#endif + option = purple_account_option_int_new(_("Connect port"), "port", 5222); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/protocols/jabber/xdata.c --- a/libpurple/protocols/jabber/xdata.c Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/protocols/jabber/xdata.c Sat Mar 22 04:56:03 2008 +0000 @@ -285,7 +285,10 @@ for(valuenode = xmlnode_get_child(fn, "value"); valuenode; valuenode = xmlnode_get_next_twin(valuenode)) { - selected = g_list_prepend(selected, xmlnode_get_data(valuenode)); + char *data = xmlnode_get_data(valuenode); + if (data != NULL) { + selected = g_list_prepend(selected, data); + } } for(optnode = xmlnode_get_child(fn, "option"); optnode; diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/protocols/msn/command.c --- a/libpurple/protocols/msn/command.c Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/protocols/msn/command.c Sat Mar 22 04:56:03 2008 +0000 @@ -58,6 +58,7 @@ (!strcmp(str,"FQY")) || (!strcmp(str,"UUN")) || (!strcmp(str,"UUX")) || + (!strcmp(str,"IPG")) || (is_num(str))){ return TRUE; } diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/protocols/msn/msn.c --- a/libpurple/protocols/msn/msn.c Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/protocols/msn/msn.c Sat Mar 22 04:56:03 2008 +0000 @@ -236,7 +236,9 @@ MsnSession *session; MsnCmdProc *cmdproc; MsnPage *page; - char *payload; + MsnUser *user; + char *payload = NULL; + const char *mobile_number = NULL; size_t payload_len; session = gc->proto_data; @@ -247,7 +249,19 @@ payload = msn_page_gen_payload(page, &payload_len); - trans = msn_transaction_new(cmdproc, "PGD", "%s 1 %d", who, payload_len); + if ((user = msn_userlist_find_user(session->userlist, who)) && + (mobile_number = msn_user_get_mobile_phone(user)) && + mobile_number[0] == '+') { + /* if msn_user_get_mobile_phone() has a + in front, it's a number + that from the buddy's contact card */ + trans = msn_transaction_new(cmdproc, "PGD", "tel:%s 1 %d", + mobile_number, payload_len); + } else { + /* otherwise we send to whatever phone number the buddy registered + with msn */ + trans = msn_transaction_new(cmdproc, "PGD", "%s 1 %d", who, + payload_len); + } msn_transaction_set_payload(trans, payload, payload_len); g_free(payload); diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/protocols/msn/notification.c --- a/libpurple/protocols/msn/notification.c Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/protocols/msn/notification.c Sat Mar 22 04:56:03 2008 +0000 @@ -461,7 +461,7 @@ passport = msg->remote_user; content_type = msn_message_get_content_type(msg); - purple_debug_info("MSNP14","type:%d\n",content_type); + purple_debug_info("MSNP14", "type:%s\n", content_type); if(!strcmp(content_type,"text/plain")){ const char *value; const char *body; @@ -1071,9 +1071,61 @@ static void ipg_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, size_t len) { -#if 0 + PurpleConnection *gc; + MsnUserList *userlist; + char *who = NULL, *text = NULL; + xmlnode *payloadNode, *from, *textNode; + purple_debug_misc("msn", "Incoming Page: {%s}\n", payload); -#endif + + userlist = cmdproc->session->userlist; + gc = purple_account_get_connection(cmdproc->session->account); + + /* payload looks like this: + + + + + + + + + + + + Message was here + + + + */ + + if (!(payloadNode = xmlnode_from_str(payload, len)) || + !(from = xmlnode_get_child(payloadNode, "FROM")) || + !(textNode = xmlnode_get_child(payloadNode, "MSG/BODY/TEXT"))) + return; + + who = g_strdup(xmlnode_get_attrib(from, "name")); + if (!who) return; + + text = xmlnode_get_data(textNode); + + /* Match number to user's mobile number, FROM is a phone number if the + other side page you using your phone number */ + if(!strncmp(who, "tel:+", 5)) { + MsnUser *user = + msn_userlist_find_user_with_mobile_phone(userlist, who + 4); + + if(user && user->passport) { + g_free(who); + who = g_strdup(user->passport); + } + } + + serv_got_im(gc, who, text, 0, time(NULL)); + + g_free(text); + g_free(who); + xmlnode_free(payloadNode); } static void diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/protocols/msn/switchboard.c --- a/libpurple/protocols/msn/switchboard.c Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/protocols/msn/switchboard.c Sat Mar 22 04:56:03 2008 +0000 @@ -1194,9 +1194,10 @@ swboard = trans->data; - purple_debug_info("msn", "xfr_error %i for %s: trans %x, command %s, reason %i\n", - error, (swboard->im_user ? swboard->im_user : "(null)"), trans, - (trans->command ? trans->command : "(null)"), reason); + purple_debug_info("msn", + "xfr_error %i for %s: trans %p, command %s, reason %i\n", + error, (swboard->im_user ? swboard->im_user : "(null)"), trans, + (trans->command ? trans->command : "(null)"), reason); swboard_error_helper(swboard, reason, swboard->im_user); } diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/protocols/msn/transaction.h --- a/libpurple/protocols/msn/transaction.h Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/protocols/msn/transaction.h Sat Mar 22 04:56:03 2008 +0000 @@ -61,9 +61,8 @@ this transaction. */ }; -MsnTransaction *msn_transaction_new(MsnCmdProc *cmdproc, - const char *command, - const char *format, ...); +MsnTransaction *msn_transaction_new(MsnCmdProc *cmdproc, const char *command, + const char *format, ...) G_GNUC_PRINTF(3, 4); void msn_transaction_destroy(MsnTransaction *trans); char *msn_transaction_to_string(MsnTransaction *trans); diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/protocols/msn/userlist.c --- a/libpurple/protocols/msn/userlist.c Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/protocols/msn/userlist.c Sat Mar 22 04:56:03 2008 +0000 @@ -500,11 +500,10 @@ { GList *l; - g_return_val_if_fail(uid != NULL, NULL); + g_return_val_if_fail(uid != NULL, NULL); - for (l = userlist->users; l != NULL; l = l->next) - { - MsnUser *user = (MsnUser *)l->data; + for (l = userlist->users; l != NULL; l = l->next) { + MsnUser *user = (MsnUser *)l->data; if (user->uid == NULL) { continue; @@ -518,6 +517,28 @@ return NULL; } +MsnUser * +msn_userlist_find_user_with_mobile_phone(MsnUserList *userlist, const char *number) +{ + GList *l; + + g_return_val_if_fail(number != NULL, NULL); + + for (l = userlist->users; l != NULL; l = l->next) { + MsnUser *user = (MsnUser *)l->data; + + if (user->phone.mobile == NULL) { + continue; + } + + if (!g_strcasecmp(number, user->phone.mobile)) { + return user; + } + } + + return NULL; +} + void msn_userlist_add_group(MsnUserList *userlist, MsnGroup *group) { diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/protocols/msn/userlist.h --- a/libpurple/protocols/msn/userlist.h Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/protocols/msn/userlist.h Sat Mar 22 04:56:03 2008 +0000 @@ -80,6 +80,7 @@ MsnUser * msn_userlist_find_add_user(MsnUserList *userlist, const char *passport, const char *userName); MsnUser * msn_userlist_find_user_with_id(MsnUserList *userlist, const char *uid); +MsnUser * msn_userlist_find_user_with_mobile_phone(MsnUserList *userlist, const char *number); void msn_userlist_add_group(MsnUserList *userlist, MsnGroup *group); void msn_userlist_remove_group(MsnUserList *userlist, MsnGroup *group); diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/protocols/myspace/markup.c --- a/libpurple/protocols/myspace/markup.c Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/protocols/myspace/markup.c Sat Mar 22 04:56:03 2008 +0000 @@ -181,7 +181,7 @@ { guint dpi; - dpi = purple_account_get_int(session->account, "port", MSIM_DEFAULT_DPI); + dpi = purple_account_get_int(session->account, "dpi", MSIM_DEFAULT_DPI); return (guint)msim_round((POINTS_PER_INCH * 1. / dpi) * height); @@ -195,7 +195,7 @@ { guint dpi; - dpi = purple_account_get_int(session->account, "port", MSIM_DEFAULT_DPI); + dpi = purple_account_get_int(session->account, "dpi", MSIM_DEFAULT_DPI); return (guint)msim_round((dpi * 1. / POINTS_PER_INCH) * point); } diff -r 128f6cb57829 -r a8a26b4d8458 libpurple/proxy.c --- a/libpurple/proxy.c Sat Mar 22 04:51:58 2008 +0000 +++ b/libpurple/proxy.c Sat Mar 22 04:56:03 2008 +0000 @@ -1356,11 +1356,17 @@ purple_debug(PURPLE_DEBUG_INFO, "socks5 proxy", "Got CHAP response.\n"); if (connect_data->read_buffer == NULL) { - connect_data->read_buf_len = 20; + /* A big enough butfer to read the message header (2 bytes) and at least one complete attribute and value (1 + 1 + 255). */ + connect_data->read_buf_len = 259; connect_data->read_buffer = g_malloc(connect_data->read_buf_len); connect_data->read_len = 0; } + if (connect_data->read_buf_len - connect_data->read_len == 0) { + /*If the stuff below is right, this shouldn't be possible. */ + purple_debug_error("socks5 proxy", "This is about to suck because the read buffer is full (shouldn't happen).\n"); + } + len = read(connect_data->fd, connect_data->read_buffer + connect_data->read_len, connect_data->read_buf_len - connect_data->read_len); @@ -1400,13 +1406,31 @@ cmdbuf++; for (currentav = 0; currentav < navas; currentav++) { - if (connect_data->read_len - (cmdbuf - connect_data->read_buffer) < 2) + + len = connect_data->read_len - (cmdbuf - connect_data->read_buffer); + /* We don't have enough data to even know how long the next attribute is, + * or we don't have the full length of the next attribute. */ + if (len < 2 || len < (cmdbuf[1] + 2)) { + /* Clear out the attributes that have been read - decrease the attribute count */ + connect_data->read_buffer[1] = navas - currentav; + /* Move the unprocessed data into the first attribute position */ + memmove((connect_data->read_buffer + 2), cmdbuf, len); + /* Decrease the read count accordingly */ + connect_data->read_len = len + 2; return; - if (connect_data->read_len - (cmdbuf - connect_data->read_buffer) < cmdbuf[1]) - return; + } + buf = cmdbuf + 2; + + if (cmdbuf[1] == 0) { + purple_debug_error("socks5 proxy", "Attribute %x Value length of 0; ignoring.\n", cmdbuf[0]); + cmdbuf = buf; + continue; + } + switch (cmdbuf[0]) { case 0x00: + purple_debug_info("socks5 proxy", "Received STATUS of %x\n", buf[0]); /* Did auth work? */ if (buf[0] == 0x00) { purple_input_remove(connect_data->inpa); @@ -1415,7 +1439,6 @@ connect_data->read_buffer = NULL; /* Success */ s5_sendconnect(connect_data, connect_data->fd); - return; } else { /* Failure */ purple_debug_warning("proxy", @@ -1423,10 +1446,10 @@ "failed. Disconnecting..."); purple_proxy_connect_data_disconnect(connect_data, _("Authentication failed")); - return; } - break; + return; case 0x03: + purple_debug_info("socks5 proxy", "Received CHALLENGE\n"); /* Server wants our credentials */ connect_data->write_buf_len = 16 + 4; @@ -1451,8 +1474,9 @@ PURPLE_INPUT_WRITE, proxy_do_write, connect_data); proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); - break; + return; case 0x11: + purple_debug_info("socks5 proxy", "Received ALGORIGTHMS of %x\n", buf[0]); /* Server wants to select an algorithm */ if (buf[0] != 0x85) { /* Only currently support HMAC-MD5 */ @@ -1467,12 +1491,19 @@ return; } break; + default: + purple_debug_info("socks5 proxy", "Received unused command %x, length=%d\n", cmdbuf[0], cmdbuf[1]); } cmdbuf = buf + cmdbuf[1]; } + /* Fell through. We ran out of CHAP events to process, but haven't * succeeded or failed authentication - there may be more to come. * If this is the case, come straight back here. */ + + /* We've processed all the available attributes, so get ready for a whole new message */ + g_free(connect_data->read_buffer); + connect_data->read_buffer = NULL; } static void diff -r 128f6cb57829 -r a8a26b4d8458 pidgin/gtkblist.c --- a/pidgin/gtkblist.c Sat Mar 22 04:51:58 2008 +0000 +++ b/pidgin/gtkblist.c Sat Mar 22 04:56:03 2008 +0000 @@ -3354,24 +3354,34 @@ purple_notify_user_info_destroy(user_info); } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { + gint count; PurpleGroup *group = (PurpleGroup*)node; PurpleNotifyUserInfo *user_info; user_info = purple_notify_user_info_new(); - /* Total buddies (from online accounts) in group */ - tmp = g_strdup_printf("%d", - purple_blist_get_group_size(group, FALSE)); - purple_notify_user_info_add_pair(user_info, _("Total Buddies"), - tmp); - g_free(tmp); - - /* Online buddies in group */ - tmp = g_strdup_printf("%d", - purple_blist_get_group_online_count(group)); - purple_notify_user_info_add_pair(user_info, _("Online Buddies"), - tmp); - g_free(tmp); + count = purple_blist_get_group_online_count(group); + + if (count != 0) { + /* Online buddies in group */ + tmp = g_strdup_printf("%d", count); + purple_notify_user_info_add_pair(user_info, + _("Online Buddies"), + tmp); + g_free(tmp); + } + count = 0; + + count = purple_blist_get_group_size(group, FALSE); + if (count != 0) { + /* Total buddies (from online accounts) in group */ + tmp = g_strdup_printf("%d", count); + purple_notify_user_info_add_pair(user_info, + _("Total Buddies"), + tmp); + g_free(tmp); + } + count = 0; tmp = purple_notify_user_info_get_text_with_newline(user_info, "\n"); g_string_append(str, tmp); @@ -6356,43 +6366,25 @@ vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox), vbox); - label = gtk_label_new( - _("Please enter the screen name of the person you would like " - "to add to your buddy list. You may optionally enter an alias, " - "or nickname, for the buddy. The alias will be displayed in " - "place of the screen name whenever possible.\n")); - - gtk_widget_set_size_request(GTK_WIDGET(label), 400, -1); - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + g_signal_connect(G_OBJECT(data->window), "destroy", + G_CALLBACK(destroy_add_buddy_dialog_cb), data); + + label = gtk_label_new(_("Add a buddy.\n")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); - hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); - gtk_container_add(GTK_CONTAINER(vbox), hbox); - - g_signal_connect(G_OBJECT(data->window), "destroy", - G_CALLBACK(destroy_add_buddy_dialog_cb), data); - table = gtk_table_new(4, 2, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 5); gtk_table_set_col_spacings(GTK_TABLE(table), 5); gtk_container_set_border_width(GTK_CONTAINER(table), 0); gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); - /* Set up stuff for the account box */ - label = gtk_label_new_with_mnemonic(_("A_ccount:")); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); - data->account_box = pidgin_account_option_menu_new(account, FALSE, G_CALLBACK(add_buddy_select_account_cb), NULL, data); - gtk_table_attach_defaults(GTK_TABLE(table), data->account_box, 1, 2, 0, 1); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), data->account_box); - pidgin_set_accessible_label (data->account_box, label); - /* End of account box */ - - label = gtk_label_new_with_mnemonic(_("_Screen name:")); + gtk_table_attach_defaults(GTK_TABLE(table), data->account_box, 0, 2, 0, 1); + + label = gtk_label_new_with_mnemonic(_("Buddy's _screen name:")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); @@ -6404,23 +6396,23 @@ gtk_entry_set_text(GTK_ENTRY(data->entry), username); else gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), - GTK_RESPONSE_OK, FALSE); + GTK_RESPONSE_OK, FALSE); gtk_entry_set_activates_default (GTK_ENTRY(data->entry), TRUE); gtk_label_set_mnemonic_widget(GTK_LABEL(label), data->entry); pidgin_set_accessible_label (data->entry, label); g_signal_connect(G_OBJECT(data->entry), "changed", - G_CALLBACK(pidgin_set_sensitive_if_input), - data->window); - - label = gtk_label_new_with_mnemonic(_("A_lias:")); + G_CALLBACK(pidgin_set_sensitive_if_input), + data->window); + + label = gtk_label_new_with_mnemonic(_("(Optional) A_lias:")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3); data->entry_for_alias = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(table), - data->entry_for_alias, 1, 2, 2, 3); + data->entry_for_alias, 1, 2, 2, 3); if (alias != NULL) gtk_entry_set_text(GTK_ENTRY(data->entry_for_alias), alias); @@ -6432,7 +6424,7 @@ gtk_label_set_mnemonic_widget(GTK_LABEL(label), data->entry_for_alias); pidgin_set_accessible_label (data->entry_for_alias, label); - label = gtk_label_new_with_mnemonic(_("_Group:")); + label = gtk_label_new_with_mnemonic(_("Add buddy to _group:")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 3, 4); diff -r 128f6cb57829 -r a8a26b4d8458 pidgin/gtkconvwin.h diff -r 128f6cb57829 -r a8a26b4d8458 pidgin/pidginstock.c diff -r 128f6cb57829 -r a8a26b4d8458 pidgin/pidginstock.h diff -r 128f6cb57829 -r a8a26b4d8458 pidgin/pixmaps/protocols/16/jabber.png Binary file pidgin/pixmaps/protocols/16/jabber.png has changed diff -r 128f6cb57829 -r a8a26b4d8458 pidgin/pixmaps/protocols/16/scalable/jabber.svg --- a/pidgin/pixmaps/protocols/16/scalable/jabber.svg Sat Mar 22 04:51:58 2008 +0000 +++ b/pidgin/pixmaps/protocols/16/scalable/jabber.svg Sat Mar 22 04:56:03 2008 +0000 @@ -9,127 +9,293 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16px" - height="16px" - id="svg4239" + width="16" + height="16" + id="svg3302" sodipodi:version="0.32" - inkscape:version="0.44.1" - sodipodi:docbase="/home/hbons/GUI/Tango/Gaim Refresh/protocols/16/scalable" - sodipodi:docname="jabber.svg" - inkscape:export-filename="/home/hbons/GUI/Tango/Gaim Refresh/protocols/16/jabber.png" + inkscape:version="0.45.1" + sodipodi:docbase="/home/hbons/Desktop" + sodipodi:docname="xmpp16.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/hbons/Desktop/xmpp16.png" inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> + inkscape:export-ydpi="90" + version="1.0"> + id="defs3304"> + style="stop-color:#d9541e;stop-opacity:1" /> + + + + + style="stop-color:#0f97cb;stop-opacity:1" /> + + + + - + inkscape:collect="always" + id="linearGradient3417"> + + + + inkscape:collect="always" + id="linearGradient3409"> + id="stop3411" /> + id="stop3413" /> + inkscape:collect="always" + id="linearGradient3354"> + id="stop3356" /> + id="stop3358" /> + inkscape:collect="always" + id="linearGradient3344"> + id="stop3346" /> + id="stop3348" /> + + + + + + + + + gradientTransform="matrix(0.3406067,0,0,0.3395702,-1.7782608e-2,-0.3494314)" /> + + + + + + + - + + + - + + + + gradientTransform="matrix(-0.3406067,0,0,0.3698986,13.017783,-0.6058341)" + x1="18.734463" + y1="21.519651" + x2="15.642859" + y2="23.876795" /> + + inkscape:window-y="43" + width="16px" + height="16px" /> + id="metadata3307"> @@ -166,26 +333,64 @@ inkscape:label="Layer 1" inkscape:groupmode="layer"> + style="fill:#0a6fa2;fill-opacity:1;stroke:#02396a;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1" + d="M 15.5,2.5000001 L 10.454106,2.5327029 C 10.454106,4.6682012 8.4691474,12.778185 3.1541859,14.341671 C 9.641668,14.341671 15.5,7.1171759 15.5,2.5000001 z " + id="path2228" + sodipodi:nodetypes="cccc" /> + + + + + style="opacity:0.4;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 14.328472,3.5879657 C 13.402352,7.5116178 11.050991,9.896006 7.9932059,11.841578 C 9.4009194,9.3771388 10.613796,8.3204791 10.426187,3.617359 L 14.328472,3.5879657 z " + id="path3390" + sodipodi:nodetypes="cccc" /> + + + style="fill:#a0ce67;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 3.7118046,3.055775 L 6.0094407,3.1813771 C 5.9820727,4.0797021 5.9514165,10.838935 12,13.996284 C 5.4281278,13.125156 3.6296973,5.1178307 3.7118046,3.055775 z " + id="rect3326" + sodipodi:nodetypes="cccc" /> + style="opacity:0.4;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1" + d="M 1.6738483,3.5879662 C 2.5999681,7.5116186 4.9513289,9.8960072 8.0091145,11.841579 C 6.6014005,9.3771399 5.3885239,8.3204801 5.5761331,3.6173594 L 1.6738483,3.5879662 z " + id="path2240" + sodipodi:nodetypes="cccc" /> + diff -r 128f6cb57829 -r a8a26b4d8458 pidgin/pixmaps/protocols/22/jabber.png Binary file pidgin/pixmaps/protocols/22/jabber.png has changed diff -r 128f6cb57829 -r a8a26b4d8458 pidgin/pixmaps/protocols/22/scalable/jabber.svg --- a/pidgin/pixmaps/protocols/22/scalable/jabber.svg Sat Mar 22 04:51:58 2008 +0000 +++ b/pidgin/pixmaps/protocols/22/scalable/jabber.svg Sat Mar 22 04:56:03 2008 +0000 @@ -2,49 +2,194 @@ + inkscape:export-ydpi="90" + version="1.0"> + id="defs3304"> + + + + + + + + + + + + + + + + + + + + + + id="linearGradient3334"> + id="stop3336" /> + id="stop3338" /> - + + + + + xlink:href="#linearGradient3417" + id="linearGradient3423" + x1="31.736355" + y1="20.841261" + x2="35.292381" + y2="22.255474" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.4696897,0,0,0.4693264,1.1291183,0.5593256)" /> + + + + + + + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:window-width="1434" + inkscape:window-height="823" + inkscape:window-x="3" + inkscape:window-y="43" + inkscape:snap-bbox="true" + inkscape:snap-nodes="false" + objecttolerance="9" + gridtolerance="12"> + + + id="metadata3307"> @@ -77,28 +231,88 @@ - - + inkscape:groupmode="layer"> + style="opacity:0.29670332;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3871)" + id="path3425" + sodipodi:cx="22.273863" + sodipodi:cy="36.736797" + sodipodi:rx="13.283506" + sodipodi:ry="6.2124381" + d="M 35.557369,36.736797 A 13.283506,6.2124381 0 1 1 8.9903564,36.736797 A 13.283506,6.2124381 0 1 1 35.557369,36.736797 z" + transform="matrix(0.5199608,0,0,0.1850564,0.5826339,12.558808)" /> + + + + + + + + + + + + + + diff -r 128f6cb57829 -r a8a26b4d8458 pidgin/pixmaps/protocols/48/jabber.png Binary file pidgin/pixmaps/protocols/48/jabber.png has changed diff -r 128f6cb57829 -r a8a26b4d8458 pidgin/pixmaps/protocols/48/scalable/jabber.svg --- a/pidgin/pixmaps/protocols/48/scalable/jabber.svg Sat Mar 22 04:51:58 2008 +0000 +++ b/pidgin/pixmaps/protocols/48/scalable/jabber.svg Sat Mar 22 04:56:03 2008 +0000 @@ -7,44 +7,159 @@ xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="48" - height="48" - id="svg2" + width="48px" + height="48px" + id="svg3302" sodipodi:version="0.32" - inkscape:version="0.43" - version="1.0" - sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/protocols/48" - sodipodi:docname="jabber.svg" - inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/protocols/48/jabber.png" + inkscape:version="0.45.1" + sodipodi:docbase="/home/hbons/Desktop" + sodipodi:docname="xmpp.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/hbons/Desktop/xmpp.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> + id="defs3304"> + + + + + + + + + + + + + + + + + + + + + id="linearGradient3334"> + id="stop3336" /> + id="stop3338" /> - + + + + + + + + + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:window-width="1434" + inkscape:window-height="823" + inkscape:window-x="3" + inkscape:window-y="43" /> + id="metadata3307"> @@ -77,27 +191,98 @@ - - + inkscape:groupmode="layer"> + style="opacity:0.2967033;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3871)" + id="path3425" + sodipodi:cx="22.273863" + sodipodi:cy="36.736797" + sodipodi:rx="13.283506" + sodipodi:ry="6.2124381" + d="M 35.557369 36.736797 A 13.283506 6.2124381 0 1 1 8.9903564,36.736797 A 13.283506 6.2124381 0 1 1 35.557369 36.736797 z" + transform="matrix(1.0990312,0,0,0.3942904,-0.4161261,25.323157)" /> + + + + + + + + + + + + + + diff -r 128f6cb57829 -r a8a26b4d8458 pidgin/win32/winpidgin.c --- a/pidgin/win32/winpidgin.c Sat Mar 22 04:51:58 2008 +0000 +++ b/pidgin/win32/winpidgin.c Sat Mar 22 04:56:03 2008 +0000 @@ -498,7 +498,7 @@ return; } - if (!(msg_win = FindWindowEx(HWND_MESSAGE, NULL, TEXT("WinpidginMsgWinCls"), NULL))) { + if (!(msg_win = FindWindowEx(NULL, NULL, TEXT("WinpidginMsgWinCls"), NULL))) { printf("Unable to find an instance of Pidgin to handle protocol message.\n"); return; } diff -r 128f6cb57829 -r a8a26b4d8458 po/de.po --- a/po/de.po Sat Mar 22 04:51:58 2008 +0000 +++ b/po/de.po Sat Mar 22 04:56:03 2008 +0000 @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-03-15 09:48+0100\n" -"PO-Revision-Date: 2008-03-15 09:48+0100\n" +"POT-Creation-Date: 2008-03-21 21:24+0100\n" +"PO-Revision-Date: 2008-03-21 21:23+0100\n" "Last-Translator: Jochen Kemnade \n" "Language-Team: Deutsch \n" "MIME-Version: 1.0\n" @@ -4440,6 +4440,9 @@ msgid "Allow plaintext auth over unencrypted streams" msgstr "Erlaube Klartext-Authentifikation über einen unverschlüsselten Kanal" +msgid "Use GSSAPI (Kerberos v5) for authentication" +msgstr "GSSAPI (Kerberos v5) für Authentifizierung benutzen" + msgid "Connect port" msgstr "Verbindungsport" @@ -9988,9 +9991,6 @@ "auseinandernehmen, wenn Sie auf 'Expandieren' im Kontextmenü des Kontakts " "klicken" -msgid "_Merge" -msgstr "_Zusammenführen" - msgid "Room _List" msgstr "Ra_umliste" @@ -10344,26 +10344,17 @@ msgid "/Buddies/Show/Protocol Icons" msgstr "/Buddys/Anzeigen/Protokoll-Icons" -msgid "" -"Please enter the screen name of the person you would like to add to your " -"buddy list. You may optionally enter an alias, or nickname, for the buddy. " -"The alias will be displayed in place of the screen name whenever possible.\n" -msgstr "" -"Bitte geben Sie den Benutzernamen der Person ein, die Sie zur Buddy-Liste " -"hinzufügen möchten. Sie können optional einen Alias oder Spitzname für den " -"Buddy eingeben. Der Alias wird anstelle des Benutzernamens ausgegeben, wann " -"immer es möglich ist.\n" - -#. Set up stuff for the account box -msgid "A_ccount:" -msgstr "_Konto:" - -#. End of account box -msgid "_Screen name:" -msgstr "_Benutzername:" - -msgid "A_lias:" -msgstr "A_lias:" +msgid "Add a buddy.\n" +msgstr "Einen Buddy hinzufügen.\n" + +msgid "Buddy's _screen name:" +msgstr "_Benutzername des Buddys:" + +msgid "(Optional) A_lias:" +msgstr "(Optionaler) A_lias:" + +msgid "Add buddy to _group:" +msgstr "Buddy zu folgender Gruppe hinzufügen:" msgid "This protocol does not support chat rooms." msgstr "Dieses Protokoll unterstützt keine Chaträume." @@ -10380,6 +10371,9 @@ "Bitte geben Sie einen Alias und geeignete Informationen über den Chat ein, " "den Sie in Ihre Buddy-Liste aufnehmen wollen.\n" +msgid "A_lias:" +msgstr "A_lias:" + msgid "Auto_join when account becomes online." msgstr "Automatisch _beitreten, wenn das Konto online geht."