Commit Graph

21992 Commits

Author SHA1 Message Date
Stefan Knoblich 705543c8b4 ftmod_misdn: Use a per-span I/O thread to handle B-channel data.
Move the B-channel message handling into a per-span I/O thread,
to solve most of the problems caused by the intermixed data + control
socket interface of mISDN, missing write poll() support on
mISDN B-channels and the FreeTDM I/O model. This eliminates most of
the audio problems (except for a few minor glitches).

A unix stream socket pair is used as a bi-directional pipe replacement
(the pipe code is still included in this commit, but will be removed later),
with the RX and TX buffer sizes carefully tuned to avoid excessive buffering
(= latency) and a deadlock situation between the write() call in ftdm_write()
and the code in misdn_span_run() that needs a minimum amount of data in the
TX buffer, before sending out a PH_DATA_REQ to the mISDN socket
(see misdn_span_run() comments for more details).

The minimum size for pipes is PAGE_SIZE (4k), which is ~500 ms worth of
audio. A socket pair RX/TX buffer size of 3k, seems to hold a maximum
amount of around 500 bytes data in practice, giving us a much lower
maximum latency than a unix pipe. (The socket pair might be replaced by a
custom ring buffer / fifo data structure to get even more fine grained
control of the maximum latency.)

The newly introduced span_start / span_stop callbacks in
ftdm_io_interface_t are used to start / stop the I/O thread. The callback
functions will wait up to 10 seconds for the thread to successfully
start up or shut down (using a mutex + condition var).

NOTE: Using any of the locking ftdm_span_() functions in the I/O will cause
      a deadlock between the I/O thread (trying to lock span->mutex) and the
      thread calling ftdm_start()/_stop() (holding the span->mutex).
      (The I/O thread currently uses direct span member access to avoid this.)

The I/O thread uses the epoll(7) family of functions for event handling.
An epoll context is created on startup and all B-channel sockets are
registered (READ, PRI and ERR). Before entering the event loop,
the I/O thread will send a signal on the condition variable, to
indicate it has completed the startup procedure.

Incoming b-channel and command pipe events are handled by the event loop.
Payload of incoming PH_DATA_IND frames (= audio data) is sent to the
rx_audio_pipe_in end of the b-channel's socket pair and, if enough data is
available, a PH_DATA_REQ of the same size is sent to the b-channel mISDN socket
to transmit audio.

A MISDN_CMD_STOP command on the event pipe will wake up the I/O thread and
cause it to shut down. All b-channels will be unregistered from the epoll context
and the epoll fd closed. The I/O thread terminates itself after signalling the
successfull shutdown on the condition variable.

TODOs:
    - Move D-Channel into I/O thread too

    - Custom FIFO/ring buffer for data (even lower latency)

    - Improve epoll() code (per-channel struct w/ callback, for epfd.data.ptr)

    - Use mISDN DSP for audio (e.g. tone generator, dtmf detector, echo cancel)

    - Use a per-port / span control socket to execute channel commands
      synchronously, or add misdn_commands (queue?) that can be used that way

    - Name I/O threads 'mISDN-%SPAN_NAME%', e.g. 'mISDN-M_BRI1'
      (= add ftdm_thread_set_namef(thread, fmt, ...) / ftdm_thread_set_name(thread, name))

TL;DR: "tweak", solves "booboo" with audio

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-11 14:31:27 -04:00
Jeff Lenk 24813534f0 FS-4219 --resolve 2012-09-11 14:31:27 -04:00
Anthony Minessale d78a192b0d revert 2012-09-11 14:31:27 -04:00
Stefan Knoblich 59a3df2563 FreeSWITCH: Fix format string error in witch_core_session_thread_pool_worker().
Fixes:
    cc1: warnings being treated as errors
    src/switch_core_session.c: In function 'switch_core_session_thread_pool_worker':
    src/switch_core_session.c:1478: warning: format '%ld' expects type 'long int', but argument 9 has type 'switch_size_t'
    src/switch_core_session.c:1483: warning: format '%ld' expects type 'long int', but argument 9 has type 'switch_size_t'
    gmake[2]: *** [libfreeswitch_la-switch_core_session.lo] Error 1

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-11 14:31:27 -04:00
Anthony Minessale 27860f1e29 fix some issues in httapi record parser 2012-09-11 14:31:27 -04:00
Stefan Knoblich e8d0845376 ftmod_libpri: Implement channel hunting in NT-mode.
Hunt for a free channel for incoming calls that do not
preselect a channel (pevent->ring.channel == -1).

Verify the preselected channel for calls that do specify a channel
and in case the channel is already taken, hunt for a free one,
or abort with an error message (if the preselection was exclusive).

TE-mode channel selection is the same as before
(there's still room for improvement, though, but i'll save that for later).

The MSN/DDI filter code is moved into the TE-mode section (only useful there).

The duplicate ring detection had to be reworked. We now store the
call reference (CRV) in caller_data->call_reference of the selected channel
and do a CRV -> channel look up with find_channel_by_cref()
at the top of on_ring().

