1
0
Fork 0
mirror of https://gitlab.gnome.org/GNOME/calls.git synced 2024-06-28 14:49:30 +00:00
Commit graph

385 commits

Author SHA1 Message Date
Evangelos Ribeiro Tzaras 14350a38ed sip: Add SDP crypto context class
Objects of this type keep track of SDP of the local and remote peers,
allow generating offers and answers and codify default policy used for
cryptographic parameters.
2022-05-24 22:30:03 +02:00
Evangelos Ribeiro Tzaras a14b6bfbf5 sip: media-pipeline: Uncrustify struct members 2022-05-24 22:30:03 +02:00
Evangelos Ribeiro Tzaras ea5b4f2895 sip: media-pipeline: Use cryptographic parameters
Allows setting up cryptographic parameters with
calls_sip_media_pipeline_set_crypto() and use them to set GstCaps for
GstSrtpDec and GObject properties for GstSrtpEnc
2022-05-24 22:30:03 +02:00
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 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 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 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 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 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 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 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 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 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 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
Eugenio Paolantonio (g7) f8825befd8 ofono: call: do not try to pass the "properties" property
The "properties" property doesn't exist anymore since
dbfa593a07.

Signed-off-by: Eugenio Paolantonio (g7) <me@medesimo.eu>
2022-04-12 07:40:14 +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
Anders Jonsson 397870a75b plugins: Use American spelling 2022-03-29 13:37:54 +00:00
Andrey Skvortsov 86beb37e53 sip-account-widget: Add switch to display password 2022-03-27 11:33:37 +00: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 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 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 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 3ac8cc1580 dummy-provider: Add new anonymous incoming call on SIGUSR2 2022-02-18 10:55:53 +01:00
Evangelos Ribeiro Tzaras 8c0d135298 media-pipeline: Put deprecated GStreamer function behind version check macro
gst_element_get_request_pad() is marked as deprecated in GStreamer 1.20.0 in
favour of gst_element_request_pad_simple()
2022-02-12 23:49:30 +00:00
Evangelos Ribeiro Tzaras 8f8da42f76 dummy-origin: Emit call-added only after adding to list
Otherwise we get incorrect values when calling calls_origin_get_calls ()
2022-02-03 12:36:58 +01:00
Evangelos Ribeiro Tzaras 69c530dda8 dummy: provider: Fake being a modem
This is useful to avoid the "No modem" warning in the UI and helps us avoiding
to special case the dummy provider/origins.
2022-01-31 17:08:38 +00:00
Evangelos Ribeiro Tzaras 6aba8e119c dummy: origin: Restrict supported protocols to "tel" 2022-01-31 17:08:38 +00:00
Evangelos Ribeiro Tzaras a8de63f838 dummy: origin: Fix memory leaks 2022-01-27 18:02:15 +01:00
Evangelos Ribeiro Tzaras f6e6d08332 sip: origin: Fix memory leak 2022-01-27 18:02:15 +01:00
Evangelos Ribeiro Tzaras 1b4af654f1 sip: origin: Fix comment style 2022-01-27 18:02:15 +01:00
Evangelos Ribeiro Tzaras 7c5dcd37d7 sip: origin: Switch to state notify signal
We don't need the old state here, so let's use the "notify::state" signal
instead of the "state-changed" signal.
2022-01-20 10:23:09 +00:00
Evangelos Ribeiro Tzaras 470475e531 mm: origin: Switch to state notify signal
We don't need the old state here, so let's use the "notify::state" signal
instead of the "state-changed" signal.
2022-01-20 10:23:09 +00:00
Evangelos Ribeiro Tzaras 58507556e5 dummy: origin: Switch to state notify signal
We don't need the old state here, so let's use the "notify::state" signal
instead of the "state-changed" signal.
2022-01-20 10:23:09 +00:00
Evangelos Ribeiro Tzaras c2c8b1acd9 dummy: origin: Use g_assert in non public functions 2022-01-20 10:23:09 +00:00
Evangelos Ribeiro Tzaras 695839a2d9 sip: origin: Emit user feedback on state change 2022-01-11 12:00:10 +00:00
Evangelos Ribeiro Tzaras cdb6f90acc account: Rework account states
Introduce a state-changed signal which also gives a reason for why the state
changed. This will allow the UI to give some meaningful feedback to the user.

