libpurple 32427:24393ecae82e: Make this plugin a bit more friend...

commits at adium.im commits at adium.im
Tue Feb 12 13:00:26 UTC 2013


details:	http://hg.adium.im/libpurple/rev/24393ecae82e
revision:	32427:24393ecae82e
branch:		release-2.x.y
author:		John Bailey <rekkanoryo at rekkanoryo.org>
date:		Sun Nov 04 12:46:23 2012 -0500

Make this plugin a bit more friendly with Quartz-enabled GTK+ in MacPorts.
Subject: libpurple 32428:d21146f8dd2e: ChangeLog my last two items.  Refs #15327.

details:	http://hg.adium.im/libpurple/rev/d21146f8dd2e
revision:	32428:d21146f8dd2e
branch:		release-2.x.y
author:		John Bailey <rekkanoryo at rekkanoryo.org>
date:		Sun Nov 04 12:49:43 2012 -0500

ChangeLog my last two items.  Refs #15327.
Subject: libpurple 32429:eea4bbe04daa: Remove references to -lgcrypt from configure.ac.  We don't directly use

details:	http://hg.adium.im/libpurple/rev/eea4bbe04daa
revision:	32429:eea4bbe04daa
branch:		release-2.x.y
author:		John Bailey <rekkanoryo at rekkanoryo.org>
date:		Sun Nov 04 14:34:35 2012 -0500

Remove references to -lgcrypt from configure.ac.  We don't directly use
libgcrypt anywhere, and GnuTLS doesn't require us to link directly to it.
Fixes #15329.
Subject: libpurple 32430:32a57c474339: Credit where it's due.  Refs #15329.

details:	http://hg.adium.im/libpurple/rev/32a57c474339
revision:	32430:32a57c474339
branch:		release-2.x.y
author:		John Bailey <rekkanoryo at rekkanoryo.org>
date:		Sun Nov 04 14:39:54 2012 -0500

Credit where it's due.  Refs #15329.
Subject: libpurple 32431:bc7675ad12c5: Etan suggested this change.  It seems not to break anything.  I believe he

details:	http://hg.adium.im/libpurple/rev/bc7675ad12c5
revision:	32431:bc7675ad12c5
branch:		release-2.x.y
author:		John Bailey <rekkanoryo at rekkanoryo.org>
date:		Sun Nov 04 17:54:43 2012 -0500

Etan suggested this change.  It seems not to break anything.  I believe he
also wanted me to remove some other preprocessor junk, but I wasn't brave
enough to go that far.
Subject: libpurple 32432:ed01a53b8afc: These changes were what I needed to be able to build on a Macbook Pro with OS

details:	http://hg.adium.im/libpurple/rev/ed01a53b8afc
revision:	32432:ed01a53b8afc
branch:		release-2.x.y
author:		John Bailey <rekkanoryo at rekkanoryo.org>
date:		Sun Nov 04 17:57:25 2012 -0500

These changes were what I needed to be able to build on a Macbook Pro with OS
X 10.8 and MacPorts installed.  They don't appear to break anything new on a
standard X11-enabled system.
Subject: libpurple 32433:5dd3e2938d7b: Official Yahoo! Messenger clients use a number of User Agent strings when

details:	http://hg.adium.im/libpurple/rev/5dd3e2938d7b
revision:	32433:5dd3e2938d7b
branch:		release-2.x.y
author:		Catalin Salgau <unknown>
date:		Sat Dec 01 14:05:00 2012 -0500

Official Yahoo! Messenger clients use a number of User Agent strings when
making its various HTTP and HTTPS connections to do things such as download
alias data and contact pictures.  Apparently the servers are now enforcing
that connecting clients use the correct User Agent string.  This patch makes
libpurple use the correct User Agent string when doing address book queries,
like getting buddy alias data.  Fixes #15381.
Subject: libpurple 32434:ac796c8900df: Changelog the Yahoo fix and fix some formatting.

details:	http://hg.adium.im/libpurple/rev/ac796c8900df
revision:	32434:ac796c8900df
branch:		release-2.x.y
author:		John Bailey <rekkanoryo at rekkanoryo.org>
date:		Sat Dec 01 14:08:05 2012 -0500

Changelog the Yahoo fix and fix some formatting.
Subject: libpurple 32435:d79e18b1b043: Fix UPNP mapping on some weird routers.  Fixes #15373.

details:	http://hg.adium.im/libpurple/rev/d79e18b1b043
revision:	32435:d79e18b1b043
branch:		release-2.x.y
author:		Ferdinand Stehle <unknown>
date:		Sat Dec 01 14:27:40 2012 -0500

Fix UPNP mapping on some weird routers.  Fixes #15373.
Subject: libpurple 32436:014d46af13c9: Apparently I forgot how to alphabetize.

details:	http://hg.adium.im/libpurple/rev/014d46af13c9
revision:	32436:014d46af13c9
branch:		release-2.x.y
author:		John Bailey <rekkanoryo at rekkanoryo.org>
date:		Sat Dec 01 14:30:14 2012 -0500

Apparently I forgot how to alphabetize.
Subject: libpurple 32437:3780e4cb9738: Print topic setter information at channel join.

details:	http://hg.adium.im/libpurple/rev/3780e4cb9738
revision:	32437:3780e4cb9738
branch:		release-2.x.y
author:		Ethan Blanton <elb at pidgin.im>
date:		Sat Dec 01 14:52:22 2012 -0500

Print topic setter information at channel join.

Fixes #13317
Subject: libpurple 32438:6ec9545a469b: merge

details:	http://hg.adium.im/libpurple/rev/6ec9545a469b
revision:	32438:6ec9545a469b
branch:		release-2.x.y
author:		Ethan Blanton <elb at pidgin.im>
date:		Sat Dec 01 14:53:49 2012 -0500

merge
Subject: libpurple 32439:a91f4d6cb5dc: configure.ac: do not use exit status 0 in case of error

details:	http://hg.adium.im/libpurple/rev/a91f4d6cb5dc
revision:	32439:a91f4d6cb5dc
branch:		release-2.x.y
author:		Michael Fiedler <dev at michael-fiedler.net>
date:		Sat Dec 01 17:14:17 2012 -0500

configure.ac: do not use exit status 0 in case of error
Subject: libpurple 32440:36d51c98dd7b: Ugh, forgot to changelog before pushing.  Refs #15316.

details:	http://hg.adium.im/libpurple/rev/36d51c98dd7b
revision:	32440:36d51c98dd7b
branch:		release-2.x.y
author:		John Bailey <rekkanoryo at rekkanoryo.org>
date:		Sat Dec 01 17:20:25 2012 -0500

Ugh, forgot to changelog before pushing.  Refs #15316.
Subject: libpurple 32441:3d2454150223: Specify the gettext package explicitly for stock items.

details:	http://hg.adium.im/libpurple/rev/3d2454150223
revision:	32441:3d2454150223
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Mon Dec 10 10:33:46 2012 -0500

Specify the gettext package explicitly for stock items.
Subject: libpurple 32442:b31098549396: MXit: Display farewell messages in a different colour to distinguish them from normal messages.

details:	http://hg.adium.im/libpurple/rev/b31098549396
revision:	32442:b31098549396
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Tue Dec 18 14:58:49 2012 +0200

MXit: Display farewell messages in a different colour to distinguish them from normal messages.
Subject: libpurple 32443:4a87c767a037: MXit: Add support for typing notification.

details:	http://hg.adium.im/libpurple/rev/4a87c767a037
revision:	32443:4a87c767a037
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Tue Dec 18 15:27:46 2012 +0200

MXit: Add support for typing notification.
Subject: libpurple 32444:8feb2763abe9: MXit: Add support for the Relationship Status profile attribute.

details:	http://hg.adium.im/libpurple/rev/8feb2763abe9
revision:	32444:8feb2763abe9
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Tue Dec 18 15:53:12 2012 +0200

MXit: Add support for the Relationship Status profile attribute.
Subject: libpurple 32445:3f178b52c209: Fix a crash in upnp code introduced 3 weeks ago.

details:	http://hg.adium.im/libpurple/rev/3f178b52c209
revision:	32445:3f178b52c209
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Wed Dec 26 23:20:03 2012 -0800

Fix a crash in upnp code introduced 3 weeks ago.

baseURL was never initialized to NULL, so this would crash if
xmlRootNode did not contain a "URLBase" child.  The bug was
introduced in d79e18b1b043

Also, shouldn't we be using xmlnode_get_data_unescaped() here?
Subject: libpurple 32446:a53317024f50: Change Tcl plugin parsing to use g_file_get_contents().

details:	http://hg.adium.im/libpurple/rev/a53317024f50
revision:	32446:a53317024f50
branch:		release-2.x.y
author:		Ethan Blanton <elb at pidgin.im>
date:		Tue Jan 01 18:37:34 2013 -0500

Change Tcl plugin parsing to use g_file_get_contents().

The old code is bizarre and broken in several ways.  It used fgets in
a loop, and had a file size race between a stat and read.

