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>
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>
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>
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>
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>
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>
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>
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
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>
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>
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>
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>
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>
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>
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>
- 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>
- 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
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>
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>
- 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>
- 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>