NOTE: This is only lightly tested (NT/TE mode), i'd either have to
      write a lot of custom code to check it toroughly or the need for
      a scriptable ISDN stack...

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-11 14:31:27 -04:00
Anthony Minessale 7bc19b0c1b fix small bug, init this value to success so you can record without playing a file first 2012-09-11 14:31:27 -04:00
Stefan Knoblich f3eb7ef05c ftmod_libpri: Check for '#' key to leave overlap receiving state.
Same as ftmod_isdn, '#' key ends overlap receive and moves the incoming
call to RING state.

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-11 14:31:27 -04:00
Anthony Minessale 9a6b9143f9 FS-4079 FS-4540 regression from 5213c764bb please update ASAP if you are running this one 2012-09-11 14:31:26 -04:00
Anthony Minessale bbae1afb2d copy channel data into RECV_INFO event 2012-09-11 14:31:26 -04:00
Anthony Minessale 55f1c9b75c FS-4561 please update to this version and retest with new logs if necessary 2012-09-11 14:31:26 -04:00
Anthony Minessale 42a233d76f FS-4079 FS-4540 minor refactoring to fix some minor side effects of recent changes 2012-09-11 14:31:26 -04:00
Jeff Lenk 1208dd0249 vs2010 reswig 2012-09-11 14:31:26 -04:00
Anthony Minessale 6ae99adaeb remove debug 2012-09-11 14:31:26 -04:00
Anthony Minessale 4d5ef2c210 cleanup 2012-09-11 14:31:26 -04:00
Anthony Minessale f7b953e81d change mod_sofia to use new core based recovery engine 2012-09-11 14:31:26 -04:00
Anthony Minessale c79643c8c0 move recovery engine up into the core 2012-09-11 14:30:51 -04:00
Anthony Minessale 575f7b6c5b make sure recovering calls start with re-invite instead of invite handler 2012-09-11 14:30:51 -04:00
Anthony Minessale e27a451cf3 remove unused resurrect code 2012-09-11 14:30:51 -04:00
Anthony Minessale a05a528952 FS-4559 --resolve 2012-09-11 14:30:51 -04:00
Anthony Minessale 3efcf91983 refactor some unneeded code and move artoo code into the core 2012-09-11 14:30:50 -04:00
Anthony Minessale 16d483f113 update to session thread cache 2012-09-11 14:30:50 -04:00
Steve Underwood 365045bee6 Fixed Cairo's entry in the timezone files
Changed mod_spandsp so it tries to resolve timezone names like Asia/HongKong
to a POSIX timezone descriptor string, like other parts of FreeSwitch do.
2012-09-11 14:30:50 -04:00
Anthony Minessale dd467cc0e8 fix endless 5xx race when system is paused or overloaded 2012-09-11 14:30:50 -04:00
Anthony Minessale f0659b2605 FS-4554 --resolve 2012-09-11 14:30:50 -04:00
Anthony Minessale 4ff7fe0172 FS-4490 --resolve 2012-09-11 14:30:50 -04:00
Anthony Minessale d281c01167 add timeout 2012-09-11 14:30:50 -04:00
Steve Underwood ddf85356e3 A line got deleted somewhere along the line. I didn't do it, honest.
Its them damn gremlins.
2012-09-11 14:30:50 -04:00
Anthony Minessale d12dffea99 ammendment to last commit 2012-09-11 14:30:50 -04:00
Anthony Minessale 8ccf0aef7a cache session threads and reuse them if possible 2012-09-11 14:30:50 -04:00
Anthony Minessale a235b70a78 FS-4079 FS-4540 please update and test 2012-09-11 14:30:50 -04:00
Moises Silva b50f8f3e8f mod_sangoma_codec: Remove debug message that is seldom needed anymore and
seems to be causing confusion and annoying users
2012-09-11 14:30:50 -04:00
Michael Jerris 71d99b4953 FS-4264: --resolve make sure directory exists 2012-09-11 14:30:50 -04:00
William King 51178bcf8c git merge failure fixed. wrong side of the merge was kept in previous commit 2012-09-11 14:30:50 -04:00
William King 68f3b12d0c On accounting start and end properly error checking on new handle creation. 2012-09-11 14:30:50 -04:00
Anthony Minessale 8da367d9a1 FS-4548 --resolve such a little patch for a big problem, good find 2012-09-11 14:30:49 -04:00
Anthony Minessale 49baa45c48 add _preconfigured_t38_options as a back door for opal 2012-09-11 14:30:49 -04:00
Travis Cross 1a22ec7222 Fix sed pattern on OS X
OS X apparently doesn't support \W.

Thanks-to: Peter Olsson <peter.olsson@visionutveckling.se>

FS-4528 --resolve
2012-09-11 14:30:49 -04:00
Travis Cross 2dd889c641 Add sound/music debian packaging instructions
Tell people where to go to get the repository for building the
freeswitch-sounds-* and freeswitch-music-* Debian packages, as well as
what to read when they get there.
2012-09-11 14:30:49 -04:00
William King 446a3f2bc6 After chasing down a few memory leaks that two of which were in the freeradius library, the result is more standardized memory cleanup. 2012-09-11 14:30:49 -04:00
Anthony Minessale f7064f8783 FS-4542 --resolve ok if this causes any problems it should lead us back to this commit 2012-09-11 14:29:58 -04:00
Anthony Minessale d9aac5ab9d FS-4079 FS-4540 new patch 2012-09-11 14:29:58 -04:00
Jeff Lenk f273fc1b9f FS-4526 --resolve 2012-09-11 14:29:58 -04:00
Jeff Lenk 6f2c1d7627 FS-4543 --resolve thanks Peter 2012-09-11 14:29:58 -04:00
Steve Underwood a82b28c37f Fixed a typo in the fixed point image translate code 2012-09-11 14:29:58 -04:00
Anthony Minessale 23efa8e6d9 FS-4525 --resolve 2012-09-11 14:29:58 -04:00
Anthony Minessale ad1f0a1288 fix color coding to be OS appropriate 2012-09-11 14:29:58 -04:00
Anthony Minessale bee83a8ea8 up date 2012-09-11 14:29:58 -04:00
Anthony Minessale 35bc42a917 FS-4539 please test this and post new logs if necessary 2012-09-11 14:29:58 -04:00
Anthony Minessale 09e769d8da revert 2012-09-11 14:29:58 -04:00