[asterisk-commits] rmudgett: branch 10 r337721 - in /branches/10: ./ channels/sig_pri.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Sep 22 16:37:44 CDT 2011


Author: rmudgett
Date: Thu Sep 22 16:37:41 2011
New Revision: 337721

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=337721
Log:
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
........

Modified:
    branches/10/   (props changed)
    branches/10/channels/sig_pri.c

Propchange: branches/10/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.

Modified: branches/10/channels/sig_pri.c
URL: http://svnview.digium.com/svn/asterisk/branches/10/channels/sig_pri.c?view=diff&rev=337721&r1=337720&r2=337721
==============================================================================
--- branches/10/channels/sig_pri.c (original)
+++ branches/10/channels/sig_pri.c Thu Sep 22 16:37:41 2011
@@ -1544,7 +1544,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 */
@@ -1566,6 +1578,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);
 }
 
 /*!
@@ -1950,7 +1986,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);
@@ -5541,7 +5578,7 @@
 
 		if (e) {
 			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);
 			}
 
@@ -5870,24 +5907,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