AgeCommit message (Collapse)AuthorFilesLines
2018-02-16contrib: Add systemd service filePau Espin Pedrol1-0/+12
Change-Id: I36dd16b75beb4d9bd8081aca6e44c5b72e58fead
2018-02-09debian/control: Fix URLs for homepage / gitHarald Welte1-3/+3
Change-Id: Ib431d5dcaf78cc31dbfaa4fd13105ec62142e9be
2017-11-07mncc.c: Ensure proper string buffer NUL terminationHarald Welte1-2/+2
Change-Id: I2f58a495f60ed744c1f625dc8df56aa4dc0aa4cb Fixes: Coverity CID#92223
2017-11-01vty: skip installing cmds now always installed by defaultNeels Hofmeyr1-3/+0
vty_install_default() and install_default() will soon be deprecated. Depends: I5021c64a787b63314e0f2f1cba0b8fc7bff4f09b Change-Id: I97dab6871ff37279be2caf24a8e8dc6af39d1e06
2017-10-28Tag/Release Version Welte1-0/+61
Change-Id: Id3876b2d940b5612788760dfeabe308f43d42ae2 Depend on latest upstream libosmo-*Harald Welte1-2/+2
Change-Id: I9bb7ced1197effb1082a57b2ed060d94ab9648c8
2017-10-28Fix git-version-genHarald Welte1-2/+2
It seems we didn't import a proper/clean git-version-gen into the repository. Let's fix this. Change-Id: I5132d10b3ed5a75e562cdd74db02eda68d828a08
2017-10-27jenkins: use before and after buildNeels Hofmeyr1-1/+4
See osmo-ci change I2409b2928b4d7ebbd6c005097d4ad7337307dd93 for rationale. Depends: I2409b2928b4d7ebbd6c005097d4ad7337307dd93 Change-Id: I7e9f19755f55b274def9d757f72f2a08a01a4cce
2017-09-19vty: install default commands for SIP,MNCC,APP_NODENeels Hofmeyr1-0/+3
Change-Id: Iee51881cc07d56209647fb4f505f8f6be6b885f0
2017-09-03sdp.c Send octet-align in fmtpKeith1-1/+10
rfc4867 8.2: octet-align: Permissible values are 0 and 1. If 1, octet-aligned operation SHALL be used. If 0 or if not present, bandwidth-efficient operation is employed. We don't have any support for AMR BE mode, but if we don't send this the other end expects BE mode and can't decode the stream Change-Id: I938758ac4ec55db9223e3da6c3c277e8fa670055
2017-09-01Fix build after recent libosmocore updateMax1-1/+1
Change-Id: Idd1eba7ed0c5454de29d86a8bb72beb24d03ef2a
2017-08-26Use release helper from libosmocoreMax3-0/+9
Change-Id: I1a65695d6191aa7647b9872e58da4a00bbad59e2 Related: OS#1861
2017-08-25Add git review configMax1-0/+4
Change-Id: I60f6b29998954b0698e523efaa766f8bb895cdf7
2017-03-23mncc/sip: Attempt to parse the media from session in progressHolger Hans Peter Freyther2-4/+17
Parse the media from session in progress and if present in alerting connect the call early. Sadly this sets RTP to the sendrecv mode even if we would like to keep it as recvonly. Change-Id: I98d173abc46c67b87666ed2f193a581d6e72344b Related: OS#1784
2017-03-23mncc: Enable in-band signalling for early mediaHolger Hans Peter Freyther1-1/+9
Besides sending the alerting request we should inform the MS that there is in-band information now. We do not seem to export these flags in protocol/gsm_04_08.h so hardcode them for now (until I come up with good names for them). Related: OS#1784 Change-Id: I80b1e1f4ca045bd63536476702a5812f27d9b36d
2017-03-23dtmf: Forward DTMF from MNCC to SIPHolger Hans Peter Freyther3-0/+29
We are not using the RTP telephony-event here but the older dtmf relay. We also only have a fixed DTMF duration for now. Change-Id: Icf770fae89f7aedf6eba9a119db9b8acc7f938df
2017-03-23testpbx: Add another number that will just play a ringbackHolger Hans Peter Freyther1-0/+10
This will enable early media to play a ringback to the phone. Change-Id: I4c778b1f0e7484a755716133f91767af8b1102c0
2017-03-23sip: Actually honor the remote port of the pbxHolger Hans Peter Freyther1-4/+6
So far the remote_port has never been used. sofia-sip did the right thing and put the port into the "Contact" and the rport option for the via. But we would have never been able to connect a PBX on a different port (as sofia-sip seems to parse the destination from the to address). Change-Id: Ifbd49b4aa6b01b118fe67e39dddef50b2946159c
2017-03-23testpbx: Enable GSM and AMR as codecs to actually be relevantHolger Hans Peter Freyther1-2/+2
Without these codecs we will not have much joy when working with a default GSM BTS/BSC. Change-Id: I8719c392f57e0dbed0c0c792d1381592dcd662c1
2017-03-23dtmf: Start handling the DTMF MNCC messages and respondHolger Hans Peter Freyther1-7/+59
Simply respond to the dtmf start/stop with a response and move on. Change-Id: Iffc92ea2112c9943ce89c244a9b323125c352ae5
2017-03-16jenkins: add value_string termination checkNeels Hofmeyr1-0/+2
Change-Id: Ic247005aeeabdf349caf48657af0249da8c8d9ea Depends: libosmocore change-id I2bc93ab4781487e7685cfb63091a489cd126b1a8
2017-03-08evpoll: Add workaround for usage of IP_RECVERR in sofia-sipHolger Hans Peter Freyther1-1/+1
We are using glib to benefit from the sofia-sip-glib eventloop integration and set a poll func (evpoll) to be called by glib to integrate with the rest of libosmocore. Sofia-sip will use IP_RECVERR to enable error reporting on the socket and then sets SU_WAIT_ERR (mapped to POLLERR if not using kqueue) in the internal events flag of the socket. This will be registered with a su_wait (mapped to struct pollfd) and then glib will be called with g_source_add_poll. At this point the the fd->events will still have the POLLERR bit set. Before glib is calling its internal poll routine or our one it will copy all registered fd into an array and mask the events flags: /* In direct contradiction to the Unix98 spec, IRIX runs into * difficulty if you pass in POLLERR, POLLHUP or POLLNVAL * flags in the events field of the pollfd while it should * just ignoring them. So we mask them out here. */ events = pollrec->fd->events & ~(G_IO_ERR|G_IO_HUP|G_IO_NVAL); This leads to the POLLERR flag never been set in the revents of the struct poll_fd and as such we never put them in the exceptionset and as such: static int tport_base_wakeup(tport_t *self, int events) { int error = 0; if (events & SU_WAIT_ERR) error = tport_error_event(self); tport_base_wakeup will never call tport_error_event. And the error will be stuck in the socket data forever and recvmsg will return a zero length packet. And this will repeat until the end of time. As a first hack I mapped SU_WAIT_ERR to POLLPRI but when using select the Linux kernel will not put the socket error into the except queue unless the sockopt SOCK_SELECT_ERR_QUEUE is used. One option is to use poll and then map the select requirements to poll. Right now I just signal POLLERR as well to trigger tport_error_event. This will result in extra syscalls for each received UDP message right now. Change-Id: I5bec4a7b70f421ab670e649e5bc1ea6faf59707c
2017-03-06mncc: Fix use after free on mncc socket disconnectionHolger Hans Peter Freyther1-5/+12
When the MNCC socket breaks down we would release all callds but when there is no remote call the call would be released before if (call->remote) ... is being executed leading to a use after free. Fix it by copying the legs first and assuming the call will be gone after that. ==3618== Invalid read of size 4 ==3618== at 0x804A18A: app_mncc_disconnected (app.c:49) ==3618== by 0x804B52D: close_connection (mncc.c:255) ==3618== by 0x804BCFA: mncc_rtp_send.constprop.13 (mncc.c:145) ==3618== by 0x804CC86: check_setup (mncc.c:435) ==3618== by 0x804CC86: mncc_data (mncc.c:795) ==3618== by 0x42FCF94: osmo_fd_disp_fds (select.c:167) ==3618== by 0x804D1F2: evpoll (evpoll.c:92) ==3618== by 0x4205053: ??? (in /lib/i386-linux-gnu/ ==3618== by 0x4205478: g_main_loop_run (in /lib/i386-linux-gnu/ ==3618== by 0x8049AA6: main (main.c:171) ==3618== Address 0x47f3258 is 64 bytes inside a block of size 76 free'd ==3618== at 0x402A3A8: free (vg_replace_malloc.c:473) ==3618== by 0x42E7FD1: ??? (in /usr/lib/i386-linux-gnu/ ==3618== by 0x804A3FD: call_leg_release (call.c:87) ==3618== by 0x804A186: app_mncc_disconnected (app.c:48) ==3618== by 0x804B52D: close_connection (mncc.c:255) ==3618== by 0x804BCFA: mncc_rtp_send.constprop.13 (mncc.c:145) ==3618== by 0x804CC86: check_setup (mncc.c:435) ==3618== by 0x804CC86: mncc_data (mncc.c:795) ==3618== by 0x42FCF94: osmo_fd_disp_fds (select.c:167) ==3618== by 0x804D1F2: evpoll (evpoll.c:92) ==3618== by 0x4205053: ??? (in /lib/i386-linux-gnu/ ==3618== by 0x4205478: g_main_loop_run (in /lib/i386-linux-gnu/ ==3618== by 0x8049AA6: main (main.c:171) ==3618== Change-Id: I1889013ed315f896e4295358f6daf76ce523dc2a
2017-03-06call: Fix call release handling on mncc connection lossHolger Hans Peter Freyther1-2/+2
The app_mncc_disconnected will be called when the MNCC socket is down and lead to all calls being released. It directly released the call but did not stop the MNCC CMD timer. Go through the call release callback. ==3618== at 0x804A18A: app_mncc_disconnected (app.c:49) ==3618== by 0x804B52D: close_connection (mncc.c:255) This lead to the timer not being removed: ==3593== Invalid read of size 4 ==3593== at 0x4305D42: rb_first (rbtree.c:294) ==3593== by 0x42FCB37: osmo_timers_update (timer.c:220) ==3593== by 0x804D1D5: evpoll (evpoll.c:89) ==3593== by 0x4205053: ??? (in /lib/i386-linux-gnu/ ==3593== by 0x4205478: g_main_loop_run (in /lib/i386-linux-gnu/ ==3593== by 0x8049AA6: main (main.c:171) ==3593== Address 0x47f3380 is 232 bytes inside a block of size 272 free'd ==3593== at 0x402A3A8: free (vg_replace_malloc.c:473) ==3593== by 0x42E7FD1: ??? (in /usr/lib/i386-linux-gnu/ ==3593== by 0x804A3C4: call_leg_release (call.c:83) ==3593== by 0x804A188: app_mncc_disconnected (app.c:48) ==3593== by 0x804B52D: close_connection (mncc.c:255) ==3593== by 0x804BCFA: mncc_rtp_send.constprop.13 (mncc.c:145) ==3593== by 0x804CC86: check_setup (mncc.c:435) ==3593== by 0x804CC86: mncc_data (mncc.c:795) ==3593== by 0x42FCF94: osmo_fd_disp_fds (select.c:167) ==3593== by 0x804D1F2: evpoll (evpoll.c:92) ==3593== by 0x4205053: ??? (in /lib/i386-linux-gnu/ ==3593== by 0x4205478: g_main_loop_run (in /lib/i386-linux-gnu/ ==3593== by 0x8049AA6: main (main.c:171) Change-Id: I2e8e14b3983f84c9be046bbd96bbcd1e5766993e
2017-03-05contrib: Add Dockerfile to build and configure a FreeSWITCHHolger Hans Peter Freyther9-0/+2053
Rhizomatica is using FreeSWITCH and we should have an easy way to test against it. A docker container with exposed ports seems like the easiest. FreeSWITCH by default is giving us some exmaple numbers: * 5000 a menu... that allows DTMF * 9195 an echo test * 9198 tetris. The config is copied on top of the default/big config that is installed. If this PBX should be reached from the outside one needs to change to the external address and maybe configure the acl as well to add more CIDRs. Besides that make container make run Will build it and start the container. Takes a bit of time and requires docker. With it configure one can see things like: 2017-03-05 15:32:49.913912 [INFO] switch_channel.c:515 RECV DTMF 3:2000 2017-03-05 15:32:50.952752 [INFO] switch_channel.c:515 RECV DTMF 2:2000 Now to test DTMF in the system. Change-Id: I7f3aa8c81b9e8698df090a05d2e41a41b67d8e3c
2017-02-11evpoll: Don't try to be more smart than g_pollHolger Hans Peter Freyther1-4/+4
gpoll.c:g_poll maps G_IO_PRI (which is POLLPRI) to the errorfds of the select call. Let's do the same. Change-Id: I8c9163f7495e0b237bde2d48beffea3b0776a1dd Related: OS#1934
2017-02-11evpoll: Always initialize revents for the outputHolger Hans Peter Freyther1-1/+2
Even if we have not selected the fd (e.g. fd < 0), initialize revents to 0. This seems to match gpoll.c:g_poll of glib. Change-Id: I9e16a6d5a74a204c85808ba67a8f0f7af3045059
2017-02-11evpoll: Use {} in the middle of the if/else if/else blockHolger Hans Peter Freyther1-2/+2
Curly braces are used the lines above and below, don't make the middle stick out like this. Change-Id: I48a15a8665a47db206f8a7ccbc792f6bec8549c2
2017-02-11sip: Treat SIP 183 as progress tooHolger Hans Peter Freyther1-1/+1
It doesn't fix early media yet but brings us one step closer to it: The 183 (Session Progress) response is used to convey information about the progress of the call that is not otherwise classified. The Reason-Phrase, header fields, or message body MAY be used to convey more details about the call progress. Change-Id: Ibf264f251e41c06a7b4839acc0d0853e6400291c use, log test failuresNeels Hofmeyr1-14/+25
Like in libosmo-abis' and other Change-Id: I1b03786069cc4373dec73711e3a31ec05dfac2e3
2016-10-01configure: check for pkg-config presenceNeels Hofmeyr1-0/+7
Change-Id: Iaca22089bcb21b56048fa541f588c4ad4bed8f6d
2016-10-01build: be robust against install-sh files above the root dirNeels Hofmeyr1-0/+4
Explicitly set AC_CONFIG_AUX_DIR. To reproduce the error avoided by this patch: rm install-sh # in case it was already generated. touch ../install-sh # yes, outside this source tree autoreconf -fi This will produce an error like ... error: required file '../' not found installing '../missing' src/ installing '../depcomp' autoreconf: automake failed with exit status: 1 See also automake (vim `which automake`) and look for 'sub locate_aux_dir'. Change-Id: I9c96c087bffb41533ef6fb9b1d00bd903d71693e
2016-09-26log VTY telnet bind only onceNeels Hofmeyr1-2/+0
After libosmocore 55dc2edc89c1a85187ef8aafc09f7d922383231f which outputs 'telnet at <ip> <port>' from telnet_init_dynif(), there's no need to log the telnet VTY bind here anymore. Change-Id: I7db7f7a2e61ba676c2712bcc149a5fd5a69b80b2
2016-05-07sip: Start the application even if sofia-sip is brokenHolger Hans Peter Freyther1-4/+3
In case of solely managing the application through the VTY we want/need to have the application running besides a wrong config has been entered. SIP will be broken but a user will be able to see the log message and can fix it.
2016-04-25jenkins: Make it find the libosmocore library as wellHolger Hans Peter Freyther1-1/+1
2016-04-24jenkins: Use separate check invocation tor un the testsHolger Hans Peter Freyther1-0/+1
2016-04-24jenkins: Try to enable the vty tests as wellHolger Hans Peter Freyther1-1/+1
2016-04-24distcheck: Package the logging.h file as wellHolger Hans Peter Freyther1-1/+1
2016-04-24distcheck/tests: Add the referenced for testingHolger Hans Peter Freyther4-1/+61
distcheck fails because the file is not present. Write it out to get our standard vty checking to work. Add simple Makefile and call it.
2016-04-24jenkins: Add first CI script for the SIP connectorHolger Hans Peter Freyther1-0/+20
2016-04-04vty: Add VTY command about the state of the mncc connectionHolger Hans Peter Freyther3-0/+23
Add VTY command with the state of the MNCC connection. It gives a simple state and is connected in case of the READY state.
2016-04-04mncc: Use strcpy for these routines and not memcpyHolger Hans Peter Freyther1-2/+2
We need to stop on the first occurence of a \0 in the address provided by SIP. Do not copy the full amount of bytes.
2016-04-04vty: Add extended show calls command with all informationHolger Hans Peter Freyther1-0/+63
Print everything we know about the call. This can be useful to debug stuck calls or similiar events.
2016-04-04sip/call/mncc: Move source/dest into the call structureHolger Hans Peter Freyther6-25/+35
In preparation of a better show calls VTY command it is of interest to know which number has been dialed by whom. For that store the source/dest in there. MNCC: Change the talloc root context to the call and don't try to free the strings after calling the routing code SIP: Use talloc_strdup to duplicate them. Call: Add null check because the talloc_strdup of the SIP layer could have failed.
2016-04-04vty: Fix the number of documented argumentsHolger Hans Peter Freyther1-1/+1
2016-04-04vty: Add simple VTY output for current callsHolger Hans Peter Freyther3-0/+109
Start with a show call summary that lists simple data about the current set of calls: Call(5002) initial(type=SIP,state=CONFIRMED) remote(type=MNCC,state=INITIAL) Call(5001) initial(type=MNCC,state=PROCEEDING) remote(type=SIP,state=CONFIRMED) Related: OS#1680
2016-04-04mncc: Use snprintf correctly create format specifierHolger Hans Peter Freyther1-1/+1
I was focusing so much on the length that I didn't notice the wrong usage of snprintf. Correct it. Warning on Ubuntu: mncc.c:679:3: warning: format not a string literal and no format arguments [-Wformat-security] snprintf(mncc.imsi, 15, called);
2016-04-04mncc: Reject hold requests for nowHolger Hans Peter Freyther1-0/+17
MNCC hold to sip has not been implemented, so let me reject the request right now. A ticket (OS#1686) has been filed to track implementing call holding.
2016-04-04mncc: Have all release go through a local methodHolger Hans Peter Freyther1-6/+12
Have all release go through a local method first. This way we can make sure to stop the timer. I have seen something odd (a busy loop in the RB tree of the timer code) and we can easily avoid having a timer run on a page of memory that has been "freed".
2016-04-01mncc: Only copy 15 chars to leave the last one as NULLHolger Hans Peter Freyther1-1/+1
Right now we are lucky the next byte after imsi is already set to NUL here but we should not rely on that.