From 71e7a3362681e1920a92e7dd46824a78fde0d6f5 Mon Sep 17 00:00:00 2001 From: Evangelos Ribeiro Tzaras Date: Tue, 2 Feb 2021 15:48:12 +0100 Subject: [PATCH] sip: Initial provider based on dummy provider --- debian/control | 2 + plugins/meson.build | 1 + plugins/sip/calls-sip-call.c | 251 +++++++++++++++++++++++++++ plugins/sip/calls-sip-call.h | 38 +++++ plugins/sip/calls-sip-origin.c | 283 +++++++++++++++++++++++++++++++ plugins/sip/calls-sip-origin.h | 39 +++++ plugins/sip/calls-sip-provider.c | 156 +++++++++++++++++ plugins/sip/calls-sip-provider.h | 41 +++++ plugins/sip/meson.build | 58 +++++++ plugins/sip/sip.plugin.in | 7 + sm.puri.Calls.json | 22 +++ 11 files changed, 898 insertions(+) create mode 100644 plugins/sip/calls-sip-call.c create mode 100644 plugins/sip/calls-sip-call.h create mode 100644 plugins/sip/calls-sip-origin.c create mode 100644 plugins/sip/calls-sip-origin.h create mode 100644 plugins/sip/calls-sip-provider.c create mode 100644 plugins/sip/calls-sip-provider.h create mode 100644 plugins/sip/meson.build create mode 100644 plugins/sip/sip.plugin.in diff --git a/debian/control b/debian/control index ec3a707..6bb5574 100644 --- a/debian/control +++ b/debian/control @@ -11,8 +11,10 @@ Build-Depends: libcallaudio-dev (>= 0.0.5), libfeedback-dev, libhandy-1-dev (>= 1.0.0), + libgstreamer1.0-dev, libgtk-3-dev, libgtk-3-doc , + libsofia-sip-ua-glib-dev, modemmanager-dev, libmm-glib-dev (>= 1.12.0), libpeas-dev, diff --git a/plugins/meson.build b/plugins/meson.build index d41741b..dbda64f 100644 --- a/plugins/meson.build +++ b/plugins/meson.build @@ -1,3 +1,4 @@ subdir('mm') subdir('dummy') subdir('ofono') +subdir('sip') diff --git a/plugins/sip/calls-sip-call.c b/plugins/sip/calls-sip-call.c new file mode 100644 index 0000000..7dee92b --- /dev/null +++ b/plugins/sip/calls-sip-call.c @@ -0,0 +1,251 @@ +/* + * Copyright (C) 2021 Purism SPC + * + * This file is part of Calls. + * + * Calls is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calls is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calls. If not, see . + * + * Author: Evangelos Ribeiro Tzaras + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "calls-sip-call.h" + +#include "calls-message-source.h" +#include "calls-call.h" + +#include + + +struct _CallsSipCall +{ + GObject parent_instance; + gchar *number; + gboolean inbound; + CallsCallState state; +}; + +static void calls_sip_call_message_source_interface_init (CallsCallInterface *iface); +static void calls_sip_call_call_interface_init (CallsCallInterface *iface); + +G_DEFINE_TYPE_WITH_CODE (CallsSipCall, calls_sip_call, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (CALLS_TYPE_MESSAGE_SOURCE, + calls_sip_call_message_source_interface_init) + G_IMPLEMENT_INTERFACE (CALLS_TYPE_CALL, + calls_sip_call_call_interface_init)) + +enum { + PROP_0, + PROP_CALL_NUMBER, + PROP_CALL_INBOUND, + PROP_CALL_STATE, + PROP_CALL_NAME, + PROP_LAST_PROP +}; +static GParamSpec *props[PROP_LAST_PROP]; + + +static void +change_state (CallsSipCall *self, + CallsCallState state) +{ + CallsCallState old_state; + + g_assert (CALLS_IS_CALL (self)); + g_assert (CALLS_IS_SIP_CALL (self)); + + old_state = self->state; + + if (old_state == state) + { + return; + } + + self->state = state; + g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CALL_STATE]); + g_signal_emit_by_name (CALLS_CALL (self), + "state-changed", + state, + old_state); +} + +static void +answer (CallsCall *call) +{ + CallsSipCall *self; + + g_assert (CALLS_IS_CALL (call)); + g_assert (CALLS_IS_SIP_CALL (call)); + + self = CALLS_SIP_CALL (call); + + if (self->state != CALLS_CALL_STATE_INCOMING) { + g_warning ("Call must be in 'incoming' state in order to answer"); + return; + } + + change_state (self, CALLS_CALL_STATE_ACTIVE); +} + +static void +hang_up (CallsCall *call) +{ + CallsSipCall *self; + + g_assert (CALLS_IS_CALL (call)); + g_assert (CALLS_IS_SIP_CALL (call)); + + self = CALLS_SIP_CALL (call); + + change_state (self, CALLS_CALL_STATE_DISCONNECTED); +} + +static void +tone_start (CallsCall *call, gchar key) +{ + g_info ("Beep! (%c)", (int)key); +} + +static void +tone_stop (CallsCall *call, gchar key) +{ + g_info ("Beep end (%c)", (int)key); +} + + +static void +calls_sip_call_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + CallsSipCall *self = CALLS_SIP_CALL (object); + + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + + +static void +calls_sip_call_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + CallsSipCall *self = CALLS_SIP_CALL (object); + + switch (property_id) { + case PROP_CALL_INBOUND: + g_value_set_boolean (value, self->inbound); + break; + + case PROP_CALL_NUMBER: + g_value_set_string (value, self->number); + break; + + case PROP_CALL_STATE: + g_value_set_enum (value, self->state); + break; + + case PROP_CALL_NAME: + g_value_set_string (value, NULL); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + + +static void +calls_sip_call_finalize (GObject *object) +{ + CallsSipCall *self = CALLS_SIP_CALL (object); + + g_free (self->number); + + G_OBJECT_CLASS (calls_sip_call_parent_class)->finalize (object); +} + + +static void +calls_sip_call_class_init (CallsSipCallClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->get_property = calls_sip_call_get_property; + object_class->set_property = calls_sip_call_set_property; + object_class->finalize = calls_sip_call_finalize; + +#define IMPLEMENTS(ID, NAME) \ + g_object_class_override_property (object_class, ID, NAME); \ + props[ID] = g_object_class_find_property(object_class, NAME); + + IMPLEMENTS(PROP_CALL_NUMBER, "number"); + IMPLEMENTS(PROP_CALL_INBOUND, "inbound"); + IMPLEMENTS(PROP_CALL_STATE, "state"); + IMPLEMENTS(PROP_CALL_NAME, "name"); + +#undef IMPLEMENTS + +} + +static void +calls_sip_call_call_interface_init (CallsCallInterface *iface) +{ + iface->answer = answer; + iface->hang_up = hang_up; + iface->tone_start = tone_start; + iface->tone_stop = tone_stop; +} + + +static void +calls_sip_call_message_source_interface_init (CallsCallInterface *iface) +{ +} + + +static void +calls_sip_call_init (CallsSipCall *self) +{ +} + + +CallsSipCall * +calls_sip_call_new (const gchar *number, + gboolean inbound) +{ + CallsSipCall *call; + + g_return_val_if_fail (number != NULL, NULL); + + call = g_object_new (CALLS_TYPE_SIP_CALL, NULL); + + call->number = g_strdup (number); + call->inbound = inbound; + + if (inbound) + call->state = CALLS_CALL_STATE_INCOMING; + else + call->state = CALLS_CALL_STATE_DIALING; + + return call; +} diff --git a/plugins/sip/calls-sip-call.h b/plugins/sip/calls-sip-call.h new file mode 100644 index 0000000..3eebb19 --- /dev/null +++ b/plugins/sip/calls-sip-call.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2021 Purism SPC + * + * This file is part of Calls. + * + * Calls is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calls is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calls. If not, see . + * + * Author: Evangelos Ribeiro Tzaras + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#pragma once + +#include + +G_BEGIN_DECLS + +#define CALLS_TYPE_SIP_CALL (calls_sip_call_get_type ()) + +G_DECLARE_FINAL_TYPE (CallsSipCall, calls_sip_call, CALLS, SIP_CALL, GObject); + +CallsSipCall *calls_sip_call_new (const gchar *number, + gboolean inbound); + +G_END_DECLS diff --git a/plugins/sip/calls-sip-origin.c b/plugins/sip/calls-sip-origin.c new file mode 100644 index 0000000..fd4e8c1 --- /dev/null +++ b/plugins/sip/calls-sip-origin.c @@ -0,0 +1,283 @@ +/* + * Copyright (C) 2021 Purism SPC + * + * This file is part of Calls. + * + * Calls is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calls is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calls. If not, see . + * + * Author: Evangelos Ribeiro Tzaras + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "calls-sip-origin.h" + +#include "calls-message-source.h" +#include "calls-origin.h" +#include "calls-sip-call.h" + +#include +#include + + +struct _CallsSipOrigin +{ + GObject parent_instance; + GString *name; + GList *calls; +}; + +static void calls_sip_origin_message_source_interface_init (CallsOriginInterface *iface); +static void calls_sip_origin_origin_interface_init (CallsOriginInterface *iface); + +G_DEFINE_TYPE_WITH_CODE (CallsSipOrigin, calls_sip_origin, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (CALLS_TYPE_MESSAGE_SOURCE, + calls_sip_origin_message_source_interface_init) + G_IMPLEMENT_INTERFACE (CALLS_TYPE_ORIGIN, + calls_sip_origin_origin_interface_init)) + +enum { + PROP_0, + PROP_NAME, + PROP_CALLS, + PROP_LAST_PROP, +}; +static GParamSpec *props[PROP_LAST_PROP]; + + +static void +remove_call (CallsSipOrigin *self, + CallsCall *call, + const gchar *reason) +{ + CallsOrigin *origin; + + origin = CALLS_ORIGIN (self); + self->calls = g_list_remove (self->calls, call); + + g_signal_emit_by_name (origin, "call-removed", call, reason); + + g_object_unref (G_OBJECT (call)); +} + + +static void +remove_calls (CallsSipOrigin *self, const gchar *reason) +{ + gpointer call; + GList *next; + + while (self->calls != NULL) { + call = self->calls->data; + next = self->calls->next; + g_list_free_1 (self->calls); + self->calls = next; + + g_signal_emit_by_name (self, "call-removed", call, reason); + g_object_unref (call); + } +} + + +struct DisconnectedData +{ + CallsSipOrigin *self; + CallsCall *call; +}; + + +static void +on_call_state_changed_cb (CallsSipOrigin *self, + CallsCallState new_state, + CallsCallState old_state, + CallsCall *call) +{ + if (new_state != CALLS_CALL_STATE_DISCONNECTED) + { + return; + } + + g_assert (CALLS_IS_SIP_ORIGIN (self)); + g_assert (CALLS_IS_CALL (call)); + + remove_call (self, call, "Disconnected"); +} + + +static void +add_call (CallsSipOrigin *self, + const gchar *address, + gboolean inbound) +{ + CallsSipCall *sip_call; + CallsCall *call; + + sip_call = calls_sip_call_new (address, inbound); + g_assert (sip_call != NULL); + + call = CALLS_CALL (sip_call); + g_signal_connect_swapped (call, "state-changed", + G_CALLBACK (on_call_state_changed_cb), + self); + + self->calls = g_list_append (self->calls, sip_call); + + g_signal_emit_by_name (CALLS_ORIGIN (self), "call-added", call); +} + + +static void +dial (CallsOrigin *origin, + const gchar *address) +{ + g_assert (CALLS_ORIGIN (origin)); + g_assert (CALLS_IS_SIP_ORIGIN (origin)); + + if (address == NULL) { + g_warning ("Tried dialing on origin '%s' without an address", + calls_origin_get_name (origin)); + return; + } + + add_call (CALLS_SIP_ORIGIN (origin), address, FALSE); +} + + +static void +calls_sip_origin_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + CallsSipOrigin *self = CALLS_SIP_ORIGIN (object); + + switch (property_id) { + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + + +static void +calls_sip_origin_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + CallsSipOrigin *self = CALLS_SIP_ORIGIN (object); + + switch (property_id) { + case PROP_NAME: + g_value_set_string (value, self->name->str); + break; + + case PROP_CALLS: + g_value_set_pointer (value, g_list_copy (self->calls)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + + +static void +calls_sip_origin_dispose (GObject *object) +{ + CallsSipOrigin *self = CALLS_SIP_ORIGIN (object); + + remove_calls (self, NULL); + + G_OBJECT_CLASS (calls_sip_origin_parent_class)->dispose (object); +} + + +static void +calls_sip_origin_finalize (GObject *object) +{ + CallsSipOrigin *self = CALLS_SIP_ORIGIN (object); + + g_string_free (self->name, TRUE); + + G_OBJECT_CLASS (calls_sip_origin_parent_class)->finalize (object); +} + + +static void +calls_sip_origin_class_init (CallsSipOriginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = calls_sip_origin_dispose; + object_class->finalize = calls_sip_origin_finalize; + object_class->get_property = calls_sip_origin_get_property; + object_class->set_property = calls_sip_origin_set_property; + +#define IMPLEMENTS(ID, NAME) \ + g_object_class_override_property (object_class, ID, NAME); \ + props[ID] = g_object_class_find_property(object_class, NAME); + + IMPLEMENTS (PROP_NAME, "name"); + IMPLEMENTS (PROP_CALLS, "calls"); + +#undef IMPLEMENTS +} + + +static void +calls_sip_origin_message_source_interface_init (CallsOriginInterface *iface) +{ +} + + +static void +calls_sip_origin_origin_interface_init (CallsOriginInterface *iface) +{ + iface->dial = dial; +} + + +static void +calls_sip_origin_init (CallsSipOrigin *self) +{ + self->name = g_string_new (NULL); +} + + +void +calls_sip_origin_create_inbound (CallsSipOrigin *self, + const gchar *address) +{ + g_return_if_fail (address != NULL); + g_return_if_fail (CALLS_IS_SIP_ORIGIN (self)); + + add_call (self, address, TRUE); +} + + +CallsSipOrigin * +calls_sip_origin_new (const gchar *name) +{ + CallsSipOrigin *origin = + g_object_new (CALLS_TYPE_SIP_ORIGIN, + NULL); + + g_string_assign (origin->name, name); + + return origin; +} diff --git a/plugins/sip/calls-sip-origin.h b/plugins/sip/calls-sip-origin.h new file mode 100644 index 0000000..0e0bccc --- /dev/null +++ b/plugins/sip/calls-sip-origin.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2021 Purism SPC + * + * This file is part of Calls. + * + * Calls is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calls is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calls. If not, see . + * + * Author: Evangelos Ribeiro Tzaras + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#pragma once + +#include + +G_BEGIN_DECLS + +#define CALLS_TYPE_SIP_ORIGIN (calls_sip_origin_get_type ()) + +G_DECLARE_FINAL_TYPE (CallsSipOrigin, calls_sip_origin, CALLS, SIP_ORIGIN, GObject); + +CallsSipOrigin *calls_sip_origin_new (const gchar *name); +void calls_sip_origin_create_inbound (CallsSipOrigin *self, + const gchar *number); + +G_END_DECLS diff --git a/plugins/sip/calls-sip-provider.c b/plugins/sip/calls-sip-provider.c new file mode 100644 index 0000000..d717b18 --- /dev/null +++ b/plugins/sip/calls-sip-provider.c @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2021 Purism SPC + * + * This file is part of Calls. + * + * Calls is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calls is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calls. If not, see . + * + * Author: Evangelos Ribeiro Tzaras + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "calls-sip-provider.h" + +#include "calls-message-source.h" +#include "calls-provider.h" +#include "calls-sip-origin.h" + +#include + + +struct _CallsSipProvider +{ + CallsProvider parent_instance; + + GListStore *origins; +}; + +static void calls_sip_provider_message_source_interface_init (CallsMessageSourceInterface *iface); + + +G_DEFINE_DYNAMIC_TYPE_EXTENDED +(CallsSipProvider, calls_sip_provider, CALLS_TYPE_PROVIDER, 0, + G_IMPLEMENT_INTERFACE_DYNAMIC (CALLS_TYPE_MESSAGE_SOURCE, + calls_sip_provider_message_source_interface_init)) + + +static const char * +calls_sip_provider_get_name (CallsProvider *provider) +{ + return "SIP provider"; +} + +static const char * +calls_sip_provider_get_status (CallsProvider *provider) +{ + return "Normal"; +} + +static GListModel * +calls_sip_provider_get_origins (CallsProvider *provider) +{ + CallsSipProvider *self = CALLS_SIP_PROVIDER (provider); + + return G_LIST_MODEL (self->origins); +} + +static void +calls_sip_provider_constructed (GObject *object) +{ + CallsSipProvider *self = CALLS_SIP_PROVIDER (object); + + calls_sip_provider_add_origin (self, "Sip origin"); + + G_OBJECT_CLASS (calls_sip_provider_parent_class)->constructed (object); +} + + +static void +calls_sip_provider_dispose (GObject *object) +{ + CallsSipProvider *self = CALLS_SIP_PROVIDER (object); + + g_list_store_remove_all (self->origins); + g_clear_object (&self->origins); + + G_OBJECT_CLASS (calls_sip_provider_parent_class)->dispose (object); +} + + +static void +calls_sip_provider_class_init (CallsSipProviderClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + CallsProviderClass *provider_class = CALLS_PROVIDER_CLASS (klass); + + object_class->constructed = calls_sip_provider_constructed; + object_class->dispose = calls_sip_provider_dispose; + + 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; +} + + +static void +calls_sip_provider_message_source_interface_init (CallsMessageSourceInterface *iface) +{ +} + + +static void +calls_sip_provider_init (CallsSipProvider *self) +{ + self->origins = g_list_store_new (CALLS_TYPE_SIP_ORIGIN); +} + + +void +calls_sip_provider_add_origin (CallsSipProvider *self, + const gchar *name) +{ + g_autoptr (CallsSipOrigin) origin = calls_sip_origin_new (name); + + g_list_store_append (self->origins, origin); +} + + +CallsSipProvider * +calls_sip_provider_new () +{ + return g_object_new (CALLS_TYPE_SIP_PROVIDER, NULL); +} + + +#ifndef FOR_TESTING + +static void +calls_sip_provider_class_finalize (CallsSipProviderClass *klass) +{ +} + + +G_MODULE_EXPORT void +peas_register_types (PeasObjectModule *module) +{ + calls_sip_provider_register_type (G_TYPE_MODULE (module)); + + peas_object_module_register_extension_type (module, + CALLS_TYPE_PROVIDER, + CALLS_TYPE_SIP_PROVIDER); +} + +#endif /* FOR_TESTING */ diff --git a/plugins/sip/calls-sip-provider.h b/plugins/sip/calls-sip-provider.h new file mode 100644 index 0000000..d48c395 --- /dev/null +++ b/plugins/sip/calls-sip-provider.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2021 Purism SPC + * + * This file is part of Calls. + * + * Calls is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calls is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calls. If not, see . + * + * Author: Evangelos Ribeiro Tzaras + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#pragma once + +#include + +#include "calls-provider.h" + +G_BEGIN_DECLS + +#define CALLS_TYPE_SIP_PROVIDER (calls_sip_provider_get_type ()) + +G_DECLARE_FINAL_TYPE (CallsSipProvider, calls_sip_provider, CALLS, SIP_PROVIDER, CallsProvider) + +CallsSipProvider *calls_sip_provider_new (); +void calls_sip_provider_add_origin (CallsSipProvider *self, + const gchar *name); + +G_END_DECLS diff --git a/plugins/sip/meson.build b/plugins/sip/meson.build new file mode 100644 index 0000000..bbd1428 --- /dev/null +++ b/plugins/sip/meson.build @@ -0,0 +1,58 @@ +# +# Copyright (C) 2021 Purism SPC +# +# This file is part of Calls. +# +# Calls is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Calls is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Calls. If not, see . +# +# Author: Evangelos Ribeiro Tzaras +# +# SPDX-License-Identifier: GPL-3.0-or-later +# + +sip_include = include_directories('.') + +sip_install_dir = join_paths(full_calls_plugin_libdir, 'sip') + +sip_plugin = configure_file( + input: 'sip.plugin.in', + output: 'sip.plugin', + configuration: config_data, + install_dir: sip_install_dir +) + +sip_deps = [ + dependency('gobject-2.0'), + dependency('gstreamer-1.0'), + dependency('gtk+-3.0'), + dependency('libpeas-1.0'), + dependency('sofia-sip-ua-glib'), +] + +sip_sources = files( + [ + 'calls-sip-call.c', 'calls-sip-call.h', + 'calls-sip-origin.c', 'calls-sip-origin.h', + 'calls-sip-provider.c', 'calls-sip-provider.h' + ] +) + +shared_module( + 'sip', + sip_sources, + dependencies: sip_deps, + include_directories: src_include, + install: true, + install_dir: sip_install_dir +) diff --git a/plugins/sip/sip.plugin.in b/plugins/sip/sip.plugin.in new file mode 100644 index 0000000..2b4378c --- /dev/null +++ b/plugins/sip/sip.plugin.in @@ -0,0 +1,7 @@ +[Plugin] +Module=sip +Name=SIP +Description=SIP calls provider +Authors=Evangelos Ribeiro Tzaras +Copyright=Copyright (C) 2021 Purism SPC +Website=@PACKAGE_URL_RAW@ diff --git a/sm.puri.Calls.json b/sm.puri.Calls.json index 0ca14e2..571b550 100644 --- a/sm.puri.Calls.json +++ b/sm.puri.Calls.json @@ -272,6 +272,28 @@ } ] }, + { + "name" : "gstreamer", + "buildsystem" : "meson", + "sources" : [ + { + "type" : "archive", + "url" : "https://gitlab.freedesktop.org/gstreamer/gstreamer/-/archive/1.18.3/gstreamer-1.18.3.tar.gz", + "sha256" : "d7e3917b5d3d9c3bd9bb70b7500314a5725377cff39bcd818df13c1fda0f60ba" + } + ] + }, + { + "name" : "sofia-sip", + "buildsystem" : "autotools", + "sources" : [ + { + "type" : "archive", + "url" : "https://github.com/freeswitch/sofia-sip/archive/v1.13.2.tar.gz", + "sha256" : "b9eca9688ce4b28e062daf0933c3bf661fb607e7afafa71bda3e8f07eb88df44" + } + ] + }, { "name" : "calls", "buildsystem" : "meson",