[svn-commits] mjordan: branch mjordan/AST_17288 r334566 - in /team/mjordan/AST_17288/1.8: a...
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Tue Sep 6 12:28:36 CDT 2011
Author: mjordan
Date: Tue Sep 6 12:28:32 2011
New Revision: 334566
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=334566
Log:
Added Incomplete asterisk frame; changed SIP handling of 484 to not use Incomplete dialplan logic by default
Modified:
team/mjordan/AST_17288/1.8/apps/app_dial.c
team/mjordan/AST_17288/1.8/channels/chan_alsa.c
team/mjordan/AST_17288/1.8/channels/chan_console.c
team/mjordan/AST_17288/1.8/channels/chan_dahdi.c
team/mjordan/AST_17288/1.8/channels/chan_h323.c
team/mjordan/AST_17288/1.8/channels/chan_mgcp.c
team/mjordan/AST_17288/1.8/channels/chan_misdn.c
team/mjordan/AST_17288/1.8/channels/chan_oss.c
team/mjordan/AST_17288/1.8/channels/chan_sip.c
team/mjordan/AST_17288/1.8/channels/chan_skinny.c
team/mjordan/AST_17288/1.8/channels/chan_unistim.c
team/mjordan/AST_17288/1.8/channels/chan_usbradio.c
team/mjordan/AST_17288/1.8/channels/sig_pri.c
team/mjordan/AST_17288/1.8/channels/sig_ss7.c
team/mjordan/AST_17288/1.8/funcs/func_frame_trace.c
team/mjordan/AST_17288/1.8/include/asterisk/frame.h
team/mjordan/AST_17288/1.8/main/channel.c
team/mjordan/AST_17288/1.8/main/dial.c
team/mjordan/AST_17288/1.8/main/features.c
team/mjordan/AST_17288/1.8/main/pbx.c
Modified: team/mjordan/AST_17288/1.8/apps/app_dial.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/apps/app_dial.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/apps/app_dial.c (original)
+++ team/mjordan/AST_17288/1.8/apps/app_dial.c Tue Sep 6 12:28:32 2011
@@ -2423,14 +2423,6 @@
} else { /* Nobody answered, next please? */
res = 0;
}
-
- /* SIP, in particular, sends back this error code to indicate an
- * overlap dialled number needs more digits. */
- if (chan->hangupcause == AST_CAUSE_INVALID_NUMBER_FORMAT) {
- res = AST_PBX_INCOMPLETE;
- }
-
- /* almost done, although the 'else' block is 400 lines */
} else {
const char *number;
Modified: team/mjordan/AST_17288/1.8/channels/chan_alsa.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/chan_alsa.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/chan_alsa.c (original)
+++ team/mjordan/AST_17288/1.8/channels/chan_alsa.c Tue Sep 6 12:28:32 2011
@@ -537,6 +537,7 @@
case AST_CONTROL_BUSY:
case AST_CONTROL_CONGESTION:
case AST_CONTROL_RINGING:
+ case AST_CONTROL_INCOMPLETE:
case -1:
res = -1; /* Ask for inband indications */
break;
Modified: team/mjordan/AST_17288/1.8/channels/chan_console.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/chan_console.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/chan_console.c (original)
+++ team/mjordan/AST_17288/1.8/channels/chan_console.c Tue Sep 6 12:28:32 2011
@@ -610,6 +610,7 @@
case AST_CONTROL_BUSY:
case AST_CONTROL_CONGESTION:
case AST_CONTROL_RINGING:
+ case AST_CONTROL_INCOMPLETE:
case -1:
res = -1; /* Ask for inband indications */
break;
Modified: team/mjordan/AST_17288/1.8/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/chan_dahdi.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/chan_dahdi.c (original)
+++ team/mjordan/AST_17288/1.8/channels/chan_dahdi.c Tue Sep 6 12:28:32 2011
@@ -9314,6 +9314,11 @@
(p->sig != SIG_FXSGS)))
ast_setstate(chan, AST_STATE_RINGING);
}
+ break;
+ case AST_CONTROL_INCOMPLETE:
+ ast_debug(1,"Received AST_CONTROL_INCOMPLETE on %s\n",chan->name);
+ /* act as a progress or proceeding, allowing the caller to enter additional numbers */
+ res = 0;
break;
case AST_CONTROL_PROCEEDING:
ast_debug(1,"Received AST_CONTROL_PROCEEDING on %s\n",chan->name);
Modified: team/mjordan/AST_17288/1.8/channels/chan_h323.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/chan_h323.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/chan_h323.c (original)
+++ team/mjordan/AST_17288/1.8/channels/chan_h323.c Tue Sep 6 12:28:32 2011
@@ -893,6 +893,16 @@
res = 0;
}
break;
+ case AST_CONTROL_INCOMPLETE:
+ /* While h323 does support overlapped calling, that feature is not implemented in
+ * Asterisk for h323 at this time. If we receive an Incomplete result from whatever
+ * we are dialing, inform the h323 gateway that we have been hung up on.
+ */
+ if (c->_state != AST_STATE_UP) {
+ h323_answering_call(token, 1);
+ ast_softhangup_nolock(c, AST_SOFTHANGUP_DEV);
+ res = 0;
+ }
case AST_CONTROL_BUSY:
if (c->_state != AST_STATE_UP) {
h323_answering_call(token, 1);
Modified: team/mjordan/AST_17288/1.8/channels/chan_mgcp.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/chan_mgcp.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/chan_mgcp.c (original)
+++ team/mjordan/AST_17288/1.8/channels/chan_mgcp.c Tue Sep 6 12:28:32 2011
@@ -1457,6 +1457,10 @@
case AST_CONTROL_BUSY:
transmit_notify_request(sub, "L/bz");
break;
+ /* We do not currently support resetting of the Interdigit Timer, so treat
+ * Incomplete control frames as a congestion response
+ */
+ case AST_CONTROL_INCOMPLETE:
case AST_CONTROL_CONGESTION:
transmit_notify_request(sub, sub->parent->ncs ? "L/cg" : "G/cg");
break;
Modified: team/mjordan/AST_17288/1.8/channels/chan_misdn.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/chan_misdn.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/chan_misdn.c (original)
+++ team/mjordan/AST_17288/1.8/channels/chan_misdn.c Tue Sep 6 12:28:32 2011
@@ -6983,6 +6983,19 @@
chan_misdn_log(1, p->bc->port, " --> * IND :\tproceeding pid:%d\n", p->bc->pid);
misdn_lib_send_event(p->bc, EVENT_PROCEEDING);
break;
+ case AST_CONTROL_INCOMPLETE:
+ chan_misdn_log(1, p->bc->port, " --> *\tincomplete pid:%d\n", p->bc->pid);
+ if (!p->overlap_dial) {
+ /* Overlapped dialing not supported - send hangup */
+ p->bc->out_cause = AST_CAUSE_INVALID_NUMBER_FORMAT;
+ start_bc_tones(p);
+ misdn_lib_send_event(p->bc, EVENT_DISCONNECT);
+
+ if (p->bc->nt) {
+ hanguptone_indicate(p);
+ }
+ }
+ break;
case AST_CONTROL_CONGESTION:
chan_misdn_log(1, p->bc->port, " --> * IND :\tcongestion pid:%d\n", p->bc->pid);
Modified: team/mjordan/AST_17288/1.8/channels/chan_oss.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/chan_oss.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/chan_oss.c (original)
+++ team/mjordan/AST_17288/1.8/channels/chan_oss.c Tue Sep 6 12:28:32 2011
@@ -755,6 +755,7 @@
int res = 0;
switch (cond) {
+ case AST_CONTROL_INCOMPLETE:
case AST_CONTROL_BUSY:
case AST_CONTROL_CONGESTION:
case AST_CONTROL_RINGING:
Modified: team/mjordan/AST_17288/1.8/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/chan_sip.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/chan_sip.c (original)
+++ team/mjordan/AST_17288/1.8/channels/chan_sip.c Tue Sep 6 12:28:32 2011
@@ -6677,6 +6677,16 @@
}
res = -1;
break;
+ case AST_CONTROL_INCOMPLETE:
+ if (ast->_state != AST_STATE_UP) {
+ transmit_response_reliable(p, "484 Address Incomplete", &p->initreq);
+ p->invitestate = INV_COMPLETED;
+ sip_alreadygone(p);
+ ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
+ break;
+ }
+ res = -1;
+ break;
case AST_CONTROL_PROCEEDING:
if ((ast->_state != AST_STATE_UP) &&
!ast_test_flag(&p->flags[0], SIP_PROGRESS_SENT) &&
Modified: team/mjordan/AST_17288/1.8/channels/chan_skinny.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/chan_skinny.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/chan_skinny.c (original)
+++ team/mjordan/AST_17288/1.8/channels/chan_skinny.c Tue Sep 6 12:28:32 2011
@@ -4290,6 +4290,8 @@
return "Connected Line";
case AST_CONTROL_REDIRECTING:
return "Redirecting";
+ case AST_CONTROL_INCOMPLETE:
+ return "Incomplete";
case -1:
return "Stop tone";
default:
@@ -4436,6 +4438,20 @@
}
}
return -1; /* Tell asterisk to provide inband signalling */
+ case AST_CONTROL_INCOMPLETE:
+ /* Support for incomplete not supported for chan_skinny; treat as congestion */
+ if (ast->_state != AST_STATE_UP) {
+ if (!d->earlyrtp) {
+ transmit_start_tone(d, SKINNY_REORDER, l->instance, sub->callid);
+ }
+ transmit_callstate(d, sub->parent->instance, sub->callid, SKINNY_CONGESTION);
+ sub->alreadygone = 1;
+ ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
+ if (!d->earlyrtp) {
+ break;
+ }
+ }
+ return -1;
case AST_CONTROL_PROGRESS:
if ((ast->_state != AST_STATE_UP) && !sub->progress && !sub->outgoing) {
if (!d->earlyrtp) {
Modified: team/mjordan/AST_17288/1.8/channels/chan_unistim.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/chan_unistim.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/chan_unistim.c (original)
+++ team/mjordan/AST_17288/1.8/channels/chan_unistim.c Tue Sep 6 12:28:32 2011
@@ -4178,6 +4178,18 @@
sub->alreadygone = 1;
send_text(TEXT_LINE2, TEXT_NORMAL, s, "Busy");
in_band_indication(ast, l->parent->tz, "busy");
+ s->device->missed_call = -1;
+ break;
+ }
+ return -1;
+ case AST_CONTROL_INCOMPLETE:
+ /* Overlapped dialing is not currently supported for UNIStim. Treat an indication
+ * of incomplete as congestion
+ */
+ if (ast->_state != AST_STATE_UP) {
+ sub->alreadygone = 1;
+ send_text(TEXT_LINE2, TEXT_NORMAL, s, "Congestion");
+ in_band_indication(ast, l->parent->tz, "congestion");
s->device->missed_call = -1;
break;
}
Modified: team/mjordan/AST_17288/1.8/channels/chan_usbradio.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/chan_usbradio.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/chan_usbradio.c (original)
+++ team/mjordan/AST_17288/1.8/channels/chan_usbradio.c Tue Sep 6 12:28:32 2011
@@ -2117,6 +2117,7 @@
case AST_CONTROL_BUSY:
case AST_CONTROL_CONGESTION:
case AST_CONTROL_RINGING:
+ case AST_CONTROL_INCOMPLETE:
res = cond;
break;
Modified: team/mjordan/AST_17288/1.8/channels/sig_pri.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/sig_pri.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/sig_pri.c (original)
+++ team/mjordan/AST_17288/1.8/channels/sig_pri.c Tue Sep 6 12:28:32 2011
@@ -6922,6 +6922,37 @@
/* don't continue in ast_indicate */
res = 0;
break;
+ case AST_CONTROL_INCOMPLETE:
+ /*
+ * If we do not support overlap dialing and are past the point where we could receive
+ * additional digits, treat as a hangup
+ */
+ if (!((p->pri->overlapdial & DAHDI_OVERLAPDIAL_INCOMING) && (p->call_level < SIG_PRI_CALL_LEVEL_OVERLAP))) {
+ if (p->priindication_oob || p->no_b_channel) {
+ chan->hangupcause = AST_CAUSE_INVALID_NUMBER_FORMAT;
+ chan->_softhangup |= AST_SOFTHANGUP_DEV;
+ res = 0;
+ break;
+ }
+ res = sig_pri_play_tone(p, SIG_PRI_TONE_CONGESTION);
+ if (p->call_level < SIG_PRI_CALL_LEVEL_ALERTING && !p->outgoing) {
+ chan->hangupcause = AST_CAUSE_INVALID_NUMBER_FORMAT;
+ p->progress = 1; /* No need to send plain PROGRESS after this. */
+ if (p->pri && p->pri->pri) {
+ if (!pri_grab(p, p->pri)) {
+#ifdef HAVE_PRI_PROG_W_CAUSE
+ pri_progress_with_cause(p->pri->pri, p->call, PVT_TO_CHANNEL(p), 1, chan->hangupcause);
+#else
+ pri_progress(p->pri->pri,p->call, PVT_TO_CHANNEL(p), 1);
+#endif
+ pri_rel(p->pri);
+ } else {
+ ast_log(LOG_WARNING, "Unable to grab PRI on span %d\n", p->pri->span);
+ }
+ }
+ }
+ break;
+ }
case AST_CONTROL_CONGESTION:
if (p->priindication_oob || p->no_b_channel) {
/* There are many cause codes that generate an AST_CONTROL_CONGESTION. */
Modified: team/mjordan/AST_17288/1.8/channels/sig_ss7.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/channels/sig_ss7.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/channels/sig_ss7.c (original)
+++ team/mjordan/AST_17288/1.8/channels/sig_ss7.c Tue Sep 6 12:28:32 2011
@@ -1559,6 +1559,9 @@
/* don't continue in ast_indicate */
res = 0;
break;
+ case AST_CONTROL_INCOMPLETE:
+ chan->hangupcause = AST_CAUSE_INVALID_NUMBER_FORMAT;
+ break;
case AST_CONTROL_CONGESTION:
chan->hangupcause = AST_CAUSE_CONGESTION;
break;
Modified: team/mjordan/AST_17288/1.8/funcs/func_frame_trace.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/funcs/func_frame_trace.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/funcs/func_frame_trace.c (original)
+++ team/mjordan/AST_17288/1.8/funcs/func_frame_trace.c Tue Sep 6 12:28:32 2011
@@ -312,6 +312,9 @@
case AST_CONTROL_AOC:
ast_verbose("SubClass: AOC\n");
break;
+ case AST_CONTROL_INCOMPLETE:
+ ast_verbose("SubClass: INCOMPLETE\n");
+ break;
}
if (frame->subclass.integer == -1) {
ast_verbose("SubClass: %d\n", frame->subclass.integer);
Modified: team/mjordan/AST_17288/1.8/include/asterisk/frame.h
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/include/asterisk/frame.h?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/include/asterisk/frame.h (original)
+++ team/mjordan/AST_17288/1.8/include/asterisk/frame.h Tue Sep 6 12:28:32 2011
@@ -334,6 +334,7 @@
AST_CONTROL_READ_ACTION = 27, /*!< Tell ast_read to take a specific action */
AST_CONTROL_AOC = 28, /*!< Advice of Charge with encoded generic AOC payload */
AST_CONTROL_END_OF_Q = 29, /*!< Indicate that this position was the end of the channel queue for a softhangup. */
+ AST_CONTROL_INCOMPLETE = 30, /*!< Indication that the extension dialed is incomplete */
};
enum ast_frame_read_action {
Modified: team/mjordan/AST_17288/1.8/main/channel.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/main/channel.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/main/channel.c (original)
+++ team/mjordan/AST_17288/1.8/main/channel.c Tue Sep 6 12:28:32 2011
@@ -4291,6 +4291,7 @@
case AST_CONTROL_READ_ACTION:
case AST_CONTROL_AOC:
case AST_CONTROL_END_OF_Q:
+ case AST_CONTROL_INCOMPLETE:
break;
case AST_CONTROL_CONGESTION:
@@ -4476,6 +4477,7 @@
case AST_CONTROL_READ_ACTION:
case AST_CONTROL_AOC:
case AST_CONTROL_END_OF_Q:
+ case AST_CONTROL_INCOMPLETE:
/* Nothing left to do for these. */
res = 0;
break;
@@ -5369,6 +5371,7 @@
case AST_CONTROL_CONNECTED_LINE:
case AST_CONTROL_REDIRECTING:
case AST_CONTROL_CC:
+ case AST_CONTROL_INCOMPLETE:
case -1: /* Ignore -- just stopping indications */
break;
Modified: team/mjordan/AST_17288/1.8/main/dial.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/main/dial.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/main/dial.c (original)
+++ team/mjordan/AST_17288/1.8/main/dial.c Tue Sep 6 12:28:32 2011
@@ -397,6 +397,10 @@
ast_verb(3, "%s is circuit-busy\n", channel->owner->name);
ast_hangup(channel->owner);
channel->owner = NULL;
+ break;
+ case AST_CONTROL_INCOMPLETE:
+ ast_verb(3, "%s dialed Incomplete extension %s\n", channel->owner->name, channel->owner->exten);
+ ast_indicate(chan, AST_CONTROL_INCOMPLETE);
break;
case AST_CONTROL_RINGING:
ast_verb(3, "%s is ringing\n", channel->owner->name);
Modified: team/mjordan/AST_17288/1.8/main/features.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/main/features.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/main/features.c (original)
+++ team/mjordan/AST_17288/1.8/main/features.c Tue Sep 6 12:28:32 2011
@@ -2391,6 +2391,7 @@
case AST_CONTROL_UNHOLD:/* Caller requested cancel or party C answer timeout. */
case AST_CONTROL_BUSY:
case AST_CONTROL_CONGESTION:
+ case AST_CONTROL_INCOMPLETE:
if (ast_stream_and_wait(transferer, xfersound, "")) {
ast_log(LOG_WARNING, "Failed to play transfer sound!\n");
}
@@ -3214,7 +3215,7 @@
*
* \note
* outstate can be:
- * 0, AST_CONTROL_BUSY, AST_CONTROL_CONGESTION,
+ * 0, AST_CONTROL_BUSY, AST_CONTROL_CONGESTION, AST_CONTROL_INCOMPLETE,
* AST_CONTROL_ANSWER, or AST_CONTROL_UNHOLD. If
* AST_CONTROL_UNHOLD then the caller channel cancelled the
* transfer or the dialed channel did not answer before the
@@ -3403,6 +3404,12 @@
state = f->subclass.integer;
ast_verb(3, "%s is busy\n", chan->name);
ast_indicate(caller, AST_CONTROL_BUSY);
+ ast_frfree(f);
+ break;
+ } else if (f->subclass.integer == AST_CONTROL_INCOMPLETE) {
+ state = f->subclass.integer;
+ ast_verb(3, "%s dialed incomplete extension %s\n", chan->name, chan->exten);
+ ast_indicate(caller, AST_CONTROL_INCOMPLETE);
ast_frfree(f);
break;
} else if (f->subclass.integer == AST_CONTROL_CONGESTION) {
Modified: team/mjordan/AST_17288/1.8/main/pbx.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/AST_17288/1.8/main/pbx.c?view=diff&rev=334566&r1=334565&r2=334566
==============================================================================
--- team/mjordan/AST_17288/1.8/main/pbx.c (original)
+++ team/mjordan/AST_17288/1.8/main/pbx.c Tue Sep 6 12:28:32 2011
@@ -9217,6 +9217,8 @@
__ast_answer(chan, 0, 1);
}
+ ast_indicate(chan, AST_CONTROL_INCOMPLETE);
+
return AST_PBX_INCOMPLETE;
}
More information about the svn-commits
mailing list