libpurple 32945:4df995b359d3: Added tag v2.10.11 for changeset e...

commits at adium.im commits at adium.im
Wed Mar 9 11:41:28 UTC 2016


details:	http://hg.adium.im/libpurple/rev/4df995b359d3
revision:	32945:4df995b359d3
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Sun Nov 23 08:41:11 2014 -0800

Added tag v2.10.11 for changeset e38a9aa5b1f8
Subject: libpurple 32946:fb41de6b6fbb: 2.10.11 has been tagged, so switch this back to dev mode.

details:	http://hg.adium.im/libpurple/rev/fb41de6b6fbb
revision:	32946:fb41de6b6fbb
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Sun Nov 23 08:55:30 2014 -0800

2.10.11 has been tagged, so switch this back to dev mode.
Subject: libpurple 32947:1648d789c7d2: Fix a typo causing the nss-prefs plugin to be named ".dll" on Windows

details:	http://hg.adium.im/libpurple/rev/1648d789c7d2
revision:	32947:1648d789c7d2
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Sun Nov 23 22:10:05 2014 -0500

Fix a typo causing the nss-prefs plugin to be named ".dll" on Windows

 * This has the unfortunate effect of making it not loaded on startup
Subject: libpurple 32948:f02f7d1fb4d5: Fix some URLs in the installer to be https

details:	http://hg.adium.im/libpurple/rev/f02f7d1fb4d5
revision:	32948:f02f7d1fb4d5
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Sun Nov 23 22:10:25 2014 -0500

Fix some URLs in the installer to be https
Subject: libpurple 32949:2b41ba1fde8a: Fix send-video enum typo

details:	http://hg.adium.im/libpurple/rev/2b41ba1fde8a
revision:	32949:2b41ba1fde8a
branch:		release-2.x.y
author:		Youness Alaoui <kakaroto at kakaroto.homelinux.net>
date:		Mon Jun 30 16:17:42 2014 -0400

Fix send-video enum typo

Refs #16315
Subject: libpurple 32950:b52be4fef1de: Fix gstreamer elements references

details:	http://hg.adium.im/libpurple/rev/b52be4fef1de
revision:	32950:b52be4fef1de
branch:		release-2.x.y
author:		Youness Alaoui <kakaroto at kakaroto.homelinux.net>
date:		Tue Jul 08 22:59:58 2014 -0400

Fix gstreamer elements references
In backend-fs2, the create_src will unref the src after it's done with
it, if we simply return the created source, it will segfault.
The issue never happened before because every source so far also has
the UNIQUE flag, which causes it to go in a different branch of the
code which does ref the element and add it to the bin.

Refs #16315
Subject: libpurple 32951:e7949b2aa31a: Gadu-Gadu: fix log printing for win32

details:	http://hg.adium.im/libpurple/rev/e7949b2aa31a
revision:	32951:e7949b2aa31a
branch:		release-2.x.y
author:		Tomasz Wasilczyk <twasilczyk at pidgin.im>
date:		Mon Nov 24 16:12:01 2014 +0100

Gadu-Gadu: fix log printing for win32
Subject: libpurple 32952:20467cdcdbdd: Gadu-Gadu: fix a possible buffer overflow. Fixes #16482

details:	http://hg.adium.im/libpurple/rev/20467cdcdbdd
revision:	32952:20467cdcdbdd
branch:		release-2.x.y
author:		Tomasz Wasilczyk <twasilczyk at pidgin.im>
date:		Wed Dec 03 14:46:28 2014 +0100

Gadu-Gadu: fix a possible buffer overflow. Fixes #16482
Subject: libpurple 32953:7012c84d4d3b: Backport part of Tomasz' e5cc097d6c82 so that we don't need to pull dns_sd.h from Apple's hard to download SDK.

details:	http://hg.adium.im/libpurple/rev/7012c84d4d3b
revision:	32953:7012c84d4d3b
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Tue Dec 16 18:06:37 2014 -0500

Backport part of Tomasz' e5cc097d6c82 so that we don't need to pull dns_sd.h from Apple's hard to download SDK.

 * Also eliminate unused direct linking to the dnssd library

Fixes #16507
Subject: libpurple 32954:cd5a6082cb27: Remove remaining references to LINK_DNS_SD_DIRECTLY. Refs #16507

details:	http://hg.adium.im/libpurple/rev/cd5a6082cb27
revision:	32954:cd5a6082cb27
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Wed Dec 17 14:14:57 2014 +0000

Remove remaining references to LINK_DNS_SD_DIRECTLY. Refs #16507
Subject: libpurple 32955:41f86d6ff6b0: win32: update gtk+ download to generate a source zip. Refs #16502

details:	http://hg.adium.im/libpurple/rev/41f86d6ff6b0
revision:	32955:41f86d6ff6b0
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Thu Dec 25 23:26:55 2014 -0500

win32: update gtk+ download to generate a source zip. Refs #16502
Subject: libpurple 32956:0c5162e5ad8f: Update NSS to 3.17.3 for the windows build

details:	http://hg.adium.im/libpurple/rev/0c5162e5ad8f
revision:	32956:0c5162e5ad8f
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Fri Dec 26 14:55:22 2014 -0500

Update NSS to 3.17.3 for the windows build
Subject: libpurple 32957:c269ff46a1de: Update SILC to 1.1.12 for the windows build

details:	http://hg.adium.im/libpurple/rev/c269ff46a1de
revision:	32957:c269ff46a1de
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Sat Dec 27 21:37:00 2014 -0500

Update SILC to 1.1.12 for the windows build
Subject: libpurple 32958:7db4c37e259c: Update Cyrus SASL to 2.1.26 for the windows build

details:	http://hg.adium.im/libpurple/rev/7db4c37e259c
revision:	32958:7db4c37e259c
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Thu Jan 01 15:00:05 2015 -0500

Update Cyrus SASL to 2.1.26 for the windows build
Subject: libpurple 32959:2b4af2e09a67: Update windows build to use perl 5.20.1. Thanks to Renato Silva for much of this. Fixes #15599

details:	http://hg.adium.im/libpurple/rev/2b4af2e09a67
revision:	32959:2b4af2e09a67
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Thu Jan 01 19:40:48 2015 -0500

Update windows build to use perl 5.20.1. Thanks to Renato Silva for much of this. Fixes #15599

 * Remove the stuff for looking up ActivePerl (and MIT Kerberos) at startup and installation
Subject: libpurple 32960:e62018761459: Update uninstaller to remove the perl stuff explicitly instead of the recursive directory

details:	http://hg.adium.im/libpurple/rev/e62018761459
revision:	32960:e62018761459
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Thu Jan 01 19:49:42 2015 -0500

Update uninstaller to remove the perl stuff explicitly instead of the recursive directory
Subject: libpurple 32961:5f13fc3f8597: Since we build silc, cyrus with mingw, we can use the same process for stripping and debug symbols

details:	http://hg.adium.im/libpurple/rev/5f13fc3f8597
revision:	32961:5f13fc3f8597
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Thu Jan 01 19:54:54 2015 -0500

Since we build silc, cyrus with mingw, we can use the same process for stripping and debug symbols
Subject: libpurple 32962:7fc761c95d44: win32: remove support for Tcl plugins

details:	http://hg.adium.im/libpurple/rev/7fc761c95d44
revision:	32962:7fc761c95d44
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Thu Jan 01 21:09:33 2015 -0500

win32: remove support for Tcl plugins
Subject: libpurple 32963:2357ddbd0381: win32: remove support for Tcl plugins

details:	http://hg.adium.im/libpurple/rev/2357ddbd0381
revision:	32963:2357ddbd0381
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Thu Jan 01 23:03:12 2015 -0500

win32: remove support for Tcl plugins
Subject: libpurple 32964:8571189a124e: win32: Update libxml2 to 2.9.2

details:	http://hg.adium.im/libpurple/rev/8571189a124e
revision:	32964:8571189a124e
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Thu Jan 01 23:49:55 2015 -0500

win32: Update libxml2 to 2.9.2
Subject: libpurple 32965:714ba418d0aa: win32: Update zlib to 1.2.8

details:	http://hg.adium.im/libpurple/rev/714ba418d0aa
revision:	32965:714ba418d0aa
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Thu Jan 01 23:57:00 2015 -0500

