Just initialize to NULL before going forward.
Fixes:
CID 542426: (#1 of 1): Uninitialized pointer read (UNINIT)
21. uninit_use_in_call: Using uninitialized value script_config.diags when calling operator =
Change-Id: I4ed97e4fbeb371f04f0496565fa03b7b4a302e02
These are all instances of an object being put into a container just
before it goes out of scope. Use move semantics to avoid copying.
Change-Id: I9c40a56c4a67df2b8e244d51f068b50ec286f5bf
Warned-by: Coverity
Classes that inherit from both AmThread and AmEventHandler must inherit
from AmEventQueue first and from AmThread after. This is needed so that
the AmThread dtor is called first, which will trigger the thread to shut
down, which in turn makes sure nothing is waiting on the AmEventQueue's
condition variable.
Otherwise, if AmEventQueue is destroyed first while the corresponding
thread is still running and waiting on the condition variable, it will
be a deadlock.
With this, sems finally can shut down cleanly without having to be
killed by systemd.
Change-Id: I914455763b517c96561acb0b64fce26f127f44bc
Use a manual lock to make read/write operations
to the `std::map<DSMModule*, void*> mods_hdls` safer.
Change-Id: I45fb46bab603e2817bd98cd99267ed813122e548
Just add the following flags,
which are affecting the usage in our newer functionality:
- ssl
- crypto
Change-Id: Ia3edf1b77316fd64f7f55a5d2600fee730a285b4
Take into account that par2, used to pass N-th
amount of parameters, is properly exploded into
separate string objects having no spaces and
escaped double-quotes. Otherwise resolution fails.
Fixes:
[runactions, DSMStateEngine.cpp:334] DEBUG: executing 'utils.playRingTone(0, $config.rbt_on, $config.rbt_off, $config.rbt_f, $config.rbt_f2)'
[str2int, AmUtils.cpp:353] DEBUG: str2i: unexpected char 0x24 in $config.rbt_off
[execute, ModUtils.cpp:554] WARNING: could not decipher ringtone parameter 1: ' $config.rbt_off', using default
[str2int, AmUtils.cpp:353] DEBUG: str2i: unexpected char 0x24 in $config.rbt_f
[execute, ModUtils.cpp:554] WARNING: could not decipher ringtone parameter 2: ' $config.rbt_f', using default
[str2int, AmUtils.cpp:353] DEBUG: str2i: unexpected char 0x24 in $config.rbt_f2
[execute, ModUtils.cpp:554] WARNING: could not decipher ringtone parameter 3: ' $config.rbt_f2', using default
[execute, ModUtils.cpp:560] DEBUG: Playing ringtone length 0, on 1000, off 4000, f 440, f2 480
Change-Id: Ifed353478464d8071b5ca64959a7d4de6c877c8f
New functions introduced for DSM API (mod_utils):
- encryptCodeAes128CBC()
- decryptCodeAes128CBC()
Will be used by the voucher DSM application to encrypt/decrypt
the code given by a subscriber when filling up the balance.
OpenSSL AES128 CBC is used as an algorithm.
(with default AES key size 16 bytes)
Required things to let it be working:
- base64 encoding/decoding (of binary raw data)
- padding based on default AES key size (16)
Change-Id: I4b47f49ebf4b61157c3a4631cd8302565c660bc3
Use overloading for the various flavours of str2int functions. This has
the benefit of automatically choosing the appropriate function for
aliased types that may be one or the other underlying type, such as
size_t.
Do a mass renaming of all relevant instances.
Change-Id: I7abb6b9031ee53332d2b04a6cba4a6cc667a4807
Fixes:
Uninitialized pointer field (UNINIT_CTOR)
Non-static class member current_diag is not initialized
in this constructor nor in any functions that it calls.
Change-Id: I80fd5175edb68079e7b7da7a336bcc7f0e882016
Don't use the `B2BgetHeaderReply()`, it's based on
last received positive reply (200OK), so quite useless
for provisional replies processing (18X).
Thus e.g. for 180 Ringing handling it will never
return anything, because it has no data to parse.
Instead cast event into B2BSipReplyEvent and
parse headers from there.
Change-Id: I4bc4ad5d3aebd7b9ea497bcd53f63736e89d61db
Replace occurences of escaped CRLF used in
the hdrs value passed to the function.
This allows to pass multiple headers to the function,
whereas each header has `\r\n` at the end
(but the DSM script will always make it escaped,
hence the code must take care of it).
Change-Id: Ie76b44ff0f2d76105691aad6dbb5eb8d7dfb628a
This function replaces escaped `\r\n` occurences
into normal its view: `\r\n`.
Make this a function, to let it be reusable
for other DSM implementations.
Change-Id: Ica737df259fbf136b9a6855bc9439cbe005be6c1
When OA generates own SDP body (e.g. case with
accepted invite in DSP), save it as established_body
for this leg, in order to be able to re-invite
this leg later.
It can happen there is still no SDP seen from the
callee side (other side), and in case we want to
send established re-invite towards this leg,
this will fail, since no SDP body seen yet.
Change-Id: Ifd9f0fb70d27deac871de4eed1648f7c152813f3
Save last reply gotten and processed with
`DSMCallCalleeSession::onSipReply()`.
E.g. 18X are getting processed for DSM sessions there.
Change-Id: Ie0c44b1ddc8acd3fb07e01c6353eb2dce7a45a6e
Use `b2b_mark_dsm_for_updates` DSM session variable
to let updates towards caller have `P-DSM-App:`
header with a given value.
Change-Id: I4bc92f8ec9e2ec51bae70550c294a40581f92443
If requested by `b2b_build_pai_from_hdr` DSM parameter,
then get the value of PAI using this parameter and pass
it further for `B2BSipReplyEvent` processing.
Use event params to pass the value.
`b2b_build_pai_from_hdr` keeps the name of header
coming in the latest reply, from which the PAI's value
is to be built.
Update the `reinviteCaller()` function's signature,
to pass headers towards `dlg->sendRequest()`.
Change-Id: Ic6e66e326f26a830c3ed06c19a6ab7be4ebe0135
Re-use previously offered SDP body, when processing
a call session with an involvement of DSM, and getting
newer SIP invite having no SDP offer.
This affects applications using the B2B `connectCollee()`
functionality and doesn't actually touch the B2B core itself.
(Which would be wrong if changed in a usual core SDP
processing, whereas original request can be empty and
an offer/answer is postponed to 200OK/ACK exchange)
(Re)invites towards DSM applications technically must
not be empty, because DSMs don't support late offering.
In order to overcome that just pretend that empty
re-INVITEs are using previous body version.
Change-Id: I252eb9f32e7dc073454a2258b176f77bf15d35c9
Exclude `mod_swrating` for the test environment,
because otherwise requires linkage with swrate
which is a separate, not visible library
for sems repository.
Change-Id: Ib4deaeebf6a1a411e473388920db017c1836842d
For cases when not defined explicitely
by given compilation variables, add
mod_py to the list of `exclude_dsm_modules`.
It's not used and relies on older python2,
which is not to see in newer environments.
Change-Id: Ic0b3bdb8530b21e9c25484487cbba075b8fea156
Introduce getters for headers in requests
and replies:
- `B2B.getHeaderRequest()`
- `B2B.getHeaderReply()`
Change-Id: I1dfc24658a9e044407f95de9507032f1b041b451
To simplify the work in DSM with strings, the new function
which removes patterns from the source string, has been added.
This allows us to remove unneeded stuff from the given value,
avoiding usage of complex regexes.
Change-Id: I07fd08938a10475120affb395c5b506e8d412f78
To simplify the work in DSM with error codes handling,
a new function, which reads error codes string with
corresponding playbacks, has been added.
This allows to get a custom playback name of the file,
corresponding to a particularly selected error code.
Change-Id: I3f6ba47f346021b6dc761ebef5c31abb415e6d56
The hiredis library does not provide a direct way
to retrieve the allocated port number.
We hav to retrieve the socket file descriptor (redis_context->fd)
from the `redisContext` structure and using the `getsockname()`
get the local address associated with that socket.
Then the `sin_port` field of the resulting `sockaddr_in` structure
will contain the allocated ephemeral port.
By using `ntohs()`, just convert the port number from network
byte order to host byte order for printing. However make an additional
on-the-go type casting into the `unsigned int` also, to be able to print.
(unsigned int is guaranteed to be at least 16 bits,
so this is not a lossy conversion).
Change-Id: Id2a8e9ee4fad6f28db099323fb68fd2db0bfafc2
Fix instances of make rules not being parallel execution safe, where the
targets declare a list of dependencies which depend on the order they
have been declared to be executed serially, otherwise these can cause
race conditions.
Either move some of the dependencies down into their transitive
dependencies, or rearrange them to call $(MAKE) to force a serial
point. In other instances add missing dependencies to make sure the
objects to install have previously been built.
Change-Id: I21b499557ac5e9faa603841fa1882b58239ee650
This was a workaround for Solaris specific issues in the install program
there. The problem is that this can end up generating empty files, that
will not be detected by the packaging system as it will find the file is
present on destination and thus does not need to be installed.
Change-Id: Ib6107957cbf03c4e7da6cf2998d9103224f674d3
This commit fixes this:
ModSbc.cpp:611:11: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
611 | ERROR("Could not find "DSM_AVAR_REQUEST" avar for request");
| ^
ModSbc.cpp:616:11: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
616 | ERROR("Could not find "DSM_AVAR_REQUEST" avar as pointer");
| ^
ModSbc.cpp:622:11: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
622 | ERROR("Could not find "DSM_AVAR_REQUEST" avar as request");
| ^
ModSbc.cpp:634:11: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
634 | ERROR("Could not find "DSM_AVAR_REPLY" avar for reply");
| ^
ModSbc.cpp:639:11: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
639 | ERROR("Could not find "DSM_AVAR_REPLY" avar as pointer");
| ^
ModSbc.cpp:645:11: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
645 | ERROR("Could not find "DSM_AVAR_REPLY" avar as reply");
| ^
Change-Id: I68fe83180b39c34ec365000208527ddc2eff15d4
We have to manually cast the `->len` of type `size_t` to the `int` type,
when it's used for the printing of logs.
Change-Id: I7e116425aecf5ee7e39d8df868edc05b33581014
It's been noticed that in the DSMCall::onInvite() we get this:
DSMCall.cpp: In member function 'virtual void DSMCall::onInvite(const AmSipRequest&)':
DSMCall.cpp:112:34: warning: the compiler can assume that the address of 'req' will never be NULL [-Waddress]
112 | avar[DSM_AVAR_REQUEST] = AmArg(&req);
| ^~~~
DSMCall.cpp:112:34: warning: 'nonnull' argument 'req' compared to NULL [-Wnonnull-compare]
112 | avar[DSM_AVAR_REQUEST] = AmArg(&req);
| ^~~~
Just manage the AmArg construction via the `DSMSipRequest`.
Change-Id: I007e319dd64bf60788efa2d46dfc15b056ee33d7
It's been noticed that the compiler reports us:
`Missing parentheses in call to 'print'. Did you mean print(...)?`
Affected files:
- apps/dsm/mods/mod_py/python_inc.py
- apps/dsm/mods/mod_py/python_lib.py
- apps/ivr/python_inc.py
- apps/ivr/python_lib.py
- apps/py_sems/python_inc.py
- apps/py_sems/python_lib.py
Change-Id: I501d69b5681e6cd570b6c3a7c552d268d531d289
Eliminate the `auto_ptr` usage for core/* ,
since this pointer type has been deprecated in C++11.
Use, as recommended, `unique_ptr` instead.
Change-Id: I352e03bd0c8401d9a4890d8a1845913e4c22dab3
We don't have to compare a const char pointer with '>' / '<' operands
agains 0.
The conditional code will not get executed, if 'data->version' is null -
but not that it will, if it's not null.
We should use a classical check for null pointers agains 0 using '!=',
this has the least potential for subtle bugs, and is guaranteed to be portable.
(real ticket number: MT#55816)
Change-Id: I8a6fc38eb947c8908545925fae866c92ab4e3d5f
We need to rework the utils_get_count_files(), because it improperly
treats the given list of numbers, especially what relates to zeroes.
Previous approach gets deprecated, and another approach is applied.
(real ticket number: TT#143150)
Change-Id: Idf1332d12a40e2555d61c16e9f6635bdced82c6d
- Make errors fatal, so that they do not get ignored anymore.
- Use sane make variables that a shell will accept as valid, otherwise
the exports do not work at all.
- Do not use system paths when we should use in-tree ones.
(real ticket number: TT#6850)
Change-Id: I07af8f38cc37c2fa36b6b10559283a7c477d2d36
replaceParams/SET_ERROR/CLR_ERROR
use resolveVars in module actions/condition to replace only one variable/param,
use replaceParams to replace substrings as well,
e.g. myAction($myvar) - resolveVars
myOtherAction("this is $(myvar) and #(myparam) replaced") - replaceParams
Change-Id: Ia8d39259e2c24111b4ffe765cbd637627be346ab