75 Commits

Author SHA1 Message Date
Stefan Knoblich
716f4c0675 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-08-23 22:26:49 +02:00
Stefan Knoblich
c3d13d5e00 ftmod_libpri: Drop custom MIN() macro and use common ftdm_min()
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-07-25 16:07:39 +02:00
Stefan Knoblich
67442974b2 ftmod_libpri: Fix type-punned pointer warning in msn_filter_foreach().
cc1: warnings being treated as errors
./src/ftmod/ftmod_libpri/ftmod_libpri.c: In function 'msn_filter_foreach':
./src/ftmod/ftmod_libpri/ftmod_libpri.c:422: warning: dereferencing type-punned pointer will break strict-aliasing rules
make: *** [ftmod_libpri_la-ftmod_libpri.lo] Error 1

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-07-18 21:57:52 +02:00
Stefan Knoblich
f384e247fc FreeTDM: Add gcc printf()-style format string checks to ftdm_log(), also add FTDM_(U)INT64_FMT and FTDM_TIME_FMT constants.
The format string checks already caught a couple crash-worthy bugs and this
commit fixes a couple more.

Also includes __ftdm_check_scanf(), for completeness (currently unused).

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-07-11 22:44:08 +02:00
Stefan Knoblich
7a12804577 FreeTDM: Add trunk mode (NET/CPE) to span configuration in freetdm.conf and use it in ftmod_misdn and ftmod_libpri.
Some I/O implementations (e.g. mISDN) need this information to correctly
set up the port configuration. In FreeTDM, the mode of a span has been.
up until now, a part of the signalling module configuration ("node" or "mode"
for libpri and isdn spans), which is parsed _after_ the I/O part of a span
has been initialized. This limitation currently prevents us from using mISDN
in NT mode.

To work around this problem (without adding a lot of new tunk_type values like "E1_NET" etc.),
add a new "trunk_mode" parameter to the span categories in freetdm.conf, which by default
is "CPE" for all trunk types, except "FXS" (which defaults to "NET").

ftmod_misdn uses trunk_type + trunk_mode to correctly choose the d-channel protocol
for a port.

ftmod_libpri uses trunk_mode as a hint for the default "mode" setting.
(NOTE: It will print a warning if trunk_mode and signalling mode do not match.)

All other modules currently ignore the value of trunk_mode.

Example freetdm.conf snippet for a mISDN span in NET/NT mode
(using a HFC-S USB dongle):

  [span misdn MBRI_1]
  trunk_type => BRI_PTMP
  trunk_mode => NET
  b-channel  => HFC-S_USB.1:1-2
  d-channel  => HFC-S_USB.1:3

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-07-11 19:15:35 +02:00
Stefan Knoblich
a5e1101302 ftmod_libpri: Add doxygen documentation for new MSN/DDI filter functions.
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-07-06 11:08:34 +02:00
Stefan Knoblich
c92a55d3f1 ftmod_libpri: Add MSN/DDI filter for incoming calls.
This feature allows ftmod_libpri to ignore calls with non-matching destination number.

You may want to use this on BRI PTMP lines (Point-to-MultiPoint),
to avoid conflicts between your FreeSWITCH server and other devices connected to the line.

The filter is disabled by default (all calls will be accepted),
setting one (or more) "local-number" parameters on the span configuration enables it.

Example configuration snippet:

   <libpri_spans>
      <span name="example01">
         <!-- ... other span settings omitted ... -->
         <param name="local-number" value="123456"/>
         <param name="local-number" value="654321"/>
      </span>
   </libpri_spans>

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-06-26 21:53:20 +02:00
Ken Rice
7a147e4762 Update a ton of copyright statements to make sure the dates are proper 2012-04-25 17:14:55 -05:00
Stefan Knoblich
997550c511 ftmod_libpri: Check for required features in configure and remove old-style log callbacks
Non-PRI_NEW_SET_API logging callbacks were only available in libpri-1.0 and older,
which also lacks PRI_IO_FUNCS (required) and wouldn't work anyway.

Explicitly check for both PRI_* feature defines at configure time and reject libpri
versions that lack them.

Remove the non-PRI_NEW_SET_API logging callbacks in ftmod_libpri.c.

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-04-14 01:39:25 +02:00
Stefan Knoblich
020724e103 ftmod_libpri: Improve libpri message logging.
Use the PRI_NEW_SET_API define provided by >=libpri-1.2 to distinguish
between old style and new style pri_set_error() and pri_set_message()
callback functions.