win32: Update zlib to 1.2.8

 * This is in the Gtk zip, so we bump the install version (won't be finalized until we release)
Subject: libpurple 32966:6b4576edf2a6: Add out-of-band DTMF support and dialpad to use it

details:	http://hg.adium.im/libpurple/rev/6b4576edf2a6
revision:	32966:6b4576edf2a6
branch:		release-2.x.y
author:		David Woodhouse <David.Woodhouse at intel.com>
date:		Fri Mar 06 21:03:03 2015 +0000

Add out-of-band DTMF support and dialpad to use it

This is a backport of e4c122196b08 from the trunk. It adds the UI and
farstream backend support for sending DTMF.

Fixes #15575
Subject: libpurple 32967:2415067473ba: Support GStreamer 1.x and resync with trunk

details:	http://hg.adium.im/libpurple/rev/2415067473ba
revision:	32967:2415067473ba
branch:		release-2.x.y
author:		David Woodhouse <David.Woodhouse at intel.com>
date:		Wed Mar 11 11:39:19 2015 +0000

Support GStreamer 1.x and resync with trunk
Subject: libpurple 32968:fcecf7f838e2: Add MS-TURN TCP support

details:	http://hg.adium.im/libpurple/rev/fcecf7f838e2
revision:	32968:fcecf7f838e2
branch:		release-2.x.y
author:		Jakub Adam <jakub.adam at ktknet.cz>
date:		Wed Apr 23 07:31:30 2014 +0200

Add MS-TURN TCP support

The old TCP support never worked. Older versions of farstream defined
FS_NETWORK_PROTOCOL_TCP but there were even *tests* to ensure that any
attempt to use it would result in FS_ERROR_INVALID_ARGUMENTS.

This adds the three variants of TCP support that are now supported in
farstream 0.2.6 onwards, and bumps the requirement in configure.ac
accordingly.

Olivier says the Google ones should probably be passive. Since they
never worked anyway, I'm not going to lose too much sleep over them.

[dwmw2: reworked to remain compatible with the farstream 0.1 build]
Subject: libpurple 32969:a0906e7a6bae: Implement media encryption

details:	http://hg.adium.im/libpurple/rev/a0906e7a6bae
revision:	32969:a0906e7a6bae
branch:		release-2.x.y
author:		Jakub Adam <jakub.adam at ktknet.cz>
date:		Thu Mar 12 01:05:29 2015 +0000

Implement media encryption
Subject: libpurple 32970:5f5abd63c305: media: Add a send-rtcp-mux API to allow muxing of RTP and RTCP

details:	http://hg.adium.im/libpurple/rev/5f5abd63c305
revision:	32970:5f5abd63c305
branch:		release-2.x.y
author:		Youness Alaoui <kakaroto at kakaroto.homelinux.net>
date:		Mon Aug 11 16:28:27 2014 -0400

media: Add a send-rtcp-mux API to allow muxing of RTP and RTCP
Subject: libpurple 32971:88b09a22b7c4: media: Send a signal when a candidate pair is established

details:	http://hg.adium.im/libpurple/rev/88b09a22b7c4
revision:	32971:88b09a22b7c4
branch:		release-2.x.y
author:		Youness Alaoui <kakaroto at kakaroto.homelinux.net>
date:		Tue Aug 05 19:23:09 2014 -0400

media: Send a signal when a candidate pair is established

This will be used for calling purple_media_set_send_rtcp_mux() where
appropriate.
Subject: libpurple 32972:a52798da5cfa: Bump farstream02 requirement to 0.2.7

details:	http://hg.adium.im/libpurple/rev/a52798da5cfa
revision:	32972:a52798da5cfa
branch:		release-2.x.y
author:		David Woodhouse <David.Woodhouse at intel.com>
date:		Fri Mar 13 13:43:39 2015 +0000

Bump farstream02 requirement to 0.2.7

The send-rtcp-mux functionality was added in 0.2.7. Let's try to keep a
cap on the number of variants of different functionality we support, and
make it possible to know that if we're using GStreamer 1.x, we *do* have
the RTCP mux support.
Subject: libpurple 32973:a071658c3725: Add purple_xfer_{read,write}_file functions

details:	http://hg.adium.im/libpurple/rev/a071658c3725
revision:	32973:a071658c3725
branch:		release-2.x.y
author:		David Woodhouse <David.Woodhouse at intel.com>
date:		Thu Mar 12 02:46:19 2015 +0000

Add purple_xfer_{read,write}_file functions

Backport these functions from 3.x because the SIPE plugin wants to use them
for file transfer.
Subject: libpurple 32974:8e4fa54f1662: media: ensure nonunique source is removed from pipeline when unlinked

details:	http://hg.adium.im/libpurple/rev/8e4fa54f1662
revision:	32974:8e4fa54f1662
branch:		release-2.x.y
author:		Jakub Adam <jakub.adam at ktknet.cz>
date:		Thu Oct 02 23:46:22 2014 +0200

media: ensure nonunique source is removed from pipeline when unlinked
Subject: libpurple 32975:7767aaeade64: media: make "init-media" signal handler optional

details:	http://hg.adium.im/libpurple/rev/7767aaeade64
revision:	32975:7767aaeade64
branch:		release-2.x.y
author:		Jakub Adam <jakub.adam at ktknet.cz>
date:		Tue Aug 12 14:39:08 2014 +0200

media: make "init-media" signal handler optional

Change the logic so that the PurpleMedia instance isn't disposed when
"init-media" has no connected handlers.

We want the media object freed only when some signal callback function
explicitly returns FALSE, indicating an error during the initialization.

This is mostly useful for the imminent addition of private media streams.
Subject: libpurple 32976:d729a9b21265: Add Private media API

details:	http://hg.adium.im/libpurple/rev/d729a9b21265
revision:	32976:d729a9b21265
branch:		release-2.x.y
author:		Youness Alaoui <kakaroto at kakaroto.homelinux.net>
date:		Mon Jul 07 16:27:42 2014 -0400

Add Private media API

Creating a private media can be useful for plugins that want to create a
PurpleMedia for internal use without the front-end being notified of its
creation.
Subject: libpurple 32977:4fe1034f3dce: Add application media type and APIs

details:	http://hg.adium.im/libpurple/rev/4fe1034f3dce
revision:	32977:4fe1034f3dce
branch:		release-2.x.y
author:		Youness Alaoui <kakaroto at kakaroto.homelinux.net>
date:		Mon Jul 21 17:53:41 2014 -0400

Add application media type and APIs

Fixes #16315
Subject: libpurple 32978:3eaa9ecc46d7: Add (empty) Breton translation

details:	http://hg.adium.im/libpurple/rev/3eaa9ecc46d7
revision:	32978:3eaa9ecc46d7
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Thu Mar 19 18:30:02 2015 -0500

Add (empty) Breton translation

Gwenn Meynier <tornoz at laposte.net> is the translator.
Subject: libpurple 32979:4c07e7d0d67e: Fix ALL_LINGUAS

details:	http://hg.adium.im/libpurple/rev/4c07e7d0d67e
revision:	32979:4c07e7d0d67e
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Thu Mar 19 18:31:33 2015 -0500

Fix ALL_LINGUAS

There are more .po files than existing in ALL_LINGUAS.  If this was
intentional, please revert (or ask me to).
Subject: libpurple 32980:e04475998840: Bring back the Armenian translation

details:	http://hg.adium.im/libpurple/rev/e04475998840
revision:	32980:e04475998840
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Thu Mar 19 18:41:40 2015 -0500

Bring back the Armenian translation

I've approved a request in Transifex. I asked for a name and email
address for the About box.
Subject: libpurple 32981:bc480f3150cb: Update the Nepali translator

details:	http://hg.adium.im/libpurple/rev/bc480f3150cb
revision:	32981:bc480f3150cb
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Fri Mar 20 15:01:04 2015 -0500

Update the Nepali translator

>From what I can see, this translation has not been updated in some
time.  We have someone interested, so I'm changing the designated
translator.  If I've made a mistake and the previous translator was
active, we can revert this and put the two in touch.
Subject: libpurple 32982:a4ed97c80b1d: Add Certum as a root CA

details:	http://hg.adium.im/libpurple/rev/a4ed97c80b1d
revision:	32982:a4ed97c80b1d
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Fri Mar 20 15:11:59 2015 -0500

Add Certum as a root CA

Eldar Zaitov <eldar at kyprizel.net> reported:
  after you changed TLS verification behavior in 2.10.10, a lot of
  Yandex (Russian biggest search engine and one of biggest mail
  services) experience problems accessing XMPP services.

The certificates I added were verified in the following ways:
  1) The files came from my Ubuntu system's ca-certificates package.
  2) I compared them to the certificates in my Firefox.
  3) I downloaded them via HTTPS from Certum and compared.
Subject: libpurple 32983:69efd0ff9b9a: Update the link for ETSI ES 202 130

details:	http://hg.adium.im/libpurple/rev/69efd0ff9b9a
revision:	32983:69efd0ff9b9a
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Sat Mar 21 19:30:07 2015 -0500

Update the link for ETSI ES 202 130
Subject: libpurple 32984:2b41c6ce5c4f: Add a new Malay (Malaysia) translator

details:	http://hg.adium.im/libpurple/rev/2b41c6ce5c4f
revision:	32984:2b41c6ce5c4f
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Sat Mar 21 19:46:59 2015 -0500

Add a new Malay (Malaysia) translator
Subject: libpurple 32985:4e2ee271e0e1: Fix compilation error when USE_VV is not defined.

details:	http://hg.adium.im/libpurple/rev/4e2ee271e0e1
revision:	32985:4e2ee271e0e1
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Thu Mar 26 09:43:03 2015 +0200

Fix compilation error when USE_VV is not defined.
Subject: libpurple 32986:f042686b83c0: Need to define _XOPEN_SOURCE with a value.

details:	http://hg.adium.im/libpurple/rev/f042686b83c0
revision:	32986:f042686b83c0
branch:		release-2.x.y
author:		Andrew Victor <andrew.victor at mxit.com>
date:		Thu Mar 26 09:45:05 2015 +0200

Need to define _XOPEN_SOURCE with a value.
(Reported by Diego Nieto Cid)
Subject: libpurple 32987:2b103a0ad899: Moving ?ric Boumaour to the retired translator list.

details:	http://hg.adium.im/libpurple/rev/2b103a0ad899
revision:	32987:2b103a0ad899
branch:		release-2.x.y
author:		Mark Doliner <mark at kingant.net>
date:		Sun Apr 05 10:51:18 2015 -0700

Moving ?ric Boumaour to the retired translator list.

