1 diff -aur pidgin-2.10.3-orig//configure.ac pidgin-2.10.3/configure.ac
2 --- pidgin-2.10.3-orig//configure.ac 2012-03-25 23:49:14.000000000 -0400
3 +++ pidgin-2.10.3/configure.ac 2012-03-31 16:23:09.772818869 -0400
7 dnl #######################################################################
8 -dnl # Check for Farsight
9 +dnl # Check for Farstream
10 dnl #######################################################################
11 -AC_ARG_ENABLE(farsight,
12 - [AC_HELP_STRING([--disable-farsight], [compile without farsight support])],
13 - enable_farsight="$enableval", enable_farsight="yes")
14 -if test "x$enable_farsight" != "xno"; then
15 - PKG_CHECK_MODULES(FARSIGHT, [farsight2-0.10 >= 0.0.9], [
16 - AC_DEFINE(USE_FARSIGHT, 1, [Use Farsight for voice and video])
17 - AC_SUBST(FARSIGHT_CFLAGS)
18 - AC_SUBST(FARSIGHT_LIBS)
19 +AC_ARG_ENABLE(farstream,
20 + [AC_HELP_STRING([--disable-farstream], [compile without farstream support])],
21 + enable_farstream="$enableval", enable_farstream="yes")
22 +if test "x$enable_farstream" != "xno"; then
23 + PKG_CHECK_MODULES(FARSTREAM, [farstream-0.1], [
24 + AC_DEFINE(USE_FARSTREAM, 1, [Use Farstream for voice and video])
25 + AC_SUBST(FARSTREAM_CFLAGS)
26 + AC_SUBST(FARSTREAM_LIBS)
28 - enable_farsight="no"
29 + enable_farstream="no"
34 [AC_HELP_STRING([--disable-vv], [compile without voice and video support])],
35 enable_vv="$enableval", enable_vv="yes")
36 if test "x$enable_vv" != "xno"; then
37 - if test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farsight" != "xno"; then
38 + if test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno"; then
39 AC_DEFINE(USE_VV, 1, [Use voice and video])
42 if test "x$force_deps" = "xyes"; then
44 Dependencies for voice/video were not met.
45 -Install the necessary gstreamer and farsight packages first.
46 +Install the necessary gstreamer and farstream packages first.
47 Or use --disable-vv if you do not need voice/video support.
52 -AM_CONDITIONAL(USE_VV, test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farsight" != "xno")
53 +AM_CONDITIONAL(USE_VV, test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno")
55 dnl #######################################################################
56 dnl # Check for Internationalized Domain Name support
57 Only in pidgin-2.10.3: configure.ac.orig
58 diff -aur pidgin-2.10.3-orig//libpurple/Makefile.am pidgin-2.10.3/libpurple/Makefile.am
59 --- pidgin-2.10.3-orig//libpurple/Makefile.am 2012-03-25 23:49:15.000000000 -0400
60 +++ pidgin-2.10.3/libpurple/Makefile.am 2012-03-31 16:23:09.776152155 -0400
63 $(NETWORKMANAGER_LIBS) \
68 $(GSTINTERFACES_LIBS) \
74 - $(FARSIGHT_CFLAGS) \
75 + $(FARSTREAM_CFLAGS) \
77 $(GSTINTERFACES_CFLAGS) \
79 diff -aur pidgin-2.10.3-orig//libpurple/media/backend-fs2.c pidgin-2.10.3/libpurple/media/backend-fs2.c
80 --- pidgin-2.10.3-orig//libpurple/media/backend-fs2.c 2012-03-25 23:49:16.000000000 -0400
81 +++ pidgin-2.10.3/libpurple/media/backend-fs2.c 2012-03-31 16:41:52.840615660 -0400
84 - * @file backend-fs2.c Farsight 2 backend for media API
85 + * @file backend-fs2.c Farstream backend for media API
91 #include "media-gst.h"
93 -#include <gst/farsight/fs-conference-iface.h>
94 -#include <gst/farsight/fs-element-added-notifier.h>
95 +#include <farstream/fs-conference.h>
96 +#include <farstream/fs-element-added-notifier.h>
97 +#include <farstream/fs-utils.h>
99 /** @copydoc _PurpleMediaBackendFs2Class */
100 typedef struct _PurpleMediaBackendFs2Class PurpleMediaBackendFs2Class;
105 + gboolean supports_add;
111 FsConference *conference;
112 gchar *conference_type;
114 + FsElementAddedNotifier *notifier;
116 GHashTable *sessions;
117 GHashTable *participants;
121 purple_debug_info("backend-fs2", "purple_media_backend_fs2_dispose\n");
123 + if (priv->notifier) {
124 + g_object_unref(priv->notifier);
125 + priv->notifier = NULL;
129 GstElement *pipeline;
132 priv->conference != FS_CONFERENCE(src))
135 - if (gst_structure_has_name(msg->structure, "farsight-error")) {
136 + if (gst_structure_has_name(msg->structure, "farstream-error")) {
138 gst_structure_get_enum(msg->structure, "error-no",
139 FS_TYPE_ERROR, (gint*)&error_no);
142 purple_media_end(priv->media, NULL, NULL);
144 - case FS_ERROR_NO_CODECS_LEFT:
145 - purple_media_error(priv->media, _("No codecs"
146 - " left. Your codec"
148 - " fs-codecs.conf are too"
150 - purple_media_end(priv->media, NULL, NULL);
152 - case FS_ERROR_UNKNOWN_CNAME:
154 - * Unknown CName is only a problem for the
155 - * multicast transmitter which isn't used.
156 - * It is also deprecated.
160 purple_debug_error("backend-fs2",
161 - "farsight-error: %i: %s\n",
162 + "farstream-error: %i: %s\n",
164 gst_structure_get_string(
165 msg->structure, "error-msg"));
166 @@ -885,11 +880,11 @@
168 if (FS_ERROR_IS_FATAL(error_no)) {
169 purple_media_error(priv->media, _("A non-recoverable "
170 - "Farsight2 error has occurred."));
171 + "Farstream error has occurred."));
172 purple_media_end(priv->media, NULL, NULL);
174 } else if (gst_structure_has_name(msg->structure,
175 - "farsight-new-local-candidate")) {
176 + "farstream-new-local-candidate")) {
179 FsCandidate *local_candidate;
181 session->id, name, candidate);
182 g_object_unref(candidate);
183 } else if (gst_structure_has_name(msg->structure,
184 - "farsight-local-candidates-prepared")) {
185 + "farstream-local-candidates-prepared")) {
188 FsParticipant *participant;
190 g_signal_emit_by_name(self, "candidates-prepared",
192 } else if (gst_structure_has_name(msg->structure,
193 - "farsight-new-active-candidate-pair")) {
194 + "farstream-new-active-candidate-pair")) {
197 FsCandidate *local_candidate;
199 g_object_unref(lcandidate);
200 g_object_unref(rcandidate);
201 } else if (gst_structure_has_name(msg->structure,
202 - "farsight-recv-codecs-changed")) {
203 + "farstream-recv-codecs-changed")) {
207 @@ -986,10 +981,10 @@
208 codec = codecs->data;
210 purple_debug_info("backend-fs2",
211 - "farsight-recv-codecs-changed: %s\n",
212 + "farstream-recv-codecs-changed: %s\n",
213 codec->encoding_name);
214 } else if (gst_structure_has_name(msg->structure,
215 - "farsight-component-state-changed")) {
216 + "farstream-component-state-changed")) {
218 FsStreamState fsstate;
220 @@ -1025,11 +1020,11 @@
223 purple_debug_info("backend-fs2",
224 - "farsight-component-state-changed: "
225 + "farstream-component-state-changed: "
226 "component: %u state: %s\n",
228 } else if (gst_structure_has_name(msg->structure,
229 - "farsight-send-codec-changed")) {
230 + "farstream-send-codec-changed")) {
234 @@ -1039,12 +1034,12 @@
235 codec_str = fs_codec_to_string(codec);
237 purple_debug_info("backend-fs2",
238 - "farsight-send-codec-changed: codec: %s\n",
239 + "farstream-send-codec-changed: codec: %s\n",
243 } else if (gst_structure_has_name(msg->structure,
244 - "farsight-codecs-changed")) {
245 + "farstream-codecs-changed")) {
247 FsSession *fssession;
249 @@ -1220,8 +1215,12 @@
250 purple_media_is_initiator(media, sid, name))
253 - fs_stream_set_remote_candidates(stream->stream,
254 - stream->remote_candidates, &err);
255 + if (stream->supports_add)
256 + fs_stream_add_remote_candidates(stream->stream,
257 + stream->remote_candidates, &err);
259 + fs_stream_force_remote_candidates(stream->stream,
260 + stream->remote_candidates, &err);
264 @@ -1301,6 +1300,7 @@
265 GstElement *pipeline;
268 + GKeyFile *default_props;
270 priv->conference = FS_CONFERENCE(
271 gst_element_factory_make(priv->conference_type, NULL));
272 @@ -1343,6 +1343,14 @@
276 + default_props = fs_utils_get_default_element_properties(GST_ELEMENT(priv->conference));
277 + if (default_props != NULL) {
278 + priv->notifier = fs_element_added_notifier_new();
279 + fs_element_added_notifier_add(priv->notifier,
280 + GST_BIN(priv->confbin));
281 + fs_element_added_notifier_set_properties_from_keyfile(priv->notifier, default_props);
284 g_signal_connect(G_OBJECT(bus), "message",
285 G_CALLBACK(gst_bus_cb), self);
286 gst_object_unref(bus);
287 @@ -1559,7 +1567,7 @@
288 * receiving the src-pad-added signal.
289 * Only works for non-multicast FsRtpSessions.
291 - if (is_nice || !strcmp(transmitter, "rawudp"))
292 + if (!!strcmp(transmitter, "multicast"))
293 g_object_set(G_OBJECT(session->session),
294 "no-rtcp-timeout", 0, NULL);
296 @@ -1612,7 +1620,7 @@
299 participant = fs_conference_new_participant(
300 - priv->conference, name, &err);
301 + priv->conference, &err);
304 purple_debug_error("backend-fs2",
305 @@ -1622,6 +1630,12 @@
309 + if (g_object_class_find_property(G_OBJECT_GET_CLASS(participant),
311 + g_object_set(participant, "cname", name, NULL);
315 if (!priv->participants) {
316 purple_debug_info("backend-fs2",
317 "Creating hash table for participants\n");
318 @@ -1786,6 +1800,40 @@
323 + session = get_session(self, sess_id);
325 + if (session == NULL) {
326 + purple_debug_error("backend-fs2",
327 + "Couldn't find session to create stream.\n");
331 + participant = get_participant(self, who);
333 + if (participant == NULL) {
334 + purple_debug_error("backend-fs2", "Couldn't find "
335 + "participant to create stream.\n");
339 + fsstream = fs_session_new_stream(session->session, participant,
340 + initiator == TRUE ? type_direction :
341 + (type_direction & FS_DIRECTION_RECV), &err);
343 + if (fsstream == NULL) {
345 + purple_debug_error("backend-fs2",
346 + "Error creating stream: %s\n",
347 + err && err->message ?
348 + err->message : "NULL");
351 + purple_debug_error("backend-fs2",
352 + "Error creating stream\n");
356 memcpy(_params, params, sizeof(GParameter) * num_params);
358 /* set the controlling mode parameter */
359 @@ -1840,45 +1888,22 @@
363 - session = get_session(self, sess_id);
365 - if (session == NULL) {
366 - purple_debug_error("backend-fs2",
367 - "Couldn't find session to create stream.\n");
371 - participant = get_participant(self, who);
373 - if (participant == NULL) {
374 - purple_debug_error("backend-fs2", "Couldn't find "
375 - "participant to create stream.\n");
377 + if(!fs_stream_set_transmitter(fsstream, transmitter,
378 + _params, _num_params, &err)) {
379 + purple_debug_error("backend-fs2", "Could not set transmitter %s: %s.\n", transmitter, err->message);
380 + g_clear_error(&err);
385 - fsstream = fs_session_new_stream(session->session, participant,
386 - initiator == TRUE ? type_direction :
387 - (type_direction & FS_DIRECTION_RECV), transmitter,
388 - _num_params, _params, &err);
391 - if (fsstream == NULL) {
393 - purple_debug_error("backend-fs2",
394 - "Error creating stream: %s\n",
395 - err && err->message ?
396 - err->message : "NULL");
399 - purple_debug_error("backend-fs2",
400 - "Error creating stream\n");
404 stream = g_new0(PurpleMediaBackendFs2Stream, 1);
405 stream->participant = g_strdup(who);
406 stream->session = session;
407 stream->stream = fsstream;
408 + stream->supports_add = !strcmp(transmitter, "nice");
410 priv->streams = g_list_append(priv->streams, stream);
412 @@ -1991,7 +2016,11 @@
413 if (purple_media_is_initiator(priv->media, sess_id, participant) ||
414 purple_media_accepted(
415 priv->media, sess_id, participant)) {
416 - fs_stream_set_remote_candidates(stream->stream,
417 + if (stream->supports_add)
418 + fs_stream_add_remote_candidates(stream->stream,
419 + stream->remote_candidates, &err);
421 + fs_stream_force_remote_candidates(stream->stream,
422 stream->remote_candidates, &err);
425 @@ -2016,6 +2045,7 @@
426 if (sess_id != NULL) {
427 PurpleMediaBackendFs2Session *session = get_session(
428 PURPLE_MEDIA_BACKEND_FS2(self), sess_id);
429 + GList *codecs = NULL;
433 @@ -2023,21 +2053,31 @@
434 if (session->type & (PURPLE_MEDIA_SEND_AUDIO |
435 PURPLE_MEDIA_SEND_VIDEO))
436 g_object_get(session->session,
437 - "codecs-ready", &ret, NULL);
438 + "codecs", &codecs, NULL);
442 + fs_codec_list_destroy (codecs);
446 GList *values = g_hash_table_get_values(priv->sessions);
448 for (; values; values = g_list_delete_link(values, values)) {
449 PurpleMediaBackendFs2Session *session = values->data;
450 + GList *codecs = NULL;
452 if (session->type & (PURPLE_MEDIA_SEND_AUDIO |
453 PURPLE_MEDIA_SEND_VIDEO))
454 g_object_get(session->session,
455 - "codecs-ready", &ret, NULL);
456 + "codecs", &codecs, NULL);
461 + fs_codec_list_destroy (codecs);
467 Only in pidgin-2.10.3/libpurple/media: backend-fs2.c~
468 diff -aur pidgin-2.10.3-orig//libpurple/media.c pidgin-2.10.3/libpurple/media.c
469 --- pidgin-2.10.3-orig//libpurple/media.c 2012-03-25 23:49:16.000000000 -0400
470 +++ pidgin-2.10.3/libpurple/media.c 2012-03-31 16:23:09.789485312 -0400
471 @@ -1067,7 +1067,6 @@
474 PurpleMediaSession *session;
475 - PurpleMediaStream *stream = NULL;
477 g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
479 @@ -1103,7 +1102,7 @@
482 if (purple_media_get_stream(media, sess_id, who) == NULL) {
483 - stream = purple_media_insert_stream(session, who, initiator);
484 + purple_media_insert_stream(session, who, initiator);
486 g_signal_emit(media, purple_media_signals[STATE_CHANGED],
487 0, PURPLE_MEDIA_STATE_NEW,
488 diff -aur pidgin-2.10.3-orig//libpurple/mediamanager.c pidgin-2.10.3/libpurple/mediamanager.c
489 --- pidgin-2.10.3-orig//libpurple/mediamanager.c 2012-03-25 23:49:16.000000000 -0400
490 +++ pidgin-2.10.3/libpurple/mediamanager.c 2012-03-31 16:23:09.789485312 -0400
493 #include <media/backend-fs2.h>
495 -#include <gst/farsight/fs-element-added-notifier.h>
496 +#include <farstream/fs-element-added-notifier.h>
497 #include <gst/interfaces/xoverlay.h>
499 /** @copydoc _PurpleMediaManagerPrivate */