- 11 9月, 2012 40 次提交
-
-
由 Michael S Collins 提交于
-
由 Stefan Knoblich 提交于
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>
-
由 Jeff Lenk 提交于
-
由 Anthony Minessale 提交于
-
由 Stefan Knoblich 提交于
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>
-
由 Anthony Minessale 提交于
-
由 Stefan Knoblich 提交于
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>
-
由 Anthony Minessale 提交于
-
由 Stefan Knoblich 提交于
Same as ftmod_isdn, '#' key ends overlap receive and moves the incoming call to RING state. Signed-off-by:
Stefan Knoblich <stkn@openisdn.net>
-
由 Anthony Minessale 提交于
FS-4079 FS-4540 regression from 5213c764 please update ASAP if you are running this one
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Jeff Lenk 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Steve Underwood 提交于
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.
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Steve Underwood 提交于
Its them damn gremlins.
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Moises Silva 提交于
seems to be causing confusion and annoying users
-
由 Michael Jerris 提交于
-
由 William King 提交于
-
由 William King 提交于
-
由 Anthony Minessale 提交于
-
由 Anthony Minessale 提交于
-
由 Travis Cross 提交于
OS X apparently doesn't support \W. Thanks-to: Peter Olsson <peter.olsson@visionutveckling.se> FS-4528 --resolve
-
由 Travis Cross 提交于
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.
-