Commit Graph
100 Commits
Author SHA1 Message Date
Evangelos Ribeiro Tzaras 4937723541 sip: Add srtp-utilities
These utilities aid in generating and parsing SDP crypto attributes to be used
during the offer/answer negotiation.
2022-05-24 22:30:03 +02:00
Evangelos Ribeiro Tzaras 5cd03a8a13 dbus-manager: Remove unused variables 2022-05-24 22:30:03 +02:00
Evangelos Ribeiro Tzaras cfd0dc6e08 sip: account-widget: Warn when trying to find unknown protocol
A warning is more suitable than a simple debug message as this would be
considered a programming error.
2022-05-24 22:30:03 +02:00
Evangelos Ribeiro Tzaras 5a4fc20c6f Add editorconfig 2022-05-24 22:30:03 +02:00
Evangelos Ribeiro Tzaras ef56c8f51c sip: account-widget: Include option for automatically connecting
Fixes #438
2022-05-24 11:55:52 +00:00
Evangelos Ribeiro Tzaras 47d252eb8b sip-origin: Notify on account property updates
The UI does not have a chance to react otherwise.
2022-05-24 11:55:52 +00:00
Evangelos Ribeiro Tzaras c1be092dea account-widgets: Make row activatable
This brings us closer to the intended design and let's us get rid of
some code.
2022-05-24 11:55:52 +00:00
Evangelos Ribeiro Tzaras f102fb3fcd account-widgets: Conform to style
Closes #396
2022-05-24 11:55:52 +00:00
Evangelos Ribeiro Tzaras 4714aea068 sip: origin: Don't treat DNS failures as errors
No need to g_warning() for this.
2022-05-24 11:55:52 +00:00
Evangelos Ribeiro Tzaras 46ff807f6b sip: origin: Always notify state changes when relevant to the UI
by adding functions to the public API which determine if state changes
should be shown to the user and use them (instead of duplicating similar
logic).
2022-05-24 11:55:52 +00:00
Evangelos Ribeiro Tzaras 41479eea09 account-row: Use delayed state changes for GtkSwitch
When trying to go online/offline we're always waiting for confirmation
from the stack (even if it's a timeout) so the delayed pattern is a good choice.
2022-05-24 11:55:52 +00:00
Evangelos Ribeiro Tzaras 0605582fc7 sip: origin: Notify on state change
The account state has G_EXPLICIT_NOTIFY but we did never notified.
2022-05-24 11:55:52 +00:00
Evangelos Ribeiro Tzaras 59c06aef44 sip: origin: Tweak debugging
Be slightly more verbose in messages.
Demote some warnings.
Don't print empty tags.
2022-05-24 11:55:52 +00:00
Evangelos Ribeiro Tzaras b31db4a51c sip-origin: Codestyle 2022-05-24 11:55:52 +00:00
Evangelos Ribeiro Tzaras 4f4c7e877e account-row: Fix header alignments
Uncrustify must have gotten confused.
2022-05-24 11:55:52 +00:00
Evangelos Ribeiro Tzaras e0f0c84a7d Update libcall-ui to v0.0.3
Brings some UI tweaks, encryption indicator that is bound to calls
`encrypted` property, fixes a small issue with libcallaudio usage and
lots of updated or added translations.

Closes #452
2022-05-24 13:14:32 +02:00
Evangelos Ribeiro Tzaras e052201553 tests: Add testing for sideeffects of using CallsSettings
When setting up a binding between GSettings and GObject properties the
CallsSetting used to set the value from the GSetting to the property and
back to the GSetting.

While the value was still the default value it was marked as non default
because it had explicitly been set without any user interaction.
2022-05-13 19:58:07 +02:00
Evangelos Ribeiro Tzaras 46f46cf3ec settings: Break settings binding cycle
This breaks the settings binding cycle for the "autoload-plugins" and
"preferred-audio-codecs" settings which went something like this:

g_settings_bind () is used with
G_SETTINGS_BIND_DEFAULT (G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET).
It grabs the value of our setting and sets it for the bound property.
This emits the notify signal causing the same value to be set for the
setting.

In effect this caused the setting to be marked as non-default because
Calls had changed the setting without user action. This caused updated
defaults not to apply for existing installations.
2022-05-13 19:58:07 +02:00
Evangelos Ribeiro Tzaras 94fa13af4c settings: Convert to the singleton pattern
We only have a single source of settings, so we should reflect that by
using a singleton. This also reduces our LoC.

This doesn't impair our ability to run tests because there we run with
GSETTINGS_BACKEND=memory
2022-05-13 19:58:07 +02:00
Evangelos Ribeiro Tzaras d28be2650b Fix header alignment
Uncrustify messed up a bit because of the it expects a semicolon for the
G_* () macros

See https://github.com/uncrustify/uncrustify/issues/3393
2022-05-13 19:58:07 +02:00
Evangelos Ribeiro Tzaras 96f1cc0a30 sip: call: Defer setting up codecs for pipeline until activated
This let's us get rid of some ugly code
2022-05-09 11:13:15 +02:00
Evangelos Ribeiro Tzaras 5a15638db3 meson: Enable warning for unused variables 2022-05-09 11:13:15 +02:00
Evangelos Ribeiro Tzaras c6c17671e1 sip: origin: Remove unused variable 2022-05-09 11:13:15 +02:00
Evangelos Ribeiro Tzaras 2ea4b8736f sip: call: Fix header alignment
Uncrustify must have gotten confused.
2022-05-09 11:13:15 +02:00
Evangelos Ribeiro Tzaras 873e7f9890 uncrustify: Treat g_auto* as types
Because g_autoptr () is considered a function call we also need to set
nl_func_var_def_blk to zero because any occurence of g_autoptr () would
be considered the end of a block of variable declarations.
2022-05-09 11:13:15 +02:00
Evangelos Ribeiro Tzaras 78e4d9789d dir-locals: Treat G_DEFINE_FINAL_* macros as including a semicolon 2022-05-09 11:13:15 +02:00
Evangelos Ribeiro Tzaras a2b08b6736 Post release bump 2022-04-26 07:13:41 +02:00
Evangelos Ribeiro Tzaras cb305168b3 Document and release 43.alpha.0 2022-04-25 18:46:36 +02:00
Evangelos Ribeiro Tzaras 47d4164a09 sip: media-pipeline: Take srtp into account when determing pipeline state
If we're using srtp we should also consider the state of srtpenc and srtpdec
elements when determining the state of the whole pipeline.
2022-04-24 13:36:26 +02:00
Evangelos Ribeiro Tzaras bfda8f6a3e sip: media-pipeline: Introduce SRTP elements
The rtpbin will request GstSrtpDec and GstSrtpEnc elements using the
"request-{rtp,rtcp}-{de,en}coder" family of signals.

The newly added boolean use_srtp controls whether the srtp elements are
returned in the signal handler and thus decides if SRTP is used or not.
2022-04-24 13:36:24 +02:00
Evangelos Ribeiro Tzaras 5d0ae4a6fa sip: media-pipeline: Debug pipeline graph on SIGUSR2
Ust GST_DEBUG_BIN_TO_DOT_FILE to generate a dot graph of a pipeline for
debugging purposes when SIGUSR2 is received.

Note the same signal is also used within the dummy plugin to simulate an
incoming call from an unknown number, so when testing you probably want either
the sip plugin or the dummy plugin, but not both.
2022-04-24 13:33:19 +02:00
Evangelos Ribeiro Tzaras 58f9f5cb62 sip: media: Allow specifying SRTP for GStreamer capabilities
When using SRTP the GstCaps must be set accordingly.
2022-04-24 13:31:40 +02:00
Evangelos Ribeiro Tzaras 7ac862155b Uncrustify sources
Ran `find src plugins -iname '*.[c|h]' -print0 | xargs -0 uncrustify --no-backup`
with some minimal manual intervention.
2022-04-24 12:59:42 +02:00
Evangelos Ribeiro Tzaras 8daa502de5 Add uncrustify config
Based on phosh's config
https://source.puri.sm/Librem5/librem5-dev-tools/-/blob/master/config/uncrustify/phosh.cfg

Updated to the latest uncrustify version and slightly modified

Closes #287
2022-04-24 12:26:59 +02:00
Evangelos Ribeiro Tzaras 605776641d sip: media-pipeline: Fix socket reuse
We were using two distinct pipelines, one for receiving and one for
sending. The receive pipeline was set to the playing state to allocate
the sockets which we would reuse for the sending direction for our NAT
traversal scheme.

The rework to a single pipeline broke reusing sockets subtly.

This happened because the state of the GstUDPSrc could be reset leading
to newly allocated sockets once the pipeline is set to play.

This is now fixed by locking the state of the GstUDPSrc in the ready
state during socket reuse setup and while the pipeline is paused.

Additionally get rid of the "close-socket" property on the udp sources
because it was never needed.

Fixes aa446f82

sq
2022-04-22 19:23:14 +02:00
Evangelos Ribeiro Tzaras f44b4c7ef8 sip: origin: Debug print public IP as seen by the registrar 2022-04-22 19:23:14 +02:00
Evangelos Ribeiro Tzaras db503e84cf sip: media-pipeline: Remove unused variables
This is a remnant from the refactor to unify the pipelines.
2022-04-22 19:23:14 +02:00
Evangelos Ribeiro Tzaras 85b0ae6586 dir-locals: Add projectile commands 2022-04-22 11:04:06 +02:00
Evangelos Ribeiro Tzaras f96d2f4b39 ci: Use new debian image 2022-04-12 10:37:29 +02:00
Evangelos Ribeiro Tzaras 9b042fc8e8 d/control: Add "bad" gstreamer plugins in order to test srtp elements 2022-04-12 10:37:29 +02:00
Evangelos Ribeiro Tzaras 5cf26bd5c9 Post release bump 2022-04-12 10:36:08 +02:00
Evangelos Ribeiro Tzaras aa446f8218 sip: pipeline: Unify send and receive pipeline
Using a single pipeline makes implementing encryption easier because we don't
need to duplicate srtpenc and srtpdec elements for each direction.

It also makes it easier to switch to using farstream down the line (see #426).
2022-04-12 08:03:49 +00:00
Evangelos Ribeiro Tzaras 85ee014cc9 tests: media: Rename tests 2022-04-12 08:03:49 +00:00
Evangelos Ribeiro Tzaras 1e9d817ef2 sip: media-pipeline: No need to undef locally declared macros
It cannot bleed into other files, so we don't have to bother cleaning it up.
2022-04-12 08:03:49 +00:00
Evangelos Ribeiro Tzaras be9471cc03 sip: media-pipeline: Use debug macros to allow graphing pipelines
If the environment variable GST_DEBUG_DUMP_DOT_DIR is set, a graph of the send
and receive pipelines will be written to disk.

To generate a png from the exported dot files graphviz can be used like this:

`dot -Tpng -oimage.png graph.dot`
2022-04-05 09:46:16 +00:00
Evangelos Ribeiro Tzaras 69106910f8 manager: Don't raise critical when origin id lookup fails
We don't store origin ids yet
because https://gitlab.gnome.org/GNOME/calls/-/merge_requests/505
is pending on
https://gitlab.gnome.org/GNOME/gom/-/merge_requests/12 and
https://gitlab.gnome.org/GNOME/gom/-/merge_requests/13
2022-04-05 09:27:07 +02:00
Evangelos Ribeiro Tzaras 818757d918 Document and release 42.0 2022-03-19 21:52:14 +01:00
Evangelos Ribeiro Tzaras e783ae4222 po: Add Armenian to LINGUAS 2022-03-19 21:42:02 +01:00
Evangelos Ribeiro Tzaras 77ad7b00aa NEWS: Remove trailing whitespace 2022-03-07 12:18:31 +01:00
Evangelos Ribeiro Tzaras 344ab91fe2 meson: Post release bump 2022-03-07 12:18:07 +01:00
Evangelos Ribeiro Tzaras 281e0d3081 Document and release 42.rc.1 2022-03-06 05:06:22 +01:00
Evangelos Ribeiro Tzaras acfd185e9e tests: media: Test pipeline
Run some basic tests on the pipeline
2022-03-05 23:02:15 +01:00
Evangelos Ribeiro Tzaras 0e3a07aabf sip: media-pipeline: Setup socket reuse for RTP and RTCP during initialization
Now that initialization is split per pipeline and that the OS handles port
allocation we can move setting up socket reuse into the pipeline initialization
step instead of setting it up when starting the media pipelines.

This makes the calls_sip_media_pipeline_start() method a bit simpler.

We're also now reusing sockets for RTCP.

Closes #315
2022-03-05 23:02:15 +01:00
Evangelos Ribeiro Tzaras a7fcb9c0c0 sip: origin: Try fetching RTCP port from SDP attributes
And fallback to the legacy behaviour of RTCP=RTP+1
2022-03-05 23:02:15 +01:00
Evangelos Ribeiro Tzaras 849f298609 sip: media-pipeline: Remove lport-rtp and lport-rtcp property
We're not setting the desired ports from the outside anymore, but rather
querying the ports that have been allocated by the operating system.

Therefore the lport-rtp and lport-rtcp property have become superfluous and are
being removed. We also adapt to changes outside of the pipeline code.
2022-03-05 23:02:15 +01:00
Evangelos Ribeiro Tzaras aeebdfbf53 sip: call: Add pipeline as a construct only property
In the future when we will be able to switch pipelines this might change.
2022-03-05 23:02:15 +01:00
Evangelos Ribeiro Tzaras 7033c1cd75 media manager: Manage and hand out available pipelines
The media manager will always try to have a pipeline ready.
2022-03-05 23:02:15 +01:00
Evangelos Ribeiro Tzaras c4aa8d45e8 sip: media-pipeline: Don't implement GInitable
We don't expect the initialization to be able to fail. The only thing that could
potentially fail is setting up codecs and this has been delayed until after
initialization.
2022-03-05 23:02:13 +01:00
Evangelos Ribeiro Tzaras fe6951c938 sip: media-pipeline: Keep track of pipeline state
This can be used by the media manager to dispose of pipelines which are done.
2022-03-05 23:00:56 +01:00
Evangelos Ribeiro Tzaras 53d6082d64 sip: media-pipeline: Let the OS allocate sockets for udpsrc
First of we get rid of the bindings between from "lport-rtp" and "lport-rtcp" to
the "port" property of the udpsrc elements. The properties themselves will get
removed a little later as the required changes are rather intrusive and we need
some more infrastructure in place before we can do the switch.
2022-03-05 23:00:22 +01:00
Evangelos Ribeiro Tzaras f3a6c15e6a sip: media-pipeline: Allow new pipeline without codec set 2022-03-05 23:00:22 +01:00
Evangelos Ribeiro Tzaras 29742a5f8d sip: media-pipeline: Check codec availability before setup 2022-03-05 23:00:22 +01:00
Evangelos Ribeiro Tzaras 02e271b04a sip: media-pipeline: Delay setting codec
After the refactoring this is as simple as delay setting the codec property.
2022-03-05 23:00:22 +01:00
Evangelos Ribeiro Tzaras 792e90516a sip: media-pipeline: Split initialization per GstPipeline
This is the first step in getting rid of the requirement to have the codec set
during object construction. The goal is to have pipelines prepared in advance so
that the codec can be plugged in once negotiation is complete.

Having the pipelines prepared in advance let's us grab allocated local ports of
udpsrc elements for RTP and RTCP instead of setting those and hoping they're not
yet in use.
2022-03-05 23:00:21 +01:00
Evangelos Ribeiro Tzaras 86e76380c2 sip: media-pipeline: Allow pausing pipeline
We want to pause a pipeline in the multi call scenario.
2022-03-05 19:59:08 +01:00
Evangelos Ribeiro Tzaras 3523403a0c ci: Fix typo in packaging job name
It was supposed to be package:deb-pureos... (not package-deb-pureos...)
2022-03-05 04:02:34 +01:00
Evangelos Ribeiro Tzaras b2c465cf61 meson: Post release bump to 42.rc.1 2022-03-05 03:52:30 +01:00
Evangelos Ribeiro Tzaras 134c4af9c7 record-row: Avoid raising critical
When the record has a NULL id there won't be a CallsBestMatch we can use to bind
properties.
2022-03-04 18:00:32 +01:00
Evangelos Ribeiro Tzaras 1593625373 manager: Remove call-add and call-remove signal
They are phased out in favour of their newly introduced ui-call-* pendants.
This was done to have a better separation of concerns and allows for some
cleanup in CallsCall.

Closes #397
2022-03-04 18:00:32 +01:00
Evangelos Ribeiro Tzaras 42557bf2a1 record-store: Switch to CallsUiCallData 2022-03-04 18:00:32 +01:00
Evangelos Ribeiro Tzaras 7e538d736e ui-call-data: Provide API to get the name of the origin used
This will be used as a fallback when displaying the call details (see #222).
2022-03-04 18:00:32 +01:00
Evangelos Ribeiro Tzaras d24d1c8c59 manager: Implement lookup_origin_by_id()
This function is used in the activate callback for the per protocol dial actions
to choose the correct origin to place a call from. If an origin cannot be found
it will return NULL which will lead to the fallback "app.dial" action being
invoked.
2022-03-04 18:00:32 +01:00
Evangelos Ribeiro Tzaras 30c4e90499 ui-call-data: Store origin id and adapt to changes 2022-03-04 18:00:32 +01:00
Evangelos Ribeiro Tzaras 16b86c29b2 origin: Add id property and adapt to changes
The id property will be used to keep track of which origin was used for a call,
so that we can default to reusing the same origin when placing a call from the
history.
2022-03-04 18:00:32 +01:00
Evangelos Ribeiro Tzaras 04605efac7 plugins: Implement call-type property 2022-03-04 18:00:32 +01:00
Evangelos Ribeiro Tzaras 64ff76e62f manager: Remove unused function declaration
If we have the origin, we can always go directly with calls_origin_dial().
2022-03-04 18:00:32 +01:00
Evangelos Ribeiro Tzaras 3ebc3ed88d call: Prefer pragma once over explicit include guard 2022-03-04 18:00:32 +01:00
Evangelos Ribeiro Tzaras a85f37e853 record-store: Sort include headers 2022-03-04 18:00:32 +01:00
Evangelos Ribeiro Tzaras 4d5d3fffdf schema: Set G722 as the preferred audio codec
It has much better quality than PCMA.
2022-03-04 14:06:08 +01:00
Evangelos Ribeiro Tzaras 23ab31360a desktop: Add X-GNOME-UsesNotification
This allows Calls to be listed in GNOME Control Center's 'Notification' panel
as mentioned in https://docs.gtk.org/gio/class.Notification.html
2022-03-02 11:42:29 +01:00
Evangelos Ribeiro Tzaras b0f54e7d60 ci: Bump flatpak job timeout to 4 hours
The jobs are taking a bit longer currently.
2022-03-02 09:56:44 +01:00
Evangelos Ribeiro Tzaras 778f3567f2 flatpak: Update dependencies 2022-03-02 09:56:44 +01:00
Evangelos Ribeiro Tzaras c2d2c33eae tests: build: Avoid linking against sip module
Fixes the deprecation warning from meson:

DEPRECATION: target sip links against shared module sip, which is incorrect.
             This will be an error in the future, so please use shared_library() for sip instead.
             If shared_module() was used for sip because it has references to undefined symbols,
             use shared_libary() with `override_options: ['b_lundef=false']` instead.
2022-03-02 09:16:12 +01:00
Evangelos Ribeiro Tzaras 30d6c71826 sip: media-manager: Remove unused code
It has outlived its usefulness since 7d113d4180
Also PCMA was never the "best" codec to begin with.
2022-03-01 18:24:04 +01:00
Evangelos Ribeiro Tzaras f017261c59 tests: Split media tests into separate file
This gives us a better separation of concerns and it will make it a bit easier
to move the sip independent media pieces out of the plugin in the mid to long
term.
2022-03-01 18:24:04 +01:00
Evangelos Ribeiro Tzaras ab64421880 tests: sip: Initialize and deinitialize GStreamer explicitly 2022-03-01 18:04:18 +01:00
Evangelos Ribeiro Tzaras c3c099294c tests: sip: Codestyle: Use int and char instead of gint and gchar 2022-03-01 18:04:18 +01:00
Evangelos Ribeiro Tzaras 92c8a69e17 sip: media-pipeline: Initialize GStreamer if it's not already initialized 2022-03-01 18:04:18 +01:00
Evangelos Ribeiro Tzaras a78a2f3daf sip: media-manager: Initialize GStreamer if it's not already initialized 2022-03-01 18:04:18 +01:00
Evangelos Ribeiro Tzaras a99755424f media-manager: Don't run deinitialize GStreamer in finalize()
This makes running tests harder as we cannot call gst_init() after gst_deinit()
has been called.

This is what the API reference has to say about it at
https://gstreamer.freedesktop.org/documentation/gstreamer/gst.html?gi-language=c#gst_deinit

It is normally not needed to call this function in a normal application as the
resources will automatically be freed when the program terminates. This function
is therefore mostly used by testsuites and other memory profiling tools.
2022-03-01 18:04:18 +01:00
Evangelos Ribeiro Tzaras 2d4c3f9b43 sip: call: Remove unnecessary G_OBJECT() cast
g_object_set() takes a gpointer as argument, so there is no need to cast the
argument using G_OBJECT()
2022-03-01 18:04:18 +01:00
Evangelos Ribeiro Tzaras fee633e78b sip: media-pipeline: Prefix overriden GObjectClass methods
Purely cosmetical change to be in line with our style guide.
2022-03-01 18:04:18 +01:00
Evangelos Ribeiro Tzaras bf428f0fa6 sip: media-pipeline: Remove comment about preexisting linked pads
Since we're not reusing pipelines we don't have to check for any existing linked
pads.
2022-03-01 18:04:18 +01:00
Evangelos Ribeiro Tzaras ce00698e71 sip: build: Use simple variant of gnome.mkenums
We were using standard template files anyway.
2022-03-01 18:04:18 +01:00
Evangelos Ribeiro Tzaras e185cac3cb sip: Debug print remote SDP and codec to be used
Fixes #415
2022-03-01 16:32:30 +01:00
Evangelos Ribeiro Tzaras 876f12df95 sip: media-manager: Don't include sofia-sip/nua.h in public header
It isn't needed in the implementation either. It was only useful because it
included system headers like sys/types.h and sys/socket.h which we should now
include directly.

This will make it easier to move the media manager into the core sources.
2022-03-01 16:31:44 +01:00
Evangelos Ribeiro Tzaras 19cf2ab92f sip: media-pipeline: Add G_BEGIN_DECLS and G_END_DECLS to header 2022-03-01 16:31:44 +01:00
Evangelos Ribeiro Tzaras c0a23f5ddc Document and release 42.rc.0 2022-02-25 14:43:30 +01:00
Evangelos Ribeiro Tzaras 5231ff95ad Update libcall-ui
This update brings a fix to the build and updated translations.
2022-02-25 14:43:30 +01:00
Evangelos Ribeiro Tzaras 094d402d9b notifier: Fix logic error
After introducing the STR_IS_NULL_OR_EMPTY macro the rewrite of the logic was
inverted.

Fixes d3677ad5d1
2022-02-25 14:30:35 +01:00