diff --git a/plugins/dummy/calls-dummy-call.c b/plugins/dummy/calls-dummy-call.c index 861d3f5..7d7ab1b 100644 --- a/plugins/dummy/calls-dummy-call.c +++ b/plugins/dummy/calls-dummy-call.c @@ -95,6 +95,12 @@ calls_dummy_call_get_inbound (CallsCall *call) return self->inbound; } +static const char* +calls_dummy_call_get_protocol (CallsCall *call) +{ + return "tel"; +} + static void calls_dummy_call_answer (CallsCall *call) { @@ -223,6 +229,7 @@ calls_dummy_call_class_init (CallsDummyCallClass *klass) call_class->get_number = calls_dummy_call_get_number; call_class->get_state = calls_dummy_call_get_state; call_class->get_inbound = calls_dummy_call_get_inbound; + call_class->get_protocol = calls_dummy_call_get_protocol; call_class->answer = calls_dummy_call_answer; call_class->hang_up = calls_dummy_call_hang_up; diff --git a/plugins/mm/calls-mm-call.c b/plugins/mm/calls-mm-call.c index e55df53..af83e4b 100644 --- a/plugins/mm/calls-mm-call.c +++ b/plugins/mm/calls-mm-call.c @@ -216,6 +216,12 @@ calls_mm_call_get_inbound (CallsCall *call) return FALSE; } +static const char * +calls_mm_call_get_protocol (CallsCall *self) +{ + return "tel"; +} + struct CallsMMOperationData { const gchar *desc; @@ -375,6 +381,7 @@ calls_mm_call_class_init (CallsMMCallClass *klass) call_class->get_number = calls_mm_call_get_number; call_class->get_state = calls_mm_call_get_state; call_class->get_inbound = calls_mm_call_get_inbound; + call_class->get_protocol = calls_mm_call_get_protocol; call_class->answer = calls_mm_call_answer; call_class->hang_up = calls_mm_call_hang_up; call_class->tone_start = calls_mm_call_tone_start; diff --git a/plugins/ofono/calls-ofono-call.c b/plugins/ofono/calls-ofono-call.c index c6a3552..61e7e1e 100644 --- a/plugins/ofono/calls-ofono-call.c +++ b/plugins/ofono/calls-ofono-call.c @@ -114,6 +114,12 @@ calls_ofono_call_get_inbound (CallsCall *call) return self->inbound; } +static const char * +calls_ofono_call_get_protocol (CallsCall *call) +{ + return "tel"; +} + struct CallsCallOperationData { const gchar *desc; @@ -351,6 +357,7 @@ calls_ofono_call_class_init (CallsOfonoCallClass *klass) call_class->get_name = calls_ofono_call_get_name; call_class->get_state = calls_ofono_call_get_state; call_class->get_inbound = calls_ofono_call_get_inbound; + call_class->get_protocol = calls_ofono_call_get_protocol; call_class->answer = calls_ofono_call_answer; call_class->hang_up = calls_ofono_call_hang_up; call_class->tone_start = calls_ofono_call_tone_start; diff --git a/plugins/sip/calls-sip-call.c b/plugins/sip/calls-sip-call.c index d8764a2..268bcd4 100644 --- a/plugins/sip/calls-sip-call.c +++ b/plugins/sip/calls-sip-call.c @@ -31,6 +31,7 @@ #include "calls-sip-media-manager.h" #include "calls-sip-media-pipeline.h" #include "calls-sip-util.h" +#include "util.h" #include @@ -143,6 +144,15 @@ calls_sip_call_get_inbound (CallsCall *call) } +static const char * +calls_sip_call_get_protocol (CallsCall *call) +{ + CallsSipCall *self = CALLS_SIP_CALL (call); + + return get_protocol_from_address (self->number); +} + + static void calls_sip_call_answer (CallsCall *call) { @@ -290,6 +300,7 @@ calls_sip_call_class_init (CallsSipCallClass *klass) call_class->get_number = calls_sip_call_get_number; call_class->get_state = calls_sip_call_get_state; call_class->get_inbound = calls_sip_call_get_inbound; + call_class->get_protocol = calls_sip_call_get_protocol; call_class->answer = calls_sip_call_answer; call_class->hang_up = calls_sip_call_hang_up; diff --git a/plugins/sip/calls-sip-origin.c b/plugins/sip/calls-sip-origin.c index a2a31ce..8904e26 100644 --- a/plugins/sip/calls-sip-origin.c +++ b/plugins/sip/calls-sip-origin.c @@ -224,6 +224,8 @@ add_call (CallsSipOrigin *self, g_debug ("Setting local SDP for outgoing call to %s:\n%s", address, local_sdp); + /* TODO transform tel URI according to https://tools.ietf.org/html/rfc3261#section-19.1.6 */ + /* TODO handle IPv4 vs IPv6 for nua_invite (SOATAG_TAG) */ nua_invite (self->oper->call_handle, SOATAG_AF (SOA_AF_IP4_IP6), diff --git a/src/calls-call.c b/src/calls-call.c index fa4da14..0816371 100644 --- a/src/calls-call.c +++ b/src/calls-call.c @@ -55,6 +55,7 @@ enum { PROP_NUMBER, PROP_NAME, PROP_STATE, + PROP_PROTOCOL, N_PROPS, }; @@ -90,6 +91,12 @@ calls_call_real_get_inbound (CallsCall *self) return FALSE; } +static const char * +calls_call_real_get_protocol (CallsCall *self) +{ + return NULL; +} + static void calls_call_real_answer (CallsCall *self) { @@ -140,6 +147,10 @@ calls_call_get_property (GObject *object, g_value_set_enum (value, calls_call_get_state (self)); break; + case PROP_PROTOCOL: + g_value_set_string (value, calls_call_get_protocol (self)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -156,6 +167,7 @@ calls_call_class_init (CallsCallClass *klass) klass->get_name = calls_call_real_get_name; klass->get_state = calls_call_real_get_state; klass->get_inbound = calls_call_real_get_inbound; + klass->get_protocol = calls_call_real_get_protocol; klass->answer = calls_call_real_answer; klass->hang_up = calls_call_real_hang_up; klass->tone_start = calls_call_real_tone_start; @@ -190,6 +202,13 @@ calls_call_class_init (CallsCallClass *klass) CALLS_CALL_STATE_ACTIVE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + properties[PROP_PROTOCOL] = + g_param_spec_string ("protocol", + "Protocol", + "The protocol used for this call", + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + g_object_class_install_properties (object_class, N_PROPS, properties); /** @@ -313,6 +332,22 @@ calls_call_get_inbound (CallsCall *self) return CALLS_CALL_GET_CLASS (self)->get_inbound (self); } +/** + * calls_call_get_protocol: + * @self: a #CallsCall + * + * Get the protocol of the call (i.e. "tel", "sip") + * + * Returns: The protocol used or %NULL when unknown + */ +const char * +calls_call_get_protocol (CallsCall *self) +{ + g_return_val_if_fail (CALLS_IS_CALL (self), NULL); + + return CALLS_CALL_GET_CLASS (self)->get_protocol (self); +} + static inline gboolean tone_key_is_valid (gchar key) { diff --git a/src/calls-call.h b/src/calls-call.h index a5c250e..f3579f7 100644 --- a/src/calls-call.h +++ b/src/calls-call.h @@ -54,6 +54,7 @@ struct _CallsCallClass const char *(*get_name) (CallsCall *self); CallsCallState (*get_state) (CallsCall *self); gboolean (*get_inbound) (CallsCall *self); + const char *(*get_protocol) (CallsCall *self); void (*answer) (CallsCall *self); void (*hang_up) (CallsCall *self); void (*tone_start) (CallsCall *self, @@ -66,6 +67,7 @@ const char *calls_call_get_number (CallsCall *self); const char *calls_call_get_name (CallsCall *self); CallsCallState calls_call_get_state (CallsCall *self); gboolean calls_call_get_inbound (CallsCall *self); +const char *calls_call_get_protocol (CallsCall *self); void calls_call_answer (CallsCall *self); void calls_call_hang_up (CallsCall *self); void calls_call_tone_start (CallsCall *self,