Per his request to translators-owner at pidgin.im
Subject: libpurple 32988:358594a1aef9: Remove PurpleMediaCipher and PurpleMediaAuthentication enums

details:	http://hg.adium.im/libpurple/rev/358594a1aef9
revision:	32988:358594a1aef9
branch:		release-2.x.y
author:		David Woodhouse <David.Woodhouse at intel.com>
date:		Tue Apr 07 22:40:50 2015 +0100

Remove PurpleMediaCipher and PurpleMediaAuthentication enums

As noted in commit 37248ac9dbb9, these only exist in 2.x.y and not
master. This was a mistake ? they were removed during review/testing
but I evidently failed to remove them completely when backporting the
changes to 2.x.y. This code really *should* be the same in 2.x.y and
master.
Subject: libpurple 32989:695838796082: GEnumValue nick should not have spaces, makes g-ir-scanner unhappy.

details:	http://hg.adium.im/libpurple/rev/695838796082
revision:	32989:695838796082
branch:		release-2.x.y
author:		Ankit Vani <a at nevitus.org>
date:		Fri Apr 10 13:27:57 2015 +0530

GEnumValue nick should not have spaces, makes g-ir-scanner unhappy.
Subject: libpurple 32990:cf498d4b54bb: Update internal libgadu to 1.12.1

details:	http://hg.adium.im/libpurple/rev/cf498d4b54bb
revision:	32990:cf498d4b54bb
branch:		release-2.x.y
author:		Tomasz Wasilczyk <twasilczyk at pidgin.im>
date:		Sat May 09 14:54:05 2015 +0200

Update internal libgadu to 1.12.1
Subject: libpurple 32991:b6e40b0435e1: Add commas to the list of debug options

details:	http://hg.adium.im/libpurple/rev/b6e40b0435e1
revision:	32991:b6e40b0435e1
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Tue Jun 02 18:37:07 2015 -0500

Add commas to the list of debug options

This was suggested by kingu on Transifex.
Subject: libpurple 32992:187b51ce9922: Check that we actually don't have opened a tab with conversation we want to open.

details:	http://hg.adium.im/libpurple/rev/187b51ce9922
revision:	32992:187b51ce9922
branch:		release-2.x.y
author:		Mat?j Cepl <mcepl at cepl.eu>
date:		Fri Jun 05 13:48:19 2015 -0400

Check that we actually don't have opened a tab with conversation we want to open.
Subject: libpurple 32993:af9b5ba022db: Use G_GSIZE_FORMAT instead of G_GOFFSET_FORMAT - the latter is wrong for the datatype

details:	http://hg.adium.im/libpurple/rev/af9b5ba022db
revision:	32993:af9b5ba022db
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Wed Jun 10 20:59:07 2015 -0400

Use G_GSIZE_FORMAT instead of G_GOFFSET_FORMAT - the latter is wrong for the datatype
(it also requires a too-new glib version)
Subject: libpurple 32994:b61329019afe: Ad a check to make sure that connect_data is valid before freeing it to avoid double-frees

details:	http://hg.adium.im/libpurple/rev/b61329019afe
revision:	32994:b61329019afe
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Wed Jun 10 21:00:19 2015 -0400

Ad a check to make sure that connect_data is valid before freeing it to avoid double-frees

 * Fixes #16536
Subject: libpurple 32995:7e315013fb73: notify: Add support for notifications for system messages

details:	http://hg.adium.im/libpurple/rev/7e315013fb73
revision:	32995:7e315013fb73
branch:		release-2.x.y
author:		Sebastian Schmidt <yath at yath.de>
date:		Wed Jun 10 21:34:31 2015 -0400

notify: Add support for notifications for system messages

Very minor tweaks from Daniel Atallah

Fixes #16526
Subject: libpurple 32996:136a5e95a1ad: Fix warning introduced in 187b51ce9922

details:	http://hg.adium.im/libpurple/rev/136a5e95a1ad
revision:	32996:136a5e95a1ad
branch:		release-2.x.y
author:		Daniel Atallah <datallah at pidgin.im>
date:		Mon Jun 15 09:13:34 2015 -0400

Fix warning introduced in 187b51ce9922
Subject: libpurple 32997:5b46f15834d9: Add a note for translators

details:	http://hg.adium.im/libpurple/rev/5b46f15834d9
revision:	32997:5b46f15834d9
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Wed Aug 05 12:24:06 2015 -0500

Add a note for translators

This is being done in response to a question received on Transifex.
Subject: libpurple 32998:c00a1fd0d27b: Change a warning in the installer

details:	http://hg.adium.im/libpurple/rev/c00a1fd0d27b
revision:	32998:c00a1fd0d27b
branch:		release-2.x.y
author:		Richard Laager <rlaager at pidgin.im>
date:		Wed Aug 05 12:32:22 2015 -0500

Change a warning in the installer

kingu, a translator, said that "doesn't appear to be already present"
could be just "doesn't appear to be present".  I agreed, but also
reworded "present" to "installed" (which seems more obvious and is
consistent with the rest of the sentence), and expanded the "doesn't"
contraction into "does not".

If any of this is controversial, I don't care strongly and can revert.
Subject: libpurple 32999:79fe6b95f105: Fix a race condition in appsrc read/write callbacks

details:	http://hg.adium.im/libpurple/rev/79fe6b95f105
revision:	32999:79fe6b95f105
branch:		release-2.x.y
author:		Jakub Adam <jakub.adam at ktknet.cz>
date:		Fri Aug 21 10:35:41 2015 +0200

Fix a race condition in appsrc read/write callbacks

We can't use writable_timer_id as a token because the timeout is added
into libpurple's main event loop, which runs in a different thread than
from where call_appsrc_writable_locked() was called. Consequently, the
callback may run even before purple_timeout_add() returns the timer ID
to us.

The same applies to readable_timer_id in call_appsink_readable_locked().
Subject: libpurple 33000:b4e5abab1114: Don't render smileys in the History plugin's headers. Fixes #16747

details:	http://hg.adium.im/libpurple/rev/b4e5abab1114
revision:	33000:b4e5abab1114
branch:		release-2.x.y
author:		Michael McConville <mmcconville at mykolab.com>
date:		Mon Sep 07 14:59:13 2015 -0400

Don't render smileys in the History plugin's headers. Fixes #16747
Subject: libpurple 33001:902b1fd334bd: Remove Gstreamer pipeline after playing a sound

details:	http://hg.adium.im/libpurple/rev/902b1fd334bd
revision:	33001:902b1fd334bd
branch:		release-2.x.y
author:		Jorge Villase?or <salinasv at pidgin.im>
date:		Wed Oct 07 23:39:22 2015 -0700

Remove Gstreamer pipeline after playing a sound

When receiving an error or stream finished message, we can free the
Gstreamer pipeline so we don't leak it for each sound.

Patch from Sorokin Alexei, modified by me because the mediamanager
subsystem uses a different approach to watch the bus.
Fixes #16752
Subject: libpurple 33002:cbc4db14444c: Don't require appsink be drained in appsink_readable

details:	http://hg.adium.im/libpurple/rev/cbc4db14444c
revision:	33002:cbc4db14444c
branch:		release-2.x.y
author:		Jakub Adam <jakub.adam at ktknet.cz>
date:		Thu Oct 08 12:50:16 2015 +0200

Don't require appsink be drained in appsink_readable

When appsink_readable was entered, it kept invoking the read callback
as long as there were some unread data available. This may have led to
infinite loop when the application decided it wasn't convenient to read
the whole input buffer just now.

This change removes the while loop and if some data are left in the
buffer, appsink_readable returns TRUE in order to be scheduled again.
Control returns to the main loop and another events get a chance to
be processed.
Subject: libpurple 33003:d8de636e63df: Fix for AIM when using gateway proxies

details:	http://hg.adium.im/libpurple/rev/d8de636e63df
revision:	33003:d8de636e63df
branch:		release-2.x.y
author:		Youness Alaoui <kakaroto at kakaroto.homelinux.net>
date:		Wed Oct 14 19:32:15 2015 -0700

Fix for AIM when using gateway proxies

The issue here is that smoe gateway proxies (such as smarsh.com) will
terminate a connection to some services (such as the BART service in
the case with the Smarsh proxy) at which point the flap_connection gets
scheduled for termination and will then check if there are any LOCATE
services connections available, if there are none, it will sign out.
The problem is that the flap_connection_getbytype call will only return
connections that are 'connected' (passed auth) but since the MD5 authentication
method, it never sets any connection to connected, so it thinks there are
no LOCATE connections and signs out.
This should fix other bugs that might be affected by the API call
flap_connection_getbytype returning NULL when it shouldn't.
This should fix issue #14917 : https://developer.pidgin.im/ticket/14917

Reviewed by: Jorge Villase?or <salinasv at pidgin.im>
Backported from default
Subject: libpurple 33004:c2588f1dcd10: Fix compilation

details:	http://hg.adium.im/libpurple/rev/c2588f1dcd10
revision:	33004:c2588f1dcd10
branch:		release-2.x.y
author:		Bjoern Voigt <bjoern at cs.tu-berlin.de>
date:		Sun Nov 01 20:17:08 2015 -0600

Fix compilation

FlapConnection (defined in libpurple/protocols/oscar/oscar.h) really
has no member "conn".

Reviewed-by: Richard Laager <rlaager at wiktel.com>
Subject: libpurple 33005:b788e0305cc0: Fix memory leak in recursive URL parsing