Improve message logging by using ftdm_log_chan() if per-span
data with a valid (d-)channel object is available.
NOTE: pri_get_userdata() returns NULL if pri is NULL.

This will reduce the horizontal space for libpri output a bit, but allows
us to see which span the message/error came from.

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-04-14 01:13:22 +02:00
Stefan Knoblich
2de175b574 ftmod_libpri: Improve output of ftdm libpri api 'invalid span' error messages.
No more "invalid span", now it's either "'foo' not a libpri span" or
"'foo' span not found" which makes it a lot more useful.

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2011-11-18 23:58:01 +01:00
Stefan Knoblich
5897ec5992 ftmod_libpri: Print usage if 'ftdm libpri' has no arguments.
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2011-11-18 23:58:00 +01:00
Marc Olivier Chouinard
d185978f8d mod_freetdm/libpri: Fix problem with some destination using early-media for IVR. FS wasn't switching to accept the media of the early media provided in some type of ISDN msg. This fix it for the situation I've experienced. 2011-10-28 15:18:58 -04:00
Stefan Knoblich
e1a6fd27e0 ftmod_libpri: Always try to close the d-channel to avoid a possible deadlock in case something fails in the I/O module's channel open function.
Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2011-09-01 01:48:03 +02:00
Marc Olivier Chouinard
2ecf2d6e62 freetdm/libpri: Add support to change status of an individual channel or multiple channel. This allow to put bchannel out of service on an active T1 without affecting active call. Allow graceful out of service of T1 trunk.
NOTE: There is bugs in libpri, even latest 1.4.12 as of this writing if you use NI2.   So rightnow it only work in DMS100/ATT mode.  Email me to get the NI2 patch (really stupid error).
NOTE2: The way libpri is build doesn't allow to do advance feature with the SERVICE feature, so if you put an channel out of service, and the far end send an restart, it will be bring back in service.  Lot of changes in libpri is required to allow this.  I need to figure out what would be the best steps to take since I don't have commit access to libpri release.
NOTE3: You need to enable this feature by setting service_message_support to true on the span
2011-08-05 22:50:58 -04:00
Moises Silva
492bc6b416 freetdm: ftmod_libpri - request channel exclusively 2011-07-23 12:53:04 -04:00
Stefan Knoblich
1c608f0a5d ftmod_libpri: final fix called number overlap receiving...
ftdm_copy_string() length parameter needs to include the terminating NUL byte.

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
Tested-by: Stefan Knoblich <stkn@openisdn.net>
2011-06-30 23:53:36 +02:00
Stefan Knoblich
c01c500153 ftmod_libpri: Incoming overlap receiving digits have to be appended to the DNIS.
Libpri doesn't do that for us, so handle things on our end.
Other parts of the previous patch seem to work fine.

Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2011-06-30 13:01:19 +02:00
Stefan Knoblich
d2ce252509 ftmod_libpri: Add experimental (untested) support for overlap receiving in TE mode.
Adds a new "overlapdial" configuration parameter that enables
incoming overlap dialing when set to "incoming", "yes" or "both" (possible values:
"no", "yes"/"both", "incoming"/"receive", "outgoing"/"send").

(Overlap dialing is disabled by default)

