We have to add more SIP response codes, which will be checked against
the isDSMPlaybackFinished(). So that when the DSM playback is finished,
the call is properly released on the caller's side.
Exceptionally 487 is added, for cases like:
a call to HG, where nobody answers and the timeout triggers
a cancelation of all the legs.
Change-Id: I1f7cf81dd5966843713fc41c21ea0249174c13ab
We have to optimize our code:
- substitute all repeating (DSM related) code with a helper static functions
- remove all excessive stuff, which plays no role
Change-Id: I27170509d84a634dc4a9a865ea8395e4e8cc2f3d
Introduce a new header file "global_defs.h" in order to use that
for global definitions or macroses, which are not particularly
related to the SIP headers. Such as DSM applications names.
This will simplify handling and decrease hardcoding all around
the project.
With this commit additionally:
- stop hardcoding values related to DSM applications specific names
- move all the DSM definitions into the global_defs.h or defs.h
Change-Id: I389f632434f0ae1e62540e8df584fdc5e1e07e39
We need to add the 'early-dbprompt' DSM application into
the processing of the 480 replies, which have
'P-DSM-App: <app-name>;playback=finished' parameter set.
Change-Id: I3e561f510d8e56ca7d0cece714c0330f3bfa9ecd
Since the P-Early-Announce has gotten deprecated, it's required
to stop using it. And instead start using the P-DSM-App header, which
now carries the same information as parameter ';early-annonce='.
Change-Id: I7f0f378143d0b6600a239084cd51935a31df3d08
B2BSipReply
We have to update the media session with the caller, if the 183 response
with the 'P-Early-Announce: force' has been received.
Change-Id: Iec67c6b6cc5284afbcfb492fc53108439a427b1d
Because of messy organizing of the code in the function,
it's not possible to read that and work with that.
Change-Id: Iab28ba34ba0cc970e3f100f8cc61bcbbdabee2bb
B2BSipReply
We have to update the media session with the caller, if the 183 response
with the 'P-Early-Announce: force' has been received.
Change-Id: Ib39dc124ef5e8934ff617d562b222bd07dfcacc1
If we get the 480 reply from the office-hours DSM application,
and there is a header 'P-DSM-App: office-hours' added, with
a parameter ';playback=finished', then it means the following:
- there was either AA or transfer involved into the call, before
the call got to the DSM office-hours
- caller remains in the hold state (so there was 200/ACK)
- the office-hours playback has been finished, and now we mustn't
forward 480 to the caller's leg, but just terminate it with BYE
Change-Id: I389c6993185008c51c61bacd8eb23ac1562871b8
We have to take care of keeping the actual 'Allow:' header in the
request, if the incoming request has had it.
One of the use cases for that is for example the INVITE coming
to the AA, when we must respond with the 200OK,
but there is no 'Allow:' header inside the 200OK.
Certain systems can be confused by that, even though the RFCs are
not forcing us to do so. Which can even lead to an impossibility to use
a normal call clearing with the BYE method, from behalf of the caller.
Change-Id: I9bafb89e4aa5e53077450068f847c07a497b43f1
We have to improve AmOfferAnswer functions in terms of adding
more logging, to let the debug of the OA be more clear.
Also in parallel the refactoring is done in scope of AmOfferAnswer
in order to make reading more convenient.
Change-Id: If7353f1285057760dd5fbeada984a5ef96af9854
Re-use existing local sdp, in case there is a sequential 183 coming,
but it has no SDP.
This will fix the cases, when:
- first 183 has been sent, and provided to the system the SDP
- second/third etc. 183 is coming, but has no SDP body
To not confuse the recipient (end subscriber) of these 183,
the media description in the scenario with 183 having no SDP body,
mustn't be changed (session id, media and attributes).
Previously the behavior was to generate local SDP with
a new session id and add sems-b2b into the media processing by that
(new media port, codecs and other attributes).
However, this change doesn't have an influence on very first 183
sent with no SDP body, because there was essentially no local SDP
saved before. So in this situation behavior is not changed.
Change-Id: I53dd57ae8a4739d5356d94fff45fb290896fd777
Because of messy organizing of the code in the function,
it's not possible to read that and work with that.
Change-Id: I4a56000a6f33051f9267048dcb620fb1a4eba7c6
Because of messy organizing of the code in the function,
it's not possible to read that and work with that.
Change-Id: I558685c46358caabe55193c1e27d9531728ea7d6
There is a need to add an exception processing for 183 Session Progress,
and the following in-dialog requests/responses, in case the 183
has been previously sent to the B2B with the hf
'P-Early-Announce: force'.
This adds the following behavior.
When 183 is received, and the caller has been updated with the
new media capabilities, according to those needed to embed early
media into the media session with the caller (via re-INVITE), then:
- even though the 183 is treated similarly to 200OK in terms of media
updates, do not send ACK to the leg going towards DSM,
becausethe sems-b2b giving the DSM, it's still in stage INVITE/183
- do not re-negotiate the leg going towards the DSM,
after the caller has been updated with the new media (a usual behavior)
because the sems-b2b giving the DSM still considers the dialog here
in the Early stage
- do not set the leg going towards DSM into the Connected state,
because by the fact, it's still in the Early stage, and setting of
it into the Connected state, will break processing of BYE / CANCEL.
- upon receiving the BYE from the caller (after the DSM announce is heard),
answer right away with 200OK, but do not forward BYE to the let going
towards DSM. Instead initiate the CANCEL towards it, because this leg
is technically still in the Early stage of the dialog.
Original ticket number: TT#187351
Change-Id: Id6e05202add1bcbd358eecbcd5e2cbda1a995b32
Because of messy organizing of the code in the function,
it's not possible to read that and work with that.
Original ticket number: TT#187351
Change-Id: I6673fd7acdb058cf0d32fc902dbee2f8767f5e3e
We have to add support for playing an early announce for those
failed trasnfers, which for example reach the timeout.
This means there is a need to do the following:
- send 183 from early announce DSM module
- receive 183 on the B2B leg, which was sending an INVITE to
the transfer destination
- update the caller with an actual media capabilities,
so it is able to receive the early announcement
The mechanism behind that is that:
- if Proxy in the other leg, which was used to reach the party
(to which the transfer has been done),
requests the force usage of the announcement for the caller
in the very first leg (with the caller who is on hold now)
- then the DSM functionality adds the 'P-Early-Announce: force' header in 183
to let sems-b2b in the very first leg know, that there is a need to embed
the audio from the early media into the media session with the caller.
- hence, caller gets a media re-negotiation
- and the leg with the DSM doesn't get updated, since it's still remains
in the Early stage of the dialog
All the solution is built around two important things:
- Proxy uses the P-App-Param called ';force_early_announce=1' to show to the
DSM that it needs a "forcive" early media, which must "override" the MoH
for the caller, if it's being played.
- Sems-b2b uses the header 'P-Early-Announce' to let the very original leg
with sems-b2b know, that there is a need to embed early media into
the already established media session with a caller
Original ticket number: TT#187351
Change-Id: I2cda231e877d9ba91eaa1738322b0981618c1dbf
Because of messy organizing of the code in the function,
it's not possible to read that and work with that.
Original ticket number: TT#187351
Change-Id: I3c92889d44c03b11380fc923e0b22c1ec8961380
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
Remark: this commit is created as an attempt to keep PRO / CE sems repositories
consistent in terms of the provided code and functionality.
We need to have a possibility to detect emergency calls and let them
pass through the SEMS, even if the license limitation (CPSLimit) is triggered.
Also taking into account the global policy defined by the cfg parameter
'skip_cpslimit_emergency'.
If set to 'yes' (in the code will be treated as True)
then we do not drop emergency calls on CPSLimit triggering.
If set to 'no' - we treat emergency calls
as if they were usual calls in terms of checking CPSLimit license limitation.
(real ticket number: TT#138356)
Change-Id: I152747271bb5d0a6838f721493fd2660a35e10f8
We need to add a possibility to control (add/modify/delete) registrations
for SIP peerings using NGCP-panel. For that to work NGCP-panel uses XMLRPC
requests being sent towards SEMS, which in its turn takes care of work with:
- locally cached map structures:
* registrations / registrations_peers
* registration_ltags / registration_ltags_peers
* registration_timers / registration_timers_peers
- MySQL database (our scope of interest is 'sems_registrations')
- triggering events
Main amount of work is concentrated on interaction with map structures which keep
an actual information on registrations of either subscribers and peerings,
and less amount of work is related to the SQL side.
Basically, the main idea is to add an identifier, which will be used by
NGCP-panel when sending XMLRPC messages to SEMS, which will let SEMS know,
whether it's an event for a usual subscriber or a SIP peering.
Also we take care of loading time, when SEMS retrieves all previously saved data
from the DB using: peer / subscriber auth preferences and loads this to be usable.
A new query has been added for peering type, to let peerings be loadable after restart.
(real ticket number: TT#66577)
Change-Id: I0a815d50dd2728f2fa1411d21adfb084434766b2
There are cases when calls coming to a subscriber of C5 CE,
is being challenged by this subscriber, the use case for that could be
if for e.g. we have a PBX/SBC connected to NGCP via subscriber's object.
Current implementation of SEMS works so, that in case parameters;
'enable_auth' and 'enable_aleg_auth' are set to value 'yes',
SEMS tries to pass the digest for the calling party.
This leads to the empty 'username' and wrong 'response' parameters of
the Proxy-Authorization header, eventually the Authorization process is failed.
This is to be changed, so in case 'u=', 'p=' and 'd=' have not been
previously sent by the Proxy (in 'P-App-Param:'), or rather they are empty, authentication should be transparent,
hence be processed by the calling side, with no interfer from SEMS into that.
(real ticket number: TT#128701)
Change-Id: I989dbe3ed9d5a1d2ec73cb0ad081254c9b9eca32
Otherwise we're missing plenty of audio files in /usr/lib/ngcp-sems/audio/,
several plugins in /usr/lib/ngcp-sems/plug-in/, as well as a bunch of binaries:
* /usr/sbin/ngcp-sems-get-callproperties
* /usr/sbin/ngcp-sems-list-active-calls
* /usr/sbin/ngcp-sems-list-calls
* /usr/sbin/ngcp-sems-list-finished-calls
* /usr/sbin/ngcp-sems-sbc-get-activeprofile
* /usr/sbin/ngcp-sems-sbc-get-regex-map-names
* /usr/sbin/ngcp-sems-sbc-list-profiles
* /usr/sbin/ngcp-sems-sbc-load-callcontrol-modules
* /usr/sbin/ngcp-sems-sbc-load-profile
* /usr/sbin/ngcp-sems-sbc-reload-profile
* /usr/sbin/ngcp-sems-sbc-reload-profiles
* /usr/sbin/ngcp-sems-sbc-set-activeprofile
* /usr/sbin/ngcp-sems-sbc-set-regex-map
* /usr/sbin/ngcp-sems-sbc-teardown-call
* /usr/sbin/ngcp-sems-webconference-addparticipant
* /usr/sbin/ngcp-sems-webconference-roomcreate
* /usr/sbin/ngcp-sems-webconference-roominfo
This fixes a regression introduced in commit 1619876f76 (TT#101059).
Ported the python2 scripts we ship with our Debian package to python3
(AKA py3k), fixed inconsistent use of tabs and spaces in indentation
and indention in several files:
* apps/sbc/tools/sems-sbc-*
* apps/examples/db_announce/announcement.py
* apps/examples/py_sems_ex/*py
We're also not installing the *.pyc files (see
apps/ivr/Makefile.ivr_application +
apps/py_sems/Makefile.py_sems_application), they don't exist in py3k
builds and it wouldn't make any sense to ship them in Debian packages
anyway.
(real ticket number: TT#105412)
Change-Id: I44f0f76b4577501eb31fe814781f47087cfd16dd
- customer has a scenario when 180 has to_tag and call terminated by caller with BYE but calle did not get any call termination signalling.
- a bit more special for such cases BYE handling added.
(real ticket number: TT#73957)
Change-Id: I9ebbf4f3a504d3587550e55aec926438199be5e9
This feature gives the user the ability to disable all active
call forwards (CFU, CFB, CFT, CFNA, CFS, CFR, CFO) by triggering
a VSC on the phone.
Additionally create function SW_VscDialog::deleteCF to group all
the common operations that are done to delete a CF.
(real ticket number: TT#71001)
Change-Id: If8bae22b071f337d3f3580c057bc16325a0818c5
'\*' \- matches 0 or more characters
'?' \- matches any one character
for more info, refer to <fnmatch\.h>
(real ticket number: TT#53685)
Change-Id: Ib3f9568a3f4174bfe5cab0db3ea0cda0ea1cf701
If an SDP UPDATE is received after the 183, but before the 200,
SEMS fails when it receive the final ACK. In fact SEMS tries to
find the SDP content inside the ACK message itself.
The solution is copied from sems-pbx module where the issue
doesn't happen.
(real ticket number: TT#43503)
Change-Id: I5a432dc57c701d7eb0d5306d6005508e3310e7ba
Unset Sems internal Session Timers in case B leg doesn't support it
(no Timer in Supported header of 200OK message).
(real ticket number: TT#29926)
Change-Id: Id27748751f36017e12d6ae84bce602a9995f9d34
Use a proper accessor instead of messing with the struc directly
which has become opaque in latest OpenSSL versions.
(real ticket number: TT#12308)
Change-Id: I51855e46f07f2331ad281a94961ca1d7394dc0de
- 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
Fix module exclusion logic
Several of the modules cannot be compiled because they miss Makefiles,
others require additional dependencies or similar. So encode this in the
build system so that people building do not have to figure this out, even
if they pass an explicit list of modules to include or exclude.
(real ticket number: TT#6850)
Change-Id: Icb52a6f62cd0db97460fc5b0771922bdd46e1f6f
Build the library as shared.
Otherwise we are trying to link a static library built as PIE into a
shared library.
(real ticket number: TT#6850)
Change-Id: Idaeb7b92b1c73887d02620f953c5a8df182ae659
Due to the build system not failing on compilation/link errors, parts of
the code base has suffered bit rot.
(real ticket number: TT#6850)
Change-Id: Ia3e35054e4720a55298140069b7a4c21017f2cb1
add username_with_domain option to use auth user with domain part
(real ticket number: MT#9306)
implements M758
Change-Id: Ib482d4f1d49d291cab39add1b6a61c02c36bdbe4
Don't bail out on missing config options, rather than using some
invalid defaults.
Also only check for existence of sound files in the places where
they are needed for optimization purposes.
Use macros to clean up redundant code.
(real ticket number: MT#20649)
Change-Id: Ib1187f249ee589feab407dd99145fc1dea0db83a
Don't bail out on missing config options, rather than using some
invalid defaults.
Also only check for existence of sound files in the places where
they are needed for optimization purposes.
Use macros to clean up redundant code.
(real ticket number: MT#20649)
Change-Id: I5d3692a27c4dff8df7ad00e985c983176888e73c