details:	http://hg.adium.im/libpurple/rev/b788e0305cc0
revision:	33005:b788e0305cc0
branch:		release-2.x.y
author:		dequis <dx at dxzone.com.ar
date:		Sat Nov 07 13:35:51 2015 -0500

Fix memory leak in recursive URL parsing
Subject: libpurple 33006:a5a43a84a61f: Update shout.svg and shout.png to match theme. Fixes #8311

details:	http://hg.adium.im/libpurple/rev/a5a43a84a61f
revision:	33006:a5a43a84a61f
branch:		release-2.x.y
author:		Steve Vaught <Steven.D.Vaught at gmail.com>
date:		Sun Nov 16 01:40:25 2014 -0500

Update shout.svg and shout.png to match theme. Fixes #8311
(grafted from ba23590365e320a93d40f746884473579d09db1a)
Subject: libpurple 33007:78408ad717bd: Make purlpe-url-handler work with Python 3

details:	http://hg.adium.im/libpurple/rev/78408ad717bd
revision:	33007:78408ad717bd
branch:		release-2.x.y
author:		Dani?l van Eeden <hg at myname.nl>
date:		Thu Jul 09 07:35:21 2015 +0200

Make purlpe-url-handler work with Python 3

- use print as function
- new exception syntax
- chang in urllib unquote
(grafted from 0a113082ec3a71c9670deab19b03a598192c8f9d)
Subject: libpurple 33008:8c851c1bc85b: Ensure backwards compatibility with Python 2

details:	http://hg.adium.im/libpurple/rev/8c851c1bc85b
revision:	33008:8c851c1bc85b
branch:		release-2.x.y
author:		Dani?l van Eeden <hg at myname.nl>
date:		Sun Jul 12 18:16:36 2015 +0200

Ensure backwards compatibility with Python 2

Use python (which often defaults to python 2.x) instead of forcing python2
Also make it compatible with python 2.7 and 3.4

Tested with:
$ python2.7 libpurple/purple-url-handler xmpp:foo at example.com
$ python3.4 libpurple/purple-url-handler xmpp:bar at example.com
(grafted from a6f8c7cbdb24eb7113268beede61db120f940917)
Subject: libpurple 33009:6d73f0f635f9: Import the print function to make

details:	http://hg.adium.im/libpurple/rev/6d73f0f635f9
revision:	33009:6d73f0f635f9
branch:		release-2.x.y
author:		Dani?l van Eeden <hg at myname.nl>
date:		Tue Dec 22 19:33:34 2015 +0100

Import the print function to make

This makes Python 2.7 behave more like 3.x
(grafted from 23aa214a723e61868b15efd64765e73c27a3c745)
Subject: libpurple 33010:ae398bcf92b9: Make irc work with Python3

details:	http://hg.adium.im/libpurple/rev/ae398bcf92b9
revision:	33010:ae398bcf92b9
branch:		release-2.x.y
author:		Dani?l van Eeden <hg at myname.nl>
date:		Wed Dec 23 11:28:46 2015 +0100

Make irc work with Python3
(grafted from 2f8eb8108b6381014bd90b6245181840c519f19b)
Subject: libpurple 33011:c5f76443d99d: Update the ChangeLog for the accepted pull requests

details:	http://hg.adium.im/libpurple/rev/c5f76443d99d
revision:	33011:c5f76443d99d
branch:		release-2.x.y
author:		Gary Kramlich <grim at reaperworld.com>
date:		Wed Dec 23 22:18:47 2015 -0600

Update the ChangeLog for the accepted pull requests
Subject: libpurple 33012:968ef3b0caed: Fix #16762 where transient startup statuses could be deleted on exit

details:	http://hg.adium.im/libpurple/rev/968ef3b0caed
revision:	33012:968ef3b0caed
branch:		release-2.x.y
author:		Jakub Adam <jakub.adam at ktknet.cz>
date:		Tue Dec 29 18:41:57 2015 -0600

