1
=== modified file 'configure.ac'
2
Index: pidgin-2.10.2/configure.ac
1
Description: Ported from farsight2 to farstream
2
Forwarded: http://developer.pidgin.im/ticket/14936
4
Last-Update: 2012-04-04
6
Index: pidgin/configure.ac
3
7
===================================================================
4
--- pidgin-2.10.2.orig/configure.ac 2012-03-16 12:33:22.628064519 +0100
5
+++ pidgin-2.10.2/configure.ac 2012-03-16 12:34:07.828066238 +0100
7
[AC_HELP_STRING([--disable-farsight], [compile without farsight support])],
8
enable_farsight="$enableval", enable_farsight="yes")
9
if test "x$enable_farsight" != "xno"; then
8
--- pidgin.orig/configure.ac 2012-04-04 16:31:44.457483230 -0400
9
+++ pidgin/configure.ac 2012-04-04 16:31:57.669483665 -0400
13
dnl #######################################################################
14
-dnl # Check for Farsight
15
+dnl # Check for Farstream
16
dnl #######################################################################
17
-AC_ARG_ENABLE(farsight,
18
- [AC_HELP_STRING([--disable-farsight], [compile without farsight support])],
19
- enable_farsight="$enableval", enable_farsight="yes")
20
-if test "x$enable_farsight" != "xno"; then
10
21
- PKG_CHECK_MODULES(FARSIGHT, [farsight2-0.10 >= 0.0.9], [
11
+ PKG_CHECK_MODULES(FARSIGHT, [farstream-0.1 >= 0.1.1], [
12
AC_DEFINE(USE_FARSIGHT, 1, [Use Farsight for voice and video])
13
AC_SUBST(FARSIGHT_CFLAGS)
14
AC_SUBST(FARSIGHT_LIBS)
15
Index: pidgin-2.10.2/libpurple/media/backend-fs2.c
16
===================================================================
17
--- pidgin-2.10.2.orig/libpurple/media/backend-fs2.c 2012-03-14 06:27:59.000000000 +0100
18
+++ pidgin-2.10.2/libpurple/media/backend-fs2.c 2012-03-16 12:34:07.832066238 +0100
22
- AC_DEFINE(USE_FARSIGHT, 1, [Use Farsight for voice and video])
23
- AC_SUBST(FARSIGHT_CFLAGS)
24
- AC_SUBST(FARSIGHT_LIBS)
25
+AC_ARG_ENABLE(farstream,
26
+ [AC_HELP_STRING([--disable-farstream], [compile without farstream support])],
27
+ enable_farstream="$enableval", enable_farstream="yes")
28
+if test "x$enable_farstream" != "xno"; then
29
+ PKG_CHECK_MODULES(FARSTREAM, [farstream-0.1], [
30
+ AC_DEFINE(USE_FARSTREAM, 1, [Use Farstream for voice and video])
31
+ AC_SUBST(FARSTREAM_CFLAGS)
32
+ AC_SUBST(FARSTREAM_LIBS)
34
- enable_farsight="no"
35
+ enable_farstream="no"
40
[AC_HELP_STRING([--disable-vv], [compile without voice and video support])],
41
enable_vv="$enableval", enable_vv="yes")
42
if test "x$enable_vv" != "xno"; then
43
- if test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farsight" != "xno"; then
44
+ if test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno"; then
45
AC_DEFINE(USE_VV, 1, [Use voice and video])
48
if test "x$force_deps" = "xyes"; then
50
Dependencies for voice/video were not met.
51
-Install the necessary gstreamer and farsight packages first.
52
+Install the necessary gstreamer and farstream packages first.
53
Or use --disable-vv if you do not need voice/video support.
58
-AM_CONDITIONAL(USE_VV, test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farsight" != "xno")
59
+AM_CONDITIONAL(USE_VV, test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno")
61
dnl #######################################################################
62
dnl # Check for Internationalized Domain Name support
63
Index: pidgin/libpurple/Makefile.am
64
===================================================================
65
--- pidgin.orig/libpurple/Makefile.am 2012-03-05 11:29:07.780354000 -0500
66
+++ pidgin/libpurple/Makefile.am 2012-04-04 16:31:57.685483665 -0400
69
$(NETWORKMANAGER_LIBS) \
74
$(GSTINTERFACES_LIBS) \
80
- $(FARSIGHT_CFLAGS) \
81
+ $(FARSTREAM_CFLAGS) \
83
$(GSTINTERFACES_CFLAGS) \
85
Index: pidgin/libpurple/media/backend-fs2.c
86
===================================================================
87
--- pidgin.orig/libpurple/media/backend-fs2.c 2012-04-04 16:29:46.329479343 -0400
88
+++ pidgin/libpurple/media/backend-fs2.c 2012-04-04 16:31:57.685483665 -0400
91
- * @file backend-fs2.c Farsight 2 backend for media API
92
+ * @file backend-fs2.c Farstream backend for media API
20
97
#include "network.h"
21
98
#include "media-gst.h"
24
101
-#include <gst/farsight/fs-element-added-notifier.h>
25
102
+#include <farstream/fs-conference.h>
26
103
+#include <farstream/fs-element-added-notifier.h>
104
+#include <farstream/fs-utils.h>
28
106
/** @copydoc _PurpleMediaBackendFs2Class */
29
107
typedef struct _PurpleMediaBackendFs2Class PurpleMediaBackendFs2Class;
112
+ gboolean supports_add;
118
FsConference *conference;
119
gchar *conference_type;
121
+ FsElementAddedNotifier *notifier;
123
GHashTable *sessions;
124
GHashTable *participants;
128
purple_debug_info("backend-fs2", "purple_media_backend_fs2_dispose\n");
130
+ if (priv->notifier) {
131
+ g_object_unref(priv->notifier);
132
+ priv->notifier = NULL;
136
GstElement *pipeline;
139
priv->conference != FS_CONFERENCE(src))
142
- if (gst_structure_has_name(msg->structure, "farsight-error")) {
143
+ if (gst_structure_has_name(msg->structure, "farstream-error")) {
145
gst_structure_get_enum(msg->structure, "error-no",
146
FS_TYPE_ERROR, (gint*)&error_no);
32
149
purple_media_end(priv->media, NULL, NULL);
151
- case FS_ERROR_NO_CODECS_LEFT:
152
- purple_media_error(priv->media, _("No codecs"
153
- " left. Your codec"
155
- " fs-codecs.conf are too"
157
- purple_media_end(priv->media, NULL, NULL);
34
159
- case FS_ERROR_UNKNOWN_CNAME:
36
161
- * Unknown CName is only a problem for the
42
167
purple_debug_error("backend-fs2",
43
"farsight-error: %i: %s\n",
168
- "farsight-error: %i: %s\n",
169
+ "farstream-error: %i: %s\n",
171
gst_structure_get_string(
172
msg->structure, "error-msg"));
173
@@ -885,11 +880,11 @@
175
if (FS_ERROR_IS_FATAL(error_no)) {
176
purple_media_error(priv->media, _("A non-recoverable "
177
- "Farsight2 error has occurred."));
178
+ "Farstream error has occurred."));
179
purple_media_end(priv->media, NULL, NULL);
181
} else if (gst_structure_has_name(msg->structure,
182
- "farsight-new-local-candidate")) {
183
+ "farstream-new-local-candidate")) {
186
FsCandidate *local_candidate;
188
session->id, name, candidate);
189
g_object_unref(candidate);
190
} else if (gst_structure_has_name(msg->structure,
191
- "farsight-local-candidates-prepared")) {
192
+ "farstream-local-candidates-prepared")) {
195
FsParticipant *participant;
197
g_signal_emit_by_name(self, "candidates-prepared",
199
} else if (gst_structure_has_name(msg->structure,
200
- "farsight-new-active-candidate-pair")) {
201
+ "farstream-new-active-candidate-pair")) {
204
FsCandidate *local_candidate;
206
g_object_unref(lcandidate);
207
g_object_unref(rcandidate);
208
} else if (gst_structure_has_name(msg->structure,
209
- "farsight-recv-codecs-changed")) {
210
+ "farstream-recv-codecs-changed")) {
214
@@ -986,10 +981,10 @@
215
codec = codecs->data;
217
purple_debug_info("backend-fs2",
218
- "farsight-recv-codecs-changed: %s\n",
219
+ "farstream-recv-codecs-changed: %s\n",
220
codec->encoding_name);
221
} else if (gst_structure_has_name(msg->structure,
222
- "farsight-component-state-changed")) {
223
+ "farstream-component-state-changed")) {
225
FsStreamState fsstate;
227
@@ -1025,11 +1020,11 @@
230
purple_debug_info("backend-fs2",
231
- "farsight-component-state-changed: "
232
+ "farstream-component-state-changed: "
233
"component: %u state: %s\n",
235
} else if (gst_structure_has_name(msg->structure,
236
- "farsight-send-codec-changed")) {
237
+ "farstream-send-codec-changed")) {
241
@@ -1039,12 +1034,12 @@
242
codec_str = fs_codec_to_string(codec);
244
purple_debug_info("backend-fs2",
245
- "farsight-send-codec-changed: codec: %s\n",
246
+ "farstream-send-codec-changed: codec: %s\n",
250
} else if (gst_structure_has_name(msg->structure,
251
- "farsight-codecs-changed")) {
252
+ "farstream-codecs-changed")) {
254
FsSession *fssession;
256
@@ -1220,8 +1215,12 @@
45
257
purple_media_is_initiator(media, sid, name))
48
260
- fs_stream_set_remote_candidates(stream->stream,
49
+ fs_stream_add_remote_candidates(stream->stream,
50
stream->remote_candidates, &err);
261
- stream->remote_candidates, &err);
262
+ if (stream->supports_add)
263
+ fs_stream_add_remote_candidates(stream->stream,
264
+ stream->remote_candidates, &err);
266
+ fs_stream_force_remote_candidates(stream->stream,
267
+ stream->remote_candidates, &err);
271
@@ -1301,6 +1300,7 @@
272
GstElement *pipeline;
275
+ GKeyFile *default_props;
277
priv->conference = FS_CONFERENCE(
278
gst_element_factory_make(priv->conference_type, NULL));
279
@@ -1343,6 +1343,14 @@
283
+ default_props = fs_utils_get_default_element_properties(GST_ELEMENT(priv->conference));
284
+ if (default_props != NULL) {
285
+ priv->notifier = fs_element_added_notifier_new();
286
+ fs_element_added_notifier_add(priv->notifier,
287
+ GST_BIN(priv->confbin));
288
+ fs_element_added_notifier_set_properties_from_keyfile(priv->notifier, default_props);
291
g_signal_connect(G_OBJECT(bus), "message",
292
G_CALLBACK(gst_bus_cb), self);
293
gst_object_unref(bus);
294
@@ -1559,7 +1567,7 @@
295
* receiving the src-pad-added signal.
296
* Only works for non-multicast FsRtpSessions.
298
- if (is_nice || !strcmp(transmitter, "rawudp"))
299
+ if (!!strcmp(transmitter, "multicast"))
300
g_object_set(G_OBJECT(session->session),
301
"no-rtcp-timeout", 0, NULL);
303
@@ -1612,7 +1620,7 @@
54
304
GError *err = NULL;
56
306
participant = fs_conference_new_participant(
61
311
purple_debug_error("backend-fs2",
64
fsstream = fs_session_new_stream(session->session, participant,
65
initiator == TRUE ? type_direction :
312
@@ -1622,6 +1630,12 @@
316
+ if (g_object_class_find_property(G_OBJECT_GET_CLASS(participant),
318
+ g_object_set(participant, "cname", name, NULL);
322
if (!priv->participants) {
323
purple_debug_info("backend-fs2",
324
"Creating hash table for participants\n");
325
@@ -1786,6 +1800,40 @@
330
+ session = get_session(self, sess_id);
332
+ if (session == NULL) {
333
+ purple_debug_error("backend-fs2",
334
+ "Couldn't find session to create stream.\n");
338
+ participant = get_participant(self, who);
340
+ if (participant == NULL) {
341
+ purple_debug_error("backend-fs2", "Couldn't find "
342
+ "participant to create stream.\n");
346
+ fsstream = fs_session_new_stream(session->session, participant,
347
+ initiator == TRUE ? type_direction :
348
+ (type_direction & FS_DIRECTION_RECV), &err);
350
+ if (fsstream == NULL) {
352
+ purple_debug_error("backend-fs2",
353
+ "Error creating stream: %s\n",
354
+ err && err->message ?
355
+ err->message : "NULL");
358
+ purple_debug_error("backend-fs2",
359
+ "Error creating stream\n");
363
memcpy(_params, params, sizeof(GParameter) * num_params);
365
/* set the controlling mode parameter */
366
@@ -1840,45 +1888,22 @@
370
- session = get_session(self, sess_id);
372
- if (session == NULL) {
373
- purple_debug_error("backend-fs2",
374
- "Couldn't find session to create stream.\n");
378
- participant = get_participant(self, who);
380
- if (participant == NULL) {
381
- purple_debug_error("backend-fs2", "Couldn't find "
382
- "participant to create stream.\n");
384
+ if(!fs_stream_set_transmitter(fsstream, transmitter,
385
+ _params, _num_params, &err)) {
386
+ purple_debug_error("backend-fs2", "Could not set transmitter %s: %s.\n", transmitter, err->message);
387
+ g_clear_error(&err);
392
- fsstream = fs_session_new_stream(session->session, participant,
393
- initiator == TRUE ? type_direction :
66
394
- (type_direction & FS_DIRECTION_RECV), transmitter,
67
395
- _num_params, _params, &err);
68
+ (type_direction & FS_DIRECTION_RECV), &err);
71
if (fsstream == NULL) {
398
- if (fsstream == NULL) {
400
- purple_debug_error("backend-fs2",
401
- "Error creating stream: %s\n",
402
- err && err->message ?
403
- err->message : "NULL");
406
- purple_debug_error("backend-fs2",
407
- "Error creating stream\n");
411
stream = g_new0(PurpleMediaBackendFs2Stream, 1);
412
stream->participant = g_strdup(who);
413
stream->session = session;
414
stream->stream = fsstream;
415
+ stream->supports_add = !strcmp(transmitter, "nice");
417
priv->streams = g_list_append(priv->streams, stream);
419
@@ -1991,7 +2016,11 @@
73
420
if (purple_media_is_initiator(priv->media, sess_id, participant) ||
74
421
purple_media_accepted(
75
422
priv->media, sess_id, participant)) {
76
423
- fs_stream_set_remote_candidates(stream->stream,
77
+ fs_stream_add_remote_candidates(stream->stream,
424
+ if (stream->supports_add)
425
+ fs_stream_add_remote_candidates(stream->stream,
426
+ stream->remote_candidates, &err);
428
+ fs_stream_force_remote_candidates(stream->stream,
78
429
stream->remote_candidates, &err);
81
Index: pidgin-2.10.2/libpurple/mediamanager.c
82
===================================================================
83
--- pidgin-2.10.2.orig/libpurple/mediamanager.c 2012-03-14 06:27:59.000000000 +0100
84
+++ pidgin-2.10.2/libpurple/mediamanager.c 2012-03-16 12:34:07.836066239 +0100
432
@@ -2016,6 +2045,7 @@
433
if (sess_id != NULL) {
434
PurpleMediaBackendFs2Session *session = get_session(
435
PURPLE_MEDIA_BACKEND_FS2(self), sess_id);
436
+ GList *codecs = NULL;
440
@@ -2023,21 +2053,31 @@
441
if (session->type & (PURPLE_MEDIA_SEND_AUDIO |
442
PURPLE_MEDIA_SEND_VIDEO))
443
g_object_get(session->session,
444
- "codecs-ready", &ret, NULL);
445
+ "codecs", &codecs, NULL);
449
+ fs_codec_list_destroy (codecs);
453
GList *values = g_hash_table_get_values(priv->sessions);
455
for (; values; values = g_list_delete_link(values, values)) {
456
PurpleMediaBackendFs2Session *session = values->data;
457
+ GList *codecs = NULL;
459
if (session->type & (PURPLE_MEDIA_SEND_AUDIO |
460
PURPLE_MEDIA_SEND_VIDEO))
461
g_object_get(session->session,
462
- "codecs-ready", &ret, NULL);
463
+ "codecs", &codecs, NULL);
468
+ fs_codec_list_destroy (codecs);
474
Index: pidgin/libpurple/media.c
475
===================================================================
476
--- pidgin.orig/libpurple/media.c 2012-03-05 11:29:07.780354000 -0500
477
+++ pidgin/libpurple/media.c 2012-04-04 16:31:57.689483665 -0400
478
@@ -1067,7 +1067,6 @@
481
PurpleMediaSession *session;
482
- PurpleMediaStream *stream = NULL;
484
g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
486
@@ -1103,7 +1102,7 @@
489
if (purple_media_get_stream(media, sess_id, who) == NULL) {
490
- stream = purple_media_insert_stream(session, who, initiator);
491
+ purple_media_insert_stream(session, who, initiator);
493
g_signal_emit(media, purple_media_signals[STATE_CHANGED],
494
0, PURPLE_MEDIA_STATE_NEW,
495
Index: pidgin/libpurple/mediamanager.c
496
===================================================================
497
--- pidgin.orig/libpurple/mediamanager.c 2012-04-04 16:29:46.285479342 -0400
498
+++ pidgin/libpurple/mediamanager.c 2012-04-04 16:31:57.689483665 -0400
87
501
#include <media/backend-fs2.h>