[asterisk-commits] rmudgett: branch 1.8 r337720 - /branches/1.8/channels/sig_pri.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Sep 22 16:29:49 CDT 2011
Author: rmudgett
Date: Thu Sep 22 16:29:46 2011
New Revision: 337720
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=337720
Log:
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
Modified:
branches/1.8/channels/sig_pri.c
Modified: branches/1.8/channels/sig_pri.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/channels/sig_pri.c?view=diff&rev=337720&r1=337719&r2=337720
==============================================================================
--- branches/1.8/channels/sig_pri.c (original)
+++ branches/1.8/channels/sig_pri.c Thu Sep 22 16:29:46 2011
@@ -1541,7 +1541,19 @@
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) {
case PRI_INTERNATIONAL_ISDN: /* Q.931 dialplan == 0x11 international dialplan => prepend international prefix digits */
@@ -1563,6 +1575,30 @@
snprintf(buf, size, "%s", number);
break;
}
+}
+
+/*!
+ * \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);
}
/*!
@@ -1947,7 +1983,8 @@
{
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->plan = pri_number->plan;
ast_number->presentation = pri_to_ast_presentation(pri_number->presentation);
@@ -4690,7 +4727,7 @@
if (e) {
if (pri->debug) {
- ast_verbose("Span: %d Processing event: %s\n",
+ ast_verbose("Span %d: Processing event %s\n",
pri->span, pri_event2str(e->e));
}
@@ -5020,24 +5057,23 @@
pri->pvts[chanpos]->call = e->ring.call;
/* 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);
sig_pri_set_rdnis(pri->pvts[chanpos], plancallingnum);
/* 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;
if (pri->pvts[chanpos]->use_callerid) {
ast_shrink_phone_number(plancallingnum);
ast_copy_string(pri->pvts[chanpos]->cid_num, plancallingnum, sizeof(pri->pvts[chanpos]->cid_num));
#ifdef PRI_ANI
- if (!ast_strlen_zero(e->ring.callingani)) {
- apply_plan_to_number(plancallingani, sizeof(plancallingani), pri, e->ring.callingani, e->ring.callingplanani);
- ast_shrink_phone_number(plancallingani);
- ast_copy_string(pri->pvts[chanpos]->cid_ani, plancallingani, sizeof(pri->pvts[chanpos]->cid_ani));
- } else {
- pri->pvts[chanpos]->cid_ani[0] = '\0';
- }
+ apply_plan_to_existing_number(plancallingani, sizeof(plancallingani),
+ pri, e->ring.callingani, e->ring.callingplanani);
+ ast_shrink_phone_number(plancallingani);
+ ast_copy_string(pri->pvts[chanpos]->cid_ani, plancallingani,
+ sizeof(pri->pvts[chanpos]->cid_ani));
#endif
pri->pvts[chanpos]->cid_subaddr[0] = '\0';
#if defined(HAVE_PRI_SUBADDR)
More information about the asterisk-commits
mailing list