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
When replying with 200OK generated by SEMS to INVITE requests,
which have no SDP body included, just answer with empty 200OK.
This sets the `OAState` of the call leg to `OA_None`.
Change-Id: Ic28e80d670ba4ce98be6abac9d17689688f99f71
Add a function to the AmSipDialog class interface,
to be able to check whether the OA currently expects an offer.
Use it then in the `CallLeg::updateLocalSdp(AmSdp &sdp)`
Change-Id: I1c4f4364ce13c7b03e22e0f037d19b99245a0be8
If the leg during the `B2BEvent::B2BTerminateLeg` event
handling turns out to be in the 183/200 faked state,
then handle the leg termination with CANCEL, instead of BYE.
This is because this leg has never seen the real 200OK
response, and hence remains indeed in the early stage.
Change-Id: I4a9d4197a6ea42f1cfbbcdc5fb306c48684e64bf
For the PRACK transcations (e.g. PRACK/401) update the
remote tag as well as route set.
Scope: `AmSipDialog::onRxReplyStatus()`
Additionally: do not reset remote tag during the authentication
process for PRACK methods, in: `UACAuth::onSipReply()`.
Change-Id: Ibd4e4ee737287bab3883b74a32ded6a966ec62ab
Backport from the upstream to handle responses to SIP_METH_CANCEL
in Cancelling state, preventing dialog and session leaks i.e. on timeouts.
Upstream commit: 54025209301bd111d56ffcb6540473c4f5057779
Change-Id: Iab1d5797f1f5bcd70a27c805d96dab7e67bb1749
We have to treat 18X replies coming from DSM (usually it's 183)
in `Proceeding` state on the same manner as we do for the `Early` state.
This is because it affects entirely the following call flow after that,
and has to do with a proper clearing of the dialog, when receiving
4XX class of messages (which stop playback and have to terminate this
session: 4XX -> BYE conversion).
Additionally: set the status to the `Disconnected` for the 4XX class
response, which ends up the DSM playback.
Original ticket's number: 56806
Change-Id: I3b0f3ff360cd774fcc7862d34e75747454660d9a
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
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
new sems.conf option:
Ignore too low CSeq for NOTIFYs? [yes | no]
May be necessary to interwork with simplistic/old (following 3265
instead of 5057) SIP event notification implementations.
ignore_notify_lower_cseq=yes
Conflicts:
core/AmSipDialog.cpp
* remotes/origin/1.4: (27 commits)
b/f: getHeader: find correct hdr also if it's substring of another hdr
b/f: support values at end of SDP without CR (master 8ec8a910a2)
b/f: T38 streams in SBC/B2B (udptl transport); proper media direction passthrough
click2dial: b/f: fix crash when using without credentials
Add systemd-related files to the pkg/rpm dir
Add libzrtp support to the CMakeFile
Fix c/p typo in cmake-files
Missing include for close(FILE *)
Drop privileges for SEMS process
b/f: in webconference app, handle session timer timeout and RTP timeout
b/f: on RTP timeout, end dialog with sending BYE
b/f: make listRooms return only non-expired rooms
b/f: B2BUA: fixed replies for error handling
b/f: fixing b6d5f726 (fix SBC SDP filter)
b/f: fix SBC SDP filter with connection per media only
add Retry-After: 0 to NOTIFY 500 response on low CSeq
b/f: click2dial: save content_type, cseq to connect callee
b/f: use proper empty string value
b/f: use proper failure return value
b/f: reset RTP-received timestamp when (re)starting process RTP stream
...
If an INVITE has been forked and more than one branch is aimed at SEMS,
then the branch parameter of the top-via is necessary to distinguish the
different sessions.
By default, SEMS will now accept forked INVITEs.
This behavior can be switched off by setting "accept_forked_dialogs" to "no" (default=yes).
Conflicts:
core/AmSipDispatcher.cpp
- the session pointer should not be touched after the session has been started (could be immediately destroyed).
- return 481 on CANCEL if the transaction cannot be found.
- reply properly with 482 if the UAS dialog already exists.
In case 100rel is disabled on SEMS' side, but UAC requires it, SEMS
would reject the INVITE, drop further processing on the session, but
still keep it. If INVITE is first in session, UAC would clear the
dialog, but SEMS would still keep it.
But spotted and explained by Stefan S.
- provisional replies received for canceled INVITEs are ignored
- if bye() is called for pending call and no UAC trans to cancel,
go into Disconnected state
In the context of multihomed servers, the signaling interface can be selecetd by the application. By default, the signaling interface is determined automatically. The media interface can also be set manually, there is however no automatic selection. In the case it is not set by the application, the default interface (the first one defined) is used instead.