This can presumably happen when an encoder gets re-initialised due to an
SSRC table overflow, or when a passthrough encoder (e.g. G.729) returns
no data.
Possibly fixes#915
Change-Id: Ib351054b99754f46d0a8fb2d49629ce7c48dc964
The hash table cannot be used for storage any more as entries can be
removed on demand (64e56d7) but can be cached in packet->handler at the
same time.
Possibly fixes#915
Change-Id: Ic74703b1a57294bfd704b6cddcd666d6063f510a
fix cleanup being skipped on redis slaves
fixes an SDES related Redis mem leak
adds a hash for the ports free list to avoid duplicate entries
fixes#898
Change-Id: I34aad67290ff5ef8824142682aac03cb600d0ecb
A client can potentially change the codec used for a RTP payload type
number, so we must confirm that an existing handler matches the codec
from the SDP.
fixes#903
Change-Id: Id9ae379425359f776883d6ace7fdb44ad651b37e
Untagged branches (only known by via-branch) don't appear in the `tags`
hash and don't have any `other_tags`. The logic to determine whether the
call is completely finished therefore must take these into account
separately.
We take care to remove destroyed monologues from the `viabranches` hash
to keep the count up to date, and determine whether a call is terminated
when there is no more than 1 tagged monologue left and no untagged
monologues.
Closes#875
Change-Id: I6b9618d598f4a95970cd2a452f06574423932b09
required to distinguish between 20-ms and 30-ms modes, both for encoding
and decoding
add support for the iLBC mode= format parameter and dynamic mode
switching
closes#854
Change-Id: Icb6f0ec80df86d27681c689c168b24f163a2db06
stun.c: In function ‘stun_error_len’:
stun.c:388:62: warning: taking address of packed member of ‘struct header’ may result in an unaligned pointer value [-Waddress-of-packed-member]
388 | output_init(&mh, iov, &hdr, STUN_BINDING_ERROR_RESPONSE, req->transaction);
| ~~~^~~~~~~~~~~~~
stun.c: In function ‘stun_binding_success’:
stun.c:479:64: warning: taking address of packed member of ‘struct header’ may result in an unaligned pointer value [-Waddress-of-packed-member]
479 | output_init(&mh, iov, &hdr, STUN_BINDING_SUCCESS_RESPONSE, req->transaction);
| ~~~^~~~~~~~~~~~~
stun.c: In function ‘__stun_success’:
stun.c:540:42: warning: taking address of packed member of ‘struct header’ may result in an unaligned pointer value [-Waddress-of-packed-member]
540 | return ice_response(sfd, sin, attrs, req->transaction);
| ~~~^~~~~~~~~~~~~
stun.c: In function ‘__stun_error’:
stun.c:545:42: warning: taking address of packed member of ‘struct header’ may result in an unaligned pointer value [-Waddress-of-packed-member]
545 | return ice_response(sfd, sin, attrs, req->transaction);
| ~~~^~~~~~~~~~~~~
redis.c: In function ‘redis_hash_get_sdes_params.isra.0’:
redis.c:1095:39: warning: ‘_tag’ directive output may be truncated writing 4 bytes into a region of size between 1 and 32 [-Wformat-truncation=]
1095 | snprintf(tagkey, sizeof(tagkey), "%s_tag", kk);
| ^~~~
In file included from /usr/include/stdio.h:867,
from ../lib/str.h:9,
from ../lib/compat.h:16,
from ../include/redis.h:8,
from redis.c:1:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:67:10: note: ‘__builtin___snprintf_chk’ output between 5 and 36 bytes into a destination of size 32
67 | return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68 | __bos (__s), __fmt, __va_arg_pack ());
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Change-Id: I214458fd3f596e565b1bba9d88808b7c99f9c876
If B accepts a crypto suite that was not listed as the first, in order
to support SRTP passthrough, we correctly answer to A with only that one
crypto suite. But we must also remove all other crypto suites from our
list of supported crypto suites internally, because we use the first one
to init our crypto contexts.
fixes#829
Change-Id: Id07343d7b24648208e3a4b4e0b246949dce0385e
There's no point in starting the notification thread and another Redis
connection if there are no keyspaces to subscribe to
Change-Id: I2a9ef3b7764219b6ca08ebbe81461efd45b3e9de
We need to set the redis context to NULL after freeing it, otherwise
other code will try to free it again, which will make the program
abort when exiting.
Change-Id: Id634075344351eb1c924c59739b72bbf57de3c89
When both logging and sending the DTMF event further, the json buffer
was released/freed _before_ being sent on the network, resulting in a
0-length UDP packet. On the other hand, if only UDP sending was used
(without logging), a leak was happening. This commit fixes both issues.
If `strict source` is set, we can now also kernelise RTCP ports. This
will engage the kernel module's source address checking. If the check
fails, the packet is discarded. Otherwise it's passed to user space
as usual.
Change-Id: Ieedf39fba2263045b0f1faafa7f5826a27b5a115
Move the RTCP_MUX_OVERRIDE flag to the opposite side of the dialogue to
preserve options given during a branched call.
closes#793
Change-Id: I0bd7621ba22fbfe4f41d115ec2e5dab65283ae01
If multiple codecs are encoding to the same destination codec, make them
all use the same encoder context
Change-Id: Iaf9b248f9fd2016fef2b576d24d3fba557d7c1f5
In case of out-of-sequence queued-up packets, the codec handler in use
was the one from the last packet delivered to the sequencer, which might
be a different one from the one needed for each packet coming out of the
sequencer.
Change-Id: Id7fb21328f7d181244a9be2ae5ff13cb6bad31b7
Every packet_stream gets a send_timer allocated, but the teardown
routine skips the refcount decrease for fallback RTCP streams (when
rtcp-mux is in use), resulting in mem leak
fixes#753
Change-Id: Ib3a4ef8a81135918f08e28e127e4bb557b8ea05d
Log lines written to stderr that are consumed by journald will already
have timestamps added to them. Drop the redundant unixtime output for
this use case.
Change-Id: I34886a69a0ef90de2eb84ee8f446cbad624302c1
Adds a new option ptime-reverse to complement setting of ptime towards
the offerer. This and ptime setting are now ignored in answers.
Change-Id: Icbc04f191cbc194b75b72a97832fcaba58feb10e
The from-tag may have been added to the message automatically, so we
should first check if any other flags are present, and use it only if
nothing else was found
Change-Id: Iec95d56812c31185ecd1171d01c922e7af0f5dd4
When we receive an incoming SDES parameter, we must match them against the
previously sent outgoing SDES parameters, choose the one that matches
what we just received and eliminate all others. This is a no-op if none
were sent previously (original offer).
Issue only appears in a re-invite when the first offered crypto suite is
accepted.
fixes#631
Change-Id: I4991d0aaf0b29c1ba66045ed0e5281fc18c8af2e
EPOLL_CTL_MOD is used to monitor an fd's writeable status when write was
blocked, but due to a race condition it's possible that the same fd gets
closed by another thread at the same time, causing the EPOLL_CTL_MOD to
fail. As this is now expected, handle it appropriately.
fixes#684
Change-Id: I1ddf16fdbf0fe3e98b4d908544735b823c4cf539
Codecs that were implicitly accepted for transcoding had no option to
set their parameters (such as bitrate) for encoding. The codec-set
option adds this.
fixes#681
Change-Id: Ib238eb73a507af168c366579abc80da07250fe88
Bitrates specified in codec-transcode-... options were applied to the
decoder created during the offer. The matching encoder only gets created
during the answer phase, at which point the specified bitrate must be
copied from the decoder.
fixes#681
Change-Id: Idc6a16a4493908d78bb0b48ae590aba046152af0
To avoid repeated strcmp()s and make use of switch()'s optimised binary
lookup, we employ a second build step that preprocesses certain .c files
and uses gperf to substitute pseudomacros with their respective constant
hash value.
Change-Id: Id89c4728a0fc7aa911691d4dd1ba8e7b3916a983
One thread may close an fd while another thread is processing the result
events that can include a POLLOUT for the same fd. That same fd might
then get re-opened as another type of object and get added to the poller
again. When the POLLOUT event then gets processed, no `writeable`
function would be present.
This is not a clean fix for the underlying race condition as stray
events might still get processed, but seeing extra stray events should
not be a problem.
Change-Id: I2fa2277bb0ddf512f53917297bd4220fe794dd0e
closes#658
Squashed commit (plus docs and minor modification) of:
commit 4187cd3b2d
Author: Muhammad Zaka <muhammad.zaka@synety.com>
Date: Mon Nov 19 18:13:43 2018 +0000
removed unnecessary pad_crypto_def variable
commit 5c7b7c0ced
Author: Muhammad Zaka <muhammad.zaka@synety.com>
Date: Mon Nov 19 17:39:18 2018 +0000
add `pad-crypto` flag to not truncate trailing '==' after base64 encode
commit 98bea79902
Author: Muhammad Zaka <muhammad.zaka@synety.com>
Date: Fri Nov 16 10:59:47 2018 +0000
crypto containing padding should be sent within sdp for pass through
Change-Id: I1f7502f34e9492100e5c3a5a7345319ed996c22c
We should offer all crypto suites that we support. If passing through
SDES, we should amend the list of crypto suites with all additional ones
that we support that weren't included in the received offer.
closes#577
Change-Id: I9b6c16e8eadecf01cdbc8043bd8361e0f683e456
Instead of just remembering the last seen RTP payload type, this adds a
tracker that keeps track of the last 32 seen payload types and keep the
list in order of how often each type was seen.
Change-Id: I062a43b7bfc9413b755dca548d72953ff8245477
Adding a fixed length to the size of the buffer requested from the
packetizer was wrong, as this is not just the length of the working
buffer but also the size of the buffer to be returned for sample stream
(PCM) codecs. Instead, use the codec definition's bit per sample spec
to make AMR provide a larger buffer than the bare frame.
Change-Id: Ibff59b21d491e3327cc9e907e6515379a8ca9188