Thanks to Andrew Shadura for finding this bug and pointing it out.
Subject: libpurple 32447:415f20253062: Fix tcl signals-test savedstatus-changed.  Fixes #15443

details:	http://hg.adium.im/libpurple/rev/415f20253062
revision:	32447:415f20253062
branch:		release-2.x.y
author:		Ethan Blanton <elb at pidgin.im>
date:		Tue Jan 01 18:52:35 2013 -0500

Fix tcl signals-test savedstatus-changed.  Fixes #15443
Subject: libpurple 32448:246527e54546: Rename "packages" makefile target to "sign-packages"

details:	http://hg.adium.im/libpurple/rev/246527e54546
revision:	32448:246527e54546
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Sat Jan 05 20:56:59 2013 -0800

Rename "packages" makefile target to "sign-packages"

This seems more accurate to me.
Subject: libpurple 32449:cb37773e35a3: sign-packages Makefile target depends on dist

details:	http://hg.adium.im/libpurple/rev/cb37773e35a3
revision:	32449:cb37773e35a3
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Sat Jan 05 21:03:33 2013 -0800

sign-packages Makefile target depends on dist
Subject: libpurple 32450:c459263362de: Fix "make dist"

details:	http://hg.adium.im/libpurple/rev/c459263362de
revision:	32450:c459263362de
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Sat Jan 05 21:58:34 2013 -0800

Fix "make dist"

Been a while since we ran this, I guess :-P
Subject: libpurple 32451:ef3d115642d7: Fix purple_stringref_new()

details:	http://hg.adium.im/libpurple/rev/ef3d115642d7
revision:	32451:ef3d115642d7
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Sun Jan 13 13:53:57 2013 -0600

Fix purple_stringref_new()

It was losing the last character of the input string.  This was
happening because g_strlcpy() takes the length of the buffer and we
were passing it strlen(value), which would not include the NUL.

This was breaking reading old logs.
Subject: libpurple 32452:4dafaadf7d98: Fix a variable set but unused warning

details:	http://hg.adium.im/libpurple/rev/4dafaadf7d98
revision:	32452:4dafaadf7d98
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Sun Jan 13 13:54:21 2013 -0600

Fix a variable set but unused warning
Subject: libpurple 32453:ddb6a095d2e5: Whitespace fixes

details:	http://hg.adium.im/libpurple/rev/ddb6a095d2e5
revision:	32453:ddb6a095d2e5
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Sun Jan 13 13:55:15 2013 -0600

Whitespace fixes
Subject: libpurple 32454:8ab5ed149286: Cleanup the time_t handling in log.c

details:	http://hg.adium.im/libpurple/rev/8ab5ed149286
revision:	32454:8ab5ed149286
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Sun Jan 13 13:59:18 2013 -0600

Cleanup the time_t handling in log.c
Subject: libpurple 32455:c5bf67fcaad0: MXit: Remove all reference to Hidden Number since it's no longer supported.

details:	http://hg.adium.im/libpurple/rev/c5bf67fcaad0
revision:	32455:c5bf67fcaad0
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Wed Jan 16 10:23:27 2013 +0200

MXit: Remove all reference to Hidden Number since it's no longer supported.
Subject: libpurple 32456:720af20cbad3: MXit: Ignore new invites to join a GroupChat if you're already joined or still have a pending invite.

details:	http://hg.adium.im/libpurple/rev/720af20cbad3
revision:	32456:720af20cbad3
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Wed Jan 16 10:32:33 2013 +0200

MXit: Ignore new invites to join a GroupChat if you're already joined or still have a pending invite.
Subject: libpurple 32457:a3aac6ba27ad: MXit: We need to implement a "chat_info_defaults" in the prpl.

details:	http://hg.adium.im/libpurple/rev/a3aac6ba27ad
revision:	32457:a3aac6ba27ad
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Wed Jan 16 10:49:12 2013 +0200

MXit: We need to implement a "chat_info_defaults" in the prpl.

This removes the error "GLib: g_hash_table_lookup: assertion `hash_table != NULL' failed" from the log
when creating a groupchat.
Subject: libpurple 32458:03bb2e5cb1d0: MXit: The buddy's name was not centered vertically in the buddy-list if they did not have a status-message or mood set.

details:	http://hg.adium.im/libpurple/rev/03bb2e5cb1d0
revision:	32458:03bb2e5cb1d0
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Wed Jan 16 11:03:44 2013 +0200

MXit: The buddy's name was not centered vertically in the buddy-list if they did not have a status-message or mood set.

If Buddy Details is enabled, and the contact has no status-message or mood set,
mxit_status_text would returns an empty string rather than NULL.
This causes Pidgin to display an empty status message, and therfore shift
the buddy's name up slightly making it look uncentered.
Subject: libpurple 32459:658b4037b8f6: MXit: Rather use g_memdup() here than allocating a buffer and copying the data ourselves.

details:	http://hg.adium.im/libpurple/rev/658b4037b8f6
revision:	32459:658b4037b8f6
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Wed Jan 16 11:18:50 2013 +0200

MXit: Rather use g_memdup() here than allocating a buffer and copying the data ourselves.
Subject: libpurple 32460:18f065e935eb: MXit: A copy of the data needs to be made here before handing it over to purple_imgstore_add_with_id().

details:	http://hg.adium.im/libpurple/rev/18f065e935eb
revision:	32460:18f065e935eb
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Wed Jan 16 11:38:38 2013 +0200

MXit: A copy of the data needs to be made here before handing it over to purple_imgstore_add_with_id().
Otherwise the imgstore will refer to an offset in the network receive buffer
which will be overwritten sometime later.
Subject: libpurple 32461:554bc9cc52a8: MXit: When sending a structured response when the user clicks on a link, the format of the response message was not totally correct.

details:	http://hg.adium.im/libpurple/rev/554bc9cc52a8
revision:	32461:554bc9cc52a8
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Wed Jan 16 15:08:58 2013 +0200

MXit: When sending a structured response when the user clicks on a link, the format of the response message was not totally correct.
It would still work for 99% of services, but this fix improves the handling of structured response messages.
Subject: libpurple 32462:1e1973bdfe32: MXit: Maximum length of contact's alias and group were incorrectly defined, possibly leading to truncation.

details:	http://hg.adium.im/libpurple/rev/1e1973bdfe32
revision:	32462:1e1973bdfe32
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Wed Jan 16 15:17:21 2013 +0200

MXit: Maximum length of contact's alias and group were incorrectly defined, possibly leading to truncation.
Subject: libpurple 32463:8c11f90243e4: Update the Installer Dependencies to the latest version with the exchndl.dll that doesn't crash with gcc > 4.4

details:	http://hg.adium.im/libpurple/rev/8c11f90243e4
revision:	32463:8c11f90243e4
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Wed Sep 19 22:57:46 2012 -0400

Update the Installer Dependencies to the latest version with the exchndl.dll that doesn't crash with gcc > 4.4

 * Oops! I thought I had committed this a while ago
 * This also contains the SHA1 NSIS plugin that I wrote, which is needed to build the non-offline installer
Subject: libpurple 32464:673056a91e3b: Add the Baltimore CyberTrust Root certificate.

details:	http://hg.adium.im/libpurple/rev/673056a91e3b
revision:	32464:673056a91e3b
branch:		release-2.x.y
author:		Elliott Sales de Andrade <qulogic at pidgin.im>
date:		Thu Jan 17 23:57:52 2013 -0500

Add the Baltimore CyberTrust Root certificate.

This certificate is the root that now signs the chain sent from
the MSN contact servers.

Fixes #15468.
Subject: libpurple 32465:9fcc56d42417: bonjour: Fix large file transfers (> 4GiB) with a 64-bit libpurple.

details:	http://hg.adium.im/libpurple/rev/9fcc56d42417
revision:	32465:9fcc56d42417
branch:		release-2.x.y
author:		Linus L?ssing <linus.luessing at web.de>
date:		Sat Jan 19 15:57:36 2013 +0000

bonjour: Fix large file transfers (> 4GiB) with a 64-bit libpurple.

Linus came up with this fix, and Daniel Atallah tweaked it to backport part of
3dea6a2d1e61789203c57800483df059b04fba4f, which contains a more complete (but
API breaking) fix.

Fixes #15421
Subject: libpurple 32466:c959cde2a7bd: Make it possible to build with recent gcc versions out of the box on Windows.

details:	http://hg.adium.im/libpurple/rev/c959cde2a7bd
revision:	32466:c959cde2a7bd
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Sat Jan 19 11:22:29 2013 -0500

Make it possible to build with recent gcc versions out of the box on Windows.

 * This is OK now because of the calling convention fixes from 6d93866a4a3f
Subject: libpurple 32467:9e41dd502922: Bonjour: Retry alternative address offers for file transfers too

details:	http://hg.adium.im/libpurple/rev/9e41dd502922
revision:	32467:9e41dd502922
branch:		release-2.x.y
author:		Linus L?ssing <linus.luessing at web.de>
date:		Thu Oct 25 17:58:36 2012 +0200

Bonjour: Retry alternative address offers for file transfers too

