James Zhang [Tue, 6 Dec 2011 20:38:05 +0000 (15:38 -0500)]
freetdm: adding support of x-headers for Redirection Information
X-FreeTDM-RDINF-Indicator
X-FreeTDM-RDINF-OrigReason
X-FreeTDM-RDINF-Count
X-FreeTDM-RDINF-Reason
Steve Underwood [Tue, 6 Dec 2011 14:45:24 +0000 (22:45 +0800)]
Addition of logging capability to the DTMF detector in spandsp, to aid debugging
poor detection.
Fixes to how timezones are handled for FAX page headers.
Various cleanups of the spandsp headers.
Moises Silva [Fri, 2 Dec 2011 16:24:34 +0000 (11:24 -0500)]
freetdm: fix license path to use sngss7 path limits
do not use strcpy, use ftdm_set_string which is safer
do not use strcpy when snprintf is safer and cleaner
James Zhang [Fri, 2 Dec 2011 00:18:54 +0000 (19:18 -0500)]
Update to the SUSPEND state machine updated 2 commits ago.
SUSPEND will not only change the return state in few
cases.
I have retested all test cases from previous 2 commits.
What is missing is timer for each Tx Event. RSC,BLO,UBL.
Its possible to loose a message from Slave via relay to Master.
If that ever occours we will not know what state we are in.
Thus we need a timer that will re-transmit a packet if
it does not get acknowledged.
Moises Silva [Thu, 1 Dec 2011 17:13:12 +0000 (12:13 -0500)]
freetdm: fix cpu monitor inconsistent messages, variable names etc
changed parameter name from cpu_reset_alarm_threshold to cpu_clear_alarm_threshold
(old parameter name still valid for backwards compatibility in configuration files)
James Zhang [Thu, 1 Dec 2011 08:16:59 +0000 (03:16 -0500)]
Fixed the exception condition - trigger reset
used to clear ckt_flags, this was wrong.
if ctk_flags are blindly cleard a PAUSE might be cleared.
changed the code to clear only TX RESET and try to reset again.
Release Collision
If we get out of sync with other side we must
reset the circuit.
This condition occoured at 1+3 test box
Local Management Block
Its possible for stack to send us a BLO indicating to us
that we are local blocked. This case never worked and
we would get stuck there forever.
If we never manaully sent a LOCAL block, the BLO from
the stack will be acked and then unblocked.
This condition occoured at 1+3 test box
James Zhang [Thu, 1 Dec 2011 01:02:25 +0000 (20:02 -0500)]
Fixed following two secnarios
From previous commit, failed to clear the done flag _DN
which cause SUSPEND to think that there was a block
pending, causing state to remain in RESTART
S UP -> relay down -> Tx AIS -> relay up -> Tx AIS off
-> confirm all back up
-> In this condition BLO will not go out due to PAUSE
S UP -> Tx AIS -> relay down -> Tx AIS off -> relay up
-> confirm all back up
-> In this condition UBL will not go out due to PAUSE
James Zhang [Thu, 1 Dec 2011 00:11:33 +0000 (19:11 -0500)]
Sigificant changes to the core state machine :)
Visually status of channels will only be DOWN once all resets/blocks are cleared.
Therefore if any reset/block is active on a channel, the channel state will be in RESTART not DOWN.
Logic Change
SUSPENDED
-> Originally used as intermediate state. Purpose is to handle a condition
from any state and go back to the previous state.
Conditions: such as block/ucic.
-> Updated logic is that SUSPEND will be smart enough not to
go back to just any state. SUSPEND will only go back to
UP - if call is still up
RESTART - if for any reason singaling is not up due to
blocks/resets/etc...
DOWN - if signaling is UP - no resets/blocks
In this case we avoid infinite loops due to state jumping
from STATE->SUSPEND->STATE->SUSPEND
HANGUP_COMPLETE
-> If call is in use and a RESET comes on a call
the RESTART state will first try the HANGUP_COMPLETE state.
HANGUP_COMPLETE will Tx RSC and wait for it.
Reset Response handle was updated if current state HANGUP/HANGUP_COMPLETE
go back to RESTART state. Which will call HANGUP COMPLETE due to
channel in usage and HANDLE_COMPLETE will clear RESET condition and go back to DOWN
TERMINATING
-> This state is used to hangup a call. Sends a signal to FS.
-> Usually TERMINATING state stays in TERMINATING until FS comes back.
-> I added a condition in case of RESET on the line though TERMINATING
will go back to RESTART.
This allows us to process RESET commands even though we are
in the middle of hanging up.
Block Handler
If BLO is received on circuit is already blocked,
we failed to trasmit BLA. We should always ack the BLO
even though it was alrady in blocked state.
Fixed & Tested
S UP --> place call --> relay down --> hangup --> relay up-->
Confirm that call is hungup properly.
In this condition, on relay up the circuit is put into RESET.
Since circuit is still in use, it will HANGUP first, then RESET
then clear pending BLOCK.
S UP --> place call -> Tx RSC on call.
Used to cause infitie loop
Confirm call is cleard properly
Re-Tested
S UP --> place call -> Rx RSC on call
Confirm call is cleard properly
S UP --> place call -> Rx BLO -> hangup -> place call
Confirm call cannot be placed
Tx UBL
Confirm call can be placed
S UP --> place call -> Rx BLO -> Tx BLO -> hangup -> place call
Confirm call cannot be placed
Tx UBL
Confirm call cannot be placed
Rx UBL
Confirm call can be placed
S UP --> place call -> relay down --> Rx BLO on channel from telco
--> relay up
Confirm that relay detects the BLO channels even though relay was down
Tx AIS -> S Start -> Confirm HW block -> Tx AIS off
-> Confirm hw block clear and UP
S UP -> Tx AIS -> Confirm HW block -> Tx AIS off
-> confirm hw block clear and UP
S UP -> relay down -> Tx AIS -> relay up -> Tx AIS off
-> confirm all back up
-> In this condition BLO will not go out due to PAUSE
S UP -> Tx AIS -> relay down -> Tx AIS off -> relay up
-> confirm all back up
-> In this condition UBL will not go out due to PAUSE
FS-3724 2 ways to fix after updating to this version, 1) run set_zombie_exec in the dp; 2) use system_on_fax_success/system_on_fax_failure vars with explicit name of your command
James Zhang [Sat, 26 Nov 2011 02:05:39 +0000 (21:05 -0500)]
Fixed 5 relay conditions
M UP -> S UP
M Down -> S UP -> M UP
M UP -> S UP -> relay down -> relay up
M UP -> S UP -> Kill M -> M UP
M Up -> S UP -> relay down -> M link down -> relay up -> M link up
FS-3714 --resolve You are using the sip_from_host and sip_to_host which are calculated based on the response from the other end, this patch will pre-populate the variables with what it is suspeceted to be in these values but they are not guranteed to be right if there was forwarding etc and also it will not always be an ip if you send to foo@domain.com the sip_to_host will be domain.com until it replies. This is the best you will get....