From: Magnus H. <leg...@us...> - 2008-03-20 12:19:27
|
Update of /cvsroot/emacs-jabber/tox In directory sc8-pr-cvs17.sourceforge.net:/tmp/cvs-serv27869 Modified Files: tox-session.xml tox-session.c Log Message: Add new signal "NewNativeCandidate" Index: tox-session.xml =================================================================== RCS file: /cvsroot/emacs-jabber/tox/tox-session.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- tox-session.xml 17 Jan 2008 00:45:23 -0000 1.1 +++ tox-session.xml 20 Mar 2008 12:19:23 -0000 1.2 @@ -33,6 +33,11 @@ --> </method> + <signal name="NewNativeCandidate"> + <arg name="candidates" type="a(susqsssyyss)"/> + <!-- Argument as to AddRemoteCandidate --> + </signal> + <signal name="NativeCandidatesPrepared"> <arg name="candidates" type="a(susqsssyyss)"/> <!-- Argument as to AddRemoteCandidate --> Index: tox-session.c =================================================================== RCS file: /cvsroot/emacs-jabber/tox/tox-session.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- tox-session.c 17 Jan 2008 00:45:22 -0000 1.1 +++ tox-session.c 20 Mar 2008 12:19:23 -0000 1.2 @@ -35,6 +35,7 @@ /* signals */ enum { + NEW_NATIVE_CANDIDATE, NATIVE_CANDIDATES_PREPARED, LAST_SIGNAL }; @@ -48,6 +49,8 @@ static GstElement *prepare_sink(void); static void stream_done(ToxSession *); +static GValueArray * candidate_list_to_dbus_array(const GList *candidates); + static void tox_session_native_candidates_prepared(FarsightStream *stream, gpointer user_data); static void tox_session_new_native_candidate(FarsightStream *stream, gchar *candidate_id, ToxSession *self); @@ -77,7 +80,7 @@ if (self->priv->dispose_has_run) { return; } - g_printf("in tox_session_dispose\n"); + g_debug("in tox_session_dispose\n"); self->priv->dispose_has_run = TRUE; if (self->priv->stream) @@ -96,7 +99,7 @@ { ToxSession *self = (ToxSession *)obj; - g_printf("in tox_session_finalize\n"); + g_debug("in tox_session_finalize\n"); g_free(self->priv); G_OBJECT_CLASS(parent_class)->finalize(obj); @@ -124,6 +127,17 @@ DIRECTION, direction_param_spec); + signals[NEW_NATIVE_CANDIDATE] = + g_signal_new("new-native-candidate", + G_OBJECT_CLASS_TYPE(klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, + 0, + NULL, NULL, + tox_marshal_VOID__BOXED, + G_TYPE_NONE, + 1, + G_TYPE_VALUE_ARRAY); + signals[NATIVE_CANDIDATES_PREPARED] = g_signal_new("native-candidates-prepared", G_OBJECT_CLASS_TYPE(klass), @@ -133,7 +147,7 @@ tox_marshal_VOID__BOXED, G_TYPE_NONE, 1, - G_TYPE_POINTER); + G_TYPE_VALUE_ARRAY); dbus_g_object_type_install_info(TOX_TYPE_SESSION, &dbus_glib_tox_session_object_info); @@ -172,7 +186,7 @@ } /* start preparing native candidates */ - g_print("About to prepare native candidates...\n"); + g_debug("About to prepare native candidates...\n"); g_signal_connect(self->priv->stream, "new-native-candidate", (GCallback)tox_session_new_native_candidate, (gpointer)self); g_signal_connect(self->priv->stream, "native-candidates-prepared", @@ -475,6 +489,8 @@ g_assert(codec_struct->n_values == 6); g_ptr_array_add(*codecs, codec_struct); + + g_debug("Local codec: %s\n", codec->encoding_name); } return TRUE; @@ -542,124 +558,147 @@ { ToxSession *self = (ToxSession *)user_data; const GList *candidates; - GPtrArray *array; + GValueArray *array; candidates = farsight_stream_get_native_candidate_list(stream); - array = g_ptr_array_new(); + + array = candidate_list_to_dbus_array(candidates); + + g_debug("Sending signal NativeCandidatesPrepared!\n"); + g_signal_emit(self, signals[NATIVE_CANDIDATES_PREPARED], 0, array); +} + +static void +tox_session_new_native_candidate(FarsightStream *stream, gchar *candidate_id, ToxSession *self) +{ + GList *candidate = + farsight_stream_get_native_candidate (stream, candidate_id); + FarsightTransportInfo *trans = candidate->data; + GValueArray *array; + + g_debug ("tox_session_new_native_candidate: New native candidate" + " with %d components, the first being: " + "<id: %s, " + "component: %d, " + "ip: %s port: %d " + "proto: %d, " + "proto_subtype: %s, " + "proto_profile: %s, " + "preference: %f, " + "type: %d " + "username: %s password: %s>", + g_list_length(candidate), + trans->candidate_id, trans->component, + trans->ip, trans->port, trans->proto, trans->proto_subtype, + trans->proto_profile, trans->preference, + trans->type, trans->username, trans->password); + + array = candidate_list_to_dbus_array(candidate); + g_debug("Sending signal NewNativeCandidate!\n"); + g_signal_emit(self, signals[NEW_NATIVE_CANDIDATE], 0, array); +} + +static GValueArray * +candidate_list_to_dbus_array(const GList *candidates) +{ + GValueArray *array; + + array = g_value_array_new(1); for (; candidates; candidates = g_list_next(candidates)) { GValueArray *candidate; FarsightTransportInfo *info; - GValue *value; + GValue value; info = (FarsightTransportInfo*)candidates->data; - candidate = g_value_array_new(10); + candidate = g_value_array_new(11); - value = g_new(GValue, 1); - g_value_init(value, G_TYPE_STRING); - g_value_set_string(value, info->candidate_id); - g_value_array_append(candidate, value); + memset(&value, 0, sizeof value); - value = g_new(GValue, 1); - g_value_init(value, G_TYPE_UINT); - g_value_set_uint(value, info->component); - g_value_array_append(candidate, value); + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, info->candidate_id); + g_value_array_append(candidate, &value); + g_value_unset(&value); - value = g_new(GValue, 1); - g_value_init(value, G_TYPE_STRING); - g_value_set_string(value, info->ip); - g_value_array_append(candidate, value); + g_value_init(&value, G_TYPE_UINT); + g_value_set_uint(&value, info->component); + g_value_array_append(candidate, &value); + g_value_unset(&value); + + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, info->ip); + g_value_array_append(candidate, &value); + g_value_unset(&value); - value = g_new(GValue, 1); - g_value_init(value, G_TYPE_UINT); - g_value_set_uint(value, info->port); - g_value_array_append(candidate, value); + g_value_init(&value, G_TYPE_UINT); + g_value_set_uint(&value, info->port); + g_value_array_append(candidate, &value); + g_value_unset(&value); - value = g_new(GValue, 1); - g_value_init(value, G_TYPE_STRING); + g_value_init(&value, G_TYPE_STRING); switch(info->proto) { case FARSIGHT_NETWORK_PROTOCOL_UDP: - g_value_set_static_string(value, "udp"); + g_value_set_static_string(&value, "udp"); break; case FARSIGHT_NETWORK_PROTOCOL_TCP: - g_value_set_static_string(value, "tcp"); + g_value_set_static_string(&value, "tcp"); break; default: g_error("Unknown protocol value %u\n", info->proto); } - g_value_array_append(candidate, value); + g_value_array_append(candidate, &value); + g_value_unset(&value); - value = g_new(GValue, 1); - g_value_init(value, G_TYPE_STRING); - g_value_set_string(value, info->proto_subtype); - g_value_array_append(candidate, value); + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, info->proto_subtype); + g_value_array_append(candidate, &value); + g_value_unset(&value); - value = g_new(GValue, 1); - g_value_init(value, G_TYPE_STRING); - g_value_set_string(value, info->proto_profile); - g_value_array_append(candidate, value); + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, info->proto_profile); + g_value_array_append(candidate, &value); + g_value_unset(&value); - value = g_new(GValue, 1); - g_value_init(value, G_TYPE_UINT); - g_value_set_uint(value, (guint)(info->preference * 100)); - g_value_array_append(candidate, value); + g_value_init(&value, G_TYPE_UINT); + g_value_set_uint(&value, (guint)(info->preference * 100)); + g_value_array_append(candidate, &value); + g_value_unset(&value); - value = g_new(GValue, 1); - g_value_init(value, G_TYPE_UINT); + g_value_init(&value, G_TYPE_UINT); switch(info->type) { case FARSIGHT_CANDIDATE_TYPE_LOCAL: - g_value_set_uint(value, 0); + g_value_set_uint(&value, 0); break; case FARSIGHT_CANDIDATE_TYPE_DERIVED: - g_value_set_uint(value, 1); + g_value_set_uint(&value, 1); break; case FARSIGHT_CANDIDATE_TYPE_RELAY: - g_value_set_uint(value, 2); + g_value_set_uint(&value, 2); break; default: g_error("Unknown candidate type %u\n", info->proto); } - g_value_array_append(candidate, value); + g_value_array_append(candidate, &value); + g_value_unset(&value); - value = g_new(GValue, 1); - g_value_init(value, G_TYPE_STRING); - g_value_set_string(value, info->username); - g_value_array_append(candidate, value); + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, info->username); + g_value_array_append(candidate, &value); + g_value_unset(&value); - value = g_new(GValue, 1); - g_value_init(value, G_TYPE_STRING); - g_value_set_string(value, info->password); - g_value_array_append(candidate, value); + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, info->password); + g_value_array_append(candidate, &value); + g_value_unset(&value); g_assert(candidate->n_values == 11); - - g_ptr_array_add(array, candidate); - } - g_print("Sending signal NativeCandidatesPrepared!\n"); - g_signal_emit(self, signals[NATIVE_CANDIDATES_PREPARED], 0, array); -} - -static void -tox_session_new_native_candidate(FarsightStream *stream, gchar *candidate_id, ToxSession *self) -{ - GList *candidate = - farsight_stream_get_native_candidate (stream, candidate_id); - FarsightTransportInfo *trans = candidate->data; - FarsightMediaType type; + g_value_init(&value, G_TYPE_VALUE_ARRAY); + /* apparently GValueArray is a "boxed" type */ + g_value_set_boxed(&value, candidate); + g_value_array_append(array, &value); + g_value_unset(&value); + } - g_message ("tox_session_new_native_candidate: New native candidate: " - "<id: %s, " - "component: %d, " - "ip: %s port: %d " - "proto: %d, " - "proto_subtype: %s, " - "proto_profile: %s, " - "preference: %f, " - "type: %d " - "username: %s password: %s>", - trans->candidate_id, trans->component, - trans->ip, trans->port, trans->proto, trans->proto_subtype, - trans->proto_profile, trans->preference, - trans->type, trans->username, trans->password); + return array; } |