summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis-Francis Ratté-Boulianne <louis-francis.ratte-boulianne@collabora.co.uk>2010-11-12 12:05:31 -0500
committerOlivier CrĂȘte <olivier.crete@collabora.co.uk>2010-11-17 12:36:19 -0500
commit68f32a42602806560ca4e4bea3e3d3d3084f5a09 (patch)
tree6702d0aed5014167fb772f8271c18749532d44cc
parent75e3ce87dc7326a941048bc8da99f0b6fe0f8ea0 (diff)
Remove code duplication for candidate type and network protocol conversion
-rw-r--r--telepathy-farsight/stream.c95
1 files changed, 49 insertions, 46 deletions
diff --git a/telepathy-farsight/stream.c b/telepathy-farsight/stream.c
index c5403b5..d9287de 100644
--- a/telepathy-farsight/stream.c
+++ b/telepathy-farsight/stream.c
@@ -191,6 +191,10 @@ static void invalidated_cb (TpMediaStreamHandler *proxy,
static FsMediaType tp_media_type_to_fs (TpMediaStreamType type);
+static TpMediaStreamBaseProto fs_network_proto_to_tp (FsNetworkProtocol proto,
+ gboolean *valid);
+static TpMediaStreamTransportType fs_candidate_type_to_tp (FsCandidateType type,
+ gboolean *valid);
static GValueArray *fs_candidate_to_tp_array (const FsCandidate *candidate);
static GPtrArray *fs_codecs_to_tp (TfStream *stream,
const GList *codecs);
@@ -1066,6 +1070,7 @@ cb_fs_local_candidates_prepared (TfStream *self)
GValue transport = { 0, };
TpMediaStreamBaseProto proto;
TpMediaStreamTransportType type;
+ gboolean valid = TRUE;
GList *item = NULL;
g_value_init (&transport,
@@ -1074,35 +1079,12 @@ cb_fs_local_candidates_prepared (TfStream *self)
dbus_g_type_specialized_construct (
TP_STRUCT_TYPE_MEDIA_STREAM_HANDLER_TRANSPORT));
- switch (candidate->proto) {
- case FS_NETWORK_PROTOCOL_UDP:
- proto = TP_MEDIA_STREAM_BASE_PROTO_UDP;
- break;
- case FS_NETWORK_PROTOCOL_TCP:
- proto = TP_MEDIA_STREAM_BASE_PROTO_TCP;
- break;
- default:
- g_critical ("%s: FarsightTransportInfo.proto has an invalid value",
- G_STRFUNC);
+ proto = fs_network_proto_to_tp (candidate->proto, &valid);
+ if (valid == FALSE)
return;
- }
-
- switch (candidate->type) {
- case FS_CANDIDATE_TYPE_HOST:
- type = TP_MEDIA_STREAM_TRANSPORT_TYPE_LOCAL;
- break;
- case FS_CANDIDATE_TYPE_SRFLX:
- case FS_CANDIDATE_TYPE_PRFLX:
- type = TP_MEDIA_STREAM_TRANSPORT_TYPE_DERIVED;
- break;
- case FS_CANDIDATE_TYPE_RELAY:
- type = TP_MEDIA_STREAM_TRANSPORT_TYPE_RELAY;
- break;
- default:
- g_critical ("%s: FarsightTransportInfo.proto has an invalid value",
- G_STRFUNC);
+ type = fs_candidate_type_to_tp (candidate->type, &valid);
+ if (valid == FALSE)
return;
- }
DEBUG (self, "ip = '%s port = %u component = %u'", candidate->ip,
candidate->port, candidate->component_id);
@@ -1244,42 +1226,63 @@ tp_transports_to_fs (const gchar* foundation, const GPtrArray *transports)
return fs_trans_list;
}
-static GValueArray *
-fs_candidate_to_tp_array (const FsCandidate *candidate)
+static TpMediaStreamBaseProto
+fs_network_proto_to_tp (FsNetworkProtocol proto, gboolean *valid)
{
- GValueArray *transport = NULL;
- TpMediaStreamBaseProto proto;
- TpMediaStreamTransportType type;
+ if (valid != NULL)
+ *valid = TRUE;
- switch (candidate->proto) {
+ switch (proto) {
case FS_NETWORK_PROTOCOL_UDP:
- proto = TP_MEDIA_STREAM_BASE_PROTO_UDP;
- break;
+ return TP_MEDIA_STREAM_BASE_PROTO_UDP;
case FS_NETWORK_PROTOCOL_TCP:
- proto = TP_MEDIA_STREAM_BASE_PROTO_TCP;
- break;
+ return TP_MEDIA_STREAM_BASE_PROTO_TCP;
default:
g_critical ("%s: FarsightTransportInfo.proto has an invalid value",
G_STRFUNC);
- return NULL;
+ if (valid != NULL)
+ *valid = FALSE;
+ g_return_val_if_reached(0);
}
+}
+
+static TpMediaStreamTransportType
+fs_candidate_type_to_tp (FsCandidateType type, gboolean *valid)
+{
+ if (valid != NULL)
+ *valid = TRUE;
- switch (candidate->type) {
+ switch (type) {
case FS_CANDIDATE_TYPE_HOST:
- type = TP_MEDIA_STREAM_TRANSPORT_TYPE_LOCAL;
- break;
+ return TP_MEDIA_STREAM_TRANSPORT_TYPE_LOCAL;
case FS_CANDIDATE_TYPE_SRFLX:
case FS_CANDIDATE_TYPE_PRFLX:
- type = TP_MEDIA_STREAM_TRANSPORT_TYPE_DERIVED;
- break;
+ return TP_MEDIA_STREAM_TRANSPORT_TYPE_DERIVED;
case FS_CANDIDATE_TYPE_RELAY:
- type = TP_MEDIA_STREAM_TRANSPORT_TYPE_RELAY;
- break;
+ return TP_MEDIA_STREAM_TRANSPORT_TYPE_RELAY;
default:
g_critical ("%s: FarsightTransportInfo.proto has an invalid value",
G_STRFUNC);
- return NULL;
+ if (valid != NULL)
+ *valid = FALSE;
+ g_return_val_if_reached(0);
}
+}
+
+static GValueArray *
+fs_candidate_to_tp_array (const FsCandidate *candidate)
+{
+ GValueArray *transport = NULL;
+ TpMediaStreamBaseProto proto;
+ TpMediaStreamTransportType type;
+ gboolean valid = TRUE;
+
+ proto = fs_network_proto_to_tp (candidate->proto, &valid);
+ if (valid == FALSE)
+ return NULL;
+ type = fs_candidate_type_to_tp (candidate->type, &valid);
+ if (valid == FALSE)
+ return NULL;
transport = tp_value_array_build (10,
G_TYPE_UINT, candidate->component_id,