Additionally we can get rid of a number of things that were not really states,
but rather reasons for why a state changed (f.e. authentication failures).
2022-01-11 12:00:10 +00:00
Evangelos Ribeiro Tzaras d5fd098479 sip: origin: Make go_online() a no-op in the direct connection case
This avoids some special casing in init_sip_account()
2022-01-11 12:00:10 +00:00
Evangelos Ribeiro Tzaras 69b615a2c2 sip: origin: Codestyle 2022-01-11 12:00:10 +00:00
Evangelos Ribeiro Tzaras eeb97c82c0 sip: origin: Purge own IP when uninitialising account
This will make sure that we're not using a stale IP address if we're resetting
the account after an IP change.
2022-01-10 08:27:08 +01:00
Evangelos Ribeiro Tzaras 38f9e0b608 sip: media-manager: Get rid of global session IP
Since we're now passing the IP to be used to retrieve the capabilities
for the SDP message body, this has become dead code.
2022-01-08 21:25:09 +00:00
Evangelos Ribeiro Tzaras 8b126484cb sip: Use per origin IP instead of a global IP
Sofia detects a NAT by presence of the "received" parameter in the Via header in
the response to a REGISTER. Sofia will then update the Contact header to use the
IP as reported by the registrar.

The "received" parameter MUST be included in the response according to
https://datatracker.ietf.org/doc/html/rfc3261#section-18.2.1
when the registrar detects a difference between the domain part of the top Via
header and the packet source address but practice has shown that this will not
always be the case.

Addditionally this change allows us to have origins bound to different network
interfaces which would be useful when a registrar can only be accessed through a
VPN.

This also fixes an issue with SDP introduced in
36880c3d34 which was only seen on some SIP
providers:

