diff options
author | root <root@rshg054.dnsready.net> | 2012-03-12 00:01:32 +0000 |
---|---|---|
committer | root <root@rshg054.dnsready.net> | 2012-03-12 00:01:32 +0000 |
commit | a6cb3ddef295c5feb4e03ee198dbb31cdf62d518 (patch) | |
tree | 4ea0c57a9a347779a3d69ebee2dc54d994a30235 /gnome-unstable/pidgin | |
parent | 4640048ddd1331c9f6fc14b8921ccecdb6b1ea11 (diff) |
Mon Mar 12 00:01:32 UTC 2012
Diffstat (limited to 'gnome-unstable/pidgin')
-rw-r--r-- | gnome-unstable/pidgin/PKGBUILD | 121 | ||||
-rw-r--r-- | gnome-unstable/pidgin/nm09-more.patch | 49 | ||||
-rw-r--r-- | gnome-unstable/pidgin/pidgin.install | 11 | ||||
-rw-r--r-- | gnome-unstable/pidgin/port-to-farstream-v2.patch | 447 |
4 files changed, 628 insertions, 0 deletions
diff --git a/gnome-unstable/pidgin/PKGBUILD b/gnome-unstable/pidgin/PKGBUILD new file mode 100644 index 000000000..f01631fdc --- /dev/null +++ b/gnome-unstable/pidgin/PKGBUILD @@ -0,0 +1,121 @@ +# $Id: PKGBUILD 152945 2012-03-10 19:11:33Z ibiru $ +# Maintainer: Evangelos Foutras <evangelos@foutrelis.com> +# Contributor: Ionut Biru <ibiru@archlinux.org> +# Contributor: Andrea Scarpino <andrea@archlinux.org> +# Contributor: Alexander Fehr <pizzapunk gmail com> +# Contributor: Lucien Immink <l.immink@student.fnt.hvu.nl> + +pkgname=('pidgin' 'libpurple' 'finch') +pkgver=2.10.1 +pkgrel=3 +arch=('i686' 'x86_64') +url="http://pidgin.im/" +license=('GPL') +makedepends=('startup-notification' 'gtkspell' 'libxss' 'nss' 'libsasl' 'libsm' + 'libidn' 'python2' 'hicolor-icon-theme' 'gstreamer0.10' + 'farstream' 'avahi' 'tk' 'ca-certificates' 'intltool' + 'networkmanager') +options=('!libtool') +source=(http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.bz2 + nm09-more.patch + port-to-farstream-v2.patch) +sha256sums=('2f28bddc5edcd714d607d74126c8958ae7c258602b3929e3e6e783d3cb1beac8' + '7e173ea37b86b604284da18ea015ee03ccd444f3e980f440c201957d37ee820e' + '03ba48e0da1331a976efc28a66810be4f51599a2b8065ac449965e0aefca4482') + +build() { + cd "$srcdir/$pkgname-$pkgver" + + # Further fixes for NetworkManager 0.9 + # http://developer.pidgin.im/ticket/13859 + patch -Np1 -i "$srcdir/nm09-more.patch" + + # Apply patch for farsight -> farstream transition + # http://developer.pidgin.im/ticket/14936 + patch -Np1 -i "$srcdir/port-to-farstream-v2.patch" + + # The farstream patch changes configure.ac + autoreconf -vi + + # Use Python 2 + sed -i 's/env python$/&2/' */plugins/*.py \ + libpurple/purple-{remote,notifications-example,url-handler} + + # Pidgin doesn't explicitly link to libm + LDFLAGS+=' -Wl,--copy-dt-needed-entries' + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --disable-schemas-install \ + --disable-meanwhile \ + --disable-gnutls \ + --enable-cyrus-sasl \ + --disable-doxygen \ + --enable-nm \ + --with-python=/usr/bin/python2 \ + --with-system-ssl-certs=/etc/ssl/certs + make +} + +package_pidgin(){ + pkgdesc="Multi-protocol instant messaging client" + depends=('libpurple' 'startup-notification' 'gtkspell' 'libxss' 'libsm' + 'gstreamer0.10' 'hicolor-icon-theme') + optdepends=('aspell: for spelling correction' + 'ca-certificates: SSL CA certificates' + 'gstreamer0.10-good-plugins: video and voice support' + 'tk: Tcl/Tk scripting support') + install=pidgin.install + + cd "$srcdir/pidgin-$pkgver" + + # For linking + make -C libpurple DESTDIR="$pkgdir" install-libLTLIBRARIES + + make -C pidgin DESTDIR="$pkgdir" install + make -C doc DESTDIR="$pkgdir" install + + # Remove files that are packaged in libpurle + make -C libpurple DESTDIR="$pkgdir" uninstall-libLTLIBRARIES + + install -Dm644 pidgin.desktop "$pkgdir"/usr/share/applications/pidgin.desktop + + rm "$pkgdir/usr/share/man/man1/finch.1" +} + +package_libpurple(){ + pkgdesc="IM library extracted from Pidgin" + depends=('farstream' 'libsasl' 'libidn' 'dbus-glib' 'nss') + optdepends=('avahi: Bonjour protocol support' + 'dbus-python: for purple-remote and purple-url-handler') + + cd "$srcdir/pidgin-$pkgver" + + for _dir in libpurple share/sounds share/ca-certs m4macros po; do + make -C "$_dir" DESTDIR="$pkgdir" install + done +} + +package_finch(){ + pkgdesc="A ncurses-based messaging client" + depends=("libpurple=$pkgver-$pkgrel" 'python2' 'gstreamer0.10') + optdepends=('avahi: Bonjour protocol support' + 'ca-certificates: SSL CA certificates' + 'tk: Tcl/Tk scripting support') + + cd "$srcdir/pidgin-$pkgver" + + # For linking + make -C libpurple DESTDIR="$pkgdir" install-libLTLIBRARIES + + make -C finch DESTDIR="$pkgdir" install + make -C doc DESTDIR="$pkgdir" install + + # Remove files that are packaged in libpurle + make -C libpurple DESTDIR="$pkgdir" uninstall-libLTLIBRARIES + + rm "$pkgdir"/usr/share/man/man1/pidgin.1 +} + +# vim:set ts=2 sw=2 et: diff --git a/gnome-unstable/pidgin/nm09-more.patch b/gnome-unstable/pidgin/nm09-more.patch new file mode 100644 index 000000000..8c708df9a --- /dev/null +++ b/gnome-unstable/pidgin/nm09-more.patch @@ -0,0 +1,49 @@ +diff -up pidgin-2.7.11/libpurple/network.c.nm09more pidgin-2.7.11/libpurple/network.c +--- pidgin-2.7.11/libpurple/network.c.nm09more 2011-04-26 12:01:27.700085246 -0500 ++++ pidgin-2.7.11/libpurple/network.c 2011-05-24 13:13:28.185165657 -0500 +@@ -833,8 +833,20 @@ purple_network_is_available(void) + purple_debug_warning("network", "NetworkManager not active. Assuming connection exists.\n"); + } + +- if (nm_state == NM_STATE_UNKNOWN || nm_state == NM_STATE_CONNECTED) +- return TRUE; ++ switch (nm_state) ++ { ++ case NM_STATE_UNKNOWN: ++#if NM_CHECK_VERSION(0,8,992) ++ case NM_STATE_CONNECTED_LOCAL: ++ case NM_STATE_CONNECTED_SITE: ++ case NM_STATE_CONNECTED_GLOBAL: ++#else ++ case NM_STATE_CONNECTED: ++#endif ++ return TRUE; ++ default: ++ break; ++ } + + return FALSE; + +@@ -1170,9 +1182,14 @@ purple_network_init(void) + NM_DBUS_SERVICE, + NM_DBUS_PATH, + NM_DBUS_INTERFACE); ++ /* NM 0.6 signal */ + dbus_g_proxy_add_signal(nm_proxy, "StateChange", G_TYPE_UINT, G_TYPE_INVALID); + dbus_g_proxy_connect_signal(nm_proxy, "StateChange", + G_CALLBACK(nm_state_change_cb), NULL, NULL); ++ /* NM 0.7 and later signal */ ++ dbus_g_proxy_add_signal(nm_proxy, "StateChanged", G_TYPE_UINT, G_TYPE_INVALID); ++ dbus_g_proxy_connect_signal(nm_proxy, "StateChanged", ++ G_CALLBACK(nm_state_change_cb), NULL, NULL); + + dbus_proxy = dbus_g_proxy_new_for_name(nm_conn, + DBUS_SERVICE_DBUS, +@@ -1207,6 +1224,7 @@ purple_network_uninit(void) + #ifdef HAVE_NETWORKMANAGER + if (nm_proxy) { + dbus_g_proxy_disconnect_signal(nm_proxy, "StateChange", G_CALLBACK(nm_state_change_cb), NULL); ++ dbus_g_proxy_disconnect_signal(nm_proxy, "StateChanged", G_CALLBACK(nm_state_change_cb), NULL); + g_object_unref(G_OBJECT(nm_proxy)); + } + if (dbus_proxy) { diff --git a/gnome-unstable/pidgin/pidgin.install b/gnome-unstable/pidgin/pidgin.install new file mode 100644 index 000000000..1a05f573e --- /dev/null +++ b/gnome-unstable/pidgin/pidgin.install @@ -0,0 +1,11 @@ +post_install() { + gtk-update-icon-cache -q -t -f usr/share/icons/hicolor +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} diff --git a/gnome-unstable/pidgin/port-to-farstream-v2.patch b/gnome-unstable/pidgin/port-to-farstream-v2.patch new file mode 100644 index 000000000..49ae60906 --- /dev/null +++ b/gnome-unstable/pidgin/port-to-farstream-v2.patch @@ -0,0 +1,447 @@ +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 +@@ -780,18 +780,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 + +@@ -802,20 +802,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 */ |