diff options
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_dahdi.c | 7 | ||||
-rw-r--r-- | channels/sig_pri.c | 16 | ||||
-rw-r--r-- | channels/sig_pri.h | 4 |
3 files changed, 26 insertions, 1 deletions
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index 80416e5a3..888a8f27f 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -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")) { diff --git a/channels/sig_pri.c b/channels/sig_pri.c index ff700c087..58f6c82b2 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -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; diff --git a/channels/sig_pri.h b/channels/sig_pri.h index bbf517d3d..1c17eee53 100644 --- a/channels/sig_pri.h +++ b/channels/sig_pri.h @@ -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 */ |