Fix #16762 where transient startup statuses could be deleted on exit
Subject: libpurple 33013:a5d1c14b6021: Backed out 187b51ce9922 because it breaks rejoining XMPP MUCs (maybe others) upon reconnection (trac ticket #16724)

details:	http://hg.adium.im/libpurple/rev/a5d1c14b6021
revision:	33013:a5d1c14b6021
branch:		release-2.x.y
author:		dx <dx at dxzone.com.ar>
date:		Wed Dec 30 20:05:58 2015 -0300

Backed out 187b51ce9922 because it breaks rejoining XMPP MUCs (maybe others) upon reconnection (trac ticket #16724)
Subject: libpurple 33014:43646e59a8d3: Fix up POTFILES.skip to deal with intltool bug in distcheck

details:	http://hg.adium.im/libpurple/rev/43646e59a8d3
revision:	33014:43646e59a8d3
branch:		release-2.x.y
author:		Ethan Blanton <elb at pidgin.im>
date:		Wed Dec 30 23:48:04 2015 -0500

Fix up POTFILES.skip to deal with intltool bug in distcheck
Subject: libpurple 33015:25dd9b2d35be: Set the date for the release

details:	http://hg.adium.im/libpurple/rev/25dd9b2d35be
revision:	33015:25dd9b2d35be
branch:		release-2.x.y
author:		Gary Kramlich <grim at reaperworld.com>
date:		Thu Dec 31 17:15:54 2015 -0600

Set the date for the release
Subject: libpurple 33016:2ac1dcb9eb2e: Bump the version for release

details:	http://hg.adium.im/libpurple/rev/2ac1dcb9eb2e
revision:	33016:2ac1dcb9eb2e
branch:		release-2.x.y
author:		Gary Kramlich <grim at reaperworld.com>
date:		Thu Dec 31 17:16:41 2015 -0600

Bump the version for release
Subject: libpurple 33017:8d2874a79747: Merged v2.10.12 into adium-1.5.x.

details:	http://hg.adium.im/libpurple/rev/8d2874a79747
revision:	33017:8d2874a79747
branch:		adium-1.5.x
author:		Thijs Alkemade <me at thijsalkema.de>
date:		Wed Mar 09 12:40:23 2016 +0100

Merged v2.10.12 into adium-1.5.x.

diffs (truncated from 76415 to 1000 lines):

diff -r e38a9aa5b1f8 -r 8d2874a79747 .hgtags
--- a/.hgtags	Sun Nov 23 00:03:11 2014 +0100
+++ b/.hgtags	Wed Mar 09 12:40:23 2016 +0100
@@ -4,3 +4,4 @@
 5010e6877abce3bfc2a4912e6b38fed7d6d3df19 v2.10.8
 9438f4b2904d9574b9e6ffba463d354b3661139f v2.10.9
 b7fedd2a570b760f252cf8a65a584137ab0af2cb v2.10.10
+e38a9aa5b1f8d25c58a0a7da05b386f265cba6e3 v2.10.11
diff -r e38a9aa5b1f8 -r 8d2874a79747 COPYRIGHT
--- a/COPYRIGHT	Sun Nov 23 00:03:11 2014 +0100
+++ b/COPYRIGHT	Wed Mar 09 12:40:23 2016 +0100
@@ -480,6 +480,7 @@
 Toby Schaffer
 Jonathan Schleifer <js-pidgin at webkeks.org>
 Luke Schierer
+Sebastian Schmidt <yath at yath.de>
 Ralph Schmieder
 David Schmitt
 Heiko Schmitt
@@ -504,6 +505,7 @@
 Shreevatsa R
 Dylan Simon <dylan at dylex.net>
 Ettore Simone
+Renato Silva
 John Silvestri
 Mukund Sivaraman
 Craig Slusher
diff -r e38a9aa5b1f8 -r 8d2874a79747 ChangeLog
--- a/ChangeLog	Sun Nov 23 00:03:11 2014 +0100
+++ b/ChangeLog	Wed Mar 09 12:40:23 2016 +0100
@@ -1,5 +1,26 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
+version 2.10.12 (12/31/15):
+	General:
+	* purple-url-handler now works with Python 3.x (Daniël van Eeden)
+	* Fixed an issue where transient startup statuses could be deleted
+	  (Jakub Adam) (#16762)
+
+	Pidgin:
+	* The shout smile now matches the default theme (Steve Vaught)
+
+	Windows-Specific Changes:
+	* Updates to dependencies:
+		* Cyrus SASL 2.1.26
+		* libxml2 2.9.2
+		* NSS 3.17.3 and NSPR 4.10.7
+		* Perl 5.20.1
+		* SILC 1.1.12
+	* Remove support for Tcl plugins
+
+	Gadu-Gadu:
+	* Updated internal libgadu to version 1.12.1.
+
 version 2.10.11 (11/23/14):
 	General:
 	* Fix handling of Self-Signed SSL/TLS Certificates when using the NSS
diff -r e38a9aa5b1f8 -r 8d2874a79747 ChangeLog.API
--- a/ChangeLog.API	Sun Nov 23 00:03:11 2014 +0100
+++ b/ChangeLog.API	Wed Mar 09 12:40:23 2016 +0100
@@ -1,5 +1,8 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
+version 2.10.12:
+	* No changes
+
 version 2.10.11:
 	* No changes
 
diff -r e38a9aa5b1f8 -r 8d2874a79747 Makefile.mingw
--- a/Makefile.mingw	Sun Nov 23 00:03:11 2014 +0100
+++ b/Makefile.mingw	Wed Mar 09 12:40:23 2016 +0100
@@ -31,7 +31,7 @@
     exit; \
 }' VERSION)
 
-GTK_INSTALL_VERSION = 2.16.6.2
+GTK_INSTALL_VERSION = 2.16.6.3
 
 ifdef SIGNTOOL
 authenticode_sign = $(SIGNTOOL) sign \
@@ -59,12 +59,8 @@
 # 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
 EXTERNAL_DLLS = \
-	comerr32.dll \
 	exchndl.dll \
 	freebl3.dll \
-	gssapi32.dll \
-	k5sprt32.dll \
-	krb5_32.dll \
 	libenchant.dll \
 	libenchant_ispell.dll \
 	libenchant_myspell.dll \
@@ -73,19 +69,9 @@
 	libnspr4.dll \
 	libplc4.dll \
 	libplds4.dll \
-	libsasl.dll \
 	libssp-0.dll \
-	libxml2-2.dll \
 	nss3.dll \
 	nssutil3.dll \
-	saslANONYMOUS.dll \
-	saslCRAMMD5.dll \
-	saslDIGESTMD5.dll \
-	saslGSSAPI.dll \
-	saslLOGIN.dll \
-	saslPLAIN.dll \
-	libsilc-1-1-2.dll \
-	libsilcclient-1-1-3.dll \
 	smime3.dll \
 	softokn3.dll \
 	sqlite3.dll \
diff -r e38a9aa5b1f8 -r 8d2874a79747 configure.ac
--- a/configure.ac	Sun Nov 23 00:03:11 2014 +0100
+++ b/configure.ac	Wed Mar 09 12:40:23 2016 +0100
@@ -46,7 +46,7 @@
 m4_define([purple_lt_current], [10])
 m4_define([purple_major_version], [2])
 m4_define([purple_minor_version], [10])
-m4_define([purple_micro_version], [11])
+m4_define([purple_micro_version], [12])
 m4_define([purple_version_suffix], [])
 m4_define([purple_version],
           [purple_major_version.purple_minor_version.purple_micro_version])
@@ -304,7 +304,7 @@
 	GETTEXT_PACKAGE=pidgin
 	AC_SUBST(GETTEXT_PACKAGE)
 
-	ALL_LINGUAS="af am ar ast az be at latin bg bn bn_IN bs ca ca at valencia cs da de dz el en_AU en_CA en_GB eo es et eu fa fi fr ga gl gu he hi hr hu id it ja ka kk km kn ko ku ku_IQ lt lv mai mhr mk mn mr my_MM nb ne nl nn oc or pa pl pt_BR pt ps ro ru si sk sl sq sr sr at latin sv sw ta te th tr tt uk ur vi xh zh_CN zh_HK zh_TW"
+	ALL_LINGUAS="af am ar as ast az be at latin bg bn_IN bn br brx bs ca ca at valencia cs da de dz el en_AU en_CA en_GB eo es_AR es et eu fa fi fr ga gl gu he hi hr hu id it ja ka kk km kn ko ks ku_IQ ku lt lv mai mhr mk ml mn mr ms_MY my_MM nb ne nl nn oc or pa pl ps pt_BR pt ro ru sd si sk sl sq sr at latin sr sv sw ta te th tr tt uk ur uz vi xh zh_CN zh_HK zh_TW"
 	AM_GLIB_GNU_GETTEXT
 
 	dnl If we don't have msgfmt, then po/ is going to fail -- ensure that
@@ -741,42 +741,115 @@
 dnl #######################################################################
 dnl # Check for GStreamer
 dnl #######################################################################
-dnl
-dnl TODO: Depend on gstreamer >= 0.10.10, and remove the conditional use of
-dnl       gst_registry_fork_set_enabled.
 AC_ARG_ENABLE(gstreamer,
-	[AC_HELP_STRING([--disable-gstreamer], [compile without GStreamer audio support])],
+	[AS_HELP_STRING([--disable-gstreamer], [compile without GStreamer audio support])],
 	enable_gst="$enableval", enable_gst="yes")
+AC_ARG_WITH(gstreamer, [AS_HELP_STRING([--with-gstreamer=<version>],
+		[compile with GStreamer 0.10 or 1.0 interface (default: auto)])],
+	with_gstreamer="$withval", with_gstreamer="auto")
 if test "x$enable_gst" != "xno"; then
-	PKG_CHECK_MODULES(GSTREAMER, [gstreamer-0.10], [
-		AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for playing sounds])
-		AC_SUBST(GSTREAMER_CFLAGS)
-		AC_SUBST(GSTREAMER_LIBS)
-		AC_CHECK_LIB(gstreamer-0.10, gst_registry_fork_set_enabled,
-			[ AC_DEFINE(GST_CAN_DISABLE_FORKING, [],
-			  [Define if gst_registry_fork_set_enabled exists])],
-			[], [$GSTREAMER_LIBS])
-	], [
-		AC_MSG_RESULT(no)
-		enable_gst="no"
-		if test "x$force_deps" = "xyes" ; then
-			AC_MSG_ERROR([
+	if test "x$with_gstreamer" == "xauto"; then
+		PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0], [
+			AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for playing sounds])
+			with_gstreamer="1.0"
+			AC_SUBST(GSTREAMER_CFLAGS)
+			AC_SUBST(GSTREAMER_LIBS)
+			dnl Check whether forking stuff is required for this version.
+		], [
+			PKG_CHECK_MODULES(GSTREAMER, [gstreamer-0.10], [
+				AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for playing sounds])
+				with_gstreamer="0.10"
+				AC_SUBST(GSTREAMER_CFLAGS)
+				AC_SUBST(GSTREAMER_LIBS)
+			], [
+				AC_MSG_RESULT(no)
+				enable_gst="no"
+				if test "x$force_deps" = "xyes" ; then
+					AC_MSG_ERROR([
 GStreamer development headers not found.
 Use --disable-gstreamer if you do not need GStreamer (sound) support.
 ])
-		fi])
+				fi
+			])
+		])
+	elif test "x$with_gstreamer" == "x1.0"; then
+		PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0], [
+			AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer 1.0 for playing sounds])
+			AC_SUBST(GSTREAMER_CFLAGS)
+			AC_SUBST(GSTREAMER_LIBS)
+		], [
+			AC_MSG_RESULT(no)
+			enable_gst="no"
+			if test "x$force_deps" = "xyes" ; then
+				AC_MSG_ERROR([
+GStreamer development headers not found.
+Use --disable-gstreamer if you do not need GStreamer (sound) support.
+])
+			fi
+		])
+	elif test "x$with_gstreamer" == "x0.10"; then
+		PKG_CHECK_MODULES(GSTREAMER, [gstreamer-0.10], [
+			AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer 0.10 for playing sounds])
+			AC_SUBST(GSTREAMER_CFLAGS)
+			AC_SUBST(GSTREAMER_LIBS)
+		], [
+			AC_MSG_RESULT(no)
+			enable_gst="no"
+			if test "x$force_deps" = "xyes" ; then
+				AC_MSG_ERROR([
+GStreamer development headers not found.
+Use --disable-gstreamer if you do not need GStreamer (sound) support.
+])
+			fi
+		])
+	else
+		AC_MSG_ERROR([--with-gstreamer must specify one of 0.10, 1.0 or auto.])
+	fi
+fi
+
+if test "x$with_gtk" == "x3" -a "x$with_gstreamer" == "x0.10"; then
+	AC_MSG_ERROR([WebKitGTK+ 3.0 cannot be mixed with GStreamer 0.10.
+Please switch to WebKitGTK+ 2.0 or GStreamer 1.0.])
+elif test "x$with_gtk" == "x2" -a "x$with_gstreamer" == "x1.0"; then
+	AC_MSG_ERROR([WebKitGTK+ 2.0 cannot be mixed with GStreamer 1.0.
+Please switch to WebKitGTK+ 3.0 or GStreamer 0.10.])
+fi
+if test "x$with_gstreamer" == "x0.10" -o "x$with_gstreamer" == "x1.0"; then
+	AC_SUBST(GSTREAMER_VER, [$with_gstreamer])
+else
+	AC_SUBST(GSTREAMER_VER, "")
+fi
+
+dnl #######################################################################
+dnl # Check for GStreamer Video
+dnl #######################################################################
+if test "x$enable_gst" != "xno" -a "x$with_gstreamer" == "x1.0"; then
+	AC_ARG_ENABLE(gstreamer-video,
+		[AS_HELP_STRING([--disable-gstreamer-video], [compile without GStreamer 1.0 Video Overlay support])],
+			enable_gstvideo="$enableval", enable_gstvideo="yes")
+	if test "x$enable_gstvideo" != "xno"; then
+		PKG_CHECK_MODULES(GSTVIDEO, [gstreamer-video-1.0], [
+			AC_DEFINE(USE_GSTVIDEO, 1, [Use GStreamer Video Overlay support])
+			AC_SUBST(GSTVIDEO_CFLAGS)
+			AC_SUBST(GSTVIDEO_LIBS)
+		], [
+			enable_gstvideo="no"
+		])
+	fi
+else
+	enable_gstvideo="no"
 fi
 
 dnl #######################################################################
 dnl # Check for GStreamer Interfaces
 dnl #######################################################################
