Deprecate parsing of generic flags using `new_list_to_dict()`.
Leaving it only for `received-from` as it requires special
handling. Function signature is adopted accordingly.
The funciton itself calls the `call_ng_main_flags()` directly,
without really using intermediate bencode objects.
Change-Id: I320761a4b84da0128981f9b65e3ba69e9b4018ac
Direction parsing.
Instead of adding key/val flags to the dictionary for
further parsing later via iteration in `call_ng_main_flags()`,
just call the `call_ng_main_flags()` directly.
Change-Id: Ide137aed12a6ba416b59a307a0a11a934f78a858
Codec related flags parsing.
A bencode list for codec related flags keeping (while
parsing in `parse_rtpp_flags()` ), is removed due to no need.
Instead of adding key/val flags to the dictionary for
further parsing later via iteration in `call_ng_main_flags()`,
just call the `call_ng_codec_flags()` directly.
Change-Id: I1adcea84e9254ae35e6480d61426f1434513e779
Transport parsing.
Instead of adding key/val flags to the dictionary for
further parsing later via iteration in `call_ng_main_flags()`,
just call the `call_ng_main_flags()` directly.
Change-Id: I86a2d6855bcd94edb206c632d8288dd769e94ba8
Instead of adding key/val flags to the dictionary for
further parsing later via iteration in `call_ng_main_flags()`,
just call the `call_ng_main_flags()` directly.
Change-Id: Ia893a6b50db7a0659a42c09463169f2c0f5e595e
These don't actually do anything right now as these function don't do an
early return, but having these in place will make things more future
proof.
Change-Id: I05b82a4366847e0eff1d1392885cf086516df053
NFTNL_EXPR_TG_INFO actually expects the info data to be heap allocated
via malloc(), as it will free() it when the expression is freed via
nftnl_expr_free().
No symbol table info available.
No symbol table info available.
No symbol table info available.
No locals.
No locals.
r = 0x55e087c75130
err = <optimized out>
err = <optimized out>
args=args@entry=0x7ffc80943460) at ./nftables.c:593
err = <optimized out>
nl = 0x55e087c4add0
seq = 1711621092
err = 0x0
nl = <optimized out>
seq = <optimized out>
err = <optimized out>
No locals.
Log:
rtpengine[269176]: INFO: [crypto] Generating new DTLS certificate
rtpengine[269176]: DEBUG: [crypto] Using EC-prime256v1 key for DTLS certificate
rtpengine[269176]: free(): invalid pointer
rtpengine[269792]: INFO: [crypto] Generating new DTLS certificate
rtpengine[269792]: DEBUG: [crypto] Using EC-prime256v1 key for DTLS certificate
rtpengine[269792]: free(): invalid pointer
rtpengine[270372]: INFO: [crypto] Generating new DTLS certificate
rtpengine[270372]: DEBUG: [crypto] Using EC-prime256v1 key for DTLS certificate
rtpengine[270372]: free(): invalid pointer
rtpengine[2487]: INFO: [crypto] Generating new DTLS certificate
rtpengine[2487]: DEBUG: [crypto] Using EC-prime256v1 key for DTLS certificate
rtpengine[2487]: free(): invalid pointer
Change-Id: Id67a4bb4cd3627d7ea6aed1b9f7d73b80ed676c8
Since the generic flags parsing is done (from now on) directly
in the `parse_rtpp_flags()`, there is no need to keep a separate
bencode list object to store them, which was originally intended
to be used later for parsing in `call_ng_flags_flags()`,
but not the case anymore.
Change-Id: I7898e29cabecfd6e8429c064d7b5904d94c50513
Introduced by d7b8ebbc68
*** CID 1584501: Control flow issues (MISSING_BREAK)
/daemon/call_interfaces.c: 1825 in call_ng_main_flags()
1819 call_ng_flags_str_list(out, value, call_ng_flags_replace, NULL);
1820 break;
1821 case CSH_LOOKUP("rtcp-mux"):
1822 case CSH_LOOKUP("RTCP-mux"):
1823 call_ng_flags_str_list(out, value, call_ng_flags_rtcp_mux, NULL);
1824 break;
>>> CID 1584501: Control flow issues (MISSING_BREAK)
>>> The case for value "324" is not terminated by a "break" statement.
1825 case CSH_LOOKUP("rtpp-flags"):;
1826 case CSH_LOOKUP("rtpp_flags"):;
1827 /* new dictionary to store rtpp_flags */
1828 bencode_item_t * dict;
1829 dict = bencode_dictionary(value->buffer);
1830 assert(dict != NULL);
Change-Id: Iaa1d9b3bd31d32e48451c3a47f8e99fa3c755e63
having injected events on the recv list can cause out of order TS
values which results in is_in_dtmf incorrectly returning NULL and
letting the transcoded PCM frames through.
It also doesn't make sense to add DTMF to the send list unless they're
actually being sent, so injected delayed or unblocked
Change-Id: I07e2a35e27142715a5257f199326b7a3d133e2a8
now that the returned last_event_ts is always that of the previous
DTMF, we can ensure that the next one isn't transmitted until that
time plus the required pause.
Like the num_samples calculation, the actual time needs to be
increased by 1 packets worth of samples so tha pause lasts the
full duration required
Change-Id: I6da1dd7cbcf49f7f0431a5123df2cdc382fe3dba
this function is used to determine if a pause is needed on a new
injected DTMF's start ts to ensure a gap between the events. However,
if an inject request comes in after the end of the previous event
but before it would have been offset due to pause, no pause is added
This change returns the ts value from dtmf_state if the queue is
empty as that will always be the ts of the last DTMF transmitted
Change-Id: I4f3cf5115d1a8e26c0ca1bc9570c46e29391e0d0
the num_samples was added to the start_pts, which is the first event
packet timestamp, which has already increased its ts by its event
duration. so, the total duration of events ends up being one packet
more than intended.
Change-Id: I423bb222a81c5bd78e570ff2026c72dd4dd1b100
Make sure we increase the output RTP sequence
number for each generated packet in the case
of packets that need to be duplicated or sent
repeatedly (DTMF end event)
Change-Id: Ia16ffefc0791d01575248ac5d8025eb30ccaec67
in some scenarios the start event ts can be before the *pts value, which
will result in a shortened DTMF event being transmitted than expected during
injection as the end event ts is calculated based on that initial dtmf start
value.
This change updates the end event ts by the amount the start ts was
behind, so that the resulting event has the right duration
Change-Id: Ia637d1e1c5d92de8b35317ec552c22eae23c0645
when DTMF is being transmitted using codec_output_rtp, the scheduled
time to send the packet is calculated using the timestamp difference
from the last transmitted applied on top of the realtime time the
last packet was sent. However, the timestamp is only updated on the
first event packet so a delay needs to be passed in to codec_output_rtp
to ensure the subsequent packets are scheduled based on the event
duration of the event packets
Change-Id: I5a2f6cf67b5f570f6099d201592d9a6fc01d60a5
A fix for bullseye/buster and focal:
call_interfaces.c: In function 'call_ng_main_flags':
call_interfaces.c:1828:4: error: a label can only be part of a statement and a declaration is not a statement
1828 | bencode_item_t * dict;
| ^~~~~~~~~~~~~~
make[3]: *** [<builtin>: call_interfaces.strhash.o] Error 1
Switch case has to be followed by a statement, and the declaration
is not, so just follow it by the empty statement.
Change-Id: I7c5ef62dec9ceb404736ec3c4bed84f04b892d24
Describe generally: what are option flags and how the parsing
of them is done. Also add a description of two currently supported
approaches:
- parsing using a module (e.g. kamailio)
- parsing using the daemon
Change-Id: I55cee8fc82c2de8eb1f8cef565d19d73023d8be9
Refactor the text in the NG-protocol description header:
- fix typos
- fix grammatical mistakes
- reformat the text for simpler reading in blocks
Change-Id: I4aa66d11607ddab6cf12d4571a3fd07e4a850c4a
It's a useful function for parsing flags, which
we most probably will need in the future, but unsed now.
Change-Id: I3bed7b52e565a24f4ea8ee791a5872ad9cb06228
During the parsing of `rtpp_flags` use the
`call_ng_flags_flags()` directly instead of the
`bencode_list_add_str()`, hence reduce amount
of iterations required to parse generic flags.
Additionally:
`call_ng_flags_flags()` is made visible for usage
within external files.
`helper_arg` union has been moved to the header.
Change-Id: I34399a0d3940a1276feb1210e4421cbcdf656e9d
For the period of time while we are using
a new approach for the parsing of option flags
on the daemon side in parallel with the parsing
on the kamailio module side, and,
the previous approach with the module isn't
deprecated yet, it's good to have some basic tests
covering a new way of prasing to ensure it's working fine.
Change-Id: I8b28310b9973878530688780b6fcf366d239629d
Is added by:
- explicit generic flag "directionl"; or
- if the "from-tag" flag is used
Introduce the `directional` flag for `sdp_ng_flags` struct.
In use by:
- `media_block_match1()`
Additionally:
add `IS_OP_DIRECTIONAL()` marco check.
Change-Id: Ifd56ea2ad8277d7dec136def1c028c5e2b680ff1
For the sake of proper processing for From/To tags,
we need to know which message type originated interaction
with the rtpengine (from behalf of kamailo module).
This can be of two types:
- request
- reply
This can also be re-used later, if there is a need
to detect whether that was a request or reply.
P.S.: opmode and message type shouldn't be confused,
it's not the same, since SDP offer can come in the request
as well as in the reply message (late offer/answer).
So the opmode reflects what exactly is being done in terms of
rtpengine operations, meanwhile the message type shows, which
message type originated this processing.
Change-Id: I8336175d3cfcf521418ac18b71cb4a6d5730705d
Synchronize the `enum call_opmode` with the
kamailio module list of operation modes, as well
as with the `enum ng_command`.
This allows to operate based on `call_opmode`
in a more specific way, for example for a proper
setting of From/To tags based on directional flag,
which in its turn is being set using `call_opmode`.
Additionally introduce a macro checker, which covers
all previously non-existent operation mode types
as OP_OTHER, for backwards compatibility in conditions.
Change-Id: Idf4b9d910b81ee24be51008996c3fd02d8336a38
Add support of rtpp_flags parsing for the daemon.
From now on, it's possible to parse option flags
on the daemon side instead of the kamailio module.
It's identical to what the module does, but the
difference is:
- module sends general call identification such as:
call-id, From/To tags, viabranch using bencode
- meanwhile all generic/non-generic option flags
are added to the `rtpp_flags` bencode member as str
- parsing of that is done as usually using the
`call_ng_main_flags()` / `call_ng_flags_flags()`
and additionally using new parser `parse_rtpp_flags()`
New file implementation and header introduced:
- control_ng_flags_parser.c
- control_ng_flags_parser.h
Otherwise no functional changes, and the parsing itself
remains working following the same algorithm.
Change-Id: I59e47fa1947e2aeaa0bbf3930a0f21d9a6d669ad
This package has been obsoleted and the functionality has been
incorporated into the primary daemon.
Change-Id: I7b4aea5c1b8c7ed1216b35e2e1a4f72c254d0303
Turn repeat count into an int. No need for a long long.
Store start_pos in media_player.
Set start_pos and repeat count at the relevant code points once, instead
of passing it into multiple functions.
Take the opportunity to turn these shared options into a struct.
Change-Id: I758e899784fe1a6531f443d6a14fa59cf71bd4eb