The session name ("s=") line is not relevant for establishing a connection,
the connection data (c=") line is.

See https://datatracker.ietf.org/doc/html/rfc4566 section 5.3 and 5.7
2022-01-08 21:25:09 +00:00
Evangelos Ribeiro Tzaras ae4053e1c9 sip: call: Remove unnecessary code
The call state depending on whether a call is inbound or not is handled in the
constructed() method of the CallsCall base class.
2022-01-08 21:25:09 +00:00
Evangelos Ribeiro Tzaras ba00665c36 sip: origin: Decouple TLS usage from target address
Since we cannot do encrypted media streams yet, we should hardcode whether or
not we want to use SRTP to FALSE, so that sips target URLs can be used in SIP
calls at all.
2022-01-07 16:34:25 +01:00
Evangelos Ribeiro Tzaras 0cadf24ed0 sip: origin: Fix host being passed as number
Closes #389

Fixes e2acfd3794
2021-12-28 16:40:46 +01:00
Evangelos Ribeiro Tzaras e2acfd3794 sip: origin: Pass telephone number to the call object
If the origin is used for PSTN telephony extract the number from the
SIP dialstring (i.e. sip:+49160123456789@my-sip-host.de) and pass that
to call object for contact matching.
2021-12-26 17:57:14 +01:00
Evangelos Ribeiro Tzaras 992a243de6 sip-account-widget: Add switch to specify account can handle tel URI
Fixes #277
2021-12-26 17:45:12 +01:00
Evangelos Ribeiro Tzaras fbbe17139d sip: origin: Add property tracking usage for tel URIs
Fixes #277
2021-12-26 17:45:12 +01:00
Evangelos Ribeiro Tzaras 66224c9a48 origin: Get rid of "numeric-addresses" property 2021-12-26 17:45:12 +01:00
Evangelos Ribeiro Tzaras cd6917dcf6 sip: origin: Include address in warning when we cannot dial
This allows figuring out which call failed.
2021-12-21 14:52:14 +00:00
Evangelos Ribeiro Tzaras 8575adf998 media-manager: Take preferred audio codecs into account for SDP
Fixes #349
2021-12-21 15:05:47 +01:00
Evangelos Ribeiro Tzaras 0b8fb4a448 media-codecs: Clarify that codec availability should be checked before use 2021-12-21 15:05:47 +01:00
Evangelos Ribeiro Tzaras 27463212d9 media-codecs: Add codec availability check to public API
This will be useful for building a list of preferred audio codecs.
2021-12-21 15:05:47 +01:00
Evangelos Ribeiro Tzaras b49041a3f2 sip: codecs: Fix transfer annotation of media_codecs_get_candidates() 2021-12-21 15:05:47 +01:00
Evangelos Ribeiro Tzaras c12b7a8c69 call: Use protocol fallback
We're falling back to "tel" as the default case.
2021-12-20 12:25:19 +01:00
Evangelos Ribeiro Tzaras dbfa593a07 call: Move name property to base class
This let's us avoid some duplication in the derived classes.
2021-12-20 12:25:19 +01:00
Evangelos Ribeiro Tzaras a1fefcdbac call: Move id property into base class
This allows us to avoid some duplication in the derived classes.
2021-12-20 12:25:19 +01:00
Evangelos Ribeiro Tzaras a048b4c83d call: Move state property into base class
This let's us get rid of a lot of duplication in the derived classes.

Additionally we set the initial state to CALLS_CALL_STATE_INCOMING if
inbound is TRUE and CALLS_CALL_STATE_DIALING otherwise.
2021-12-20 12:25:19 +01:00
Evangelos Ribeiro Tzaras ddf1dd7349 call: Move inbound property into base class
This avoids some repetition in the derived classes.
2021-12-20 12:25:18 +01:00
Evangelos Ribeiro Tzaras 797c9a0c46 mm: call: Codestyle 2021-12-20 12:25:18 +01:00
Evangelos Ribeiro Tzaras b3aff65822 dummy: call: Codestyle 2021-12-20 12:25:18 +01:00
Evangelos Ribeiro Tzaras aadf546472 ofono: call: Codestyle 2021-12-20 12:25:18 +01:00
Evangelos Ribeiro Tzaras 73cf5081d0 sip: origin: Prevent dialing when not online
Setting up the nua context could have failed (see #379) and in that case
our nua_*() calls might derefence a NULL pointer.
2021-12-15 20:01:40 +01:00
Evangelos Ribeiro Tzaras f206b7d257 call: Rename property from "number" to "id"
The term number is not necessarily accurate when dealing with f.e. SIP.
2021-12-05 09:49:05 +01:00
Evangelos Ribeiro Tzaras 4c2717c362 dummy: Add dummy send_dtmf_tone function
This will allow DTMF to be tested UI wise when running the dummy plugin.
2021-11-23 08:50:01 +00:00
Evangelos Ribeiro Tzaras a353a03d01 call: Get rid of tone_stop
It wasn't used by any plugin backend and helps getting rid of a lot of code.
2021-11-23 08:50:01 +00:00
Evangelos Ribeiro Tzaras 2cf7c5e981 sip: origin: Make sure "@host" is in the dial string
This helps avoid some typing work in the case of dialing telephone numbers.

Fixes #350
2021-10-30 18:49:27 +02:00
Evangelos Ribeiro Tzaras 1b4e968e8e sip: origin: Bail when trying to dial empty string 2021-10-30 18:49:27 +02:00
Evangelos Ribeiro Tzaras 94d730c3ed Let provider plugin decide whether to automatically hang up secondary calls
Revert "manager: hang up secondary calls"

This reverts commit 94345e0916 and moves that
functionality to the ModemManager plugin.

Fixes #290
2021-10-22 06:00:45 +02:00
Evangelos Ribeiro Tzaras 21eb12e9b1 dummy-call: Simplify change_state() 2021-10-22 04:58:01 +02:00
Evangelos Ribeiro Tzaras 36880c3d34 sip: Gather public IP from REGISTER response and use it in SDP
Fixes #335
2021-10-06 13:43:04 +00:00
Evangelos Ribeiro Tzaras b8efaf1f66 media-manager: Use G_BEGIN_DECLS and G_END_DECLS in header 2021-10-06 13:43:04 +00:00
Evangelos Ribeiro Tzaras 4675821838 sip: origin: Recreate handles when updating credentials
Otherwise transport protocol changes won't be picked up.

This also allows to get rid of update_nua().
2021-09-29 21:33:55 +00:00
Evangelos Ribeiro Tzaras 1718823b80 sip: Do not fail if CallsNetworkWatch is unavailable
In this case network changes will not be detected.
Additionally fall back to binding on all network interfaces (in this case a user
will have problems when using multiple network interfaces, but there is really
not much we can do without a functioning CallsNetworkWatch).
2021-09-24 05:24:41 +00:00
Evangelos Ribeiro Tzaras b6ee0bb48d sip: sdp: Hang up call when there are no common codecs 2021-09-20 02:14:27 +00:00
Evangelos Ribeiro Tzaras 929d76708a sip: sdp: Honour per media connections
Otherwise we might miss the IP of the remote peer leaving us unable to
establish a connection for RTP.

From https://datatracker.ietf.org/doc/html/rfc4566#section-5.7

   A session description MUST contain either at least one "c=" field in
   each media description or a single "c=" field at the session level.
   It MAY contain a single session-level "c=" field and additional "c="
   field(s) per media description, in which case the per-media values
   override the session-level settings for the respective media.
2021-09-20 02:14:27 +00:00
Evangelos Ribeiro Tzaras cf3face6cc sip: Fix possible NULL pointer dereference
The assumption that the IP of the remote peer can always be found in the
sdp_connection member of the sdp_session_s struct does not always hold true
and we should handle this case gracefully (i.e. without crashing).
2021-09-20 02:14:27 +00:00
Evangelos Ribeiro Tzaras 400281c07e sip: origin: Fix memory leak 2021-09-20 02:14:27 +00:00
Evangelos Ribeiro Tzaras 24040c2122 sip: media: Fix gtk-doc transfer annotation 2021-09-20 02:14:27 +00:00
Evangelos Ribeiro Tzaras a5cfd9eb24 sip: origin: Bind sockets to NIC with default route
Otherwise sofia may use the wrong interface resulting in unroutable packets.

Closes #317
2021-09-05 18:16:24 +02:00
Evangelos Ribeiro Tzaras 6b33845b11 sip: origin: Do not use CallsNetworkWatch during tests
As local testing showed we might get netlink message headers of type
NLMSG_ERROR which leads to a warning being printed and the test to fail.
2021-09-05 18:01:45 +02:00
Evangelos Ribeiro Tzaras 876375a39b sip: provider: Skip creating credential directory on test
As it's not guaranteed that the home directory is always writable
during the build. Debspawn for example does not allow this
and we might get such a warning:

`CallsSipProvider-WARNING **: 21:58:14.839: Failed to create directory '/home/salsaci/.config/calls': 13`
2021-09-03 00:08:05 +02:00
Evangelos Ribeiro Tzaras 56259fd1f1 sip: origin: Destroy registration handle on deinit
Otherwise shutting down may be timing out, because there are pending messages.
Calling nua_destroy_handle() will kill any dialog/leg.
2021-09-02 20:13:25 +02:00
Evangelos Ribeiro Tzaras a3d91d92b5 sip: origin: Handle nua_shutdown() timeout gracefully
If we don't handle the timeout explicitly we would never leave the
`while (!self->is_nua_shutdown)` loop.
2021-09-02 20:11:36 +02:00
Evangelos Ribeiro Tzaras bede9f42e8 sip: origin: Recreate sofia handles on network change
Otherwise the origin will not be able to do any communication anymore
as used sockets might not be valid any more.

Fixes #317
2021-09-02 20:08:48 +02:00
Evangelos Ribeiro Tzaras 2df221c94c sip: origin: Warn instead of asserting in update_nua() on nua stack
Crashing the application is overkill in this case.
2021-09-02 09:12:13 +02:00
Evangelos Ribeiro Tzaras 16897eebe6 sip: origin: Include transport parameter in NUTAG_URL and friends
This makes sure all of the supported protocols have a chance of working.

Since nua_set_params does not update NUTAG_URL (carefully rechecking the docs
verifies this), it is safe to remove the code in update_nua().

However, this means that we will have to recreate the nua stack,
which incidentally is currently being worked on:
https://gitlab.gnome.org/GNOME/calls/-/merge_requests/402
2021-09-02 09:12:13 +02:00
Evangelos Ribeiro Tzaras 7330fe11fd account-widget: Fix apply button not becoming sensitive
when only the transport protocol has been changed.
2021-09-02 09:12:13 +02:00
Evangelos Ribeiro Tzaras 42c0872499 origin: Fix the password when updating credentials
Updating the credentials was broken otherwise.
2021-09-02 09:12:13 +02:00
Evangelos Ribeiro Tzaras 0bfa55473e sip: Make save_to_disk() public and use it when updating accounts
Account credentials will not get updated at all otherwise.
2021-09-02 09:12:13 +02:00
Evangelos Ribeiro Tzaras f47139f7d2 account-widget: Actually use the entered port 2021-09-02 09:12:13 +02:00
Evangelos Ribeiro Tzaras 9faac7e789 account-widget: Actually use the selected protocol
instead of using the hardcoded UDP value.
2021-09-02 09:12:13 +02:00
Evangelos Ribeiro Tzaras 5371debc57 sip: origin: Bail when trying to go online but nua handle is not present
This fixes a segmentation fault.
2021-09-02 09:12:13 +02:00
Evangelos Ribeiro Tzaras c9dd476fa8 sip: Avoid dereferencing a NULL pointer
secret_password_*_finish() may return FALSE without setting the GError.
F.e. trying to remove a non existent secret is not a failure.

The bug supposedly manifests itself because the updating account credentials
from the UI does not always seem to work correctly.
2021-08-26 12:04:21 +00:00
Evangelos Ribeiro Tzaras 77ec258acc sip: provider: Try to create folder for credentials
Otherwise the user could be left unable to save credentials to disk later.

Fixes #326
2021-08-26 12:23:20 +02:00
Evangelos Ribeiro Tzaras 4e76efc5e7 sip: provider: No need to print warning when no credentials file found
The file could simply not (yet) exist.
2021-08-26 12:23:20 +02:00
Evangelos Ribeiro Tzaras 2520a9a555 sip: Avoid g_error for non-fatal issues
The media pipeline acting up does not warrant crashing the application.
2021-08-26 12:23:19 +02:00
Evangelos Ribeiro Tzaras c7731b189a origin: Add "numeric-addresses" property
This will be useful in the dialpad to determine whether we should allow
only numeric input or not.
2021-08-13 02:13:27 +02:00
Evangelos Ribeiro Tzaras f5cd48bd99 sip: origin: Add protocol prefix if missing 2021-08-13 02:13:27 +02:00
Mohammed Sadiq 55a69944f1 sip-account-widget: Validate port value on change 2021-08-10 14:03:13 +00:00
Evangelos Ribeiro Tzaras 21578557f4 sip: provider: Don't store the password in the GKeyFile 2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras fe6b5f9f4a sip: provider: Retrieve password from keyring
Fixes #251.
2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras 8ca63828df sip: provider: Delete password from keyring when deleting account 2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras a8516f6e7b sip: provider: Update credentials on disk when removing origin
Otherwise the key file will be unaltered and loads the same account on
the next startup.

One more step closer to fixing #251.
2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras 40cea6760b sip: provider: Use the secret store to store credentials 2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras 3f12b3fcd5 sip: provider: Add argument to _add_origin() whether to store credentials
This allows us to avoid unnecessary saving to disk during initial account
loading.
2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras e9f155678e sip: origin: Set and update name of origin 2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras 5c1b76908b sip: provider: Save accounts to disk 2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras 7717633698 sip: provider: Add API to save credentials to GKeyFile 2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras 0e5366ddbb sip: account-widget: Emit "widget-edit-done" when done editting
This let's top level containers know to take appropriate action (i.e. hide).
2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras e36469e796 sip: Implement CallsAccountProvider interface 2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras 23cb050f61 sip: Introduce CallsSipAccountWidget
This widget can be used to add new accounts or edit existing ones.

First part of #264.
2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras 1749dcec60 sip: provider: Add API to remove origins 2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras 1a4b501653 sip: provider: Rename test environment variable 2021-07-20 10:17:17 +02:00
Evangelos Ribeiro Tzaras fd9b57c1b3 sip: provider: Load credentials from GKeyFile 2021-07-20 10:17:17 +02:00