So far for a Bonjour file transfer libpurple only tried to connect to and fetch
a file via the offered address matching that hosts 'primary' ip address.

With this patch libpurple will retry with the next offered address(es) in case
of connection failures like XEP-0065 suggests.

It will also accept and try any offered address, even if it is not announced
via mDNS.

For the special case of link local IPv6 addresses, we will try to guess the
according interface name from our Bonjour IP address list.

This patch makes the underlying issue of ticket #14755 (the missing IPv6
listening socket) less critical in that activating IPv6 does not break bonjour
file transfer in general anymore.

Fixes #14755
Subject: libpurple 32468:c76b490587d4: Improve URI handling on Windows 8.

details:	http://hg.adium.im/libpurple/rev/c76b490587d4
revision:	32468:c76b490587d4
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Sat Jan 19 14:41:03 2013 -0500

Improve URI handling on Windows 8.

 * This isn't ideal - we now pass https, ftp and mailto URIs to their specific
   handlers and everything else still goes to the http handler.
 * Fixes #15273
Subject: libpurple 32469:17f92e313088: Mention MSN SSL cert change, two other minor changes.

details:	http://hg.adium.im/libpurple/rev/17f92e313088
revision:	32469:17f92e313088
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Mon Jan 21 16:28:56 2013 -0800

Mention MSN SSL cert change, two other minor changes.
Subject: libpurple 32470:33c8355ead2a: Simpler control flow.

details:	http://hg.adium.im/libpurple/rev/33c8355ead2a
revision:	32470:33c8355ead2a
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Mon Jan 21 18:06:01 2013 -0800

Simpler control flow.

I'm totally fine with multiple "returns" in a single function,
especially when returning early because of error conditions.
Subject: libpurple 32471:cf6979b92221: Spaces instead of tabs in doxygen comments.

details:	http://hg.adium.im/libpurple/rev/cf6979b92221
revision:	32471:cf6979b92221
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Mon Jan 21 18:09:48 2013 -0800

Spaces instead of tabs in doxygen comments.
Subject: libpurple 32472:732c94e8b7ec: Document the error condition.

details:	http://hg.adium.im/libpurple/rev/732c94e8b7ec
revision:	32472:732c94e8b7ec
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Mon Jan 21 18:11:07 2013 -0800

Document the error condition.
Subject: libpurple 32473:d09413e12a04: Better documentation.

details:	http://hg.adium.im/libpurple/rev/d09413e12a04
revision:	32473:d09413e12a04
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Mon Jan 21 18:52:05 2013 -0800

Better documentation.
Subject: libpurple 32474:bf6e40d37a72: Ever better documentation!

details:	http://hg.adium.im/libpurple/rev/bf6e40d37a72
revision:	32474:bf6e40d37a72
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Mon Jan 21 19:56:34 2013 -0800

Ever better documentation!

I don't know why I care so much.
Subject: libpurple 32475:7ad61c17d9bd: ssl-nss: Don't use the NSS Built-in database at all

details:	http://hg.adium.im/libpurple/rev/7ad61c17d9bd
revision:	32475:7ad61c17d9bd
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Tue Jan 22 15:25:40 2013 -0500

ssl-nss: Don't use the NSS Built-in database at all

 * libpurple already doesn't use it when validating the server's chain against
   the list of trusted roots - the code loading nssckbi predated libpurple doing
   certificate validation.
 * this was creating a weird situation where the cert served by the server was
   being oddly overwritten in the chain by one from the built-in db.  In the
   case I noticed this, "DigiCert High Assurance EV Root CA" was set as
   self-signed in the built-in db, but the server's chain had it signed by
   "GTE CyberTrust Global Root" - apparently there are several versions of this
   cert that are cross-signed.
Subject: libpurple 32476:4074275c1007: MXit: Backport the password and transport-layer encryption code from 3.0.0.

details:	http://hg.adium.im/libpurple/rev/4074275c1007
revision:	32476:4074275c1007
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Sat Jan 26 12:24:13 2013 +0200

MXit: Backport the password and transport-layer encryption code from 3.0.0.
Subject: libpurple 32477:d32f538596e3: MXit: Fix decoding of font-size changes in the markup of received messages.

details:	http://hg.adium.im/libpurple/rev/d32f538596e3
revision:	32477:d32f538596e3
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Sat Jan 26 12:41:18 2013 +0200

MXit: Fix decoding of font-size changes in the markup of received messages.
Subject: libpurple 32478:d6b2b231d0cf: MXit does support including a message when rejecting a subscription request.

details:	http://hg.adium.im/libpurple/rev/d6b2b231d0cf
revision:	32478:d6b2b231d0cf
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Sun Jan 27 18:13:17 2013 +0200

MXit does support including a message when rejecting a subscription request.
Add the necessary protocol plumbing to support it.
Subject: libpurple 32479:3ce33bc98c02: Fix HTML injection bug in GtkIMHtml.

details:	http://hg.adium.im/libpurple/rev/3ce33bc98c02
revision:	32479:3ce33bc98c02
branch:		release-2.x.y
author:		Sa?l Hidalgo <saulhidalgo31 at gmail.com>
date:		Sun Jan 27 17:26:36 2013 -0500

Fix HTML injection bug in GtkIMHtml.

Fixes #13189.
Subject: libpurple 32480:f4d13f392134: Fix audible links on Yahoo.

details:	http://hg.adium.im/libpurple/rev/f4d13f392134
revision:	32480:f4d13f392134
branch:		release-2.x.y
author:		Catalin Salgau <unknown>
date:		Sun Jan 27 17:56:04 2013 -0500

Fix audible links on Yahoo.

Fixes #14870.
Subject: libpurple 32481:84fb3f1d401b: Gadu-Gadu: fix some harmless Coverity issues

details:	http://hg.adium.im/libpurple/rev/84fb3f1d401b
revision:	32481:84fb3f1d401b
branch:		release-2.x.y
author:		Tomasz Wasilczyk <tomkiewicz at cpw.pidgin.im>
date:		Tue Jan 29 14:45:07 2013 +0100

Gadu-Gadu: fix some harmless Coverity issues
Subject: libpurple 32482:0a6e1199c50f: MXit: Fix small memory leak when viewing the profile of an incoming invite.

details:	http://hg.adium.im/libpurple/rev/0a6e1199c50f
revision:	32482:0a6e1199c50f
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Tue Jan 29 22:54:22 2013 +0200

MXit: Fix small memory leak when viewing the profile of an incoming invite.
Subject: libpurple 32483:3c21af28962e: MXit: Rather use a GString to store the raw encrypted password.

details:	http://hg.adium.im/libpurple/rev/3c21af28962e
revision:	32483:3c21af28962e
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Tue Jan 29 23:20:09 2013 +0200

MXit: Rather use a GString to store the raw encrypted password.
The static buffer could probably be overflowed by entering a too long
password, and cause Pidgin to crash.
Subject: libpurple 32484:b822f110a36b: MXit: The maximum filesize has been increased from 150K to about 1Mb.

details:	http://hg.adium.im/libpurple/rev/b822f110a36b
revision:	32484:b822f110a36b
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Wed Jan 30 09:24:41 2013 +0200

MXit: The maximum filesize has been increased from 150K to about 1Mb.
If we want to support even larger file sizes, we will need to implement the chunked protocol extensions.
Subject: libpurple 32485:cac9a5d4fe33: MXit: Don't limit the uploaded avatar image to 96x96.

details:	http://hg.adium.im/libpurple/rev/cac9a5d4fe33
revision:	32485:cac9a5d4fe33
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Wed Jan 30 10:20:23 2013 +0200

MXit: Don't limit the uploaded avatar image to 96x96.
The MXit backend systems will now rescale avatar images dynamically to the size
and format requested by the client, so send the original image (or as close
to the original as fits within 800x800 and the maximum file size).
Subject: libpurple 32486:fe2062d15bb5: I forgot to add these to the ChangeLog.

details:	http://hg.adium.im/libpurple/rev/fe2062d15bb5
revision:	32486:fe2062d15bb5
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Thu Jan 31 09:12:00 2013 +0200

I forgot to add these to the ChangeLog.
Subject: libpurple 32487:68c80d463d65: Correct unit.

details:	http://hg.adium.im/libpurple/rev/68c80d463d65
revision:	32487:68c80d463d65
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Thu Jan 31 09:20:35 2013 +0200

Correct unit.
Subject: libpurple 32488:29cc844aed80: Fix a crash when closing conversation window

details:	http://hg.adium.im/libpurple/rev/29cc844aed80
revision:	32488:29cc844aed80
branch:		release-2.x.y
author:		Tomasz Wasilczyk <tomkiewicz at cpw.pidgin.im>
date:		Wed Sep 12 14:09:08 2012 +0200

Fix a crash when closing conversation window
Subject: libpurple 32489:be5378bae40e: CID 731947 - Deal with the unlikely scenario that a locale would have a month+year value longer than 29 bytes.

details:	http://hg.adium.im/libpurple/rev/be5378bae40e
revision:	32489:be5378bae40e
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Wed Feb 06 09:26:04 2013 -0500

