Rework plug-ins parser so that it supports
the multi-line parsing.
E.g.:
load_plugins=wav;\
gsm;\
g729;\
opus;\
g722;\
di_dial;\
...
Change-Id: Ic672ff72db73279d9fd3d52ba9a60fa5f6d7eb25
Rework the payload to be a string instead of the raw char array.
This eliminates cases when we actually need to track that this char array
is indeed null-terminated and deprives us from doing other tricks to
properly maintain this char array.
Also no need to return const of payload anymore, because simply copied
during return. Data protection ensured by not giving a reference to the payload,
modifiable still during the first time setting this payload.
Rework also other users, such as nested call into AmSdp provided `parse()`.
Now `parse()` takes a string, and already in a local scope handles a char array
copy of this given string. This is only because the `parse_sdp_line_ex()` still
requires a refactor to be working with strings instead of char array.
Additionally: move parser helpers of AmSdp to const char pointers,
instead of working on a plain char pointer. This is because the SDP body
parser has been moved from the referenced pointer `char *&`
to the `const char *` pointer. This allows to not have additionally
heap allocated SDP body C-string for parsing purposes.
No functional change.
Change-Id: Ic3ee6c349b62e7e5e0cd4de722f9ed923862a7cb
Preamble: no functional changes.
AmSdp::parse() mixes int values with bool,
what makes the behavior not really clear, not defined
and can lead to the unpredicted result (even though the
compiler *should* actually fix that, but one ought to
not rely on this).
Hence make the parse method only be working with bool values.
Then, reverse the return value so that it's clear
that wrongly parsed is `false`, and good parsed is `true`.
Refactor all users accordingly.
Also rework those users, who indeed need `int` value
be returned, e.g. when having -1.
Do the same thing with the `parse_sdp_line_ex()` helper,
whereas parse() is the only user of it. And also reverse
the interpretation of true/false.
Then, make `parse()` working with a plain `char*`, so not a const.
Because doing a tricks like:
cast `char*` to const (user level) -> cast `const char*` to non-const
in a function (in a old C-like manner), has really no sense.
Refactor everything accordingly.
Other than that, refactor AmMimeBody:
Refactor it to work with a plain `char *` pointer instead of working
with `unsigned char *`, which nowadays has really no sense and
rather is a rudiment of C-like code base coming from the past.
Convert `payload` from `unsigned char*` to `char *` accordingly.
Refactor everything in AmMimeBody implementation accordingly.
Remove rudiment C-like casting everywhere, where possible.
Update `parseMultipart()` to work with a plain `const char *`
instead of `const unsigned char*`
P.S.: leave a list of TODO's for further rework, which
is not directly related to this scope of rework.
Change-Id: Ie1e132429245e0d2cc740d5b1c1fc17cf037a820
Instead of copying the FilterEntry mf, do the move.
Fixes defect:
329 vector<string> elems = explode(value, ",");
330 for (vector<string>::iterator it=elems.begin(); it != elems.end(); it++)
331 {
332 mf.filter_list.insert(*it);
333 }
334 mf.filter_type = Undefined;
>>> CID 550235: Performance inefficiencies (COPY_INSTEAD_OF_MOVE)
>>> "mf" is copied and then passed-by-reference as parameter to STL insertion function
"std::vector<FilterEntry, std::allocator<FilterEntry> >::push_back(
std::vector<FilterEntry, std::allocator<FilterEntry> >::value_type const &)",
when it could be moved instead.
335 profile->messagefilter.push_back(mf);
336 DBG("message_list set to '%s'\n", value.c_str());
337 EXEC_ACTION_STOP;
338 }
339
340 }
Change-Id: If6d04432f7004993fb1c70a0a026799805ed2a1a
When dereferencing it (after creating a new context before)
make sure it's not NULL even when just checking for
a connection error, as it might still be NULL and hence
will just seg.fault in this case.
Fixes:
Dereference before null check (REVERSE_INULL)
check_after_deref: Null-checking this->redis_context suggests
that it may be null, but it has already been dereferenced on all paths leading to the check.
Change-Id: I67f88f1dfccef66751298b1c26e85efba0458c1f
size_t will always be true against `>=` because
it's a typedef for unsigned long.
Makes no sense to check it, just log what it is.
Fixes: Unsigned compared against 0 (NO_EFFECT)
unsigned_compare: This greater-than-or-equal-to-zero comparison
of an unsigned value is always true. reply->len >= 0UL.
Change-Id: I75803cbe0760a1b5c4a0d056af86bc992ea0a110
Add a default case for `handle_redis_reply()`.
Fixes:
Dereference after null check (FORWARD_NULL)
4. var_deref_op: Dereferencing null pointer reply.
Change-Id: I22edbc3cb14f7e8662efe4c607e1502fbb8c56b6
Instead of using the `tmpnam()` which doesn't exclude
race conditions on the system (same filenames created
simultaneously), because it doesn't open/reserve the file,
just use the `mkstemp()` which actually genereates a filename
and creates the file for the process.
Upon creating the file, close the FD, as not needed atm.
This file can be then later opened using `SCPopenAction`
or anything alike.
Current new implementation does not unlink the file from
the filesystem and a user of it has to explicitly do that
later with for example the `sys.unlink()` from this same
library.
Additionally: to be able to have excplicit file path (so dir),
add a second parameter to this function to provide a directory.
Fixes:
warning: the use of `tmpnam' is dangerous, better use `mkstemp'
Change-Id: Ib5e89461b2d2288be77d5f1a899e5293b76ebf90
Fixes:
CID 542433: (#1 of 1): Uninitialized scalar variable (UNINIT)
34. uninit_use_in_call: Using uninitialized value mf.
Field mf.filter_type is uninitialized when calling push_back.
Change-Id: Ia5c2c2ebb08f1632f973ef0d08d4dca0c5b8934b
Don't do an extra job many times checking
what is the `profile_param`, just catch this once.
Hence conditions must be self-excluding.
Change-Id: I6d98a082e50777c995538fd6303eb0fe527b301b
If a channel has been allocated with
`ConferenceJoinChannel()` then remember to transfer
the ownership over it to the DSM sessions's
"garbage collector" which later takes care to
deallocate it.
Fixes:
CID 542153: (#1 of 1): Resource leak (RESOURCE_LEAK)
10. leaked_storage: Variable chan going out of scope leaks the storage it points to.
Change-Id: Icdc2c67cf2a349ec70fd83f1cf6a43ecfcf69547
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
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
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
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
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 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