-if test "x$enable_gst" != "xno"; then
+if test "x$enable_gst" != "xno" -a "x$with_gstreamer" == "x0.10"; then
 	AC_ARG_ENABLE(gstreamer-interfaces,
-		[AC_HELP_STRING([--disable-gstreamer-interfaces], [compile without GStreamer interface support])],
+		[AS_HELP_STRING([--disable-gstreamer-interfaces], [compile without GStreamer 0.10 interface support])],
 			enable_gstinterfaces="$enableval", enable_gstinterfaces="yes")
 	if test "x$enable_gstinterfaces" != "xno"; then
 		PKG_CHECK_MODULES(GSTINTERFACES, [gstreamer-interfaces-0.10], [
-			AC_DEFINE(USE_GSTINTERFACES, 1, [Use GStreamer interfaces for X overlay support])
+			AC_DEFINE(USE_GSTINTERFACES, 1, [Use GStreamer 0.10 interfaces for X overlay support])
 			AC_SUBST(GSTINTERFACES_CFLAGS)
 			AC_SUBST(GSTINTERFACES_LIBS)
 		], [
@@ -791,32 +864,43 @@
 dnl # Check for Farstream
 dnl #######################################################################
 AC_ARG_ENABLE(farstream,
-	[AC_HELP_STRING([--disable-farstream], [compile without farstream support])],
+	[AS_HELP_STRING([--disable-farstream], [compile without farstream support])],
 	enable_farstream="$enableval", enable_farstream="yes")
 if test "x$enable_farstream" != "xno"; then
-	PKG_CHECK_MODULES(FARSTREAM, [farstream-0.1], [
-		AC_SUBST(FARSTREAM_CFLAGS)
-		AC_SUBST(FARSTREAM_LIBS)
- 	], [
-		# Try farsight.
-		PKG_CHECK_MODULES(FARSTREAM, [farsight2-0.10 >= 0.0.9], [
-		        AC_DEFINE(HAVE_FARSIGHT, 1, [Use Farsight instead of Farstream])
+	if test "x$with_gstreamer" == "x1.0"; then
+		PKG_CHECK_MODULES(FARSTREAM, [farstream-0.2 >= 0.2.7], [
 			AC_SUBST(FARSTREAM_CFLAGS)
 			AC_SUBST(FARSTREAM_LIBS)
 		], [
 		        enable_farstream="no"
 		])
- 	])
- fi
+	else
+		PKG_CHECK_MODULES(FARSTREAM, [farstream-0.1], [
+			AC_SUBST(FARSTREAM_CFLAGS)
+			AC_SUBST(FARSTREAM_LIBS)
+		], [
+			# Try farsight.
+			PKG_CHECK_MODULES(FARSTREAM, [farsight2-0.10 >= 0.0.9], [
+			        AC_DEFINE(HAVE_FARSIGHT, 1, [Use Farsight instead of Farstream])
+				AC_SUBST(FARSTREAM_CFLAGS)
+				AC_SUBST(FARSTREAM_LIBS)
+			], [
+			        enable_farstream="no"
+			])
+		])
+	fi
+fi
 
 dnl #######################################################################
 dnl # Check for Voice and Video support
 dnl #######################################################################
 AC_ARG_ENABLE(vv,
-	[AC_HELP_STRING([--disable-vv], [compile without voice and video support])],
+	[AS_HELP_STRING([--disable-vv], [compile without voice and video support])],
 	enable_vv="$enableval", enable_vv="yes")
 if test "x$enable_vv" != "xno"; then
-	if test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno"; then
+	if test "x$enable_gst" != "xno" -a "x$with_gstreamer" == "x1.0" -a "x$enable_gstvideo" != "xno" -a "x$enable_farstream" != "xno"; then
+		AC_DEFINE(USE_VV, 1, [Use voice and video])
+	elif test "x$enable_gst" != "xno" -a "x$with_gstreamer" == "x0.10" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno"; then
 		AC_DEFINE(USE_VV, 1, [Use voice and video])
 	else
 		enable_vv="no"
@@ -829,7 +913,21 @@
 		fi
 	fi
 fi
-AM_CONDITIONAL(USE_VV, test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno")
+AM_CONDITIONAL(USE_VV, test "x$enable_vv" != "xno")
+
+dnl #######################################################################
+dnl # Check for Raw data streams support in Farstream 
+dnl #######################################################################
+if test "x$enable_vv" != "xno" -a "x$with_gstreamer" == "x1.0"; then
+	AC_MSG_CHECKING(for raw data support in Farstream)
+	PKG_CHECK_MODULES(GSTAPP, [gstreamer-app-1.0], [
+		AC_DEFINE(USE_GSTAPP, 1, [Use GStreamer Video Overlay support])
+		AC_SUBST(GSTAPP_CFLAGS)
+		AC_SUBST(GSTAPP_LIBS)
+		AC_DEFINE(HAVE_MEDIA_APPLICATION, 1, [Define if we have support for application media type.])
+		AC_MSG_RESULT(yes)
+		], [AC_MSG_RESULT(no)])
+fi
 
 dnl #######################################################################
 dnl # Check for Internationalized Domain Name support
@@ -2605,6 +2703,7 @@
 echo Protocols to link statically.. : $STATIC_PRPLS
 echo
 echo Build with GStreamer support.. : $enable_gst
+echo Build for GStreamer version... : $with_gstreamer
 echo Build with D-Bus support...... : $enable_dbus
 echo Build with voice and video.... : $enable_vv
 if test "x$enable_dbus" = "xyes" ; then
@@ -2658,3 +2757,4 @@
 echo configure complete, now type \'make\'
 echo
 
+
diff -r e38a9aa5b1f8 -r 8d2874a79747 finch/Makefile.am
--- a/finch/Makefile.am	Sun Nov 23 00:03:11 2014 +0100
+++ b/finch/Makefile.am	Wed Mar 09 12:40:23 2016 +0100
@@ -73,6 +73,7 @@
 	$(LIBXML_LIBS) \
 	$(GNT_LIBS) \
 	$(GSTREAMER_LIBS) \
+	$(GSTVIDEO_LIBS) \
 	./libgnt/libgnt.la \
 	$(top_builddir)/libpurple/libpurple.la
 
diff -r e38a9aa5b1f8 -r 8d2874a79747 finch/gntsound.c
--- a/finch/gntsound.c	Sun Nov 23 00:03:11 2014 +0100
+++ b/finch/gntsound.c	Wed Mar 09 12:40:23 2016 +0100
@@ -449,6 +449,7 @@
 	case GST_MESSAGE_EOS:
 		gst_element_set_state(play, GST_STATE_NULL);
 		gst_object_unref(GST_OBJECT(play));
+		return FALSE;
 		break;
 	case GST_MESSAGE_WARNING:
 		gst_message_parse_warning(msg, &err, NULL);
diff -r e38a9aa5b1f8 -r 8d2874a79747 libpurple/Makefile.am
--- a/libpurple/Makefile.am	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/Makefile.am	Wed Mar 09 12:40:23 2016 +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) \
@@ -308,9 +309,13 @@
 	$(INTLLIBS) \
 	$(FARSTREAM_LIBS) \
 	$(GSTREAMER_LIBS) \
+	$(GSTVIDEO_LIBS) \
+	$(GSTAPP_LIBS) \
 	$(GSTINTERFACES_LIBS) \
 	$(IDN_LIBS) \
 	ciphers/libpurple-ciphers.la \
+	$(SASL_LIBS) \
+	$(MEANWHILE_LIBS) \
 	-lm
 
 AM_CPPFLAGS = \
@@ -324,6 +329,8 @@
 	$(LIBXML_CFLAGS) \
 	$(FARSTREAM_CFLAGS) \
 	$(GSTREAMER_CFLAGS) \
+	$(GSTVIDEO_CFLAGS) \
+	$(GSTAPP_CFLAGS) \
 	$(GSTINTERFACES_CFLAGS) \
 	$(IDN_CFLAGS) \
 	$(NETWORKMANAGER_CFLAGS)
diff -r e38a9aa5b1f8 -r 8d2874a79747 libpurple/Makefile.mingw
--- a/libpurple/Makefile.mingw	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/Makefile.mingw	Wed Mar 09 12:40:23 2016 +0100
@@ -11,15 +11,13 @@
 NEEDED_DLLS = $(LIBXML2_TOP)/bin/libxml2-2.dll
 
 ifeq ($(CYRUS_SASL), 1)
-NEEDED_DLLS += $(CYRUS_SASL_TOP)/bin/libsasl.dll
+NEEDED_DLLS += $(CYRUS_SASL_TOP)/bin/libsasl2-3.dll
 
 CYRUS_SASL_PLUGINS = \
-                        $(CYRUS_SASL_TOP)/bin/sasl2/saslANONYMOUS.dll \
-                        $(CYRUS_SASL_TOP)/bin/sasl2/saslCRAMMD5.dll \
-                        $(CYRUS_SASL_TOP)/bin/sasl2/saslDIGESTMD5.dll \
-                        $(CYRUS_SASL_TOP)/bin/sasl2/saslGSSAPI.dll \
-                        $(CYRUS_SASL_TOP)/bin/sasl2/saslLOGIN.dll \
-                        $(CYRUS_SASL_TOP)/bin/sasl2/saslPLAIN.dll
+                        $(CYRUS_SASL_TOP)/lib/sasl2/libanonymous-3.dll \
+                        $(CYRUS_SASL_TOP)/lib/sasl2/libcrammd5-3.dll \
+                        $(CYRUS_SASL_TOP)/lib/sasl2/libdigestmd5-3.dll \
+                        $(CYRUS_SASL_TOP)/lib/sasl2/libplain-3.dll
 
 endif
 
diff -r e38a9aa5b1f8 -r 8d2874a79747 libpurple/account.c
--- a/libpurple/account.c	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/account.c	Wed Mar 09 12:40:23 2016 +0100
@@ -447,11 +447,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 e38a9aa5b1f8 -r 8d2874a79747 libpurple/blist.c
--- a/libpurple/blist.c	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/blist.c	Wed Mar 09 12:40:23 2016 +0100
@@ -924,7 +924,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 e38a9aa5b1f8 -r 8d2874a79747 libpurple/data/purple.pc.in
--- a/libpurple/data/purple.pc.in	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/data/purple.pc.in	Wed Mar 09 12:40:23 2016 +0100
@@ -5,6 +5,7 @@
 datarootdir=@datarootdir@
 datadir=@datadir@
 sysconfdir=@sysconfdir@
+gstreamer=@GSTREAMER_VER@
 
 plugindir=${libdir}/purple- at PURPLE_MAJOR_VERSION@
 
diff -r e38a9aa5b1f8 -r 8d2874a79747 libpurple/dnssrv.c
--- a/libpurple/dnssrv.c	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/dnssrv.c	Wed Mar 09 12:40:23 2016 +0100
@@ -1073,12 +1073,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);
 }
@@ -1089,7 +1094,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 e38a9aa5b1f8 -r 8d2874a79747 libpurple/example/Makefile.am
--- a/libpurple/example/Makefile.am	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/example/Makefile.am	Wed Mar 09 12:40:23 2016 +0100
@@ -8,6 +8,7 @@
 	$(INTLLIBS) \
 	$(GLIB_LIBS) \
 	$(LIBXML_LIBS) \
+	$(GSTVIDEO_LIBS) \
 	$(top_builddir)/libpurple/libpurple.la
 
 AM_CPPFLAGS = \
diff -r e38a9aa5b1f8 -r 8d2874a79747 libpurple/ft.c
--- a/libpurple/ft.c	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/ft.c	Wed Mar 09 12:40:23 2016 +0100
@@ -916,9 +916,10 @@
 purple_xfer_set_message(PurpleXfer *xfer, const char *message)
 {
 	g_return_if_fail(xfer != NULL);
-
-	g_free(xfer->message);
-	xfer->message = g_strdup(message);
+	if (message != xfer->message) {
+		g_free(xfer->message);
+		xfer->message = g_strdup(message);
+	}
 }
 
 void
@@ -926,8 +927,10 @@
 {
 	g_return_if_fail(xfer != NULL);
 
-	g_free(xfer->filename);
-	xfer->filename = g_strdup(filename);
+	if (filename != xfer->filename) {
+		g_free(xfer->filename);
+		xfer->filename = g_strdup(filename);
+	}
 }
 
 void
@@ -935,8 +938,10 @@
 {
 	g_return_if_fail(xfer != NULL);
 
-	g_free(xfer->local_filename);
-	xfer->local_filename = g_strdup(filename);
+	if (filename != xfer->local_filename) {
+		g_free(xfer->local_filename);
+		xfer->local_filename = g_strdup(filename);
+	}
 }
 
 void
@@ -1109,6 +1114,101 @@
 
 	return r;
 }
+gboolean
+purple_xfer_write_file(PurpleXfer *xfer, const guchar *buffer, gsize size)
+{
+	PurpleXferUiOps *ui_ops;
+	gsize wc;
+	gboolean fs_known;
+
+	g_return_val_if_fail(buffer != NULL, FALSE);
+
+	ui_ops = purple_xfer_get_ui_ops(xfer);
+	fs_known = (purple_xfer_get_size(xfer) > 0);
+
+	if (fs_known && size > purple_xfer_get_bytes_remaining(xfer)) {
+		purple_debug_warning("xfer",
+			"Got too much data (truncating at %" G_GSIZE_FORMAT
+			").\n", purple_xfer_get_size(xfer));
+		size = purple_xfer_get_bytes_remaining(xfer);
+	}
+
+	if (ui_ops && ui_ops->ui_write)
+		wc = ui_ops->ui_write(xfer, buffer, size);
+	else {
+		if (xfer->dest_fp == NULL) {
+			purple_debug_error("xfer",
+				"File is not opened for writing\n");
+			purple_xfer_cancel_local(xfer);
+			return FALSE;
+		}
+		wc = fwrite(buffer, 1, size, xfer->dest_fp);
+	}
+
+	if (wc != size) {
+		purple_debug_error("xfer",
+			"Unable to write whole buffer.\n");
+		purple_xfer_cancel_local(xfer);
+		return FALSE;
+	}
+
+	purple_xfer_set_bytes_sent(xfer, purple_xfer_get_bytes_sent(xfer) +
+		size);
+
+	return TRUE;
+}
+
+gssize
+purple_xfer_read_file(PurpleXfer *xfer, guchar *buffer, gsize size)
+{
+	PurpleXferUiOps *ui_ops;
+	gssize got_len;
+
+	g_return_val_if_fail(buffer != NULL, FALSE);
+
+	ui_ops = purple_xfer_get_ui_ops(xfer);
+
+	if (ui_ops && ui_ops->ui_read) {
+		guchar *buffer_got = NULL;
+
+		got_len = ui_ops->ui_read(xfer, &buffer_got, size);
+
+		if (got_len >= 0 && (gsize)got_len > size) {
+			g_free(buffer_got);
+			purple_debug_error("xfer",
+				"Got too much data from UI.\n");
+			purple_xfer_cancel_local(xfer);
+			return -1;
+		}
+
+		if (got_len > 0)
+			memcpy(buffer, buffer_got, got_len);
+		g_free(buffer_got);
+	} else {
+		if (xfer->dest_fp == NULL) {
+			purple_debug_error("xfer",
+				"File is not opened for reading\n");
+			purple_xfer_cancel_local(xfer);
+			return -1;
+		}
+		got_len = fread(buffer, 1, size, xfer->dest_fp);
+		if ((got_len < 0 || (gsize)got_len != size) &&
+			ferror(xfer->dest_fp))
+		{
+			purple_debug_error("xfer",
+				"Unable to read file.\n");
+			purple_xfer_cancel_local(xfer);
+			return -1;
+		}
+	}
+
+	if (got_len > 0) {
+		purple_xfer_set_bytes_sent(xfer,
+			purple_xfer_get_bytes_sent(xfer) + got_len);
+	}
+
+	return got_len;
+}
 
 static void
 do_transfer(PurpleXfer *xfer)
@@ -1686,8 +1786,9 @@
 {
 	PurpleXferPrivData *priv = g_hash_table_lookup(xfers_data, xfer);
 
-	g_free(priv->thumbnail_data);
-	g_free(priv->thumbnail_mimetype);
+	/* Hold onto these in case they are equal to passed-in pointers */
+	gpointer *old_thumbnail_data = priv->thumbnail_data;
+	const gchar *old_mimetype = priv->thumbnail_mimetype;
 
 	if (thumbnail && size > 0) {
 		priv->thumbnail_data = g_memdup(thumbnail, size);
@@ -1698,6 +1799,10 @@
 		priv->thumbnail_size = 0;
 		priv->thumbnail_mimetype = NULL;
 	}
+
+	/* Now it's safe to free the pointers */
+	g_free(old_thumbnail_data);
+	g_free(old_mimetype);
 }
 
 void
diff -r e38a9aa5b1f8 -r 8d2874a79747 libpurple/ft.h
--- a/libpurple/ft.h	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/ft.h	Wed Mar 09 12:40:23 2016 +0100
@@ -590,6 +590,35 @@
 gssize purple_xfer_write(PurpleXfer *xfer, const guchar *buffer, gsize size);
 
 /**
+ * Writes chunk of received file.
+ *
+ * @param xfer   The file transfer.
+ * @param buffer The buffer to read the data from.
+ * @param size   The number of bytes to write.
+ *
+ * @return TRUE on success, FALSE otherwise.
+ *
+ * @since 2.11.0
+ */
+gboolean
+purple_xfer_write_file(PurpleXfer *xfer, const guchar *buffer, gsize size);
+
+/**
+ * Writes chunk of file being sent.
+ *
+ * @param xfer   The file transfer.
+ * @param buffer The buffer to write the data to.
+ * @param size   The size of buffer.
+ *
+ * @return Number of bytes written (0 means, the device is busy), or -1 on
+ *         failure.
+ *
+ * @since 2.11.0
+ */
+gssize
+purple_xfer_read_file(PurpleXfer *xfer, guchar *buffer, gsize size);
+
+/**
  * Starts a file transfer.
  *
  * Either @a fd must be specified <i>or</i> @a ip and @a port on a
diff -r e38a9aa5b1f8 -r 8d2874a79747 libpurple/marshallers.list
--- a/libpurple/marshallers.list	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/marshallers.list	Wed Mar 09 12:40:23 2016 +0100
@@ -6,3 +6,4 @@
 VOID:ENUM,STRING,STRING,BOOLEAN
 VOID:FLAGS,FLAGS
 VOID:STRING,STRING,OBJECT,OBJECT
+VOID:POINTER,POINTER,OBJECT,OBJECT
diff -r e38a9aa5b1f8 -r 8d2874a79747 libpurple/media-gst.h
--- a/libpurple/media-gst.h	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/media-gst.h	Wed Mar 09 12:40:23 2016 +0100
@@ -71,6 +71,7 @@
 
 	PURPLE_MEDIA_ELEMENT_SRC = 1 << 9,		/** can be set as an active src */
 	PURPLE_MEDIA_ELEMENT_SINK = 1 << 10,		/** can be set as an active sink */
+	PURPLE_MEDIA_ELEMENT_APPLICATION = 1 << 11,	/** supports application data */
 } PurpleMediaElementType;
 
 #ifdef __cplusplus
