summaryrefslogtreecommitdiffstats
path: root/pidgin
diff options
context:
space:
mode:
authorpiernov <piernov@piernov.org>2012-04-09 16:52:40 +0200
committerpiernov <piernov@piernov.org>2012-04-09 16:53:03 +0200
commit15577b845f9cbeb46156b5b7e8718a19432a9ca2 (patch)
treeb2b4695d609acd51b4211ad4e2f7a6fd1f2595cf /pidgin
parentd6bc2efc138e655635e7e2fe39e16d044aae2c80 (diff)
downloadnutyx-extra-15577b845f9cbeb46156b5b7e8718a19432a9ca2.tar.gz
nutyx-extra-15577b845f9cbeb46156b5b7e8718a19432a9ca2.tar.bz2
nutyx-extra-15577b845f9cbeb46156b5b7e8718a19432a9ca2.tar.xz
nutyx-extra-15577b845f9cbeb46156b5b7e8718a19432a9ca2.zip
pidgin 2.10.3-1 màj port
Diffstat (limited to 'pidgin')
-rw-r--r--pidgin/.footprint.i68612
-rw-r--r--pidgin/.footprint.x86_6412
-rw-r--r--pidgin/.md5sum.i6864
-rw-r--r--pidgin/.md5sum.x86_644
-rw-r--r--pidgin/Pkgfile8
-rw-r--r--pidgin/port-to-farstream-rlaager-v1.patch666
-rw-r--r--pidgin/port-to-farstream-v3.patch447
7 files changed, 686 insertions, 467 deletions
diff --git a/pidgin/.footprint.i686 b/pidgin/.footprint.i686
index da31b0fa4..c2328f0b3 100644
--- a/pidgin/.footprint.i686
+++ b/pidgin/.footprint.i686
@@ -209,13 +209,13 @@ lrwxrwxrwx root/root usr/lib/libgnt.so -> libgnt.so.0.0.0
lrwxrwxrwx root/root usr/lib/libgnt.so.0 -> libgnt.so.0.0.0
-rwxr-xr-x root/root usr/lib/libgnt.so.0.0.0
-rwxr-xr-x root/root usr/lib/libpurple-client.la
-lrwxrwxrwx root/root usr/lib/libpurple-client.so -> libpurple-client.so.0.10.2
-lrwxrwxrwx root/root usr/lib/libpurple-client.so.0 -> libpurple-client.so.0.10.2
--rwxr-xr-x root/root usr/lib/libpurple-client.so.0.10.2
+lrwxrwxrwx root/root usr/lib/libpurple-client.so -> libpurple-client.so.0.10.3
+lrwxrwxrwx root/root usr/lib/libpurple-client.so.0 -> libpurple-client.so.0.10.3
+-rwxr-xr-x root/root usr/lib/libpurple-client.so.0.10.3
-rwxr-xr-x root/root usr/lib/libpurple.la
-lrwxrwxrwx root/root usr/lib/libpurple.so -> libpurple.so.0.10.2
-lrwxrwxrwx root/root usr/lib/libpurple.so.0 -> libpurple.so.0.10.2
--rwxr-xr-x root/root usr/lib/libpurple.so.0.10.2
+lrwxrwxrwx root/root usr/lib/libpurple.so -> libpurple.so.0.10.3
+lrwxrwxrwx root/root usr/lib/libpurple.so.0 -> libpurple.so.0.10.3
+-rwxr-xr-x root/root usr/lib/libpurple.so.0.10.3
drwxr-xr-x root/root usr/lib/perl5/
drwxr-xr-x root/root usr/lib/perl5/i686-linux-thread-multi/
-rw-r--r-- root/root usr/lib/perl5/i686-linux-thread-multi/perllocal.pod
diff --git a/pidgin/.footprint.x86_64 b/pidgin/.footprint.x86_64
index da31b0fa4..c2328f0b3 100644
--- a/pidgin/.footprint.x86_64
+++ b/pidgin/.footprint.x86_64
@@ -209,13 +209,13 @@ lrwxrwxrwx root/root usr/lib/libgnt.so -> libgnt.so.0.0.0
lrwxrwxrwx root/root usr/lib/libgnt.so.0 -> libgnt.so.0.0.0
-rwxr-xr-x root/root usr/lib/libgnt.so.0.0.0
-rwxr-xr-x root/root usr/lib/libpurple-client.la
-lrwxrwxrwx root/root usr/lib/libpurple-client.so -> libpurple-client.so.0.10.2
-lrwxrwxrwx root/root usr/lib/libpurple-client.so.0 -> libpurple-client.so.0.10.2
--rwxr-xr-x root/root usr/lib/libpurple-client.so.0.10.2
+lrwxrwxrwx root/root usr/lib/libpurple-client.so -> libpurple-client.so.0.10.3
+lrwxrwxrwx root/root usr/lib/libpurple-client.so.0 -> libpurple-client.so.0.10.3
+-rwxr-xr-x root/root usr/lib/libpurple-client.so.0.10.3
-rwxr-xr-x root/root usr/lib/libpurple.la
-lrwxrwxrwx root/root usr/lib/libpurple.so -> libpurple.so.0.10.2
-lrwxrwxrwx root/root usr/lib/libpurple.so.0 -> libpurple.so.0.10.2
--rwxr-xr-x root/root usr/lib/libpurple.so.0.10.2
+lrwxrwxrwx root/root usr/lib/libpurple.so -> libpurple.so.0.10.3
+lrwxrwxrwx root/root usr/lib/libpurple.so.0 -> libpurple.so.0.10.3
+-rwxr-xr-x root/root usr/lib/libpurple.so.0.10.3
drwxr-xr-x root/root usr/lib/perl5/
drwxr-xr-x root/root usr/lib/perl5/i686-linux-thread-multi/
-rw-r--r-- root/root usr/lib/perl5/i686-linux-thread-multi/perllocal.pod
diff --git a/pidgin/.md5sum.i686 b/pidgin/.md5sum.i686
index ef34d7d94..3ec31f809 100644
--- a/pidgin/.md5sum.i686
+++ b/pidgin/.md5sum.i686
@@ -1,2 +1,2 @@
-f2b210f2562865d870f193ff1fe8ea75 pidgin-2.10.2.tar.bz2
-096df49da643fcee15dc1d521c93fb19 port-to-farstream-v3.patch
+c2f799d45a934a2f0075e32ce49906e6 pidgin-2.10.3.tar.bz2
+b5b85f95ab7eae271a375b50c7a1ac28 port-to-farstream-rlaager-v1.patch
diff --git a/pidgin/.md5sum.x86_64 b/pidgin/.md5sum.x86_64
index ef34d7d94..3ec31f809 100644
--- a/pidgin/.md5sum.x86_64
+++ b/pidgin/.md5sum.x86_64
@@ -1,2 +1,2 @@
-f2b210f2562865d870f193ff1fe8ea75 pidgin-2.10.2.tar.bz2
-096df49da643fcee15dc1d521c93fb19 port-to-farstream-v3.patch
+c2f799d45a934a2f0075e32ce49906e6 pidgin-2.10.3.tar.bz2
+b5b85f95ab7eae271a375b50c7a1ac28 port-to-farstream-rlaager-v1.patch
diff --git a/pidgin/Pkgfile b/pidgin/Pkgfile
index 8fbb6d6bc..f815940e5 100644
--- a/pidgin/Pkgfile
+++ b/pidgin/Pkgfile
@@ -6,14 +6,14 @@
# Run on: gtkspell,gtk,libxml2,gnutls,nss,nspr,xorg-libxscrnsaver,gstreamer,startup-notification,hicolor-icon-theme,libidn,farstream,dbus
name=pidgin
-version=2.10.2
-release=2
+version=2.10.3
+release=1
source=(http://downloads.sourceforge.net/$name/$name-$version.tar.bz2
- port-to-farstream-v3.patch )
+ port-to-farstream-rlaager-v1.patch )
build() {
cd $name-$version
- patch -p1 < ../port-to-farstream-v3.patch
+ patch -p0 < ../port-to-farstream-rlaager-v1.patch
autoreconf -if
sed -i "s#env python#env python2#" */plugins/*.py
sed -i "s#env python#env python2#" libpurple/purple-{remote,notifications-example,url-handler}
diff --git a/pidgin/port-to-farstream-rlaager-v1.patch b/pidgin/port-to-farstream-rlaager-v1.patch
new file mode 100644
index 000000000..81ec34bcf
--- /dev/null
+++ b/pidgin/port-to-farstream-rlaager-v1.patch
@@ -0,0 +1,666 @@
+#
+# old_revision [c5b3879b829a5067b2189e4393ca3b80f6fd96c3]
+#
+# patch "COPYRIGHT"
+# from [ac32c81db327a1c5a9d1e57c06ed3ca5337b374f]
+# to [8fdcebf3bcde1d3e484b4fbebc144e37719a4b65]
+#
+# patch "configure.ac"
+# from [b5155d791d3bfc938939d529453e5b327c518dea]
+# to [2a9cd757a9f1a8ab095ffe87be3c2d71cb193632]
+#
+# patch "libpurple/Makefile.am"
+# from [98a11dd7e6b174ca919fa4734c900904af94e91b]
+# to [3d58790ace97b844146ebf7492a0ed705c209788]
+#
+# patch "libpurple/media/backend-fs2.c"
+# from [14baabde9d85c5db0c5b002a41707439a1afd834]
+# to [40cd232d21c4a803fd38727fb2bdf7420433418f]
+#
+# patch "libpurple/media.c"
+# from [b6d7130f18c1bd96f12516b0eb35344457c5b447]
+# to [1934c80d30a14fa9f719fc5f71caea49fb54d69d]
+#
+# patch "libpurple/mediamanager.c"
+# from [1e55c322fe59eb10d19628c4c44757ea404ba23b]
+# to [0a57c7b39ee3f9a34bbb11a5722ecc7e3c70dbdd]
+#
+============================================================
+--- COPYRIGHT ac32c81db327a1c5a9d1e57c06ed3ca5337b374f
++++ COPYRIGHT 8fdcebf3bcde1d3e484b4fbebc144e37719a4b65
+@@ -128,6 +128,7 @@ Jeramey Crawford
+ Adam Cowell
+ Palmer Cox
+ Jeramey Crawford
++Olivier Crete
+ Michael Culbertson
+ Steven Danna
+ Simon Danner
+============================================================
+--- configure.ac b5155d791d3bfc938939d529453e5b327c518dea
++++ configure.ac 2a9cd757a9f1a8ab095ffe87be3c2d71cb193632
+@@ -786,20 +786,26 @@ dnl ####################################
+ fi
+
+ dnl #######################################################################
+-dnl # Check for Farsight
++dnl # Check for Farstream
+ dnl #######################################################################
+-AC_ARG_ENABLE(farsight,
+- [AC_HELP_STRING([--disable-farsight], [compile without farsight support])],
+- enable_farsight="$enableval", enable_farsight="yes")
+-if test "x$enable_farsight" != "xno"; then
+- PKG_CHECK_MODULES(FARSIGHT, [farsight2-0.10 >= 0.0.9], [
+- AC_DEFINE(USE_FARSIGHT, 1, [Use Farsight for voice and video])
+- AC_SUBST(FARSIGHT_CFLAGS)
+- AC_SUBST(FARSIGHT_LIBS)
+- ], [
+- enable_farsight="no"
+- ])
+-fi
++AC_ARG_ENABLE(farstream,
++ [AC_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])
++ AC_SUBST(FARSTREAM_CFLAGS)
++ AC_SUBST(FARSTREAM_LIBS)
++ ], [
++ enable_farstream="no"
++ ])
++ ])
++ fi
+
+ dnl #######################################################################
+ dnl # Check for Voice and Video support
+@@ -808,20 +814,20 @@ if test "x$enable_vv" != "xno"; then
+ [AC_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_farsight" != "xno"; then
++ if test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno"; then
+ AC_DEFINE(USE_VV, 1, [Use voice and video])
+ else
+ enable_vv="no"
+ if test "x$force_deps" = "xyes"; then
+ AC_MSG_ERROR([
+ Dependencies for voice/video were not met.
+-Install the necessary gstreamer and farsight packages first.
++Install the necessary gstreamer and farstream packages first.
+ Or use --disable-vv if you do not need voice/video support.
+ ])
+ fi
+ fi
+ fi
+-AM_CONDITIONAL(USE_VV, test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farsight" != "xno")
++AM_CONDITIONAL(USE_VV, test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno")
+
+ dnl #######################################################################
+ dnl # Check for Internationalized Domain Name support
+============================================================
+--- libpurple/Makefile.am 98a11dd7e6b174ca919fa4734c900904af94e91b
++++ libpurple/Makefile.am 3d58790ace97b844146ebf7492a0ed705c209788
+@@ -306,7 +306,7 @@ libpurple_la_LIBADD = \
+ $(LIBXML_LIBS) \
+ $(NETWORKMANAGER_LIBS) \
+ $(INTLLIBS) \
+- $(FARSIGHT_LIBS) \
++ $(FARSTREAM_LIBS) \
+ $(GSTREAMER_LIBS) \
+ $(GSTINTERFACES_LIBS) \
+ $(IDN_LIBS) \
+@@ -322,7 +322,7 @@ AM_CPPFLAGS = \
+ $(DEBUG_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ $(LIBXML_CFLAGS) \
+- $(FARSIGHT_CFLAGS) \
++ $(FARSTREAM_CFLAGS) \
+ $(GSTREAMER_CFLAGS) \
+ $(GSTINTERFACES_CFLAGS) \
+ $(IDN_CFLAGS) \
+============================================================
+--- libpurple/media/backend-fs2.c 14baabde9d85c5db0c5b002a41707439a1afd834
++++ libpurple/media/backend-fs2.c 40cd232d21c4a803fd38727fb2bdf7420433418f
+@@ -1,5 +1,5 @@
+ /**
+- * @file backend-fs2.c Farsight 2 backend for media API
++ * @file backend-fs2.c Farstream backend for media API
+ * @ingroup core
+ */
+
+@@ -34,8 +34,14 @@
+ #include "network.h"
+ #include "media-gst.h"
+
++#ifdef HAVE_FARSIGHT
+ #include <gst/farsight/fs-conference-iface.h>
+ #include <gst/farsight/fs-element-added-notifier.h>
++#else
++#include <farstream/fs-conference.h>
++#include <farstream/fs-element-added-notifier.h>
++#include <farstream/fs-utils.h>
++#endif
+
+ /** @copydoc _PurpleMediaBackendFs2Class */
+ typedef struct _PurpleMediaBackendFs2Class PurpleMediaBackendFs2Class;
+@@ -112,6 +118,10 @@ struct _PurpleMediaBackendFs2Stream
+ gchar *participant;
+ FsStream *stream;
+
++#ifndef HAVE_FARSIGHT
++ gboolean supports_add;
++#endif
++
+ GstElement *src;
+ GstElement *tee;
+ GstElement *volume;
+@@ -147,6 +157,10 @@ struct _PurpleMediaBackendFs2Private
+ FsConference *conference;
+ gchar *conference_type;
+
++#ifndef HAVE_FARSIGHT
++ FsElementAddedNotifier *notifier;
++#endif
++
+ GHashTable *sessions;
+ GHashTable *participants;
+
+@@ -212,6 +226,13 @@ purple_media_backend_fs2_dispose(GObject
+
+ purple_debug_info("backend-fs2", "purple_media_backend_fs2_dispose\n");
+
++#ifndef HAVE_FARSIGHT
++ if (priv->notifier) {
++ g_object_unref(priv->notifier);
++ priv->notifier = NULL;
++ }
++#endif
++
+ if (priv->confbin) {
+ GstElement *pipeline;
+
+@@ -846,7 +867,11 @@ gst_handle_message_element(GstBus *bus,
+ priv->conference != FS_CONFERENCE(src))
+ return;
+
++#ifdef HAVE_FARSIGHT
+ if (gst_structure_has_name(msg->structure, "farsight-error")) {
++#else
++ if (gst_structure_has_name(msg->structure, "farstream-error")) {
++#endif
+ FsError error_no;
+ gst_structure_get_enum(msg->structure, "error-no",
+ FS_TYPE_ERROR, (gint*)&error_no);
+@@ -859,6 +884,7 @@ gst_handle_message_element(GstBus *bus,
+ " packages."));
+ purple_media_end(priv->media, NULL, NULL);
+ break;
++#ifdef HAVE_FARSIGHT
+ case FS_ERROR_NO_CODECS_LEFT:
+ purple_media_error(priv->media, _("No codecs"
+ " left. Your codec"
+@@ -868,28 +894,42 @@ gst_handle_message_element(GstBus *bus,
+ purple_media_end(priv->media, NULL, NULL);
+ break;
+ case FS_ERROR_UNKNOWN_CNAME:
+- /*
+- * Unknown CName is only a problem for the
+- * multicast transmitter which isn't used.
+- * It is also deprecated.
+- */
++ /*
++ * Unknown CName is only a problem for the
++ * multicast transmitter which isn't used.
++ * It is also deprecated.
++ */
+ break;
++#endif
+ default:
+ purple_debug_error("backend-fs2",
++#ifdef HAVE_FARSIGHT
+ "farsight-error: %i: %s\n",
++#else
++ "farstream-error: %i: %s\n",
++#endif
+ error_no,
+- gst_structure_get_string(
++ gst_structure_get_string(
+ msg->structure, "error-msg"));
+ break;
+ }
+
+ if (FS_ERROR_IS_FATAL(error_no)) {
++#ifdef HAVE_FARSIGHT
+ purple_media_error(priv->media, _("A non-recoverable "
+ "Farsight2 error has occurred."));
++#else
++ purple_media_error(priv->media, _("A non-recoverable "
++ "Farstream error has occurred."));
++#endif
+ purple_media_end(priv->media, NULL, NULL);
+ }
+ } else if (gst_structure_has_name(msg->structure,
++#ifdef HAVE_FARSIGHT
+ "farsight-new-local-candidate")) {
++#else
++ "farstream-new-local-candidate")) {
++#endif
+ const GValue *value;
+ FsStream *stream;
+ FsCandidate *local_candidate;
+@@ -924,7 +964,11 @@ gst_handle_message_element(GstBus *bus,
+ session->id, name, candidate);
+ g_object_unref(candidate);
+ } else if (gst_structure_has_name(msg->structure,
++#ifdef HAVE_FARSIGHT
+ "farsight-local-candidates-prepared")) {
++#else
++ "farstream-local-candidates-prepared")) {
++#endif
+ const GValue *value;
+ FsStream *stream;
+ FsParticipant *participant;
+@@ -942,7 +986,11 @@ gst_handle_message_element(GstBus *bus,
+ g_signal_emit_by_name(self, "candidates-prepared",
+ session->id, name);
+ } else if (gst_structure_has_name(msg->structure,
++#ifdef HAVE_FARSIGHT
+ "farsight-new-active-candidate-pair")) {
++#else
++ "farstream-new-active-candidate-pair")) {
++#endif
+ const GValue *value;
+ FsStream *stream;
+ FsCandidate *local_candidate;
+@@ -976,7 +1024,11 @@ gst_handle_message_element(GstBus *bus,
+ g_object_unref(lcandidate);
+ g_object_unref(rcandidate);
+ } else if (gst_structure_has_name(msg->structure,
++#ifdef HAVE_FARSIGHT
+ "farsight-recv-codecs-changed")) {
++#else
++ "farstream-recv-codecs-changed")) {
++#endif
+ const GValue *value;
+ GList *codecs;
+ FsCodec *codec;
+@@ -986,10 +1038,18 @@ gst_handle_message_element(GstBus *bus,
+ codec = codecs->data;
+
+ purple_debug_info("backend-fs2",
++#ifdef HAVE_FARSIGHT
+ "farsight-recv-codecs-changed: %s\n",
++#else
++ "farstream-recv-codecs-changed: %s\n",
++#endif
+ codec->encoding_name);
+ } else if (gst_structure_has_name(msg->structure,
++#ifdef HAVE_FARSIGHT
+ "farsight-component-state-changed")) {
++#else
++ "farstream-component-state-changed")) {
++#endif
+ const GValue *value;
+ FsStreamState fsstate;
+ guint component;
+@@ -1025,11 +1085,19 @@ gst_handle_message_element(GstBus *bus,
+ }
+
+ purple_debug_info("backend-fs2",
++#ifdef HAVE_FARSIGHT
+ "farsight-component-state-changed: "
++#else
++ "farstream-component-state-changed: "
++#endif
+ "component: %u state: %s\n",
+ component, state);
+ } else if (gst_structure_has_name(msg->structure,
++#ifdef HAVE_FARSIGHT
+ "farsight-send-codec-changed")) {
++#else
++ "farstream-send-codec-changed")) {
++#endif
+ const GValue *value;
+ FsCodec *codec;
+ gchar *codec_str;
+@@ -1039,12 +1107,20 @@ gst_handle_message_element(GstBus *bus,
+ codec_str = fs_codec_to_string(codec);
+
+ purple_debug_info("backend-fs2",
++#ifdef HAVE_FARSIGHT
+ "farsight-send-codec-changed: codec: %s\n",
++#else
++ "farstream-send-codec-changed: codec: %s\n",
++#endif
+ codec_str);
+
+ g_free(codec_str);
+ } else if (gst_structure_has_name(msg->structure,
++#ifdef HAVE_FARSIGHT
+ "farsight-codecs-changed")) {
++#else
++ "farstream-codecs-changed")) {
++#endif
+ const GValue *value;
+ FsSession *fssession;
+ GList *sessions;
+@@ -1220,8 +1296,17 @@ stream_info_cb(PurpleMedia *media, Purpl
+ purple_media_is_initiator(media, sid, name))
+ return;
+
++#ifdef HAVE_FARSIGHT
+ fs_stream_set_remote_candidates(stream->stream,
+ stream->remote_candidates, &err);
++#else
++ if (stream->supports_add)
++ fs_stream_add_remote_candidates(stream->stream,
++ stream->remote_candidates, &err);
++ else
++ fs_stream_force_remote_candidates(stream->stream,
++ stream->remote_candidates, &err);
++#endif
+
+ if (err == NULL)
+ return;
+@@ -1301,6 +1386,9 @@ init_conference(PurpleMediaBackendFs2 *s
+ GstElement *pipeline;
+ GstBus *bus;
+ gchar *name;
++#ifndef HAVE_FARSIGHT
++ GKeyFile *default_props;
++#endif
+
+ priv->conference = FS_CONFERENCE(
+ gst_element_factory_make(priv->conference_type, NULL));
+@@ -1343,6 +1431,16 @@ init_conference(PurpleMediaBackendFs2 *s
+ return FALSE;
+ }
+
++#ifndef HAVE_FARSIGHT
++ default_props = fs_utils_get_default_element_properties(GST_ELEMENT(priv->conference));
++ if (default_props != NULL) {
++ priv->notifier = fs_element_added_notifier_new();
++ fs_element_added_notifier_add(priv->notifier,
++ GST_BIN(priv->confbin));
++ fs_element_added_notifier_set_properties_from_keyfile(priv->notifier, default_props);
++ }
++#endif
++
+ g_signal_connect(G_OBJECT(bus), "message",
+ G_CALLBACK(gst_bus_cb), self);
+ gst_object_unref(bus);
+@@ -1559,7 +1657,11 @@ create_session(PurpleMediaBackendFs2 *se
+ * receiving the src-pad-added signal.
+ * Only works for non-multicast FsRtpSessions.
+ */
++#ifdef HAVE_FARSIGHT
+ if (is_nice || !strcmp(transmitter, "rawudp"))
++#else
++ if (!!strcmp(transmitter, "multicast"))
++#endif
+ g_object_set(G_OBJECT(session->session),
+ "no-rtcp-timeout", 0, NULL);
+
+@@ -1612,7 +1714,11 @@ create_participant(PurpleMediaBackendFs2
+ GError *err = NULL;
+
+ participant = fs_conference_new_participant(
++#ifdef HAVE_FARSIGHT
+ priv->conference, name, &err);
++#else
++ priv->conference, &err);
++#endif
+
+ if (err) {
+ purple_debug_error("backend-fs2",
+@@ -1622,6 +1728,13 @@ create_participant(PurpleMediaBackendFs2
+ return FALSE;
+ }
+
++#ifndef HAVE_FARSIGHT
++ if (g_object_class_find_property(G_OBJECT_GET_CLASS(participant),
++ "cname")) {
++ g_object_set(participant, "cname", name, NULL);
++ }
++#endif
++
+ if (!priv->participants) {
+ purple_debug_info("backend-fs2",
+ "Creating hash table for participants\n");
+@@ -1739,7 +1852,7 @@ append_relay_info(GValueArray *relay_inf
+ "port", G_TYPE_UINT, port,
+ "username", G_TYPE_STRING, username,
+ "password", G_TYPE_STRING, password,
+- "relay-type", G_TYPE_STRING, type,
++ "relay-type", G_TYPE_STRING, type,
+ NULL);
+
+ if (turn_setup) {
+@@ -1767,7 +1880,7 @@ create_stream(PurpleMediaBackendFs2 *sel
+ const gchar *stun_ip = purple_network_get_stun_ip();
+ const gchar *turn_ip = purple_network_get_turn_ip();
+ guint _num_params = num_params;
+- GParameter *_params = g_new0(GParameter, num_params + 3);
++ GParameter *_params;
+ FsStreamDirection type_direction =
+ session_type_to_fs_stream_direction(type);
+ PurpleMediaBackendFs2Session *session;
+@@ -1779,6 +1892,41 @@ create_stream(PurpleMediaBackendFs2 *sel
+ gboolean got_turn_from_prpl = FALSE;
+ int i;
+
++ session = get_session(self, sess_id);
++
++ if (session == NULL) {
++ purple_debug_error("backend-fs2",
++ "Couldn't find session to create stream.\n");
++ return FALSE;
++ }
++
++ participant = get_participant(self, who);
++
++ if (participant == NULL) {
++ purple_debug_error("backend-fs2", "Couldn't find "
++ "participant to create stream.\n");
++ return FALSE;
++ }
++
++#ifndef HAVE_FARSIGHT
++ fsstream = fs_session_new_stream(session->session, participant,
++ initiator == TRUE ? type_direction :
++ (type_direction & FS_DIRECTION_RECV), &err);
++
++ if (fsstream == NULL) {
++ if (err) {
++ purple_debug_error("backend-fs2",
++ "Error creating stream: %s\n",
++ err && err->message ?
++ err->message : "NULL");
++ g_error_free(err);
++ } else
++ purple_debug_error("backend-fs2",
++ "Error creating stream\n");
++ return FALSE;
++ }
++#endif
++
+ for (i = 0 ; i < num_params ; i++) {
+ if (purple_strequal(params[i].name, "relay-info")) {
+ got_turn_from_prpl = TRUE;
+@@ -1786,6 +1934,7 @@ create_stream(PurpleMediaBackendFs2 *sel
+ }
+ }
+
++ _params = g_new0(GParameter, num_params + 3);
+ memcpy(_params, params, sizeof(GParameter) * num_params);
+
+ /* set the controlling mode parameter */
+@@ -1840,22 +1989,7 @@ create_stream(PurpleMediaBackendFs2 *sel
+ _num_params++;
+ }
+
+- session = get_session(self, sess_id);
+-
+- if (session == NULL) {
+- purple_debug_error("backend-fs2",
+- "Couldn't find session to create stream.\n");
+- return FALSE;
+- }
+-
+- participant = get_participant(self, who);
+-
+- if (participant == NULL) {
+- purple_debug_error("backend-fs2", "Couldn't find "
+- "participant to create stream.\n");
+- return FALSE;
+- }
+-
++#ifdef HAVE_FARSIGHT
+ fsstream = fs_session_new_stream(session->session, participant,
+ initiator == TRUE ? type_direction :
+ (type_direction & FS_DIRECTION_RECV), transmitter,
+@@ -1874,11 +2008,26 @@ create_stream(PurpleMediaBackendFs2 *sel
+ "Error creating stream\n");
+ return FALSE;
+ }
++#else
++ if (!fs_stream_set_transmitter(fsstream, transmitter,
++ _params, _num_params, &err)) {
++ purple_debug_error("backend-fs2",
++ "Could not set transmitter %s: %s.\n",
++ transmitter, err->message);
++ g_clear_error(&err);
++ g_free(_params);
++ return FALSE;
++ }
++ g_free(_params);
++#endif
+
+ stream = g_new0(PurpleMediaBackendFs2Stream, 1);
+ stream->participant = g_strdup(who);
+ stream->session = session;
+ stream->stream = fsstream;
++#ifndef HAVE_FARSTREAM
++ stream->supports_add = !strcmp(transmitter, "nice");
++#endif
+
+ priv->streams = g_list_append(priv->streams, stream);
+
+@@ -1991,8 +2140,17 @@ purple_media_backend_fs2_add_remote_cand
+ if (purple_media_is_initiator(priv->media, sess_id, participant) ||
+ purple_media_accepted(
+ priv->media, sess_id, participant)) {
++#ifdef HAVE_FARSIGHT
+ fs_stream_set_remote_candidates(stream->stream,
+ stream->remote_candidates, &err);
++#else
++ if (stream->supports_add)
++ fs_stream_add_remote_candidates(stream->stream,
++ stream->remote_candidates, &err);
++ else
++ fs_stream_force_remote_candidates(stream->stream,
++ stream->remote_candidates, &err);
++#endif
+
+ if (err) {
+ purple_debug_error("backend-fs2", "Error adding remote"
+@@ -2021,25 +2179,50 @@ purple_media_backend_fs2_codecs_ready(Pu
+ return FALSE;
+
+ if (session->type & (PURPLE_MEDIA_SEND_AUDIO |
+- PURPLE_MEDIA_SEND_VIDEO))
++ PURPLE_MEDIA_SEND_VIDEO)) {
++#ifdef HAVE_FARSIGHT
+ g_object_get(session->session,
+- "codecs-ready", &ret, NULL);
+- else
++ "codecs-ready", &ret, NULL);
++#else
++ GList *codecs = NULL;
++
++ g_object_get(session->session,
++ "codecs", &codecs, NULL);
++ if (codecs) {
++ fs_codec_list_destroy (codecs);
++ ret = TRUE;
++ }
++#endif
++ } else
+ ret = TRUE;
+ } else {
+ GList *values = g_hash_table_get_values(priv->sessions);
+
+ for (; values; values = g_list_delete_link(values, values)) {
+ PurpleMediaBackendFs2Session *session = values->data;
++
+ if (session->type & (PURPLE_MEDIA_SEND_AUDIO |
+- PURPLE_MEDIA_SEND_VIDEO))
++ PURPLE_MEDIA_SEND_VIDEO)) {
++#ifdef HAVE_FARSIGHT
+ g_object_get(session->session,
+ "codecs-ready", &ret, NULL);
+- else
++ if (ret == FALSE)
++ break;
++#else
++ GList *codecs = NULL;
++
++ g_object_get(session->session,
++ "codecs", &codecs, NULL);
++ if (codecs) {
++ fs_codec_list_destroy (codecs);
++ ret = TRUE;
++ } else {
++ ret = FALSE;
++ break;
++ }
++#endif
++ } else
+ ret = TRUE;
+-
+- if (ret == FALSE)
+- break;
+ }
+
+ if (values != NULL)
+============================================================
+--- libpurple/media.c b6d7130f18c1bd96f12516b0eb35344457c5b447
++++ libpurple/media.c 1934c80d30a14fa9f719fc5f71caea49fb54d69d
+@@ -1067,7 +1067,6 @@ purple_media_add_stream(PurpleMedia *med
+ {
+ #ifdef USE_VV
+ PurpleMediaSession *session;
+- PurpleMediaStream *stream = NULL;
+
+ g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
+
+@@ -1103,7 +1102,7 @@ purple_media_add_stream(PurpleMedia *med
+ }
+
+ if (purple_media_get_stream(media, sess_id, who) == NULL) {
+- stream = purple_media_insert_stream(session, who, initiator);
++ purple_media_insert_stream(session, who, initiator);
+
+ g_signal_emit(media, purple_media_signals[STATE_CHANGED],
+ 0, PURPLE_MEDIA_STATE_NEW,
+============================================================
+--- libpurple/mediamanager.c 1e55c322fe59eb10d19628c4c44757ea404ba23b
++++ libpurple/mediamanager.c 0a57c7b39ee3f9a34bbb11a5722ecc7e3c70dbdd
+@@ -39,7 +39,11 @@
+ #ifdef USE_VV
+ #include <media/backend-fs2.h>
+
++#ifdef HAVE_FARSIGHT
+ #include <gst/farsight/fs-element-added-notifier.h>
++#else
++#include <farstream/fs-element-added-notifier.h>
++#endif
+ #include <gst/interfaces/xoverlay.h>
+
+ /** @copydoc _PurpleMediaManagerPrivate */
diff --git a/pidgin/port-to-farstream-v3.patch b/pidgin/port-to-farstream-v3.patch
deleted file mode 100644
index c922f4110..000000000
--- a/pidgin/port-to-farstream-v3.patch
+++ /dev/null
@@ -1,447 +0,0 @@
-diff -upr pidgin-2.10.1.orig/configure.ac pidgin-2.10.1/configure.ac
---- pidgin-2.10.1.orig/configure.ac 2011-12-06 10:44:32.000000000 +0200
-+++ pidgin-2.10.1/configure.ac 2012-03-10 18:21:12.000000000 +0200
-@@ -786,18 +786,18 @@ else
- fi
-
- dnl #######################################################################
--dnl # Check for Farsight
-+dnl # Check for Farstream
- dnl #######################################################################
--AC_ARG_ENABLE(farsight,
-- [AC_HELP_STRING([--disable-farsight], [compile without farsight support])],
-- enable_farsight="$enableval", enable_farsight="yes")
--if test "x$enable_farsight" != "xno"; then
-- PKG_CHECK_MODULES(FARSIGHT, [farsight2-0.10 >= 0.0.9], [
-- AC_DEFINE(USE_FARSIGHT, 1, [Use Farsight for voice and video])
-- AC_SUBST(FARSIGHT_CFLAGS)
-- AC_SUBST(FARSIGHT_LIBS)
-+AC_ARG_ENABLE(farstream,
-+ [AC_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_DEFINE(USE_FARSTREAM, 1, [Use Farstream for voice and video])
-+ AC_SUBST(FARSTREAM_CFLAGS)
-+ AC_SUBST(FARSTREAM_LIBS)
- ], [
-- enable_farsight="no"
-+ enable_farstream="no"
- ])
- fi
-
-@@ -808,20 +808,20 @@ AC_ARG_ENABLE(vv,
- [AC_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_farsight" != "xno"; then
-+ if test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno"; then
- AC_DEFINE(USE_VV, 1, [Use voice and video])
- else
- enable_vv="no"
- if test "x$force_deps" = "xyes"; then
- AC_MSG_ERROR([
- Dependencies for voice/video were not met.
--Install the necessary gstreamer and farsight packages first.
-+Install the necessary gstreamer and farstream packages first.
- Or use --disable-vv if you do not need voice/video support.
- ])
- fi
- fi
- fi
--AM_CONDITIONAL(USE_VV, test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farsight" != "xno")
-+AM_CONDITIONAL(USE_VV, test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno")
-
- dnl #######################################################################
- dnl # Check for Internationalized Domain Name support
-diff -upr pidgin-2.10.1.orig/libpurple/Makefile.am pidgin-2.10.1/libpurple/Makefile.am
---- pidgin-2.10.1.orig/libpurple/Makefile.am 2011-12-06 10:44:33.000000000 +0200
-+++ pidgin-2.10.1/libpurple/Makefile.am 2012-03-10 18:21:19.000000000 +0200
-@@ -306,7 +306,7 @@ libpurple_la_LIBADD = \
- $(LIBXML_LIBS) \
- $(NETWORKMANAGER_LIBS) \
- $(INTLLIBS) \
-- $(FARSIGHT_LIBS) \
-+ $(FARSTREAM_LIBS) \
- $(GSTREAMER_LIBS) \
- $(GSTINTERFACES_LIBS) \
- $(IDN_LIBS) \
-@@ -322,7 +322,7 @@ AM_CPPFLAGS = \
- $(DEBUG_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(LIBXML_CFLAGS) \
-- $(FARSIGHT_CFLAGS) \
-+ $(FARSTREAM_CFLAGS) \
- $(GSTREAMER_CFLAGS) \
- $(GSTINTERFACES_CFLAGS) \
- $(IDN_CFLAGS) \
-diff -upr pidgin-2.10.1.orig/libpurple/media/backend-fs2.c pidgin-2.10.1/libpurple/media/backend-fs2.c
---- pidgin-2.10.1.orig/libpurple/media/backend-fs2.c 2011-12-06 10:44:33.000000000 +0200
-+++ pidgin-2.10.1/libpurple/media/backend-fs2.c 2012-03-10 18:21:19.000000000 +0200
-@@ -1,5 +1,5 @@
- /**
-- * @file backend-fs2.c Farsight 2 backend for media API
-+ * @file backend-fs2.c Farstream backend for media API
- * @ingroup core
- */
-
-@@ -34,8 +34,9 @@
- #include "network.h"
- #include "media-gst.h"
-
--#include <gst/farsight/fs-conference-iface.h>
--#include <gst/farsight/fs-element-added-notifier.h>
-+#include <farstream/fs-conference.h>
-+#include <farstream/fs-element-added-notifier.h>
-+#include <farstream/fs-utils.h>
-
- /** @copydoc _PurpleMediaBackendFs2Class */
- typedef struct _PurpleMediaBackendFs2Class PurpleMediaBackendFs2Class;
-@@ -112,6 +113,8 @@ struct _PurpleMediaBackendFs2Stream
- gchar *participant;
- FsStream *stream;
-
-+ gboolean supports_add;
-+
- GstElement *src;
- GstElement *tee;
- GstElement *volume;
-@@ -147,6 +150,8 @@ struct _PurpleMediaBackendFs2Private
- FsConference *conference;
- gchar *conference_type;
-
-+ FsElementAddedNotifier *notifier;
-+
- GHashTable *sessions;
- GHashTable *participants;
-
-@@ -212,6 +217,11 @@ purple_media_backend_fs2_dispose(GObject
-
- purple_debug_info("backend-fs2", "purple_media_backend_fs2_dispose\n");
-
-+ if (priv->notifier) {
-+ g_object_unref(priv->notifier);
-+ priv->notifier = NULL;
-+ }
-+
- if (priv->confbin) {
- GstElement *pipeline;
-
-@@ -846,7 +856,7 @@ gst_handle_message_element(GstBus *bus,
- priv->conference != FS_CONFERENCE(src))
- return;
-
-- if (gst_structure_has_name(msg->structure, "farsight-error")) {
-+ if (gst_structure_has_name(msg->structure, "farstream-error")) {
- FsError error_no;
- gst_structure_get_enum(msg->structure, "error-no",
- FS_TYPE_ERROR, (gint*)&error_no);
-@@ -867,16 +877,9 @@ gst_handle_message_element(GstBus *bus,
- " strict."));
- purple_media_end(priv->media, NULL, NULL);
- break;
-- case FS_ERROR_UNKNOWN_CNAME:
-- /*
-- * Unknown CName is only a problem for the
-- * multicast transmitter which isn't used.
-- * It is also deprecated.
-- */
-- break;
- default:
- purple_debug_error("backend-fs2",
-- "farsight-error: %i: %s\n",
-+ "farstream-error: %i: %s\n",
- error_no,
- gst_structure_get_string(
- msg->structure, "error-msg"));
-@@ -885,11 +888,11 @@ gst_handle_message_element(GstBus *bus,
-
- if (FS_ERROR_IS_FATAL(error_no)) {
- purple_media_error(priv->media, _("A non-recoverable "
-- "Farsight2 error has occurred."));
-+ "Farstream error has occurred."));
- purple_media_end(priv->media, NULL, NULL);
- }
- } else if (gst_structure_has_name(msg->structure,
-- "farsight-new-local-candidate")) {
-+ "farstream-new-local-candidate")) {
- const GValue *value;
- FsStream *stream;
- FsCandidate *local_candidate;
-@@ -924,7 +927,7 @@ gst_handle_message_element(GstBus *bus,
- session->id, name, candidate);
- g_object_unref(candidate);
- } else if (gst_structure_has_name(msg->structure,
-- "farsight-local-candidates-prepared")) {
-+ "farstream-local-candidates-prepared")) {
- const GValue *value;
- FsStream *stream;
- FsParticipant *participant;
-@@ -942,7 +945,7 @@ gst_handle_message_element(GstBus *bus,
- g_signal_emit_by_name(self, "candidates-prepared",
- session->id, name);
- } else if (gst_structure_has_name(msg->structure,
-- "farsight-new-active-candidate-pair")) {
-+ "farstream-new-active-candidate-pair")) {
- const GValue *value;
- FsStream *stream;
- FsCandidate *local_candidate;
-@@ -976,7 +979,7 @@ gst_handle_message_element(GstBus *bus,
- g_object_unref(lcandidate);
- g_object_unref(rcandidate);
- } else if (gst_structure_has_name(msg->structure,
-- "farsight-recv-codecs-changed")) {
-+ "farstream-recv-codecs-changed")) {
- const GValue *value;
- GList *codecs;
- FsCodec *codec;
-@@ -986,10 +989,10 @@ gst_handle_message_element(GstBus *bus,
- codec = codecs->data;
-
- purple_debug_info("backend-fs2",
-- "farsight-recv-codecs-changed: %s\n",
-+ "farstream-recv-codecs-changed: %s\n",
- codec->encoding_name);
- } else if (gst_structure_has_name(msg->structure,
-- "farsight-component-state-changed")) {
-+ "farstream-component-state-changed")) {
- const GValue *value;
- FsStreamState fsstate;
- guint component;
-@@ -1025,11 +1028,11 @@ gst_handle_message_element(GstBus *bus,
- }
-
- purple_debug_info("backend-fs2",
-- "farsight-component-state-changed: "
-+ "farstream-component-state-changed: "
- "component: %u state: %s\n",
- component, state);
- } else if (gst_structure_has_name(msg->structure,
-- "farsight-send-codec-changed")) {
-+ "farstream-send-codec-changed")) {
- const GValue *value;
- FsCodec *codec;
- gchar *codec_str;
-@@ -1039,12 +1042,12 @@ gst_handle_message_element(GstBus *bus,
- codec_str = fs_codec_to_string(codec);
-
- purple_debug_info("backend-fs2",
-- "farsight-send-codec-changed: codec: %s\n",
-+ "farstream-send-codec-changed: codec: %s\n",
- codec_str);
-
- g_free(codec_str);
- } else if (gst_structure_has_name(msg->structure,
-- "farsight-codecs-changed")) {
-+ "farstream-codecs-changed")) {
- const GValue *value;
- FsSession *fssession;
- GList *sessions;
-@@ -1220,8 +1223,12 @@ stream_info_cb(PurpleMedia *media, Purpl
- purple_media_is_initiator(media, sid, name))
- return;
-
-- fs_stream_set_remote_candidates(stream->stream,
-- stream->remote_candidates, &err);
-+ if (stream->supports_add)
-+ fs_stream_add_remote_candidates(stream->stream,
-+ stream->remote_candidates, &err);
-+ else
-+ fs_stream_force_remote_candidates(stream->stream,
-+ stream->remote_candidates, &err);
-
- if (err == NULL)
- return;
-@@ -1301,6 +1308,7 @@ init_conference(PurpleMediaBackendFs2 *s
- GstElement *pipeline;
- GstBus *bus;
- gchar *name;
-+ GKeyFile *default_props;
-
- priv->conference = FS_CONFERENCE(
- gst_element_factory_make(priv->conference_type, NULL));
-@@ -1343,6 +1351,14 @@ init_conference(PurpleMediaBackendFs2 *s
- return FALSE;
- }
-
-+ default_props = fs_utils_get_default_element_properties(GST_ELEMENT(priv->conference));
-+ if (default_props != NULL) {
-+ priv->notifier = fs_element_added_notifier_new();
-+ fs_element_added_notifier_add(priv->notifier,
-+ GST_BIN(priv->confbin));
-+ fs_element_added_notifier_set_properties_from_keyfile(priv->notifier, default_props);
-+ }
-+
- g_signal_connect(G_OBJECT(bus), "message",
- G_CALLBACK(gst_bus_cb), self);
- gst_object_unref(bus);
-@@ -1559,7 +1575,7 @@ create_session(PurpleMediaBackendFs2 *se
- * receiving the src-pad-added signal.
- * Only works for non-multicast FsRtpSessions.
- */
-- if (is_nice || !strcmp(transmitter, "rawudp"))
-+ if (!!strcmp(transmitter, "multicast"))
- g_object_set(G_OBJECT(session->session),
- "no-rtcp-timeout", 0, NULL);
-
-@@ -1612,7 +1628,7 @@ create_participant(PurpleMediaBackendFs2
- GError *err = NULL;
-
- participant = fs_conference_new_participant(
-- priv->conference, name, &err);
-+ priv->conference, &err);
-
- if (err) {
- purple_debug_error("backend-fs2",
-@@ -1622,6 +1638,12 @@ create_participant(PurpleMediaBackendFs2
- return FALSE;
- }
-
-+ if (g_object_class_find_property(G_OBJECT_GET_CLASS(participant),
-+ "cname")) {
-+ g_object_set(participant, "cname", name, NULL);
-+ }
-+
-+
- if (!priv->participants) {
- purple_debug_info("backend-fs2",
- "Creating hash table for participants\n");
-@@ -1786,6 +1808,40 @@ create_stream(PurpleMediaBackendFs2 *sel
- }
- }
-
-+
-+ session = get_session(self, sess_id);
-+
-+ if (session == NULL) {
-+ purple_debug_error("backend-fs2",
-+ "Couldn't find session to create stream.\n");
-+ return FALSE;
-+ }
-+
-+ participant = get_participant(self, who);
-+
-+ if (participant == NULL) {
-+ purple_debug_error("backend-fs2", "Couldn't find "
-+ "participant to create stream.\n");
-+ return FALSE;
-+ }
-+
-+ fsstream = fs_session_new_stream(session->session, participant,
-+ initiator == TRUE ? type_direction :
-+ (type_direction & FS_DIRECTION_RECV), &err);
-+
-+ if (fsstream == NULL) {
-+ if (err) {
-+ purple_debug_error("backend-fs2",
-+ "Error creating stream: %s\n",
-+ err && err->message ?
-+ err->message : "NULL");
-+ g_error_free(err);
-+ } else
-+ purple_debug_error("backend-fs2",
-+ "Error creating stream\n");
-+ return FALSE;
-+ }
-+
- memcpy(_params, params, sizeof(GParameter) * num_params);
-
- /* set the controlling mode parameter */
-@@ -1840,45 +1896,22 @@ create_stream(PurpleMediaBackendFs2 *sel
- _num_params++;
- }
-
-- session = get_session(self, sess_id);
-
-- if (session == NULL) {
-- purple_debug_error("backend-fs2",
-- "Couldn't find session to create stream.\n");
-- return FALSE;
-- }
--
-- participant = get_participant(self, who);
--
-- if (participant == NULL) {
-- purple_debug_error("backend-fs2", "Couldn't find "
-- "participant to create stream.\n");
-- return FALSE;
-+ if(!fs_stream_set_transmitter(fsstream, transmitter,
-+ _params, _num_params, &err)) {
-+ purple_debug_error("backend-fs2", "Could not set transmitter %s: %s.\n", transmitter, err->message);
-+ g_clear_error(&err);
-+ g_free(_params);
-+ return FALSE;
- }
--
-- fsstream = fs_session_new_stream(session->session, participant,
-- initiator == TRUE ? type_direction :
-- (type_direction & FS_DIRECTION_RECV), transmitter,
-- _num_params, _params, &err);
- g_free(_params);
-
-- if (fsstream == NULL) {
-- if (err) {
-- purple_debug_error("backend-fs2",
-- "Error creating stream: %s\n",
-- err && err->message ?
-- err->message : "NULL");
-- g_error_free(err);
-- } else
-- purple_debug_error("backend-fs2",
-- "Error creating stream\n");
-- return FALSE;
-- }
-
- stream = g_new0(PurpleMediaBackendFs2Stream, 1);
- stream->participant = g_strdup(who);
- stream->session = session;
- stream->stream = fsstream;
-+ stream->supports_add = !strcmp(transmitter, "nice");
-
- priv->streams = g_list_append(priv->streams, stream);
-
-@@ -1991,7 +2024,11 @@ purple_media_backend_fs2_add_remote_cand
- if (purple_media_is_initiator(priv->media, sess_id, participant) ||
- purple_media_accepted(
- priv->media, sess_id, participant)) {
-- fs_stream_set_remote_candidates(stream->stream,
-+ if (stream->supports_add)
-+ fs_stream_add_remote_candidates(stream->stream,
-+ stream->remote_candidates, &err);
-+ else
-+ fs_stream_force_remote_candidates(stream->stream,
- stream->remote_candidates, &err);
-
- if (err) {
-diff -upr pidgin-2.10.1.orig/libpurple/media.c pidgin-2.10.1/libpurple/media.c
---- pidgin-2.10.1.orig/libpurple/media.c 2011-12-06 10:44:33.000000000 +0200
-+++ pidgin-2.10.1/libpurple/media.c 2012-03-10 18:21:19.000000000 +0200
-@@ -1067,7 +1067,6 @@ purple_media_add_stream(PurpleMedia *med
- {
- #ifdef USE_VV
- PurpleMediaSession *session;
-- PurpleMediaStream *stream = NULL;
-
- g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
-
-@@ -1103,7 +1102,7 @@ purple_media_add_stream(PurpleMedia *med
- }
-
- if (purple_media_get_stream(media, sess_id, who) == NULL) {
-- stream = purple_media_insert_stream(session, who, initiator);
-+ purple_media_insert_stream(session, who, initiator);
-
- g_signal_emit(media, purple_media_signals[STATE_CHANGED],
- 0, PURPLE_MEDIA_STATE_NEW,
-diff -upr pidgin-2.10.1.orig/libpurple/mediamanager.c pidgin-2.10.1/libpurple/mediamanager.c
---- pidgin-2.10.1.orig/libpurple/mediamanager.c 2011-12-06 10:44:33.000000000 +0200
-+++ pidgin-2.10.1/libpurple/mediamanager.c 2012-03-10 18:27:05.000000000 +0200
-@@ -39,7 +39,7 @@
- #ifdef USE_VV
- #include <media/backend-fs2.h>
-
--#include <gst/farsight/fs-element-added-notifier.h>
-+#include <farstream/fs-element-added-notifier.h>
- #include <gst/interfaces/xoverlay.h>
-
- /** @copydoc _PurpleMediaManagerPrivate */