NOTE: only the non-overlap receive case has been tested (= doesn't break existing setups)

Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2011-06-29 13:26:51 +02:00
Moises Silva
152ce41283 freetdm: print libpri error string on error events 2011-06-09 11:15:53 -04:00
Stefan Knoblich
2ac7a9de4f ftmod_libpri: Set default config values, just in case the user forgot to set some parameters in freetdm.conf.xml.
This fixes the "[ERR] ftmod_libpri.c:128 Don't know how to SABME on a type 0 node" messages
from libpri, when there's no "node"/"mode" parameter set for the span.

NOTE: Now defaulting to CPE mode; EuroISDN on BRI/E1 and 4ESS on J1/T1 lines,
      make sure you set dialect/switchtype!

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2011-05-10 19:53:58 +02:00
Stefan Knoblich
ccce356392 ftmod_libpri: Rewrite parts of hangup handling to fix hanging calls problem.
Let's hope this fixes it for good and doesn't introduce new problems.

Tested-by: SparFux (#freetdm @ irc.freenode.net)
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2011-05-03 13:44:21 +02:00
Markus Mueller
6196a4199e ftmod_libpri: Possible fix for call tear-down problems (+ locking cleanup)
Remove pri_destroycall() in on_hangup() and
use pri_hangup() instead of the deprecated pri_release().

NOTE: The original patch used PRI_CAUSE_NORMAL_CIRCUIT_CONGESTION for the cause
      code, which (without pri_enable_hangup_fix() enabled) emits a RELEASE COMPLETE
      message. This version of the patch uses PRI_CAUSE_NORMAL_CLEARING (-1). (stkn)

Additionally, use ftdm_set_state() instead of ftdm_set_state_locked() because the channel
is already locked. (stkn)

Completely-untested-by: Stefan Knoblich <stkn@openisdn.net>
2011-04-30 18:16:46 +02:00
Stefan Knoblich
360ed43a04 ftmod_libpri: ignore missing call_data in on_hangup() and use the call handle passed in the pevent structure (still needs more love...)
Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2011-04-29 01:59:24 +02:00
Stefan Knoblich
1a54968d99 ftmod_libpri: go to PROGRESS_MEDIA in on_ringing() if there is inband information available and rework channel opening to not skip state changes when the channel is already open.
The latter part affects on_ringing(), on_progress() and on_proceeding().

Somewhat experimental and untested (apart from a compile run).

Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2011-03-10 18:25:43 +01:00
David Yat Sin
49ac70defd freetdm: User variables now stored in ftdm_usrmsg_t 2011-02-25 09:58:15 -05:00
David Yat Sin
7b1da2316b freetdm: Updated signalling modules to not set channel state to DIALING on OUTGOING_CALL_FUNCTION 2011-02-18 13:21:05 -05:00
Stefan Knoblich
dff01c07f1 [ftmod_libpri] Use FTDM_SPAN_USE_PROCEED_STATE and rework state handling.
- Use the newly introduced FTDM_SPAN_USE_PROCEED_STATE flag and FTDM_CHANNEL_STATE_PROCEED.

- Update ftmod_libpri's state machine table (taken from ftmod_sangoma_isdn).

- Move pri_destroycall() to HANGUP_COMPLETE state.

- Try to get a little bit closer to the ISDN states by using pri_acknowledge() in RINGING,
  pri_progress() in PROGRESS and pri_proceeding() in PROCEED state.

- Go to PROGRESS_MEDIA in on_progress() only if there is inband indication available, go to
  PROGRESS if not.

- Go to RINGING state in on_ringing() and remove PROGRESS_MEDIA check.

NOTE: One libpri error message and a VETO (PROGRESS -> RINGING) warning to investigate,
      but changes seem to work fine nonetheless.

Tested-by: SparFux (#freeswitch / #freeswitch-de  @ irc.freenode.net)
Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2011-01-13 23:28:00 +01:00
Moises Silva
fe0d8d1ec5 freetdm: - updated all signaling modules (except for ftmod_isdn and ftmod_sangoma_ss7) to adapt to new core state processing
- fixed bug in configure.ac to detect ftmod_pritap compilation
         - ignore FTDM_SIGEVENT_RELEASED and FTDM_SIGEVENT_INDICATION_COMPLETED in mod_freetdm
         - Destroy the state completed interrupt on channel destroy
         - Fix analog polarity reversal bug when using 3-way calling or call-swap
2010-12-31 13:44:20 -05:00
Moises Silva
dd4bad220c freetdm: ftmod_libpri - update to use proper structure member for signaling status change notifications 2010-12-19 12:55:55 -05:00
Stefan Knoblich
6066993d21 ftmod_libpri: remove ftdm_channel_done(), only use ftdm_channel_close().
Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-12-18 02:24:28 +01:00
Moises Silva
15b5170b14 freetdm: ftmod_libpri - add support for RINGING state 2010-11-30 16:42:58 -05:00
Moises Silva
ffbded67fd freetdm: ftmod_libpri - lock the channel in libpri on_ring callback
this should fix potential call_data pointer corruption
2010-11-25 12:53:51 -05:00
Moises Silva
a697462a58 freetdm: ftmod_libpri - Do not unlock the channel until all states pending
have been cleared. This should fix issues with
                        state transitions being ignored.
2010-11-24 12:30:58 -05:00
Stefan Knoblich
a9b2ced2aa ftmod_libpri: First part of the BRI PTMP channel handling changes.
I really need to dig deeper here, some libpri events never fire for
incoming calls and i'll have to find out how mod_freetdm or the
FreeSWITCH core change states on the channel...

Anyway, incoming and outgoing calls still work for me (BRI PTMP TE),
so commit this now and let a wider audience do some more testing.

Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
Tested-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-16 23:01:21 +01:00
Stefan Knoblich
ced7c9ae43 freetdm: Another round of parameter handling fixes (ftmod_{libpri,isdn,pritap})
ftmod_pritap: Abort before overflowing spanparameters array and initialize to all zero
ftmod_isdn:   Fix overflow check, skip over parameters without name or value, initialize spanparameters array to all zero.
ftmod_libpri: Skip over parameters without name or value, initialize spanparameters array to all zero and drop "i < 10" hardcoded check.

This should fix:
	2010-11-15 09:24:34.609515 [ERR] ftmod_libpri.c:1741 Unknown parameter '', aborting configuration
	2010-11-15 09:24:34.609515 [ERR] mod_freetdm.c:3080 Error configuring FreeTDM span BRI_1

Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
Reported-by: Ingmar Schraub <is@eseco.de>
2010-11-15 12:33:58 +01:00
Stefan Knoblich
e98b4a6b8d ftmod_libpri: Set RDNIS
Signed-off-by: lakshmanan ganapathy <lakindia89@gmail.com>
Reviewed-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-15 11:38:45 +01:00
Stefan Knoblich
96b0ef9ce9 ftmod_libpri: Use ftdm_array_len(), remove custom ARRAY_SIZE macro.
Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-14 17:48:53 +01:00
Stefan Knoblich
e17201bbac freetdm: Add ftdm_channel_get_state(), ftdm_channel_get_last_state() and ftdm_span_get_trunk_type_str().
Remove custom versions from ftmod_isdn and ftmod_libpri.

Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-14 17:48:09 +01:00
Stefan Knoblich
1e777c2ce9 ftmod_libpri: While we're at it, drop the cast too
Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-11 22:21:18 +01:00
Stefan Knoblich
e0961aee3a ftmod_libpri: Dereference facility event correctly, add debug message.
Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-11 22:19:32 +01:00
Stefan Knoblich
a2e16ce83c ftmod_libpri: Minor cleanups in ftdm_libpri_configure_span().
Move some things around and remove 'paramindex' var (just use 'i' for that too).

Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-11 00:16:25 +01:00
Stefan Knoblich
9ff4cfd569 ftmod_libpri: "ftdm libpri debug <span>" now prints the current debug flags
Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-11 00:06:06 +01:00
Stefan Knoblich
1074f006a0 ftmod_libpri: Clean up misnamed parameters and variables, remove unused.
- Add alias names for parameters:
     "node"   -> "mode"
     "dp"     -> "ton"
     "switch" -> "dialect"
     "l1"     -> "layer1"

  (Switching between ftmod_libpri and ftmod_isdn is easier now.)

- Removed unused members from struct ftdm_libpri_data
  and rename misnamed ones

Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-10 22:42:18 +01:00
Stefan Knoblich
3df1476a6d ftmod_libpri: Major cleanup, enhance configuration checks
- Check D and B-channel availability (could be extended to check B-channel count)

- Drop usage of spri->private_info, use spri->span instead
- Use accessor functions where possible
- Rename ftdmchan to chan where possible
- Various other cleanups

Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
Tested-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-10 21:32:32 +01:00
Stefan Knoblich
180feff1f4 ftmod_libpri: Completely disable on_facility if AOC support is not available in libpri (= is too old).
Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-10 01:28:30 +01:00
Stefan Knoblich
cc8d790cfd Merge branch 'master' of ssh://git.freeswitch.org/freeswitch 2010-11-10 00:48:59 +01:00
Stefan Knoblich
b1cf0d9a15 ftmod_libpri: Check if a span really has a D-Channel.
Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-10 00:47:16 +01:00
Moises Silva
8d66f38212 Merge branch 'master' of git://git.freeswitch.org/freeswitch
Conflicts:
	conf/autoload_configs/modules.conf.xml
	libs/freetdm/src/ftdm_sched.c
	libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c
2010-11-09 12:59:48 -05:00
Stefan Knoblich
ff7a617098 ftmod_libpri: Bail out with an error message if libpri is too old and selected trunk type is BRI or BRI_PTMP
Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
2010-11-09 15:51:30 +01:00