Pass a MCID request to the bridged channel.

Pass a MCID request to the bridged channel so the bridged channel can send
it to the network.

The ability to send the MCID request on an ISDN span is enabled with the
new chan_dahdi.conf mcid_send option.

JIRA SWP-2845
JIRA ABE-2736


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@306755 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Richard Mudgett 2011-02-07 23:33:44 +00:00
parent 1277a80a5b
commit 49feb747ba
9 changed files with 40 additions and 1 deletions

View File

@ -52,6 +52,7 @@ libpri channel driver (chan_dahdi) DAHDI changes
* Added display_send and display_receive options to control how the display ie
is handled. To send display text from the dialplan use the SendText()
application when the option is enabled.
* Added mcid_send option to allow sending a MCID request on a span.
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 1.6.2 to Asterisk 1.8 ----------------

View File

@ -12353,6 +12353,9 @@ static struct dahdi_pvt *mkintf(int channel, const struct dahdi_chan_conf *conf,
pris[span].pri.display_flags_send = conf->pri.pri.display_flags_send;
pris[span].pri.display_flags_receive = conf->pri.pri.display_flags_receive;
#endif /* defined(HAVE_PRI_DISPLAY_TEXT) */
#if defined(HAVE_PRI_MCID)
pris[span].pri.mcid_send = conf->pri.pri.mcid_send;
#endif /* defined(HAVE_PRI_MCID) */
for (x = 0; x < PRI_MAX_TIMERS; x++) {
pris[span].pri.pritimers[x] = conf->pri.pri.pritimers[x];
@ -17307,6 +17310,10 @@ static int process_dahdi(struct dahdi_chan_conf *confp, const char *cat, struct
} else if (!strcasecmp(v->name, "display_receive")) {
confp->pri.pri.display_flags_receive = dahdi_display_text_option(v->value);
#endif /* defined(HAVE_PRI_DISPLAY_TEXT) */
#if defined(HAVE_PRI_MCID)
} else if (!strcasecmp(v->name, "mcid_send")) {
confp->pri.pri.mcid_send = ast_true(v->value);
#endif /* defined(HAVE_PRI_MCID) */
#endif /* HAVE_PRI */
#if defined(HAVE_SS7)
} else if (!strcasecmp(v->name, "ss7type")) {

View File

@ -1917,7 +1917,12 @@ static void sig_pri_mcid_event(struct sig_pri_span *pri, const struct pri_subcmd
}
if (owner) {
/* The owner channel is present. */
/*
* The owner channel is present.
* Pass the event to the peer as well.
*/
ast_queue_control(owner, AST_CONTROL_MCID);
ast_str_append(&msg, 0, "Channel: %s\r\n", owner->name);
ast_str_append(&msg, 0, "UniqueID: %s\r\n", owner->uniqueid);
@ -7687,6 +7692,15 @@ int sig_pri_indicate(struct sig_pri_chan *p, struct ast_channel *chan, int condi
}
#endif /* defined(HAVE_PRI_AOC_EVENTS) */
break;
#if defined(HAVE_PRI_MCID)
case AST_CONTROL_MCID:
if (p->pri && p->pri->pri && p->pri->mcid_send) {
pri_grab(p, p->pri);
pri_mcid_req_send(p->pri->pri, p->call);
pri_rel(p->pri);
}
break;
#endif /* defined(HAVE_PRI_MCID) */
}
return res;

View File

@ -402,6 +402,10 @@ struct sig_pri_span {
* appended to the initial_user_tag[].
*/
unsigned int append_msn_to_user_tag:1;
#if defined(HAVE_PRI_CALL_WAITING)
/*! \brief TRUE if allow sending MCID request on this span. */
unsigned int mcid_send:1;
#endif /* defined(HAVE_PRI_CALL_WAITING) */
int dialplan; /*!< Dialing plan */
int localdialplan; /*!< Local dialing plan */
int cpndialplan; /*!< Connected party dialing plan */

View File

@ -231,6 +231,11 @@
;display_send=
;display_receive=
; Allow sending an ISDN MCID request on this span.
; Default disabled
;
;mcid_send=yes
; Allow inband audio (progress) when a call is DISCONNECTed by the far end of a PRI
;
;inbanddisconnect=yes

View File

@ -308,6 +308,9 @@ static void print_frame(struct ast_frame *frame)
case AST_CONTROL_AOC:
ast_verbose("SubClass: AOC\n");
break;
case AST_CONTROL_MCID:
ast_verbose("SubClass: MCID\n");
break;
}
if (frame->subclass.integer == -1) {
ast_verbose("SubClass: %d\n", frame->subclass.integer);

View File

@ -263,6 +263,7 @@ enum ast_control_frame_type {
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_MCID = 30, /*!< Indicate that the caller is being malicious. */
};
enum ast_frame_read_action {

View File

@ -4229,6 +4229,7 @@ static int attribute_const is_visible_indication(enum ast_control_frame_type con
case AST_CONTROL_READ_ACTION:
case AST_CONTROL_AOC:
case AST_CONTROL_END_OF_Q:
case AST_CONTROL_MCID:
break;
case AST_CONTROL_CONGESTION:
@ -4412,6 +4413,7 @@ int ast_indicate_data(struct ast_channel *chan, int _condition,
case AST_CONTROL_READ_ACTION:
case AST_CONTROL_AOC:
case AST_CONTROL_END_OF_Q:
case AST_CONTROL_MCID:
/* Nothing left to do for these. */
res = 0;
break;
@ -7013,6 +7015,7 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct
switch (f->subclass.integer) {
case AST_CONTROL_AOC:
case AST_CONTROL_MCID:
ast_indicate_data(other, f->subclass.integer, f->data.ptr, f->datalen);
break;
case AST_CONTROL_REDIRECTING:

View File

@ -3662,6 +3662,7 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
switch (f->subclass.integer) {
case AST_CONTROL_RINGING:
case AST_CONTROL_FLASH:
case AST_CONTROL_MCID:
case -1:
ast_indicate(other, f->subclass.integer);
break;