diff -r e38a9aa5b1f8 -r 8d2874a79747 libpurple/media.c
--- a/libpurple/media.c	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/media.c	Wed Mar 09 12:40:23 2016 +0100
@@ -141,6 +141,7 @@
 	NEW_CANDIDATE,
 	STATE_CHANGED,
 	STREAM_INFO,
+	CANDIDATE_PAIR_ESTABLISHED,
 	LAST_SIGNAL
 };
 static guint purple_media_signals[LAST_SIGNAL] = {0};
@@ -274,6 +275,11 @@
 					 purple_smarshal_VOID__ENUM_STRING_STRING_BOOLEAN,
 					 G_TYPE_NONE, 4, PURPLE_MEDIA_TYPE_INFO_TYPE,
 					 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
+	purple_media_signals[CANDIDATE_PAIR_ESTABLISHED] = g_signal_new("candidate-pair-established", G_TYPE_FROM_CLASS(klass),
+					 G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+					 purple_smarshal_VOID__POINTER_POINTER_OBJECT_OBJECT,
+					 G_TYPE_NONE, 4, G_TYPE_POINTER, G_TYPE_POINTER,
+					 PURPLE_TYPE_MEDIA_CANDIDATE, PURPLE_TYPE_MEDIA_CANDIDATE);
 	g_type_class_add_private(klass, sizeof(PurpleMediaPrivate));
 }
 
