Use the correct variable in address comparison.
The type cast hid the incompatible type from the compiler.
Change-Id: I701150f22f0eb49fae821996358568d60a385035
Copy the m_mode before freeing the parser.
Address sanitizer aborted with:
20210601033017695 DSIP INFO re-INVITE for call 854A5CDA8037073 (sip.c:192)
=================================================================
==8583==ERROR: AddressSanitizer: heap-use-after-free on address 0x612000003250 at pc 0x55c3b4624dc5 bp 0x7ffe8a4464d0 sp 0x7ffe8a4464c8
READ of size 8 at 0x612000003250 thread T0
#0 0x55c3b4624dc4 in sdp_get_sdp_mode ../../../src/osmo-sip-connector/src/sdp.c:72
#1 0x55c3b462be9e in sip_handle_reinvite ../../../src/osmo-sip-connector/src/sip.c:202
#2 0x55c3b462d676 in nua_callback ../../../src/osmo-sip-connector/src/sip.c:397
[...]
Change-Id: I4c48832f01e61e98536de8f164ab5a3caa64f34a
Concentrate the write() to the socket in 2 places.
One for struct gsm_mncc and one for struct gsm_mncc_rtp.
Improve debugging as now all function debug print the
MNCC primitiv.
Change-Id: Ia84602955b913a3bb13de7a6a92048799f2e1955
This reverts commit 52b2afce2c.
The contact header is generated by the original sofia-sip library.
By adding the contact header explicit as user header it violates the
SIP RFC because sofia will add the Contact header to the BYE message as
well.
Let's fix the bugs in the freeswitch sofia-sip and make it compatible
(not bug compatible) with the original sofia-sip.
Change-Id: I712f17fecbc372d1e486e80673a548e281b37800
Version 1.12.12 of libsofia-sip-ua no longer automatically generates a
contact header element from the local ip address and port. Specifying
the contact tag does not break operation with the existing
library (1.12.11), but allows for operation on a system with
freeswitch 1.10.4 or later installed, which is built against this new
version of libsofia-sip-ua.
Change-Id: I5c35c5a4bad2fbe76c22ac6d7ee37c832e0ba246
Sometimes, logging from sofia lacks the final newline character, messing up log
output. First snprintf() to a buffer, add '\n' if necessary and then log.
Change-Id: Ia26c0b57a0166cf7de87c49471ce6f528a366dd5
Add the new SDP section to the MNCC socket protocol, but do not yet implement
forwarding SDP from SIP. Implementing SDP forwarding follows in a subsequent
patch.
It is still possible to establish a call with empty SDP: the new osmo-msc on
the MT side, receiving an MNCC_SETUP_REQ, will hit an error log:
"Got no information of remote audio codecs: neither SDP nor Bearer Capability.
Trying anyway."
and then hold thumbs to hit a codec match, analogous to previous behavior.
Note that osmo-sip-connector should actually always have encoded a Bearer
Capability in the MNCC protocol in the MT MNCC_SETUP_REQ message, but never
has. Now we are ready to leapfrog from zero codec info to full SDP.
This patch must be merged at the same time as osmo-msc patch
Ie16f0804c4d99760cd4a0c544d0889b6313eebb7, so that both sides have a matching
MNCC protocol version number.
Change-Id: Iaca9ed6611fc5ca8ca749bbbefc31f54bea5e925
Verify is the parsed data is at least the size of the struct, not
exactly the size. Make it accept messages with additional data, like
the SDP information the TTCN-3 testsuite is sending since
Ic9568c8927507e161aadfad1a4d20aa896d8ae30.
This change makes the size checks consistent with the two other size
checks in the file:
if (rc < sizeof(*rtp)) {
if (rc < sizeof(**mncc)) {
Related: OS#4282
Change-Id: I522ce7f206932a816a64f03d916799c3215bb8c7
When the sip agent start fails (i.e. port can not bind
because IP doesn't exist) exit the sip-connector
Relates: OS#4197
Change-Id: I22ed16c77391b4f270df498dda587ed657279390
The function close_connection() closes the fd without marking it as
closed. Lets set the fd to -1 and check at the beginning if it is
greater than zero. This prevents us from closing an already closed fd
again.
Related: OS#4159
Change-Id: I9742f31a37296fed15d54cf44c1f65b93abb8c8e
Add NULL checks on the return value of call_leg_other() in
update_rtp()
If the remote side has requested media change and we cannot
find the other leg, then release call. This should not
happen.
Also, Add an assert to show that we cannot be here
without call type of SIP or MNCC (not related to coverity)
Fixes: CID#202863
Change-Id: I6f1f26533a25c93f243090bc02f1bc83b9108d42
Up to now most logging is on LDEBUG, lets make more use of Log Levels.
reserve NOTICE for unusual events
INFO: normal call setup/teardown
DEBUG, well.. it's DEBUG
* BYE is not an Error.
* 4XX or 5XX response to INVITE is not an Error don't log as such.
* 183 does not necessarily mean "ringing".
Change those log messages for clarity.
Change-Id: Ie0014043d93303a87cbb8bb351e439ff78651cbe
Also removes a comment in sdp_create_file() about the
IP address in o= and c= having to be the same.
It is completely legal in SDP and often normal for the
originator and the connection information IP to be different.
Change-Id: I057573467c335fc27ead391c0bb4c775f2f6ba0a
Fixes a bug I introduced in 5f73c2033b
where we would not call mncc_call_leg_connect() on receiving 200 from
SIP side, and therefore never send MNCC_SETUP_RSP to the MS
Fixes: 5f73c2033b
Change-Id: Ic7cc56c0d68a27eb1229c0c4aa1fa54d00b660b6
As far as I can make out, the intention is to always store ip address in the call struct
in network byte order, whereas the ip address sent on MNCC are in host byte order.
Change-Id: I89ef26aa32a672f394699251cf560b53ae01a814
Since March 15th 2017, libosmocore API logging_vty_add_cmds() had its
parameter removed (c65c5b4ea075ef6cef11fff9442ae0b15c1d6af7). However,
definition in C file doesn't contain "(void)", which means number of
parameters is undefined and thus compiler doesn't complain. Let's remove
parameters from all callers before enforcing "(void)" on it.
API osmo_stats_vty_add_cmds never had a param list but has seem problem
(no "void"), so some users decided to pass a parameter to it.
Change-Id: Ie519d4a4064a95803c33fd6969b53e1ef27045b7
Related: OS#4138
Do not send an MNCC_RTP_CONNECT as a result of a SIP re-INVITE,
unless the media connection information has changed.
Change-Id: I7c48300092a309e50a8fe091b30e395e7c72de9d
Handle MO hold and retrieve and pass this to the SIP side.
Handle the 200 from the SIP side in response to our HOLD-ing re-INVITE.
With this commit we now handle MO hold and therefore also handle
call-waiting and swapping.
Change-Id: Ife7bdab20cde92b7ce550215bab28b36a0f302e9
Add function pointers to the call_leg struct for call hold and retrieve.
Add function to send re-INVITE to SIP side when MNCC side puts call on HOLD/RETRIEVES.
Add MNCC/SIP CC_HOLD to call states.
Change-Id: I2595626dfa50eb2f8e29a02540b708c9c1dce88c
SIP end points can send periodic re-INVITES. Previous to this commit,
the osmo-sip-connector would send a new call SETUP to the MSC for each
re-INVITE.
Add a function to find if we already handle this call based on the nua handle.
Use this function to detect and respond with an ACK to re-INVITES.
Add a function to extract the media mode from the SDP.
In the case the re-INVITE has a=sendonly (HOLD) respond with a=recvonly
In the case that the re-INVITE changes the media connection ip/port,
forward this to the MNCC side with an MNCC_RTP_CONNECT
Change-Id: I4083ed50d0cf1b302b80354fe0c2b73fc6e14fed
This enables call hold implemented by subsequent commits
Prior to this commit, osmo-sip-connector would not send
any media mode attribute in the sdp. After this commit
we will by default always include a=sendrecv.
Given that a media mode attribute of "sendrecv" is default
and implicit it its absense, this does not represent any
functional change.
Change-Id: Ib4212d0174955042e7d80d3744ce632a4942ccb2
In case we receive MNCC_RTP_CREATE after MNCC_DISC_IND,
check if the call is already marked in_release
and if so, send MNCC_REJ_REQ and do not proceed with
the B leg.
Related: OS#3518
Change-Id: I0eca9a741f7924c2fc32c503dd1a0fc083f94f37
LCR supports emergency calling by sending the string 'emergency' as callee to
the SIP side.
This does the same
Change-Id: I5d0adb61dfa82e7ded5f41d9bc773d546112c9f1
When the SIP call source contains + as first character,
set the TON to International so that the MS displays
caller ID correctly
Change-Id: Idcfa31aff90e04dd0aa3583957f288889b1bbefe
Display a table with one row per call (instead of two lines per call),
and display the phone numbers of the people making the calls instead of
internal IDs. This should make the VTY command friendlier for end users,
especially if they have bigger networks. There is still the 'show calls'
command with all the verbose output.
Example output:
OsmoSIPcon> show calls summary
No active calls.
OsmoSIPcon> show calls summary
ID From To State
----- -------------------------------- -------------------------------- ----------
5001 101 100 PROCEEDING
OsmoSIPcon> show calls summary
ID From To State
----- -------------------------------- -------------------------------- ----------
5001 101 100 CONNECTED
Relates: OS#1680
Change-Id: I2092d58d80a34e6083f618593b92bb9e838aa906
For OpenBSC it made sense to have a /tmp/bsc_mncc file to share for
external MNCC, but now that we have an MSC osmo-sip-connector
communicates with that, so rename the socket file to avoid confusion.
Change-Id: I5e0dbf1aafe1b9c3776c49a08a76d64dd4fe9cc5
Use osmo_mncc_name() in timer functions and in logging
the type of MNCC message sent to the socket.
Change-Id: Ic77e0d86c91c29ff7304e620fdecb69b22127d33
Use gsm48_cc_cause_name() in logging messages
Depends-On: I296f208581ce2550805f9d96e20f7319e1199023
Change-Id: I6e3541b66cb3407f0cb23fb6e00a04685fe90757
Fixes following compilation warning:
osmo-sip-connector/src/mncc.c: In function ‘check_disc_ind’:
osmo-sip-connector/src/mncc.c:517:2: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
if (other_leg)
^~
Fixes: 008915ee41 ("Implement Cause Mapping")
Change-Id: I5bdbc29a3f82bdc92b156c1f7df68c9503f85f8f
Adds cause field to the call_leg and sip_call_leg structs.
Translates the SIP status to MNCC cause and vice versa and
uses this information in the SIP/MNCC messages at call leg
release time.
Change-Id: Ic1b80dff7e583cd6fff2b662bc6cc4bad3f81cd4