CID 731947 - Deal with the unlikely scenario that a locale would have a month+year value longer than 29 bytes.
Subject: libpurple 32490:ad9fe0ad7f39: The "Topic set" message should be translateable. Refs #13317

details:	http://hg.adium.im/libpurple/rev/ad9fe0ad7f39
revision:	32490:ad9fe0ad7f39
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Sun Feb 10 15:44:48 2013 +0000

The "Topic set" message should be translateable. Refs #13317
Subject: libpurple 32491:80549b06cf11: pt_BR translation update. Fixes #15029

details:	http://hg.adium.im/libpurple/rev/80549b06cf11
revision:	32491:80549b06cf11
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Sun Feb 10 18:13:41 2013 +0000

pt_BR translation update. Fixes #15029
Subject: libpurple 32492:364ba9fff673: Will be cutting the release later today and publishing it Wednesday morning

details:	http://hg.adium.im/libpurple/rev/364ba9fff673
revision:	32492:364ba9fff673
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Sun Feb 10 10:57:38 2013 -0800

Will be cutting the release later today and publishing it Wednesday morning
Subject: libpurple 32493:9bf322113706: Minor merge

details:	http://hg.adium.im/libpurple/rev/9bf322113706
revision:	32493:9bf322113706
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Sun Feb 10 10:58:38 2013 -0800

Minor merge
Subject: libpurple 32494:5104709f596f: It's 2013 now.

details:	http://hg.adium.im/libpurple/rev/5104709f596f
revision:	32494:5104709f596f
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Sun Feb 10 11:11:51 2013 -0800

It's 2013 now.
Subject: libpurple 32495:1db48a6df105: Don't look for translations in the autogenerated perl plugin files.

details:	http://hg.adium.im/libpurple/rev/1db48a6df105
revision:	32495:1db48a6df105
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Sun Feb 10 20:50:08 2013 -0800

Don't look for translations in the autogenerated perl plugin files.

"make distcheck" complains when these files aren't listed here.
I'm not sure why I've never noticed this... maybe we changed the
order of perl autogeneration and po checking?  Maybe I'm using a
different -j MAKEFLAG?  Maybe I never ran distcheck with the perl
plugin enabled?

