mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-16 00:41:41 +00:00
Merge branch 'master' of git.freeswitch.org:freeswitch
This commit is contained in:
commit
ecfa33e9e4
@ -21,7 +21,10 @@
|
|||||||
digest authenticated.
|
digest authenticated.
|
||||||
-->
|
-->
|
||||||
<list name="domains" default="deny">
|
<list name="domains" default="deny">
|
||||||
|
<!-- domain= is special it scans the domain from the directory to build the ACL -->
|
||||||
<node type="allow" domain="$${domain}"/>
|
<node type="allow" domain="$${domain}"/>
|
||||||
|
<!-- use cidr= if you wish to allow ip ranges to this domains acl. -->
|
||||||
|
<!-- <node type="allow" cidr="192.168.0.0/24"/> -->
|
||||||
</list>
|
</list>
|
||||||
|
|
||||||
</network-lists>
|
</network-lists>
|
||||||
|
@ -114,6 +114,8 @@
|
|||||||
<!-- 'true' means every time 'first-only' means on the first register -->
|
<!-- 'true' means every time 'first-only' means on the first register -->
|
||||||
<!--<param name="send-message-query-on-register" value="true"/>-->
|
<!--<param name="send-message-query-on-register" value="true"/>-->
|
||||||
|
|
||||||
|
<!-- 'true' means every time 'first-only' means on the first register -->
|
||||||
|
<!--<param name="send-presence-on-register" value="first-only"/> -->
|
||||||
|
|
||||||
|
|
||||||
<!-- Caller-ID type (choose one, can be overridden by inbound call type and/or sip_cid_type channel variable -->
|
<!-- Caller-ID type (choose one, can be overridden by inbound call type and/or sip_cid_type channel variable -->
|
||||||
|
@ -406,25 +406,36 @@ static ftdm_state_map_t isdn_state_map = {
|
|||||||
ZSD_OUTBOUND,
|
ZSD_OUTBOUND,
|
||||||
ZSM_UNACCEPTABLE,
|
ZSM_UNACCEPTABLE,
|
||||||
{FTDM_CHANNEL_STATE_DIALING, FTDM_END},
|
{FTDM_CHANNEL_STATE_DIALING, FTDM_END},
|
||||||
{FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_CHANNEL_STATE_PROGRESS, FTDM_CHANNEL_STATE_UP, FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_TERMINATING, FTDM_END}
|
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP,
|
||||||
|
FTDM_CHANNEL_STATE_PROCEED, FTDM_CHANNEL_STATE_RINGING, FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_CHANNEL_STATE_PROGRESS,
|
||||||
|
FTDM_CHANNEL_STATE_UP, FTDM_END}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ZSD_OUTBOUND,
|
ZSD_OUTBOUND,
|
||||||
ZSM_UNACCEPTABLE,
|
ZSM_UNACCEPTABLE,
|
||||||
{FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_CHANNEL_STATE_PROGRESS, FTDM_END},
|
{FTDM_CHANNEL_STATE_PROCEED, FTDM_END},
|
||||||
{FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_UP, FTDM_END}
|
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP,
|
||||||
|
FTDM_CHANNEL_STATE_RINGING, FTDM_CHANNEL_STATE_PROGRESS, FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_CHANNEL_STATE_UP, FTDM_END},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ZSD_OUTBOUND,
|
ZSD_OUTBOUND,
|
||||||
ZSM_UNACCEPTABLE,
|
ZSM_UNACCEPTABLE,
|
||||||
{FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_TERMINATING, FTDM_END},
|
{FTDM_CHANNEL_STATE_RINGING, FTDM_END},
|
||||||
{FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_HANGUP_COMPLETE, FTDM_CHANNEL_STATE_DOWN, FTDM_END}
|
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP,
|
||||||
|
FTDM_CHANNEL_STATE_PROGRESS, FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_CHANNEL_STATE_UP, FTDM_END},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ZSD_OUTBOUND,
|
ZSD_OUTBOUND,
|
||||||
ZSM_UNACCEPTABLE,
|
ZSM_UNACCEPTABLE,
|
||||||
{FTDM_CHANNEL_STATE_HANGUP_COMPLETE, FTDM_END},
|
{FTDM_CHANNEL_STATE_PROGRESS, FTDM_END},
|
||||||
{FTDM_CHANNEL_STATE_DOWN, FTDM_END},
|
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP,
|
||||||
|
FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_UP, FTDM_END}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ZSD_OUTBOUND,
|
||||||
|
ZSM_UNACCEPTABLE,
|
||||||
|
{FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_END},
|
||||||
|
{FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_UP, FTDM_END}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ZSD_OUTBOUND,
|
ZSD_OUTBOUND,
|
||||||
@ -432,6 +443,24 @@ static ftdm_state_map_t isdn_state_map = {
|
|||||||
{FTDM_CHANNEL_STATE_UP, FTDM_END},
|
{FTDM_CHANNEL_STATE_UP, FTDM_END},
|
||||||
{FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_TERMINATING, FTDM_END}
|
{FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_TERMINATING, FTDM_END}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ZSD_OUTBOUND,
|
||||||
|
ZSM_UNACCEPTABLE,
|
||||||
|
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_END},
|
||||||
|
{FTDM_CHANNEL_STATE_HANGUP, FTDM_END}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ZSD_OUTBOUND,
|
||||||
|
ZSM_UNACCEPTABLE,
|
||||||
|
{FTDM_CHANNEL_STATE_HANGUP, FTDM_END},
|
||||||
|
{FTDM_CHANNEL_STATE_HANGUP_COMPLETE, FTDM_END},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ZSD_OUTBOUND,
|
||||||
|
ZSM_UNACCEPTABLE,
|
||||||
|
{FTDM_CHANNEL_STATE_HANGUP_COMPLETE, FTDM_END},
|
||||||
|
{FTDM_CHANNEL_STATE_DOWN, FTDM_END},
|
||||||
|
},
|
||||||
|
|
||||||
/****************************************/
|
/****************************************/
|
||||||
{
|
{
|
||||||
@ -462,26 +491,33 @@ static ftdm_state_map_t isdn_state_map = {
|
|||||||
ZSD_INBOUND,
|
ZSD_INBOUND,
|
||||||
ZSM_UNACCEPTABLE,
|
ZSM_UNACCEPTABLE,
|
||||||
{FTDM_CHANNEL_STATE_RING, FTDM_END},
|
{FTDM_CHANNEL_STATE_RING, FTDM_END},
|
||||||
{FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_RINGING, FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_CHANNEL_STATE_UP, FTDM_END}
|
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_PROCEED, FTDM_CHANNEL_STATE_RINGING, FTDM_END}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ZSD_INBOUND,
|
ZSD_INBOUND,
|
||||||
ZSM_UNACCEPTABLE,
|
ZSM_UNACCEPTABLE,
|
||||||
{FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_TERMINATING, FTDM_END},
|
{FTDM_CHANNEL_STATE_PROCEED, FTDM_END},
|
||||||
{FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_HANGUP_COMPLETE, FTDM_CHANNEL_STATE_DOWN, FTDM_END},
|
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_RINGING, FTDM_CHANNEL_STATE_PROGRESS,
|
||||||
|
FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_CHANNEL_STATE_UP, FTDM_END}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ZSD_INBOUND,
|
ZSD_INBOUND,
|
||||||
ZSM_UNACCEPTABLE,
|
ZSM_UNACCEPTABLE,
|
||||||
{FTDM_CHANNEL_STATE_HANGUP_COMPLETE, FTDM_END},
|
{FTDM_CHANNEL_STATE_RINGING, FTDM_END},
|
||||||
{FTDM_CHANNEL_STATE_DOWN, FTDM_END},
|
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_PROGRESS, FTDM_CHANNEL_STATE_PROGRESS_MEDIA,
|
||||||
|
FTDM_CHANNEL_STATE_UP, FTDM_END}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ZSD_INBOUND,
|
ZSD_INBOUND,
|
||||||
ZSM_UNACCEPTABLE,
|
ZSM_UNACCEPTABLE,
|
||||||
{FTDM_CHANNEL_STATE_RINGING, FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_END},
|
{FTDM_CHANNEL_STATE_PROGRESS, FTDM_END},
|
||||||
{FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_PROGRESS_MEDIA,
|
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_CHANNEL_STATE_UP, FTDM_END}
|
||||||
FTDM_CHANNEL_STATE_CANCEL, FTDM_CHANNEL_STATE_UP, FTDM_END},
|
},
|
||||||
|
{
|
||||||
|
ZSD_INBOUND,
|
||||||
|
ZSM_UNACCEPTABLE,
|
||||||
|
{FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_END},
|
||||||
|
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_UP, FTDM_END}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ZSD_INBOUND,
|
ZSD_INBOUND,
|
||||||
@ -489,6 +525,24 @@ static ftdm_state_map_t isdn_state_map = {
|
|||||||
{FTDM_CHANNEL_STATE_UP, FTDM_END},
|
{FTDM_CHANNEL_STATE_UP, FTDM_END},
|
||||||
{FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_TERMINATING, FTDM_END},
|
{FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_TERMINATING, FTDM_END},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ZSD_INBOUND,
|
||||||
|
ZSM_UNACCEPTABLE,
|
||||||
|
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_END},
|
||||||
|
{FTDM_CHANNEL_STATE_HANGUP, FTDM_END},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ZSD_INBOUND,
|
||||||
|
ZSM_UNACCEPTABLE,
|
||||||
|
{FTDM_CHANNEL_STATE_HANGUP, FTDM_END},
|
||||||
|
{FTDM_CHANNEL_STATE_HANGUP_COMPLETE, FTDM_END},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ZSD_INBOUND,
|
||||||
|
ZSM_UNACCEPTABLE,
|
||||||
|
{FTDM_CHANNEL_STATE_HANGUP_COMPLETE, FTDM_END},
|
||||||
|
{FTDM_CHANNEL_STATE_DOWN, FTDM_END},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -533,8 +587,6 @@ static ftdm_status_t state_advance(ftdm_channel_t *chan)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case FTDM_CHANNEL_STATE_PROGRESS:
|
case FTDM_CHANNEL_STATE_PROGRESS:
|
||||||
/* RINGING is an alias for PROGRESS state in inbound calls ATM */
|
|
||||||
case FTDM_CHANNEL_STATE_RINGING:
|
|
||||||
{
|
{
|
||||||
if (ftdm_test_flag(chan, FTDM_CHANNEL_OUTBOUND)) {
|
if (ftdm_test_flag(chan, FTDM_CHANNEL_OUTBOUND)) {
|
||||||
sig.event_id = FTDM_SIGEVENT_PROGRESS;
|
sig.event_id = FTDM_SIGEVENT_PROGRESS;
|
||||||
@ -542,7 +594,23 @@ static ftdm_status_t state_advance(ftdm_channel_t *chan)
|
|||||||
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_HANGUP);
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_HANGUP);
|
||||||
}
|
}
|
||||||
} else if (call) {
|
} else if (call) {
|
||||||
pri_progress(isdn_data->spri.pri, call, ftdm_channel_get_id(chan), 1);
|
pri_progress(isdn_data->spri.pri, call, ftdm_channel_get_id(chan), 0);
|
||||||
|
} else {
|
||||||
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_RESTART);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FTDM_CHANNEL_STATE_RINGING:
|
||||||
|
{
|
||||||
|
if (ftdm_test_flag(chan, FTDM_CHANNEL_OUTBOUND)) {
|
||||||
|
sig.event_id = FTDM_SIGEVENT_RINGING;
|
||||||
|
if ((status = ftdm_span_send_signal(ftdm_channel_get_span(chan), &sig) != FTDM_SUCCESS)) {
|
||||||
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_HANGUP);
|
||||||
|
}
|
||||||
|
} else if (call) {
|
||||||
|
// pri_progress(isdn_data->spri.pri, call, ftdm_channel_get_id(chan), 1);
|
||||||
|
pri_acknowledge(isdn_data->spri.pri, call, ftdm_channel_get_id(chan), 1);
|
||||||
} else {
|
} else {
|
||||||
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_RESTART);
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_RESTART);
|
||||||
}
|
}
|
||||||
@ -561,7 +629,26 @@ static ftdm_status_t state_advance(ftdm_channel_t *chan)
|
|||||||
if (!ftdm_test_flag(chan, FTDM_CHANNEL_OPEN)) {
|
if (!ftdm_test_flag(chan, FTDM_CHANNEL_OPEN)) {
|
||||||
ftdm_channel_open_chan(chan);
|
ftdm_channel_open_chan(chan);
|
||||||
}
|
}
|
||||||
pri_proceeding(isdn_data->spri.pri, call, ftdm_channel_get_id(chan), 1);
|
pri_progress(isdn_data->spri.pri, call, ftdm_channel_get_id(chan), 1);
|
||||||
|
} else {
|
||||||
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_RESTART);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FTDM_CHANNEL_STATE_PROCEED:
|
||||||
|
{
|
||||||
|
if (ftdm_test_flag(chan, FTDM_CHANNEL_OUTBOUND)) {
|
||||||
|
/* PROCEED from other end, notify user */
|
||||||
|
sig.event_id = FTDM_SIGEVENT_PROCEED;
|
||||||
|
if ((status = ftdm_span_send_signal(ftdm_channel_get_span(chan), &sig) != FTDM_SUCCESS)) {
|
||||||
|
ftdm_log(FTDM_LOG_ERROR, "Failed to send PROCEED sigevent on Channel %d:%d\n",
|
||||||
|
ftdm_channel_get_span_id(chan),
|
||||||
|
ftdm_channel_get_id(chan));
|
||||||
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_HANGUP);
|
||||||
|
}
|
||||||
|
} else if (call) {
|
||||||
|
pri_proceeding(isdn_data->spri.pri, call, ftdm_channel_get_id(chan), 0);
|
||||||
} else {
|
} else {
|
||||||
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_RESTART);
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_RESTART);
|
||||||
}
|
}
|
||||||
@ -572,11 +659,12 @@ static ftdm_status_t state_advance(ftdm_channel_t *chan)
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* This needs more auditing for BRI PTMP:
|
* This needs more auditing for BRI PTMP:
|
||||||
* does pri_acknowledge() steal the call from other devices?
|
* does pri_acknowledge() steal the call from other devices? (yes, it does)
|
||||||
*/
|
*/
|
||||||
if (!ftdm_test_flag(chan, FTDM_CHANNEL_OUTBOUND)) {
|
if (!ftdm_test_flag(chan, FTDM_CHANNEL_OUTBOUND)) {
|
||||||
if (call) {
|
if (call) {
|
||||||
pri_acknowledge(isdn_data->spri.pri, call, ftdm_channel_get_id(chan), 0);
|
pri_proceeding(isdn_data->spri.pri, call, ftdm_channel_get_id(chan), 0);
|
||||||
|
// pri_acknowledge(isdn_data->spri.pri, call, ftdm_channel_get_id(chan), 0);
|
||||||
sig.event_id = FTDM_SIGEVENT_START;
|
sig.event_id = FTDM_SIGEVENT_START;
|
||||||
if ((status = ftdm_span_send_signal(ftdm_channel_get_span(chan), &sig) != FTDM_SUCCESS)) {
|
if ((status = ftdm_span_send_signal(ftdm_channel_get_span(chan), &sig) != FTDM_SUCCESS)) {
|
||||||
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_HANGUP);
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_HANGUP);
|
||||||
@ -690,15 +778,22 @@ static ftdm_status_t state_advance(ftdm_channel_t *chan)
|
|||||||
ftdm_caller_data_t *caller_data = ftdm_channel_get_caller_data(chan);
|
ftdm_caller_data_t *caller_data = ftdm_channel_get_caller_data(chan);
|
||||||
|
|
||||||
pri_hangup(isdn_data->spri.pri, call, caller_data->hangup_cause);
|
pri_hangup(isdn_data->spri.pri, call, caller_data->hangup_cause);
|
||||||
pri_destroycall(isdn_data->spri.pri, call);
|
// pri_destroycall(isdn_data->spri.pri, call);
|
||||||
|
|
||||||
chan->call_data = NULL;
|
chan->call_data = NULL;
|
||||||
}
|
}
|
||||||
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_DOWN);
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_HANGUP_COMPLETE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FTDM_CHANNEL_STATE_HANGUP_COMPLETE:
|
case FTDM_CHANNEL_STATE_HANGUP_COMPLETE:
|
||||||
|
{
|
||||||
|
if (call) {
|
||||||
|
pri_destroycall(isdn_data->spri.pri, call);
|
||||||
|
chan->call_data = NULL;
|
||||||
|
}
|
||||||
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_DOWN);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FTDM_CHANNEL_STATE_TERMINATING:
|
case FTDM_CHANNEL_STATE_TERMINATING:
|
||||||
@ -869,7 +964,7 @@ static int on_proceeding(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ftdm_log(FTDM_LOG_DEBUG, "-- Proceeding on channel %d:%d\n", ftdm_span_get_id(span), pevent->proceeding.channel);
|
ftdm_log(FTDM_LOG_DEBUG, "-- Proceeding on channel %d:%d\n", ftdm_span_get_id(span), pevent->proceeding.channel);
|
||||||
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA);
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_PROCEED);
|
||||||
} else {
|
} else {
|
||||||
ftdm_log(FTDM_LOG_DEBUG, "-- Proceeding on channel %d:%d but it's not in the span?\n",
|
ftdm_log(FTDM_LOG_DEBUG, "-- Proceeding on channel %d:%d but it's not in the span?\n",
|
||||||
ftdm_span_get_id(span), pevent->proceeding.channel);
|
ftdm_span_get_id(span), pevent->proceeding.channel);
|
||||||
@ -909,9 +1004,12 @@ static int on_progress(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_ev
|
|||||||
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_TERMINATING);
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_TERMINATING);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
ftdm_log(FTDM_LOG_DEBUG, "-- Progress on channel %d:%d with media\n", ftdm_span_get_id(span), pevent->proceeding.channel);
|
||||||
ftdm_log(FTDM_LOG_DEBUG, "-- Progress on channel %d:%d\n", ftdm_span_get_id(span), pevent->proceeding.channel);
|
|
||||||
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA);
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA);
|
||||||
|
} else {
|
||||||
|
ftdm_log(FTDM_LOG_DEBUG, "-- Progress on channel %d:%d\n", ftdm_span_get_id(span), pevent->proceeding.channel);
|
||||||
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_PROGRESS);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ftdm_log(FTDM_LOG_DEBUG, "-- Progress on channel %d:%d but it's not in the span?\n",
|
ftdm_log(FTDM_LOG_DEBUG, "-- Progress on channel %d:%d but it's not in the span?\n",
|
||||||
ftdm_span_get_id(span), pevent->proceeding.channel);
|
ftdm_span_get_id(span), pevent->proceeding.channel);
|
||||||
@ -936,10 +1034,10 @@ static int on_ringing(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_eve
|
|||||||
ftdm_log(FTDM_LOG_DEBUG, "-- Ringing on channel %d:%d\n", ftdm_span_get_id(span), pevent->ringing.channel);
|
ftdm_log(FTDM_LOG_DEBUG, "-- Ringing on channel %d:%d\n", ftdm_span_get_id(span), pevent->ringing.channel);
|
||||||
|
|
||||||
/* we may get on_ringing even when we're already in FTDM_CHANNEL_STATE_PROGRESS_MEDIA */
|
/* we may get on_ringing even when we're already in FTDM_CHANNEL_STATE_PROGRESS_MEDIA */
|
||||||
if (ftdm_channel_get_state(chan) == FTDM_CHANNEL_STATE_PROGRESS_MEDIA) {
|
// if (ftdm_channel_get_state(chan) == FTDM_CHANNEL_STATE_PROGRESS_MEDIA) {
|
||||||
/* dont try to move to STATE_PROGRESS to avoid annoying veto warning */
|
// /* dont try to move to STATE_PROGRESS to avoid annoying veto warning */
|
||||||
return 0;
|
// return 0;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/* Open channel if inband information is available */
|
/* Open channel if inband information is available */
|
||||||
if ((pevent->ringing.progressmask & PRI_PROG_INBAND_AVAILABLE) && !ftdm_test_flag(chan, FTDM_CHANNEL_OPEN)) {
|
if ((pevent->ringing.progressmask & PRI_PROG_INBAND_AVAILABLE) && !ftdm_test_flag(chan, FTDM_CHANNEL_OPEN)) {
|
||||||
@ -959,7 +1057,8 @@ static int on_ringing(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_eve
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_PROGRESS);
|
// ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_PROGRESS);
|
||||||
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_RINGING);
|
||||||
} else {
|
} else {
|
||||||
ftdm_log(FTDM_LOG_DEBUG, "-- Ringing on channel %d:%d but it's not in the span?\n",
|
ftdm_log(FTDM_LOG_DEBUG, "-- Ringing on channel %d:%d but it's not in the span?\n",
|
||||||
ftdm_span_get_id(span), pevent->ringing.channel);
|
ftdm_span_get_id(span), pevent->ringing.channel);
|
||||||
@ -1913,6 +2012,9 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_libpri_configure_span)
|
|||||||
span->get_channel_sig_status = isdn_get_channel_sig_status;
|
span->get_channel_sig_status = isdn_get_channel_sig_status;
|
||||||
span->get_span_sig_status = isdn_get_span_sig_status;
|
span->get_span_sig_status = isdn_get_span_sig_status;
|
||||||
|
|
||||||
|
/* move calls to PROCEED state when they hit dialplan (ROUTING state in FreeSWITCH) */
|
||||||
|
ftdm_set_flag(span, FTDM_SPAN_USE_PROCEED_STATE);
|
||||||
|
|
||||||
if ((isdn_data->opts & FTMOD_LIBPRI_OPT_SUGGEST_CHANNEL)) {
|
if ((isdn_data->opts & FTMOD_LIBPRI_OPT_SUGGEST_CHANNEL)) {
|
||||||
span->channel_request = isdn_channel_request;
|
span->channel_request = isdn_channel_request;
|
||||||
ftdm_set_flag(span, FTDM_SPAN_SUGGEST_CHAN_ID);
|
ftdm_set_flag(span, FTDM_SPAN_SUGGEST_CHAN_ID);
|
||||||
|
@ -3695,11 +3695,39 @@ SWITCH_STANDARD_API(sofia_function)
|
|||||||
int wdon = -1;
|
int wdon = -1;
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
|
if (!strcasecmp(argv[1], "debug")) {
|
||||||
|
|
||||||
|
if (argc > 2) {
|
||||||
|
if (strstr(argv[2], "presence")) {
|
||||||
|
mod_sofia_globals.debug_presence = 1;
|
||||||
|
stream->write_function(stream, "+OK Debugging presence\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strstr(argv[2], "sla")) {
|
||||||
|
mod_sofia_globals.debug_sla = 1;
|
||||||
|
stream->write_function(stream, "+OK Debugging sla\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strstr(argv[2], "none")) {
|
||||||
|
stream->write_function(stream, "+OK Debugging nothing\n");
|
||||||
|
mod_sofia_globals.debug_presence = 0;
|
||||||
|
mod_sofia_globals.debug_sla = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stream->write_function(stream, "+OK Debugging summary: presence: %s sla: %s\n",
|
||||||
|
mod_sofia_globals.debug_presence ? "on" : "off",
|
||||||
|
mod_sofia_globals.debug_sla ? "on" : "off");
|
||||||
|
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
if (!strcasecmp(argv[1], "siptrace")) {
|
if (!strcasecmp(argv[1], "siptrace")) {
|
||||||
if (argc > 2) {
|
if (argc > 2) {
|
||||||
ston = switch_true(argv[2]);
|
ston = switch_true(argv[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcasecmp(argv[1], "watchdog")) {
|
if (!strcasecmp(argv[1], "watchdog")) {
|
||||||
if (argc > 2) {
|
if (argc > 2) {
|
||||||
wdon = switch_true(argv[2]);
|
wdon = switch_true(argv[2]);
|
||||||
@ -3714,7 +3742,7 @@ SWITCH_STANDARD_API(sofia_function)
|
|||||||
sofia_glue_global_watchdog(wdon);
|
sofia_glue_global_watchdog(wdon);
|
||||||
stream->write_function(stream, "+OK Global watchdog %s", wdon ? "on" : "off");
|
stream->write_function(stream, "+OK Global watchdog %s", wdon ? "on" : "off");
|
||||||
} else {
|
} else {
|
||||||
stream->write_function(stream, "-ERR Usage: siptrace <on|off>|watchdog <on|off>");
|
stream->write_function(stream, "-ERR Usage: siptrace <on|off>|watchdog <on|off>|debug <sla|presence|none");
|
||||||
}
|
}
|
||||||
|
|
||||||
goto done;
|
goto done;
|
||||||
@ -4838,6 +4866,9 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_sofia_load)
|
|||||||
switch_console_set_complete("add sofia global siptrace ::[on:off");
|
switch_console_set_complete("add sofia global siptrace ::[on:off");
|
||||||
switch_console_set_complete("add sofia global watchdog ::[on:off");
|
switch_console_set_complete("add sofia global watchdog ::[on:off");
|
||||||
|
|
||||||
|
switch_console_set_complete("add sofia global debug ::[presence:sla:none");
|
||||||
|
|
||||||
|
|
||||||
switch_console_set_complete("add sofia profile");
|
switch_console_set_complete("add sofia profile");
|
||||||
switch_console_set_complete("add sofia profile restart all");
|
switch_console_set_complete("add sofia profile restart all");
|
||||||
|
|
||||||
|
@ -225,6 +225,8 @@ typedef enum {
|
|||||||
PFLAG_DEL_SUBS_ON_REG,
|
PFLAG_DEL_SUBS_ON_REG,
|
||||||
PFLAG_IGNORE_183NOSDP,
|
PFLAG_IGNORE_183NOSDP,
|
||||||
PFLAG_PRESENCE_PROBE_ON_REGISTER,
|
PFLAG_PRESENCE_PROBE_ON_REGISTER,
|
||||||
|
PFLAG_PRESENCE_ON_REGISTER,
|
||||||
|
PFLAG_PRESENCE_ON_FIRST_REGISTER,
|
||||||
PFLAG_NO_CONNECTION_REUSE,
|
PFLAG_NO_CONNECTION_REUSE,
|
||||||
/* No new flags below this line */
|
/* No new flags below this line */
|
||||||
PFLAG_MAX
|
PFLAG_MAX
|
||||||
|
@ -2419,6 +2419,17 @@ switch_status_t reconfig_sofia(sofia_profile_t *profile)
|
|||||||
} else {
|
} else {
|
||||||
sofia_clear_pflag(profile, PFLAG_PRESENCE_PROBE_ON_REGISTER);
|
sofia_clear_pflag(profile, PFLAG_PRESENCE_PROBE_ON_REGISTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (!strcasecmp(var, "send-presence-on-register")) {
|
||||||
|
if (switch_true(val)) {
|
||||||
|
sofia_set_pflag(profile, PFLAG_PRESENCE_ON_REGISTER);
|
||||||
|
} else if (!strcasecmp(val, "first-only")) {
|
||||||
|
sofia_clear_pflag(profile, PFLAG_PRESENCE_ON_REGISTER);
|
||||||
|
sofia_set_pflag(profile, PFLAG_PRESENCE_ON_FIRST_REGISTER);
|
||||||
|
} else {
|
||||||
|
sofia_clear_pflag(profile, PFLAG_PRESENCE_ON_REGISTER);
|
||||||
|
sofia_clear_pflag(profile, PFLAG_PRESENCE_ON_FIRST_REGISTER);
|
||||||
|
}
|
||||||
} else if (!strcasecmp(var, "cid-in-1xx")) {
|
} else if (!strcasecmp(var, "cid-in-1xx")) {
|
||||||
if (switch_true(val)) {
|
if (switch_true(val)) {
|
||||||
sofia_set_pflag(profile, PFLAG_CID_IN_1XX);
|
sofia_set_pflag(profile, PFLAG_CID_IN_1XX);
|
||||||
@ -3008,6 +3019,7 @@ switch_status_t config_sofia(int reload, char *profile_name)
|
|||||||
sofia_set_pflag(profile, PFLAG_PASS_CALLEE_ID);
|
sofia_set_pflag(profile, PFLAG_PASS_CALLEE_ID);
|
||||||
sofia_set_pflag(profile, PFLAG_MESSAGE_QUERY_ON_FIRST_REGISTER);
|
sofia_set_pflag(profile, PFLAG_MESSAGE_QUERY_ON_FIRST_REGISTER);
|
||||||
sofia_set_pflag(profile, PFLAG_SQL_IN_TRANS);
|
sofia_set_pflag(profile, PFLAG_SQL_IN_TRANS);
|
||||||
|
sofia_set_pflag(profile, PFLAG_PRESENCE_ON_REGISTER);
|
||||||
profile->shutdown_type = "false";
|
profile->shutdown_type = "false";
|
||||||
profile->local_network = "localnet.auto";
|
profile->local_network = "localnet.auto";
|
||||||
sofia_set_flag(profile, TFLAG_ENABLE_SOA);
|
sofia_set_flag(profile, TFLAG_ENABLE_SOA);
|
||||||
@ -3090,6 +3102,16 @@ switch_status_t config_sofia(int reload, char *profile_name)
|
|||||||
} else {
|
} else {
|
||||||
sofia_clear_pflag(profile, PFLAG_PRESENCE_PROBE_ON_REGISTER);
|
sofia_clear_pflag(profile, PFLAG_PRESENCE_PROBE_ON_REGISTER);
|
||||||
}
|
}
|
||||||
|
} else if (!strcasecmp(var, "send-presence-on-register")) {
|
||||||
|
if (switch_true(val)) {
|
||||||
|
sofia_set_pflag(profile, PFLAG_PRESENCE_ON_REGISTER);
|
||||||
|
} else if (!strcasecmp(val, "first-only")) {
|
||||||
|
sofia_clear_pflag(profile, PFLAG_PRESENCE_ON_REGISTER);
|
||||||
|
sofia_set_pflag(profile, PFLAG_PRESENCE_ON_FIRST_REGISTER);
|
||||||
|
} else {
|
||||||
|
sofia_clear_pflag(profile, PFLAG_PRESENCE_ON_REGISTER);
|
||||||
|
sofia_clear_pflag(profile, PFLAG_PRESENCE_ON_FIRST_REGISTER);
|
||||||
|
}
|
||||||
} else if (!strcasecmp(var, "cid-in-1xx")) {
|
} else if (!strcasecmp(var, "cid-in-1xx")) {
|
||||||
if (switch_true(val)) {
|
if (switch_true(val)) {
|
||||||
sofia_set_pflag(profile, PFLAG_CID_IN_1XX);
|
sofia_set_pflag(profile, PFLAG_CID_IN_1XX);
|
||||||
|
@ -2695,8 +2695,8 @@ switch_status_t sofia_glue_tech_set_codec(private_object_t *tech_pvt, int force)
|
|||||||
SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE | tech_pvt->profile->codec_flags,
|
SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE | tech_pvt->profile->codec_flags,
|
||||||
NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) {
|
NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_ERROR, "Can't load codec?\n");
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_ERROR, "Can't load codec?\n");
|
||||||
switch_goto_status(SWITCH_STATUS_FALSE, end);
|
|
||||||
switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_INCOMPATIBLE_DESTINATION);
|
switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_INCOMPATIBLE_DESTINATION);
|
||||||
|
switch_goto_status(SWITCH_STATUS_FALSE, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (switch_core_codec_init_with_bitrate(&tech_pvt->write_codec,
|
if (switch_core_codec_init_with_bitrate(&tech_pvt->write_codec,
|
||||||
|
@ -875,9 +875,19 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand
|
|||||||
long reg_count = 0;
|
long reg_count = 0;
|
||||||
int delete_subs;
|
int delete_subs;
|
||||||
const char *agent = "unknown";
|
const char *agent = "unknown";
|
||||||
|
const char *pres_on_reg = NULL;
|
||||||
|
int send_pres = 0;
|
||||||
|
|
||||||
delete_subs = sofia_test_pflag(profile, PFLAG_DEL_SUBS_ON_REG);
|
delete_subs = sofia_test_pflag(profile, PFLAG_DEL_SUBS_ON_REG);
|
||||||
|
|
||||||
|
if (v_event && *v_event) pres_on_reg = switch_event_get_header(*v_event, "send-presence-on-register");
|
||||||
|
|
||||||
|
if (!(send_pres = switch_true(pres_on_reg))) {
|
||||||
|
if (pres_on_reg && !strcasecmp(pres_on_reg, "first-only")) {
|
||||||
|
send_pres = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* all callers must confirm that sip, sip->sip_request and sip->sip_contact are not NULL */
|
/* all callers must confirm that sip, sip->sip_request and sip->sip_contact are not NULL */
|
||||||
switch_assert(sip != NULL && sip->sip_contact != NULL && sip->sip_request != NULL);
|
switch_assert(sip != NULL && sip->sip_contact != NULL && sip->sip_request != NULL);
|
||||||
|
|
||||||
@ -1405,7 +1415,6 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (send && switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
|
if (send && switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", rpid);
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", rpid);
|
||||||
@ -1493,6 +1502,10 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sofia_test_pflag(profile, PFLAG_PRESENCE_ON_REGISTER) ||
|
||||||
|
(reg_count == 1 && sofia_test_pflag(profile, PFLAG_PRESENCE_ON_FIRST_REGISTER))
|
||||||
|
|| send_pres == 1 || (reg_count == 1 && send_pres == 2)) {
|
||||||
|
|
||||||
if (sofia_test_pflag(profile, PFLAG_PRESENCE_PROBE_ON_REGISTER)) {
|
if (sofia_test_pflag(profile, PFLAG_PRESENCE_PROBE_ON_REGISTER)) {
|
||||||
if (switch_event_create(&s_event, SWITCH_EVENT_PRESENCE_PROBE) == SWITCH_STATUS_SUCCESS) {
|
if (switch_event_create(&s_event, SWITCH_EVENT_PRESENCE_PROBE) == SWITCH_STATUS_SUCCESS) {
|
||||||
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
|
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
|
||||||
@ -1513,7 +1526,7 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand
|
|||||||
switch_event_fire(&s_event);
|
switch_event_fire(&s_event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_UNREGISTER) == SWITCH_STATUS_SUCCESS) {
|
if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_UNREGISTER) == SWITCH_STATUS_SUCCESS) {
|
||||||
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
|
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
|
||||||
|
@ -812,7 +812,7 @@ SWITCH_DECLARE(char *) switch_strip_whitespace(const char *str)
|
|||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
if (zstr(sp)) {
|
if (zstr(sp)) {
|
||||||
return (char *) sp;
|
return strdup(SWITCH_BLANK_STRING);
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((*sp == 13 ) || (*sp == 10 ) || (*sp == 9 ) || (*sp == 32) || (*sp == 11) ) {
|
while ((*sp == 13 ) || (*sp == 10 ) || (*sp == 9 ) || (*sp == 32) || (*sp == 11) ) {
|
||||||
@ -820,7 +820,7 @@ SWITCH_DECLARE(char *) switch_strip_whitespace(const char *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (zstr(sp)) {
|
if (zstr(sp)) {
|
||||||
return (char *) sp;
|
return strdup(SWITCH_BLANK_STRING);
|
||||||
}
|
}
|
||||||
|
|
||||||
s = strdup(sp);
|
s = strdup(sp);
|
||||||
@ -829,7 +829,7 @@ SWITCH_DECLARE(char *) switch_strip_whitespace(const char *str)
|
|||||||
if ((len = strlen(s)) > 0) {
|
if ((len = strlen(s)) > 0) {
|
||||||
p = s + (len - 1);
|
p = s + (len - 1);
|
||||||
|
|
||||||
while (p > s && ((*p == 13 ) || (*p == 10 ) || (*p == 9 ) || (*p == 32) || (*p == 11))) {
|
while ((p >= s) && ((*p == 13 ) || (*p == 10 ) || (*p == 9 ) || (*p == 32) || (*p == 11))) {
|
||||||
*p-- = '\0';
|
*p-- = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -844,7 +844,7 @@ SWITCH_DECLARE(char *) switch_strip_spaces(char *str, switch_bool_t dup)
|
|||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
if (zstr(sp)) {
|
if (zstr(sp)) {
|
||||||
return sp;
|
return dup ? strdup(SWITCH_BLANK_STRING) : sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (*sp == ' ') {
|
while (*sp == ' ') {
|
||||||
@ -865,7 +865,7 @@ SWITCH_DECLARE(char *) switch_strip_spaces(char *str, switch_bool_t dup)
|
|||||||
if ((len = strlen(s)) > 0) {
|
if ((len = strlen(s)) > 0) {
|
||||||
p = s + (len - 1);
|
p = s + (len - 1);
|
||||||
|
|
||||||
while (p && *p && p > s && *p == ' ') {
|
while (p && *p && (p >= s) && *p == ' ') {
|
||||||
*p-- = '\0';
|
*p-- = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user