Bail out! CallsSipMediaPipeline-FATAL-WARNING: Error trying to setup codecs for pipeline: Could not create 'decoder' element of type avdec_g722
stderr:
(gst-plugin-scanner:196349): GLib-GObject-WARNING **: 07:29:24.149: type name '-a-png-encoder-pred' contains invalid characters
See
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1055
This helps avoiding some log spam when scrolling to the bottom:
16:29:17.1053 CallsHistoryBox[2798409]: DEBUG: Increasing history slice from 1825 to 1875
16:29:17.1215 CallsHistoryBox[2798409]: DEBUG: Increasing history slice from 1875 to 1925
16:29:20.6739 CallsHistoryBox[2798409]: DEBUG: Increasing history slice from 1925 to 1975
16:29:23.1919 CallsHistoryBox[2798409]: DEBUG: Increasing history slice from 1975 to 2025
16:29:24.2533 CallsHistoryBox[2798409]: DEBUG: Increasing history slice from 2025 to 2075
for a history of ~1400 records.
The slice get's increased by 50 items if scrolled to the bottom
and reset to the initial 75 items if scrolled back to the top.
The defined threshholds make sure that the UX still feels smooth.
Having more than ~200 widgets in a GtkListBox comes with a very
performance impact. This is especially noticable during while the main
window is being realized (even if Calls already runs in daemon mode).
We can limit the amount of widgets by using a slice list model.
Fixes: #374
The volatile qualifier was mostly used for historical reasons,
the documentation for `g_once_init_enter()` and `g_once_init_leave()`
has the following to say:
While `location` has a `volatile` qualifier,
this is a historical artifact and the pointer passed to it
should not be volatile.
See also https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719
This is an exact copy from GTK4.
as grabbed by chattys commit 1ed5084fb965908e3ee0304781b0de06479c869b
Slightly adapted for Calls.
Based on GTKs 01bd4cc4e18a1ea697fe61791ba710d0d55e8290
This avoids the following warning:
../plugins/sip/calls-sip-origin.c: In function ‘sip_r_register’:
../plugins/sip/calls-sip-origin.c:483:26: warning: the comparison will always evaluate as ‘true’ for the address of ‘m_url’ will never be NULL [-Waddress]
483 | if (sip->sip_contact && sip->sip_contact->m_url && sip->sip_contact->m_url->url_host) {
| ^~
In file included from /usr/include/sofia-sip-1.12/sofia-sip/nua.h:47,
from ../plugins/sip/calls-sip-util.h:28,
from ../plugins/sip/calls-sip-call.h:30,
from ../plugins/sip/calls-sip-origin.c:31:
/usr/include/sofia-sip-1.12/sofia-sip/sip.h:477:23: note: ‘m_url’ declared here
477 | url_t m_url[1]; /**< SIP URL */
| ^~~~~
../plugins/sip/calls-sip-origin.c: In function ‘sip_callback’:
../plugins/sip/calls-sip-origin.c:779:23: warning: the comparison will always evaluate as ‘true’ for the address of ‘a_url’ will never be NULL [-Waddress]
779 | if (sip->sip_from && sip->sip_from->a_url &&
| ^~
/usr/include/sofia-sip-1.12/sofia-sip/sip.h:386:22: note: ‘a_url’ declared here
386 | url_t a_url[1]; /**< URL */
| ^~~~~
Tag messages have been a bit inconsistent in the past, because we
created signed tags by hand.
With this change we can just `gbp tag` and get consistently named tags
and messages.
Key exchanges in SDES can only be done securely with TLS and the option
is disabled by default if not using TLS as the transport protocol.
This setting allows to override this behaviour if the user desires
it (f.e. if the user considers the network his packets go through to be trusted).
A property of type SipMediaEncryption is added to both the origin and
the call which allows to state if we want the media session to be
encrypted with SRTP.
Logic is added to interact with the CallsSdpCryptoContext if encryption
is desired.
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.
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
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).
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.
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
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.
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.
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
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.
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.
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.
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
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).