From 7ad0f4cdd6c0e2284486b762379b22ab71be3b8c Mon Sep 17 00:00:00 2001 From: Evangelos Ribeiro Tzaras Date: Mon, 19 Apr 2021 19:07:00 +0200 Subject: [PATCH] provider: Add API to query supported protocols These are the protocols that the provider plugin may support. The origins must be queried independently whether or not they support any given protocol. Example: A SIP origin/account may or may not support the "tel" protocol. --- plugins/dummy/calls-dummy-provider.c | 11 +++++++++++ plugins/mm/calls-mm-provider.c | 12 ++++++++++++ plugins/ofono/calls-ofono-provider.c | 10 ++++++++++ plugins/sip/calls-sip-provider.c | 14 ++++++++++++++ src/calls-provider.c | 21 +++++++++++++++++++++ src/calls-provider.h | 2 ++ 6 files changed, 70 insertions(+) diff --git a/plugins/dummy/calls-dummy-provider.c b/plugins/dummy/calls-dummy-provider.c index 78ee07c..a1f63d6 100644 --- a/plugins/dummy/calls-dummy-provider.c +++ b/plugins/dummy/calls-dummy-provider.c @@ -30,6 +30,10 @@ #include #include +static const char * const supported_protocols[] = { + "tel", + NULL +}; struct _CallsDummyProvider { @@ -95,6 +99,12 @@ calls_dummy_provider_get_origins (CallsProvider *provider) return G_LIST_MODEL (self->origins); } +static const char * const * +calls_dummy_provider_get_protocols (CallsProvider *provider) +{ + return supported_protocols; +} + static void constructed (GObject *object) { @@ -134,6 +144,7 @@ calls_dummy_provider_class_init (CallsDummyProviderClass *klass) provider_class->get_name = calls_dummy_provider_get_name; provider_class->get_status = calls_dummy_provider_get_status; provider_class->get_origins = calls_dummy_provider_get_origins; + provider_class->get_protocols = calls_dummy_provider_get_protocols; } diff --git a/plugins/mm/calls-mm-provider.c b/plugins/mm/calls-mm-provider.c index ebd048c..c77856d 100644 --- a/plugins/mm/calls-mm-provider.c +++ b/plugins/mm/calls-mm-provider.c @@ -32,6 +32,11 @@ #include #include +static const char * const supported_protocols[] = { + "tel", + NULL +}; + struct _CallsMMProvider { CallsProvider parent_instance; @@ -354,6 +359,12 @@ calls_mm_provider_get_origins (CallsProvider *provider) return G_LIST_MODEL (self->origins); } +static const char * const * +calls_mm_provider_get_protocols (CallsProvider *provider) +{ + return supported_protocols; +} + static void constructed (GObject *object) { @@ -415,6 +426,7 @@ calls_mm_provider_class_init (CallsMMProviderClass *klass) provider_class->get_name = calls_mm_provider_get_name; provider_class->get_status = calls_mm_provider_get_status; provider_class->get_origins = calls_mm_provider_get_origins; + provider_class->get_protocols = calls_mm_provider_get_protocols; } diff --git a/plugins/ofono/calls-ofono-provider.c b/plugins/ofono/calls-ofono-provider.c index b3e6fbf..59f75b6 100644 --- a/plugins/ofono/calls-ofono-provider.c +++ b/plugins/ofono/calls-ofono-provider.c @@ -34,6 +34,10 @@ #include #include +static const char * const supported_protocols[] = { + "tel", + NULL +}; struct _CallsOfonoProvider { @@ -296,6 +300,11 @@ modem_properties_get_name (GVariant *properties) return NULL; } +static const char * const * +calls_ofono_provider_get_protocols (CallsProvider *provider) +{ + return supported_protocols; +} static void modem_added_cb (GDBOManager *manager, @@ -525,6 +534,7 @@ calls_ofono_provider_class_init (CallsOfonoProviderClass *klass) provider_class->get_name = calls_ofono_provider_get_name; provider_class->get_status = calls_ofono_provider_get_status; provider_class->get_origins = calls_ofono_provider_get_origins; + provider_class->get_protocols = calls_ofono_provider_get_protocols; } diff --git a/plugins/sip/calls-sip-provider.c b/plugins/sip/calls-sip-provider.c index bb8a1cc..3f0c683 100644 --- a/plugins/sip/calls-sip-provider.c +++ b/plugins/sip/calls-sip-provider.c @@ -40,6 +40,13 @@ #include #include +static const char * const supported_protocols[] = { + "tel", + "sip", + "sips", + NULL +}; + /** * SECTION:sip-provider * @short_description: A #CallsProvider for the SIP protocol @@ -156,6 +163,12 @@ calls_sip_provider_get_origins (CallsProvider *provider) return G_LIST_MODEL (self->origins); } +static const char * const * +calls_sip_provider_get_protocols (CallsProvider *provider) +{ + return supported_protocols; +} + static void calls_sip_provider_deinit_sip (CallsSipProvider *self) @@ -319,6 +332,7 @@ calls_sip_provider_class_init (CallsSipProviderClass *klass) provider_class->get_name = calls_sip_provider_get_name; provider_class->get_status = calls_sip_provider_get_status; provider_class->get_origins = calls_sip_provider_get_origins; + provider_class->get_protocols = calls_sip_provider_get_protocols; props[PROP_SIP_STATE] = g_param_spec_enum ("sip-state", diff --git a/src/calls-provider.c b/src/calls-provider.c index 40f3c35..f76d157 100644 --- a/src/calls-provider.c +++ b/src/calls-provider.c @@ -72,6 +72,12 @@ calls_provider_real_get_origins (CallsProvider *self) return NULL; } +static const char * const * +calls_provider_real_get_protocols (CallsProvider *self) +{ + g_assert_not_reached (); +} + static void calls_provider_get_property (GObject *object, @@ -101,6 +107,7 @@ calls_provider_class_init (CallsProviderClass *klass) klass->get_name = calls_provider_real_get_name; klass->get_status = calls_provider_real_get_status; klass->get_origins = calls_provider_real_get_origins; + klass->get_protocols = calls_provider_real_get_protocols; props[PROP_STATUS] = g_param_spec_string ("status", @@ -223,3 +230,17 @@ calls_provider_unload_plugin (const char *name) else g_warning ("Can't unload plugin: No plugin with name %s found", name); } + +/** + * calls_provider_get_protocols: + * @self: A #CallsProvider + * + * Returns: (transfer none): A null-terminated array of strings + */ +const char * const * +calls_provider_get_protocols (CallsProvider *self) +{ + g_return_val_if_fail (CALLS_IS_PROVIDER (self), NULL); + + return CALLS_PROVIDER_GET_CLASS (self)->get_protocols (self); +} diff --git a/src/calls-provider.h b/src/calls-provider.h index 4ceb0db..7d8a6ce 100644 --- a/src/calls-provider.h +++ b/src/calls-provider.h @@ -47,6 +47,7 @@ struct _CallsProviderClass const char *(*get_name) (CallsProvider *self); const char *(*get_status) (CallsProvider *self); GListModel *(*get_origins) (CallsProvider *self); + const char * const *(*get_protocols) (CallsProvider *self); }; const char *calls_provider_get_name (CallsProvider *self); @@ -54,6 +55,7 @@ const char *calls_provider_get_status (CallsProvider *self); GListModel *calls_provider_get_origins (CallsProvider *self); CallsProvider *calls_provider_load_plugin (const char *name); void calls_provider_unload_plugin (const char *name); +const char * const *calls_provider_get_protocols (CallsProvider *self); G_END_DECLS