"make distcheck" still fails, and complains that it can't install
schemas to /etc (even though I'm passing --disable-schemas-install).
I think maybe we should try to not install schemas when doing
make check, or don't install to /etc?
Subject: libpurple 32496:c607f1383671: Prep for release.

details:	http://hg.adium.im/libpurple/rev/c607f1383671
revision:	32496:c607f1383671
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Mon Feb 11 00:23:47 2013 -0800

Prep for release.
Subject: libpurple 32497:2ecfc558a382: 11 translation updates from Transifex

details:	http://hg.adium.im/libpurple/rev/2ecfc558a382
revision:	32497:2ecfc558a382
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Mon Feb 11 00:35:03 2013 -0800

11 translation updates from Transifex
Subject: libpurple 32498:b76c2c21a76c: Fix plural-forms for our Croatian translation.

details:	http://hg.adium.im/libpurple/rev/b76c2c21a76c
revision:	32498:b76c2c21a76c
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Mon Feb 11 00:41:45 2013 -0800

Fix plural-forms for our Croatian translation.

Fixes #15221.

I also removed the #, fuzzy comment from the header, since it doesn't
seem like we need it and msgfmt complains about it.  This file is
grossly out of date.
Subject: libpurple 32499:d1aa818fd0fc: Minor formatting

details:	http://hg.adium.im/libpurple/rev/d1aa818fd0fc
revision:	32499:d1aa818fd0fc
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Mon Feb 11 01:01:20 2013 -0800

Minor formatting
Subject: libpurple 32500:261e15fb8b91: Fix a few warnings

details:	http://hg.adium.im/libpurple/rev/261e15fb8b91
revision:	32500:261e15fb8b91
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Mon Feb 11 23:15:34 2013 -0500

Fix a few warnings
Subject: libpurple 32501:4dac888f3d5e: Merged release-2.x.y into adium.

details:	http://hg.adium.im/libpurple/rev/4dac888f3d5e
revision:	32501:4dac888f3d5e
branch:		adium
author:		Thijs Alkemade <me at thijsalkema.de>
date:		Tue Feb 12 13:57:27 2013 +0100

Merged release-2.x.y into adium.

diffs (truncated from 74540 to 1000 lines):

diff -r b120a1fe399e -r 4dac888f3d5e COPYRIGHT
--- a/COPYRIGHT	Sun Nov 04 12:38:21 2012 -0500
+++ b/COPYRIGHT	Tue Feb 12 13:57:27 2013 +0100
@@ -15,7 +15,7 @@
 piece of code, then that code should be traced through our version
 control system to see from where it came and who has modified it.
 
-Copyright (C) 1998-2012 by the following:
+Copyright (C) 1998-2013 by the following:
 
 Mark
 Saleem Abdulrasool
@@ -73,6 +73,7 @@
 Éric Boumaour
 Chris Boyle
 Stanislav Brabec
+Bartosz Brachaczek
 Quentin Brandon
 Derrick J Brashear
 Mauro Sérgio Ferreira Brasil
@@ -174,6 +175,7 @@
 Gavan Fantom (gavan)
 Leonardo Fernandes
 David Fiander
+Michael Fiedler
 Ryan Flegel
 Rob Flynn <gaim at robflynn.com>
 Rob Foehl (rwf)
@@ -455,6 +457,7 @@
 Thanumalayan S.
 Jonathan Sailor
 Elliott Sales de Andrade
+Catalin Salgau
 Tomasz Sałaciński <tsalacinski at gmail.com>
 Pradyumna Sampath
 Arvind Samptur
@@ -507,6 +510,7 @@
 Lex Spoon
 Chris Stafford
 Kevin Stange
+Ferdinand Stehle
 Joshua Stein
 Jakub Steiner
 Richard Stellingwerff
diff -r b120a1fe399e -r 4dac888f3d5e ChangeLog
--- a/ChangeLog	Sun Nov 04 12:38:21 2012 -0500
+++ b/ChangeLog	Tue Feb 12 13:57:27 2013 +0100
@@ -1,28 +1,67 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-version 2.10.7:
+version 2.10.7 (02/13/2013):
 	Alien hatchery:
 	* No changes
 
+	General:
+	* The configure script will now exit with status 1 when specifying
+	  invalid protocol plugins using the --with-static-prpls and
+	  --with-dynamic-prpls arguments. (Michael Fiedler) (#15316)
+
+	libpurple:
+	* Don't link directly to libgcrypt when building with GnuTLS support.
+	  (Bartosz Brachaczek) (#15329)
+	* Fix UPnP mappings on routers that return empty <URLBase/> elements
+	  in their response. (Ferdinand Stehle) (#15373)
+	* Tcl plugin uses saner, race-free plugin loading.
+	* Fix the Tcl signals-test plugin for savedstatus-changed.
+	  (Andrew Shadura) (#15443)
+
+	Pidgin:
+	* Make Pidgin more friendly to non-X11 GTK+, such as MacPorts' +no_x11
+	  variant.
+
 	Gadu-Gadu:
 	* Fix a crash at startup with large contact list. Avatar support for
-	  buddies will be disabled till 3.0.0. (#15226, #14305)
+	  buddies will be disabled until 3.0.0. (#15226, #14305)
 
 	IRC:
-	* Support for SASL authentication.  (Thijs Alkemade, Andy Spencer)
+	* Support for SASL authentication. (Thijs Alkemade, Andy Spencer)
 	  (#13270)
+	* Print topic setter information at channel join. (#13317)
 
 	MSN:
+	* Fix SSL certificate issue when signing into MSN for some users.
 	* Fix a crash when removing a user before its icon is loaded. (Mark
 	  Barfield) (#15217)
 
+	MXit:
+	* Display farewell messages in a different colour to distinguish
+	  them from normal messages.
+	* Add support for typing notification.
+	* Add support for the Relationship Status profile attribute.
+	* Remove all reference to Hidden Number.
+	* Ignore new invites to join a GroupChat if you're already joined, or
+	  still have a pending invite.
+	* The buddy's name was not centered vertically in the buddy-list if they
+	  did not have a status-message or mood set.
+	* Fix decoding of font-size changes in the markup of received messages.
+	* Increase the maximum file size that can be transferred to 1 MB.
+	* When setting an avatar image, no longer downscale it to 96x96.
+
 	Yahoo!:
 	* Fix a double-free in profile/picture loading code. (Mihai Serban)
 	  (#15053)
+	* Fix retrieving server-side buddy aliases. (Catalin Salgu) (#15381)
 
 	Plugins:
 	* The Voice/Video Settings plugin supports using the sndio GStreamer
 	  backends. (Brad Smith) (#14414)
+	* Fix a crash in the Contact Availability Detection plugin. (Mark)
+	  (#15327)
+	* Make the Message Notification plugin more friendly to non-X11 GTK+,
+	  such as MacPorts' +no_x11 variant.
 
 	Windows-Specific Changes:
 	* Compile with secure flags (#15290)
@@ -30,18 +69,18 @@
 	  (#15277)
 	* Updates to a number of dependencies, some of which have security
 	  related fixes. (#14571, #15285, #15286)
-	 * ATK 1.32.0-2
-	 * Cyrus SASL 2.1.25
-	 * expat 2.1.0-1
-	 * freetype 2.4.10-1
-	 * gettext 0.18.1.1-2
-	 * Glib 2.28.8-1
-	 * libpng 1.4.12-1
-	 * libxml2 2.9.0-1
-	 * NSS 3.13.6 and NSPR 4.9.2
-	 * Pango 1.29.4-1
-	 * SILC 1.1.10
-	 * zlib 1.2.5-2
+		* ATK 1.32.0-2
+		* Cyrus SASL 2.1.25
+		* expat 2.1.0-1
+		* freetype 2.4.10-1
+		* gettext 0.18.1.1-2
+		* Glib 2.28.8-1
+		* libpng 1.4.12-1
+		* libxml2 2.9.0-1
+		* NSS 3.13.6 and NSPR 4.9.2
+		* Pango 1.29.4-1
+		* SILC 1.1.10
+		* zlib 1.2.5-2
 	* Patch libmeanwhile (sametime library) to fix crash. (Jonathan Rice)
 	  (#12637)
 
diff -r b120a1fe399e -r 4dac888f3d5e Makefile.am
--- a/Makefile.am	Sun Nov 04 12:38:21 2012 -0500
+++ b/Makefile.am	Tue Feb 12 13:57:27 2013 +0100
@@ -6,7 +6,7 @@
 		HACKING \
 		Makefile.mingw \
 		PLUGIN_HOWTO \
-		README.MTN \
+		README.hg \
 		README.mingw \
 		config.h.mingw \
 		doxy2devhelp.xsl \
@@ -56,13 +56,13 @@
 # ... and have no changes in the working copy. (this isn't really necessary with hg because hg id appends a "+")
 	test "x`hg st -mard`" = x
 
-packages:
+sign-packages: dist
 	gpg -ab pidgin-$(PACKAGE_VERSION).tar.gz
 	gpg -ab pidgin-$(PACKAGE_VERSION).tar.bz2
 	gpg --verify pidgin-$(PACKAGE_VERSION).tar.gz.asc pidgin-$(PACKAGE_VERSION).tar.gz
 	gpg --verify pidgin-$(PACKAGE_VERSION).tar.bz2.asc pidgin-$(PACKAGE_VERSION).tar.bz2
 
-release: commit-check version-check distcheck packages
+release: commit-check version-check distcheck sign-packages
 
 if INSTALL_I18N
 PO_DIR=po
diff -r b120a1fe399e -r 4dac888f3d5e Makefile.mingw
--- a/Makefile.mingw	Sun Nov 04 12:38:21 2012 -0500
+++ b/Makefile.mingw	Tue Feb 12 13:57:27 2013 +0100
@@ -45,6 +45,7 @@
 STRIPPED_RELEASE_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-win32bin
 DEBUG_SYMBOLS_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-dbgsym
 
+PIDGIN_INST_DEP_DIR="$(WIN32_DEV_TOP)/pidgin-inst-deps-20120910"
 
 # Any *.dll or *.exe files included in win32-install-dir that we don't compile
 # should be included in this list so they don't get stripped
@@ -67,7 +68,6 @@
 	libssp-0.dll \
 	libxml2-2.dll \
 	nss3.dll \
-	nssckbi.dll \
 	nssutil3.dll \
 	saslANONYMOUS.dll \
 	saslCRAMMD5.dll \
@@ -108,7 +108,7 @@
 	cp $(GTKSPELL_TOP)/bin/libgtkspell-0.dll $(PIDGIN_INSTALL_DIR)/spellcheck
 	cp $(ENCHANT_TOP)/bin/libenchant.dll $(PIDGIN_INSTALL_DIR)/spellcheck
 	cp -R $(ENCHANT_TOP)/lib/enchant/*.dll $(PIDGIN_INSTALL_DIR)/spellcheck/lib/enchant
-	cp $(WIN32_DEV_TOP)/pidgin-inst-deps-20100315/exchndl.dll $(PIDGIN_INSTALL_DIR)
+	cp $(PIDGIN_INST_DEP_DIR)/exchndl.dll $(PIDGIN_INSTALL_DIR)
 	cp $(GCC_SSP_TOP)/bin/libssp-0.dll $(PIDGIN_INSTALL_DIR)
 
 gtk_runtime_zip:
diff -r b120a1fe399e -r 4dac888f3d5e configure.ac
--- a/configure.ac	Sun Nov 04 12:38:21 2012 -0500
+++ b/configure.ac	Tue Feb 12 13:57:27 2013 +0100
@@ -47,7 +47,7 @@
 m4_define([purple_major_version], [2])
 m4_define([purple_minor_version], [10])
 m4_define([purple_micro_version], [7])
-m4_define([purple_version_suffix], [devel])
+m4_define([purple_version_suffix], [])
 m4_define([purple_version],
           [purple_major_version.purple_minor_version.purple_micro_version])
 m4_define([purple_display_version], purple_version[]m4_ifdef([purple_version_suffix],[purple_version_suffix]))
@@ -56,7 +56,7 @@
 m4_define([gnt_major_version], [2])
 m4_define([gnt_minor_version], [8])
 m4_define([gnt_micro_version], [9])
-m4_define([gnt_version_suffix], [devel])
+m4_define([gnt_version_suffix], [])
 m4_define([gnt_version],
           [gnt_major_version.gnt_minor_version.gnt_micro_version])
 m4_define([gnt_display_version], gnt_version[]m4_ifdef([gnt_version_suffix],[gnt_version_suffix]))
@@ -1185,7 +1185,7 @@
 		simple)		static_simple=yes ;;
 		yahoo)		static_yahoo=yes ;;
 		zephyr)		static_zephyr=yes ;;
-		*)			echo "Invalid static protocol $i!!" ; exit ;;
+		*)			echo "Invalid static protocol $i!!" ; exit 1 ;;
 	esac
 done
 AM_CONDITIONAL(STATIC_BONJOUR, test "x$static_bonjour" = "xyes")
@@ -1243,7 +1243,7 @@
 		simple)		dynamic_simple=yes ;;
 		yahoo)		dynamic_yahoo=yes ;;
 		zephyr)		dynamic_zephyr=yes ;;
-		*)			echo "Invalid dynamic protocol $i!!" ; exit ;;
+		*)			echo "Invalid dynamic protocol $i!!" ; exit 1 ;;
 	esac
 done
 
@@ -1771,7 +1771,7 @@
 
 		AC_CACHE_CHECK([for GnuTLS libraries], ac_cv_gnutls_libs,
 		[
-			LIBS="$LIBS $with_gnutls_libs -lgnutls -lgcrypt"
+			LIBS="$LIBS $with_gnutls_libs -lgnutls"
 			AC_TRY_LINK_FUNC(gnutls_init, ac_cv_gnutls_libs="yes", ac_cv_gnutls_libs="no")
 			LIBS="$LIBS_save"
 		])
@@ -1780,7 +1780,7 @@
 			AC_DEFINE(HAVE_GNUTLS, 1, [Define if you have GnuTLS])
 			AC_DEFINE(HAVE_SSL)
 			msg_gnutls="GnuTLS"
-			GNUTLS_LIBS="$with_gnutls_libs -lgnutls -lgcrypt"
+			GNUTLS_LIBS="$with_gnutls_libs -lgnutls"
 
 			enable_gnutls="yes"
 		else
@@ -2673,3 +2673,4 @@
 echo configure complete, now type \'make\'
 echo
 
+
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/Makefile.am
--- a/libpurple/Makefile.am	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/Makefile.am	Tue Feb 12 13:57:27 2013 +0100
@@ -301,6 +301,7 @@
 libpurple_la_LDFLAGS = -export-dynamic -version-info $(PURPLE_LT_VERSION_INFO) -no-undefined
 libpurple_la_LIBADD = \
 	$(STATIC_LINK_LIBS) \
+	$(KRB4_LDFLAGS) $(KRB4_LIBS) \
 	$(DBUS_LIBS) \
 	$(GLIB_LIBS) \
 	$(LIBXML_LIBS) \
@@ -311,6 +312,8 @@
 	$(GSTINTERFACES_LIBS) \
 	$(IDN_LIBS) \
 	ciphers/libpurple-ciphers.la \
+	$(SASL_LIBS) \
+	$(MEANWHILE_LIBS) \
 	-lm
 
 AM_CPPFLAGS = \
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/account.c
--- a/libpurple/account.c	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/account.c	Tue Feb 12 13:57:27 2013 +0100
@@ -413,11 +413,16 @@
 		g_hash_table_foreach(account->ui_settings, ui_setting_to_xmlnode, node);
 	}
 
+	// Adium never wants its proxy information saved to disk.
+	/*
+		
 	if ((proxy_info = purple_account_get_proxy_info(account)) != NULL)
 	{
 		child = proxy_settings_to_xmlnode(proxy_info);
 		xmlnode_insert_child(node, child);
 	}
+	
+	*/
 
 	child = current_error_to_xmlnode(priv->current_error);
 	xmlnode_insert_child(node, child);
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/blist.c
--- a/libpurple/blist.c	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/blist.c	Tue Feb 12 13:57:27 2013 +0100
@@ -923,7 +923,7 @@
 	} else if (!purple_status_is_online(status) &&
 				purple_status_is_online(old_status)) {
 
-		purple_blist_node_set_int(&buddy->node, "last_seen", time(NULL));
+/*		purple_blist_node_set_int(&buddy->node, "last_seen", time(NULL)); */
 		purple_signal_emit(purple_blist_get_handle(), "buddy-signed-off", buddy);
 
 		cnode = buddy->node.parent;
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/dnssrv.c
--- a/libpurple/dnssrv.c	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/dnssrv.c	Tue Feb 12 13:57:27 2013 +0100
@@ -1090,12 +1090,17 @@
 }
 
 static void
-purple_srv_query_failed(PurpleSrvTxtQueryData *query_data, const gchar *error_message)
+purple_srv_txt_query_failed(PurpleSrvTxtQueryData *query_data, const gchar *error_message)
 {
-	purple_debug_error("dnssrv", "%s\n", error_message);
+	purple_debug_error("dnssrv", "purple_srv_txt_query_failed: %s\n", error_message);
 
-	if (query_data->cb.srv != NULL)
-		query_data->cb.srv(NULL, 0, query_data->extradata);
+	if (query_data->type == T_SRV) {
+		if (query_data->cb.srv != NULL)
+			query_data->cb.srv(NULL, 0, query_data->extradata);
+	} else if (query_data->type == T_TXT) {
+		if (query_data->cb.txt != NULL)
+			query_data->cb.txt(NULL, query_data->extradata);
+	}
 
 	purple_srv_txt_query_destroy(query_data);
 }
@@ -1106,7 +1111,7 @@
 	PurpleSrvTxtQueryUiOps *ops = purple_srv_txt_query_get_ui_ops();
 
 	if (ops && ops->resolve)
-		return ops->resolve(query_data, (query_data->type == T_SRV ? purple_srv_query_resolved : purple_txt_query_resolved), purple_srv_query_failed);
+		return ops->resolve(query_data, (query_data->type == T_SRV ? purple_srv_query_resolved : purple_txt_query_resolved), purple_srv_txt_query_failed);
 
 	return FALSE;
 }
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/imgstore.c
--- a/libpurple/imgstore.c	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/imgstore.c	Tue Feb 12 13:57:27 2013 +0100
@@ -43,9 +43,9 @@
 {
 	int id;
 	guint8 refcount;
-	size_t size;		/**< The image data's size.	*/
-	char *filename;		/**< The filename (for the UI)	*/
-	gpointer data;		/**< The image data.		*/
+	size_t size;     /**< The image data's size. */
+	char *filename;  /**< The filename (for the UI) */
+	gpointer data;   /**< The image data. */
 };
 
 PurpleStoredImage *
@@ -89,23 +89,26 @@
 purple_imgstore_add_with_id(gpointer data, size_t size, const char *filename)
 {
 	PurpleStoredImage *img = purple_imgstore_add(data, size, filename);
-	if (img) {
-		/*
-		 * Use the next unused id number.  We do it in a loop on the
-		 * off chance that nextid wraps back around to 0 and the hash
-		 * table still contains entries from the first time around.
-		 */
-		do {
-			img->id = ++nextid;
-		} while (img->id == 0 || g_hash_table_lookup(imgstore, &(img->id)) != NULL);
-
-		g_hash_table_insert(imgstore, &(img->id), img);
+	if (!img) {
+		return 0;
 	}
 
-	return (img ? img->id : 0);
+	/*
+	 * Use the next unused id number.  We do it in a loop on the
+	 * off chance that nextid wraps back around to 0 and the hash
+	 * table still contains entries from the first time around.
+	 */
+	do {
+		img->id = ++nextid;
+	} while (img->id == 0 || g_hash_table_lookup(imgstore, &(img->id)) != NULL);
+
+	g_hash_table_insert(imgstore, &(img->id), img);
+
+	return img->id;
 }
 
-PurpleStoredImage *purple_imgstore_find_by_id(int id) {
+PurpleStoredImage *purple_imgstore_find_by_id(int id)
+{
 	PurpleStoredImage *img = g_hash_table_lookup(imgstore, &id);
 
 	if (img != NULL)
@@ -114,7 +117,8 @@
 	return img;
 }
 
-gconstpointer purple_imgstore_get_data(PurpleStoredImage *img) {
+gconstpointer purple_imgstore_get_data(PurpleStoredImage *img)
+{
 	g_return_val_if_fail(img != NULL, NULL);
 
 	return img->data;
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/imgstore.h
--- a/libpurple/imgstore.h	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/imgstore.h	Tue Feb 12 13:57:27 2013 +0100
@@ -29,8 +29,10 @@
 
 #include <glib.h>
 
-/** A reference-counted immutable wrapper around an image's data and its
- *  filename.
+/**
+ * A set of utility functions that provide a reference-counted immutable
+ * wrapper around an image's data and filename.  These functions do not
+ * cache any data to disk.
  */
 typedef struct _PurpleStoredImage PurpleStoredImage;
 
@@ -39,59 +41,73 @@
 #endif
 
 /**
- * Add an image to the store.
+ * Create a new PurpleStoredImage.
  *
- * The caller owns a reference to the image in the store, and must dereference
- * the image with purple_imgstore_unref() for it to be freed.
+ * Despite the name of this function, the image is NOT added to the image
+ * store and no ID is assigned.  If you need to reference the image by an
+ * ID, use purple_imgstore_add_with_id() instead.
  *
- * No ID is allocated when using this function.  If you need to reference the
- * image by an ID, use purple_imgstore_add_with_id() instead.
+ * The caller owns a reference to this image and must dereference it with
+ * purple_imgstore_unref() for it to be freed.
  *
- * @param data		Pointer to the image data, which the imgstore will take
- *                      ownership of and free as appropriate.  If you want a
- *                      copy of the data, make it before calling this function.
- * @param size		Image data's size.
- * @param filename	Filename associated with image.  This is for your
+ * @param data      Pointer to the image data, which the imgstore will take
+ *                  ownership of and free as appropriate.  If you want a
+ *                  copy of the data, make it before calling this function.
+ * @param size      Image data's size.
+ * @param filename  Filename associated with image.  This is for your
  *                  convenience.  It could be the full path to the
  *                  image or, more commonly, the filename of the image
  *                  without any directory information.  It can also be
  *                  NULL, if you don't need to keep track of a filename.
  *
- * @return The stored image.
+ * @return The stored image, or NULL if the image was not added (because of
+ *         empty data or size).
  */
 PurpleStoredImage *
 purple_imgstore_add(gpointer data, size_t size, const char *filename);
 
 /**
- * Create an image and add it to the store.
+ * Create a PurpleStoredImage using purple_imgstore_add() by reading the
+ * given filename from disk.
+ *
+ * The image is not added to the image store and no ID is assigned.  If you
+ * need to reference the image by an ID, use purple_imgstore_add_with_id()
+ * instead.
+ *
+ * The caller owns a reference to this image and must dereference it with
+ * purple_imgstore_unref() for it to be freed.
  *
  * @param path  The path to the image.
  *
- * @return  The stored image.
- * @since 2.X.X
+ * @return The stored image, or NULL if the image was not added (because of
+ *         empty data or size).
+ *
+ * @since 2.5.0
  */
 PurpleStoredImage *
 purple_imgstore_new_from_file(const char *path);
 
 /**
- * Add an image to the store, allocating an ID.
+ * Create a PurpleStoredImage using purple_imgstore_add() and add the
+ * image to the image store.  A unique ID will be assigned to the image.
  *
- * The caller owns a reference to the image in the store, and must dereference
- * the image with purple_imgstore_unref_by_id() or purple_imgstore_unref()
- * for it to be freed.
+ * The caller owns a reference to the image and must dereference it with
+ * purple_imgstore_unref() or purple_imgstore_unref_by_id() for it to be
+ * freed.
  *
- * @param data		Pointer to the image data, which the imgstore will take
- *                      ownership of and free as appropriate.  If you want a
- *                      copy of the data, make it before calling this function.
- * @param size		Image data's size.
- * @param filename	Filename associated with image.  This is for your
+ * @param data      Pointer to the image data, which the imgstore will take
+ *                  ownership of and free as appropriate.  If you want a
+ *                  copy of the data, make it before calling this function.
+ * @param size      Image data's size.
+ * @param filename  Filename associated with image.  This is for your
  *                  convenience.  It could be the full path to the
  *                  image or, more commonly, the filename of the image
  *                  without any directory information.  It can also be
  *                  NULL, if you don't need to keep track of a filename.
-
+ *
  * @return ID for the image.  This is a unique number that can be used
- *         within libpurple to reference the image.
+ *         within libpurple to reference the image.  0 is returned if the
+ *         image was not added (because of empty data or size).
  */
 int purple_imgstore_add_with_id(gpointer data, size_t size, const char *filename);
 
@@ -99,7 +115,7 @@
  * Retrieve an image from the store. The caller does not own a
  * reference to the image.
  *
- * @param id		The ID for the image.
+ * @param id The ID for the image.
  *
  * @return A pointer to the requested image, or NULL if it was not found.
  */
@@ -108,7 +124,7 @@
 /**
  * Retrieves a pointer to the image's data.
  *
- * @param img	The Image
+ * @param img The Image.
  *
  * @return A pointer to the data, which must not
  *         be freed or modified.
@@ -118,7 +134,7 @@
 /**
  * Retrieves the length of the image's data.
  *
- * @param img	The Image
+ * @param img The Image.
  *
  * @return The size of the data that the pointer returned by
  *         purple_imgstore_get_data points to.
@@ -128,7 +144,7 @@
 /**
  * Retrieves a pointer to the image's filename.
  *
- * @param img	The image
+ * @param img The image.
  *
  * @return A pointer to the filename, which must not
  *         be freed or modified.
@@ -139,7 +155,7 @@
  * Looks at the magic numbers of the image data (the first few bytes)
  * and returns an extension corresponding to the image's file type.
  *
- * @param img  The image.
+ * @param img The image.
  *
  * @return The image's extension (for example "png") or "icon"
  *         if unknown.
@@ -175,7 +191,7 @@
  * purple_imgstore_ref(), so if you have a PurpleStoredImage, it'll
  * be more efficient to call purple_imgstore_ref() directly.
  *
- * @param id		The ID for the image.
+ * @param id The ID for the image.
  */
 void purple_imgstore_ref_by_id(int id);
 
@@ -186,7 +202,7 @@
  * purple_imgstore_unref(), so if you have a PurpleStoredImage, it'll
  * be more efficient to call purple_imgstore_unref() directly.
  *
- * @param id		The ID for the image.
+ * @param id The ID for the image.
  */
 void purple_imgstore_unref_by_id(int id);
 
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/log.c
--- a/libpurple/log.c	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/log.c	Tue Feb 12 13:57:27 2013 +0100
@@ -1763,7 +1763,7 @@
 	index_tmp = g_strdup_printf("%s.XXXXXX", pathstr);
 	if ((index_fd = g_mkstemp(index_tmp)) == -1) {
 		purple_debug_error("log", "Failed to open index temp file: %s\n",
-		                 g_strerror(errno));
+		                   g_strerror(errno));
 		g_free(pathstr);
 		g_free(index_tmp);
 		index = NULL;
@@ -1771,7 +1771,7 @@
 		if ((index = fdopen(index_fd, "wb")) == NULL)
 		{
 			purple_debug_error("log", "Failed to fdopen() index temp file: %s\n",
-			                 g_strerror(errno));
+			                   g_strerror(errno));
 			close(index_fd);
 			if (index_tmp != NULL)
 			{
@@ -1827,7 +1827,6 @@
 					log->logger_data = data;
 					list = g_list_prepend(list, log);
 
-					/* XXX: There is apparently Is there a proper way to print a time_t? */
 					if (index != NULL)
 						fprintf(index, "%d\t%d\t%lu\n", data->offset, data->length, (unsigned long)log->time);
 				}
@@ -1887,9 +1886,8 @@
 			log->logger_data = data;
 			list = g_list_prepend(list, log);
 
-			/* XXX: Is there a proper way to print a time_t? */
 			if (index != NULL)
-				fprintf(index, "%d\t%d\t%d\n", data->offset, data->length, (int)log->time);
+				fprintf(index, "%d\t%d\t%lu\n", data->offset, data->length, (unsigned long)log->time);
 		}
 	}
 
@@ -2022,7 +2020,7 @@
 		/* Search the buddy list to find the account and to determine if this is a buddy. */
 		for (gnode = purple_blist_get_root();
 		     !found && gnode != NULL;
-			 gnode = purple_blist_node_get_sibling_next(gnode))
+		     gnode = purple_blist_node_get_sibling_next(gnode))
 		{
 			if (!PURPLE_BLIST_NODE_IS_GROUP(gnode))
 				continue;
@@ -2036,7 +2034,7 @@
 
 				for (bnode = purple_blist_node_get_first_child(cnode);
 				     !found && bnode != NULL;
-					 bnode = purple_blist_node_get_sibling_next(bnode))
+				     bnode = purple_blist_node_get_sibling_next(bnode))
 				{
 					PurpleBuddy *buddy = (PurpleBuddy *)bnode;
 
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/plugins/log_reader.c
--- a/libpurple/plugins/log_reader.c	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/plugins/log_reader.c	Tue Feb 12 13:57:27 2013 +0100
@@ -921,7 +921,6 @@
 		xmlnode *to;
 		enum name_guesses name_guessed = NAME_GUESS_UNKNOWN;
 		const char *their_name;
-		time_t time_unix;
 		struct tm *tm;
 		char *timestamp;
 		char *tmp;
@@ -1104,7 +1103,7 @@
 			text = g_string_append(text, ";\">");
 		}
 
-		time_unix = msn_logger_parse_timestamp(message, &tm);
+		msn_logger_parse_timestamp(message, &tm);
 
 		timestamp = g_strdup_printf("<font size=\"2\">(%02u:%02u:%02u)</font> ",
 				tm->tm_hour, tm->tm_min, tm->tm_sec);
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/plugins/ssl/Makefile.mingw
--- a/libpurple/plugins/ssl/Makefile.mingw	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/plugins/ssl/Makefile.mingw	Tue Feb 12 13:57:27 2013 +0100
@@ -19,7 +19,6 @@
 			$(NSS_TOP)/lib/libplc4.dll \
 			$(NSS_TOP)/lib/libplds4.dll \
 			$(NSS_TOP)/lib/nss3.dll \
-			$(NSS_TOP)/lib/nssckbi.dll \
 			$(NSS_TOP)/lib/nssutil3.dll \
 			$(NSS_TOP)/lib/smime3.dll \
 			$(NSS_TOP)/lib/softokn3.dll \
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/plugins/ssl/ssl-nss.c
--- a/libpurple/plugins/ssl/ssl-nss.c	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/plugins/ssl/ssl-nss.c	Tue Feb 12 13:57:27 2013 +0100
@@ -125,18 +125,8 @@
 static void
 ssl_nss_init_nss(void)
 {
-	char *lib;
 	PR_Init(PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1);
 	NSS_NoDB_Init(".");
-
-	/* TODO: Fix this so autoconf does the work trying to find this lib. */
-#ifndef _WIN32
-	lib = g_strdup(LIBDIR "/libnssckbi.so");
-#else
-	lib = g_strdup("nssckbi.dll");
-#endif
-	SECMOD_AddNewModule("Builtins", lib, 0, 0);
-	g_free(lib);
 	NSS_SetDomesticPolicy();
 
 	SSL_CipherPrefSetDefault(TLS_DHE_RSA_WITH_AES_256_CBC_SHA, 1);
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/plugins/tcl/signal-test.tcl
--- a/libpurple/plugins/tcl/signal-test.tcl	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/plugins/tcl/signal-test.tcl	Tue Feb 12 13:57:27 2013 +0100
@@ -108,7 +108,7 @@
 	purple::debug -info "tcl signal" "plugin-unload [list $args]"
 }
 
-purple::signal connect [purple::savedstatuses handle] savedstatus-changed args {
+purple::signal connect [purple::savedstatus handle] savedstatus-changed args {
 	purple::debug -info "tcl signal" "savedstatus-changed [list $args]"
 	purple::debug -info "tcl signal" "purple::savedstatus current = [purple::savedstatus current]"
 }
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/plugins/tcl/tcl.c
--- a/libpurple/plugins/tcl/tcl.c	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/plugins/tcl/tcl.c	Tue Feb 12 13:57:27 2013 +0100
@@ -174,37 +174,17 @@
 	Tcl_Interp *interp;
 	Tcl_Parse parse;
 	Tcl_Obj *result, **listitems;
-	struct stat st;
-	FILE *fp;
-	char *buf, *cur;
+	char *buf;
 	const char *next;
-	int len, found = 0, err = 0, nelems;
+	int found = 0, err = 0, nelems;
+	gsize len;
 	gboolean status = FALSE;
-	if ((fp = g_fopen(plugin->path, "r")) == NULL)
-		return FALSE;
-	if (fstat(fileno(fp), &st)) {
-		fclose(fp);
+
+	if (!g_file_get_contents(plugin->path, &buf, &len, NULL)) {
+		purple_debug(PURPLE_DEBUG_INFO, "tcl", "Error opening plugin %s\n",
+			     plugin->path);
 		return FALSE;
 	}
-	len = st.st_size;
-
-	buf = g_malloc(len + 1);
-
-	cur = buf;
-	while (fgets(cur, GPOINTER_TO_INT(buf) - (buf - cur), fp)) {
-		cur += strlen(cur);
-		if (feof(fp))
-			break;
-	}
-
-	if (ferror(fp)) {
-		purple_debug(PURPLE_DEBUG_ERROR, "tcl", "error reading %s (%s)\n", plugin->path, g_strerror(errno));
-		g_free(buf);
-		fclose(fp);
-		return FALSE;
-	}
-
-	fclose(fp);
 
 	if ((interp = tcl_create_interp()) == NULL) {
 		return FALSE;
diff -r b120a1fe399e -r 4dac888f3d5e libpurple/protocols/bonjour/bonjour_ft.c
--- a/libpurple/protocols/bonjour/bonjour_ft.c	Sun Nov 04 12:38:21 2012 -0500
+++ b/libpurple/protocols/bonjour/bonjour_ft.c	Tue Feb 12 13:57:27 2013 +0100
@@ -33,7 +33,7 @@
 static void
 bonjour_bytestreams_init(PurpleXfer *xfer);
 static void
-bonjour_bytestreams_connect(PurpleXfer *xfer, PurpleBuddy *pb);
+bonjour_bytestreams_connect(PurpleXfer *xfer);
 static void
 bonjour_xfer_init(PurpleXfer *xfer);
 static void
@@ -280,6 +280,25 @@
 	xep_iq_send_and_free(iq);
 }
 
+/**
+ * Frees the whole tree of an xml node
+ *
+ * First determines the root of the xml tree and then frees the whole tree
+ * from there.
+ *
+ * @param node	The node to free the tree from
+ */
+static void
+xmlnode_free_tree(xmlnode *node)
+{
+	g_return_if_fail(node != NULL);
+
+	while(xmlnode_get_parent(node))
+		node = xmlnode_get_parent(node);
+
+	xmlnode_free(node);
+}
+
 static void
 bonjour_free_xfer(PurpleXfer *xfer)
 {
@@ -310,6 +329,9 @@
 		g_free(xf->proxy_host);
 		g_free(xf->buddy_ip);
 		g_free(xf->sid);
+
+		xmlnode_free_tree(xf->streamhost);
+
 		g_free(xf);
 		xfer->data = NULL;
 	}
@@ -440,7 +462,7 @@
 		if (si && (profile = xmlnode_get_attrib(si, "profile"))
 				&& !strcmp(profile, "http://jabber.org/protocol/si/profile/file-transfer")) {
 			const char *filename = NULL, *filesize_str = NULL;
-			int filesize = 0;
+			goffset filesize = 0;
 			xmlnode *file;
 
 			const char *sid = xmlnode_get_attrib(si, "id");
@@ -448,7 +470,7 @@
 			if ((file = xmlnode_get_child(si, "file"))) {
 				filename = xmlnode_get_attrib(file, "name");
 				if((filesize_str = xmlnode_get_attrib(file, "size")))
-					filesize = atoi(filesize_str);
+					filesize = g_ascii_strtoll(filesize_str, NULL, 10);
 			}
 
 			/* TODO: Make sure that it is advertising a bytestreams transfer */
@@ -546,20 +568,98 @@
 	return !strcmp(host, buddy_ip);
 }
 
+static inline gint
+xep_addr_differ(const char *buddy_ip, const char *host)
+{
+	return !xep_cmp_addr(host, buddy_ip);
+}
+
+/**
+ * Create and insert an identical twin
+ *
+ * Creates a copy of the specified node and inserts it right after
+ * this original node.
+ *
+ * @param node	The node to clone
+ * @return	A pointer to the new, cloned twin if successful
+ *		or NULL otherwise.
+ */
+static xmlnode *
+xmlnode_insert_twin_copy(xmlnode *node) {
+	xmlnode *copy;
+
+	g_return_val_if_fail(node != NULL, NULL);
+
+	copy = xmlnode_copy(node);
+	g_return_val_if_fail(copy != NULL, NULL);
+
+	copy->next = node->next;
+	node->next = copy;
+
+	return copy;
+}
+
+/**
+ * Tries to append an interface scope to an IPv6 link local address.
+ *
+ * If the given address is a link local IPv6 address (with no
+ * interface scope) then we try to determine all fitting interfaces
+ * from our Bonjour IP address list.
+ *
+ * For any such found matches we insert a copy of our current xml
+ * streamhost entry right after this streamhost entry and append
+ * the determined interface to the host address of this copy.
+ *
+ * @param cur_streamhost	The XML streamhost node we examine
+ * @param host	The host address to examine in text form
+ * @param pb	Buddy to get the list of link local IPv6 addresses
+ *		and their interface from
+ * @return	Returns TRUE if the specified 'host' address is a
+ *		link local IPv6 address with no interface scope.
+ *		Otherwise returns FALSE.
+ */
 static gboolean
-__xep_bytestreams_parse(PurpleBuddy *pb, PurpleXfer *xfer, xmlnode *query,
+add_ipv6_link_local_ifaces(xmlnode *cur_streamhost, const char *host,
+			   const PurpleBuddy *pb) {
+	xmlnode *new_streamhost = NULL;
+	struct in6_addr in6_addr;
+	BonjourBuddy *bb;
+	GSList *ip_elem;
+
+	if (inet_pton(AF_INET6, host, &in6_addr) != 1 ||
+	    !IN6_IS_ADDR_LINKLOCAL(&in6_addr) ||
+	    strchr(host, '%'))
+		return FALSE;
+
+	bb = purple_buddy_get_protocol_data(pb);
+
+	for (ip_elem = bb->ips;
+	     (ip_elem = g_slist_find_custom(ip_elem, host, (GCompareFunc)&xep_addr_differ));
+	     ip_elem = ip_elem->next) {
+		purple_debug_info("bonjour", "Inserting an xmlnode twin copy for %s with new host address %s\n",
+				  host, (char*)ip_elem->data);
+		new_streamhost = xmlnode_insert_twin_copy(cur_streamhost);
+		xmlnode_set_attrib(new_streamhost, "host", ip_elem->data);
+	}
+
+	if (!new_streamhost)
+		purple_debug_info("bonjour", "No interface for this IPv6 link local address found: %s\n",
+				  host);
+
+	return TRUE;
+}
+
+static gboolean
+__xep_bytestreams_parse(PurpleBuddy *pb, PurpleXfer *xfer, xmlnode *streamhost,
 			const char *iq_id)
 {
+	char *tmp_iq_id;
 	const char *jid, *host, *port;
 	int portnum;
-	xmlnode *streamhost;
 	XepXfer *xf = NULL;
 
 	xf = (XepXfer*)xfer->data;
-	for(streamhost = xmlnode_get_child(query, "streamhost");
-			streamhost;
-			streamhost = xmlnode_get_next_twin(streamhost)) {
-
+	for(; streamhost; streamhost = xmlnode_get_next_twin(streamhost)) {
 		if(!(jid = xmlnode_get_attrib(streamhost, "jid")) ||
 		   !(host = xmlnode_get_attrib(streamhost, "host")) ||
 		   !(port = xmlnode_get_attrib(streamhost, "port")) ||
@@ -568,29 +668,36 @@
 			continue;
 		}
 
-		if(!xep_cmp_addr(host, xf->buddy_ip))
+		/* skip IPv6 link local addresses with no interface scope
+		 * (but try to add a new one with an interface scope then) */
+		if(add_ipv6_link_local_ifaces(streamhost, host, pb))
 			continue;
 
+		tmp_iq_id = g_strdup(iq_id);
 		g_free(xf->iq_id);
-		xf->iq_id = g_strdup(iq_id);
+		g_free(xf->jid);
+		g_free(xf->proxy_host);
+
+		xf->iq_id = tmp_iq_id;
 		xf->jid = g_strdup(jid);
-		xf->proxy_host = g_strdup(xf->buddy_ip);
+		xf->proxy_host = g_strdup(host);
 		xf->proxy_port = portnum;
+		xf->streamhost = streamhost;
+		xf->pb = pb;
 		purple_debug_info("bonjour", "bytestream offer parse"
 				  "jid=%s host=%s port=%d.\n", jid, host, portnum);
-		bonjour_bytestreams_connect(xfer, pb);
+		bonjour_bytestreams_connect(xfer);
 		return TRUE;
 	}
 
 	return FALSE;
 }
 
-
 void
 xep_bytestreams_parse(PurpleConnection *pc, xmlnode *packet, PurpleBuddy *pb)
 {
 	const char *type, *from, *iq_id, *sid;
-	xmlnode *query;
+	xmlnode *query, *streamhost;
 	BonjourData *bd;
 	PurpleXfer *xfer;
 
@@ -610,6 +717,10 @@
 	if(!type)
 		return;
 
+	query = xmlnode_copy(query);
+	if (!query)
+		return;
+
 	if(strcmp(type, "set")) {
 		purple_debug_info("bonjour", "bytestream offer Message type - Unknown-%s.\n", type);
 		return;
@@ -621,7 +732,9 @@
 
 	sid = xmlnode_get_attrib(query, "sid");
 	xfer = bonjour_si_xfer_find(bd, sid, from);
-	if(xfer && __xep_bytestreams_parse(pb, xfer, query, iq_id))
+	streamhost = xmlnode_get_child(query, "streamhost");
+




More information about the commits mailing list