Merged revisions 337720 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r337720 | rmudgett | 2011-09-22 16:29:46 -0500 (Thu, 22 Sep 2011) | 18 lines
  
  Made ISDN not add numbering plan prefix strings to empty numbers.
  
  When the Caller-ID is restricted, the expected behavior is for the
  Caller-ID to be blank.  In chan_dahdi, the national prefix is placed onto
  the Caller-ID number even if it is restricted (empty) causing the
  Caller-ID to be the national prefix rather than blank.
  
  This behavior was lost when sig_pri was extracted from chan_dahdi.
  
  * Made not add prefix strings to empty connected line, calling, and ANI
  number strings.
  
  (closes issue ASTERISK-18577)
  Reported by: Kris Shaw
  Patches:
        jira_asterisk_18577_v1.8.patch (license #5621) patch uploaded by rmudgett
  Tested by: Kris Shaw
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@337721 65c4cc65-6c06-0410-ace0-fbb531ad65f3
10-digiumphones
Richard Mudgett 14 years ago
parent cf4d5e585a
commit d95dcd14e3

@ -1544,7 +1544,19 @@ static char *dialplan2str(int dialplan)
return (pri_plan2str(dialplan)); return (pri_plan2str(dialplan));
} }
static void apply_plan_to_number(char *buf, size_t size, const struct sig_pri_span *pri, const char *number, const int plan) /*!
* \internal
* \brief Apply numbering plan prefix to the given number.
*
* \param buf Buffer to put number into.
* \param size Size of given buffer.
* \param pri PRI span control structure.
* \param number Number to apply numbering plan.
* \param plan Numbering plan to apply.
*
* \return Nothing
*/
static void apply_plan_to_number(char *buf, size_t size, const struct sig_pri_span *pri, const char *number, int plan)
{ {
switch (plan) { switch (plan) {
case PRI_INTERNATIONAL_ISDN: /* Q.931 dialplan == 0x11 international dialplan => prepend international prefix digits */ case PRI_INTERNATIONAL_ISDN: /* Q.931 dialplan == 0x11 international dialplan => prepend international prefix digits */
@ -1568,6 +1580,30 @@ static void apply_plan_to_number(char *buf, size_t size, const struct sig_pri_sp
} }
} }
/*!
* \internal
* \brief Apply numbering plan prefix to the given number if the number exists.
*
* \param buf Buffer to put number into.
* \param size Size of given buffer.
* \param pri PRI span control structure.
* \param number Number to apply numbering plan.
* \param plan Numbering plan to apply.
*
* \return Nothing
*/
static void apply_plan_to_existing_number(char *buf, size_t size, const struct sig_pri_span *pri, const char *number, int plan)
{
/* Make sure a number exists so the prefix isn't placed on an empty string. */
if (ast_strlen_zero(number)) {
if (size) {
*buf = '\0';
}
return;
}
apply_plan_to_number(buf, size, pri, number, plan);
}
/*! /*!
* \internal * \internal
* \brief Restart the next channel we think is idle on the span. * \brief Restart the next channel we think is idle on the span.
@ -1950,7 +1986,8 @@ static void sig_pri_party_number_convert(struct ast_party_number *ast_number, co
{ {
char number[AST_MAX_EXTENSION]; char number[AST_MAX_EXTENSION];
apply_plan_to_number(number, sizeof(number), pri, pri_number->str, pri_number->plan); apply_plan_to_existing_number(number, sizeof(number), pri, pri_number->str,
pri_number->plan);
ast_number->str = ast_strdup(number); ast_number->str = ast_strdup(number);
ast_number->plan = pri_number->plan; ast_number->plan = pri_number->plan;
ast_number->presentation = pri_to_ast_presentation(pri_number->presentation); ast_number->presentation = pri_to_ast_presentation(pri_number->presentation);
@ -5541,7 +5578,7 @@ static void *pri_dchannel(void *vpri)
if (e) { if (e) {
if (pri->debug) { if (pri->debug) {
ast_verbose("Span: %d Processing event: %s(%d)\n", ast_verbose("Span %d: Processing event %s(%d)\n",
pri->span, pri_event2str(e->e), e->e); pri->span, pri_event2str(e->e), e->e);
} }
@ -5870,24 +5907,23 @@ static void *pri_dchannel(void *vpri)
pri->pvts[chanpos]->call = e->ring.call; pri->pvts[chanpos]->call = e->ring.call;
/* Use plancallingnum as a scratch buffer since it is initialized next. */ /* Use plancallingnum as a scratch buffer since it is initialized next. */
apply_plan_to_number(plancallingnum, sizeof(plancallingnum), pri, apply_plan_to_existing_number(plancallingnum, sizeof(plancallingnum), pri,
e->ring.redirectingnum, e->ring.callingplanrdnis); e->ring.redirectingnum, e->ring.callingplanrdnis);
sig_pri_set_rdnis(pri->pvts[chanpos], plancallingnum); sig_pri_set_rdnis(pri->pvts[chanpos], plancallingnum);
/* Setup caller-id info */ /* Setup caller-id info */
apply_plan_to_number(plancallingnum, sizeof(plancallingnum), pri, e->ring.callingnum, e->ring.callingplan); apply_plan_to_existing_number(plancallingnum, sizeof(plancallingnum), pri,
e->ring.callingnum, e->ring.callingplan);
pri->pvts[chanpos]->cid_ani2 = 0; pri->pvts[chanpos]->cid_ani2 = 0;
if (pri->pvts[chanpos]->use_callerid) { if (pri->pvts[chanpos]->use_callerid) {
ast_shrink_phone_number(plancallingnum); ast_shrink_phone_number(plancallingnum);
ast_copy_string(pri->pvts[chanpos]->cid_num, plancallingnum, sizeof(pri->pvts[chanpos]->cid_num)); ast_copy_string(pri->pvts[chanpos]->cid_num, plancallingnum, sizeof(pri->pvts[chanpos]->cid_num));
#ifdef PRI_ANI #ifdef PRI_ANI
if (!ast_strlen_zero(e->ring.callingani)) { apply_plan_to_existing_number(plancallingani, sizeof(plancallingani),
apply_plan_to_number(plancallingani, sizeof(plancallingani), pri, e->ring.callingani, e->ring.callingplanani); pri, e->ring.callingani, e->ring.callingplanani);
ast_shrink_phone_number(plancallingani); ast_shrink_phone_number(plancallingani);
ast_copy_string(pri->pvts[chanpos]->cid_ani, plancallingani, sizeof(pri->pvts[chanpos]->cid_ani)); ast_copy_string(pri->pvts[chanpos]->cid_ani, plancallingani,
} else { sizeof(pri->pvts[chanpos]->cid_ani));
pri->pvts[chanpos]->cid_ani[0] = '\0';
}
#endif #endif
pri->pvts[chanpos]->cid_subaddr[0] = '\0'; pri->pvts[chanpos]->cid_subaddr[0] = '\0';
#if defined(HAVE_PRI_SUBADDR) #if defined(HAVE_PRI_SUBADDR)

Loading…
Cancel
Save