@@ -1048,6 +1054,8 @@
 				purple_media_candidate_copy(
 				remote_candidate));
 
+	g_signal_emit(media, purple_media_signals[CANDIDATE_PAIR_ESTABLISHED],
+		0, sess_id, name, local_candidate, remote_candidate);
 	purple_debug_info("media", "candidate pair established\n");
 }
 
@@ -1276,6 +1284,34 @@
 }
 
 gboolean
+purple_media_set_encryption_parameters(PurpleMedia *media, const gchar *sess_id,
+		const gchar *cipher, const gchar *auth,
+		const gchar *key, gsize key_len)
+{
+#ifdef USE_VV
+	g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
+	return purple_media_backend_set_encryption_parameters(media->priv->backend,
+			sess_id, cipher, auth, key, key_len);
+#else
+	return FALSE;
+#endif
+}
+
+gboolean
+purple_media_set_decryption_parameters(PurpleMedia *media, const gchar *sess_id,
+		const gchar *participant, const gchar *cipher,
+		const gchar *auth, const gchar *key, gsize key_len)
+{
+#ifdef USE_VV
+	g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
+	return purple_media_backend_set_decryption_parameters(media->priv->backend,
+			sess_id, participant, cipher, auth, key, key_len);
+#else
+	return FALSE;
+#endif
+}
+
+gboolean
 purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id)
 {
 #ifdef USE_VV
@@ -1289,6 +1325,20 @@
 }
 
 gboolean
+purple_media_set_send_rtcp_mux(PurpleMedia *media, const gchar *sess_id,
+                               const gchar *participant, gboolean send_rtcp_mux)
+{
+#ifdef USE_VV
+	g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
+
+	return purple_media_backend_set_send_rtcp_mux(media->priv->backend,
+			sess_id, participant, send_rtcp_mux);
+#else
+	return FALSE;
+#endif
+}
+
+gboolean
 purple_media_is_initiator(PurpleMedia *media,
 		const gchar *sess_id, const gchar *participant)
 {
@@ -1439,3 +1489,46 @@
 }
 #endif /* USE_GSTREAMER */
 
+gboolean
+purple_media_send_dtmf(PurpleMedia *media, const gchar *session_id,
+		gchar dtmf, guint8 volume, guint16 duration)
+{
+#ifdef USE_VV
+	PurpleAccount *account = NULL;
+	PurpleConnection *gc = NULL;
+	PurplePlugin *prpl = NULL;
+	PurplePluginProtocolInfo *prpl_info = NULL;
+	PurpleMediaBackendIface *backend_iface = NULL;
+
+	if (media)
+	{
+		account = purple_media_get_account(media);
+		backend_iface = PURPLE_MEDIA_BACKEND_GET_INTERFACE(media->priv->backend);
+	}
+	if (account)
+		gc = purple_account_get_connection(account);
+	if (gc)
+		prpl = purple_connection_get_prpl(gc);
+	if (prpl)
+		prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
+
+	if (dtmf == 'a')
+		dtmf = 'A';
+	else if (dtmf == 'b')
+		dtmf = 'B';
+	else if (dtmf == 'c')
+		dtmf = 'C';
+	else if (dtmf == 'd')
+		dtmf = 'D';
+
+	g_return_val_if_fail(strchr("0123456789ABCD#*", dtmf), FALSE);
+
+	if (backend_iface && backend_iface->send_dtmf
+		&& backend_iface->send_dtmf(media->priv->backend,
+				session_id, dtmf, volume, duration))
+	{
+		return TRUE;
+	}
+#endif
+	return FALSE;
+}
diff -r e38a9aa5b1f8 -r 8d2874a79747 libpurple/media.h
--- a/libpurple/media.h	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/media.h	Wed Mar 09 12:40:23 2016 +0100
@@ -349,6 +349,43 @@
 gboolean purple_media_set_send_codec(PurpleMedia *media, const gchar *sess_id, PurpleMediaCodec *codec);
 
 /**
+ * Sets the encryption parameters of our media in the session.
+ *
+ * @param media The media object to find the session in.
+ * @param sess_id The session id of the session to set parameters of.
+ * @param cipher The cipher to use to encrypt our media in the session.
+ * @param auth The algorithm to use to compute authentication codes for our
+ *        media frames.
+ * @param key The encryption key.
+ * @param key_len Byte length of the encryption key.
+ *
+ * @since 2.11.0
+ */
+gboolean purple_media_set_encryption_parameters(PurpleMedia *media,
+		const gchar *sess_id, const gchar *cipher,
+		const gchar *auth, const gchar *key, gsize key_len);
+
+/**
+ * Sets the decryption parameters for a session participant's media.
+ *
+ * @param media The media object to find the session in.
+ * @param sess_id The session id of the session to set parameters of.
+ * @param participant The participant of the session to set parameters of.
+ * @param cipher The cipher to use to decrypt media coming from this session's
+ *          participant.
+ * @param auth The algorithm to use for authentication of the media coming
+ *        from the session's participant.
+ * @param key The decryption key.
+ * @param key_len Byte length of the decryption key.
+ *
+ * @since 2.11.0
+ */
+gboolean purple_media_set_decryption_parameters(PurpleMedia *media,
+		const gchar *sess_id, const gchar *participant,
+		const gchar *cipher, const gchar *auth,
+		const gchar *key, gsize key_len);
+
+/**
  * Gets whether a session's codecs are ready to be used.
  *
  * @param media The media object to find the session in.
@@ -361,6 +398,19 @@
 gboolean purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id);
 
 /**
+ * Sets the rtcp-mux option for the stream.
+ *
+ * @param media The media object to find the session in.
+ * @param sess_id The session id of the session find the stream in.
+ * @param participant The name of the remote user to set the rtcp-mux for.
+ * @paran send_rtcp_mux Whether to enable the rtcp-mux option
+ *
+ * @return @c TRUE RTCP-Mux was set successfully, or @c FALSE otherwise.
+ */
+gboolean purple_media_set_send_rtcp_mux(PurpleMedia *media,
+		const gchar *sess_id, const gchar *participant, gboolean send_rtcp_mux);
+
+/**
  * Gets whether the local user is the conference/session/stream's initiator.
  *
  * @param media The media instance to find the session in.
@@ -437,6 +487,21 @@
  */
 void purple_media_remove_output_windows(PurpleMedia *media);
 
+/**
+ * Sends a DTMF signal out-of-band.
+ *
+ * @param media The media instance to send a DTMF signal to.
+ * @param sess_id The session id of the session to send the DTMF signal on.
+ * @param dtmf The character representing the DTMF in the range [0-9#*A-D].
+ * @param volume The power level expressed in dBm0 after dropping the sign
+ *      in the range of 0 to 63.  A larger value represents a lower volume.
+ * @param duration The duration of the tone in milliseconds.
+ *
+ * @since 2.11
+ */
+gboolean purple_media_send_dtmf(PurpleMedia *media, const gchar *session_id,
+		gchar dtmf, guint8 volume, guint16 duration);
+
 #ifdef __cplusplus
 }
 #endif
diff -r e38a9aa5b1f8 -r 8d2874a79747 libpurple/media/backend-fs2.c
--- a/libpurple/media/backend-fs2.c	Sun Nov 23 00:03:11 2014 +0100
+++ b/libpurple/media/backend-fs2.c	Wed Mar 09 12:40:23 2016 +0100
@@ -41,6 +41,7 @@
 #include <farstream/fs-conference.h>
 #include <farstream/fs-element-added-notifier.h>
 #include <farstream/fs-utils.h>
+#include <gst/gststructure.h>
 #endif
 
 /** @copydoc _PurpleMediaBackendFs2Class */
@@ -84,6 +85,15 @@
 static GList *purple_media_backend_fs2_get_local_candidates(
 		PurpleMediaBackend *self,
 		const gchar *sess_id, const gchar *participant);
+#if GST_CHECK_VERSION(1,0,0)
+static gboolean purple_media_backend_fs2_set_encryption_parameters (
+	PurpleMediaBackend *self, const gchar *sess_id, const gchar *cipher,




More information about the commits mailing list