[asterisk-commits] seanbright: branch seanbright/issue13827 r153825 - in /team/seanbright/issue1...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Nov 3 07:05:35 CST 2008


Author: seanbright
Date: Mon Nov  3 07:05:34 2008
New Revision: 153825

URL: http://svn.digium.com/view/asterisk?view=rev&rev=153825
Log:
Import current work-in-progress.

Modified:
    team/seanbright/issue13827/channels/chan_sip.c
    team/seanbright/issue13827/configs/sip.conf.sample

Modified: team/seanbright/issue13827/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/seanbright/issue13827/channels/chan_sip.c?view=diff&rev=153825&r1=153824&r2=153825
==============================================================================
--- team/seanbright/issue13827/channels/chan_sip.c (original)
+++ team/seanbright/issue13827/channels/chan_sip.c Mon Nov  3 07:05:34 2008
@@ -961,6 +961,7 @@
 #define DEFAULT_ALLOW_EXT_DOM	TRUE		/*!< Allow external domains */
 #define DEFAULT_REALM		"asterisk"	/*!< Realm for HTTP digest authentication */
 #define DEFAULT_NOTIFYRINGING	TRUE		/*!< Notify devicestate system on ringing state */
+#define DEFAULT_NOTIFYCID		FALSE	/*!< Include CID with ringing notifications */
 #define DEFAULT_PEDANTIC	FALSE		/*!< Avoid following SIP standards for dialog matching */
 #define DEFAULT_AUTOCREATEPEER	FALSE		/*!< Don't create peers automagically */
 #define	DEFAULT_MATCHEXTERNIPLOCALLY FALSE	/*!< Match extern IP locally default setting */
@@ -1030,6 +1031,7 @@
 
 static int global_notifyringing;	/*!< Send notifications on ringing */
 static int global_notifyhold;		/*!< Send notifications on hold */
+static int global_notifycid;        /*!< Send CID with ringing notifications */
 static int global_match_auth_username;		/*!< Match auth username if available instead of From: Default off. */
 
 static int global_relaxdtmf;		/*!< Relax DTMF */
@@ -10026,23 +10028,42 @@
 		ast_str_append(&tmp, 0, "<?xml version=\"1.0\"?>\n");
 		ast_str_append(&tmp, 0, "<dialog-info xmlns=\"urn:ietf:params:xml:ns:dialog-info\" version=\"%d\" state=\"%s\" entity=\"%s\">\n", p->dialogver++, full ? "full" : "partial", mto);
 		if ((state & AST_EXTENSION_RINGING) && global_notifyringing) {
+			char *local_display = (char *) p->exten, *local_target = mto;
+
+			/* There are some limitations to how this works.  The primary one is that the
+			   callee must be dialing the same extension that is being monitored.  Simply dialing
+			   the hint'd device is not sufficient. */
+			if (global_notifycid) {
+				struct ast_channel *caller = NULL;
+
+				while ((caller = ast_channel_walk_locked(caller))) {
+					if (caller->pbx &&
+						(!strcasecmp(caller->macroexten, p->exten) || !strcasecmp(caller->exten, p->exten)) &&
+						!strcasecmp(caller->context, p->context)) {
+						local_display = ast_strdupa(caller->cid.cid_name);
+						local_target = ast_strdupa(caller->cid.cid_num);
+						ast_channel_unlock(caller);
+						break;
+					}
+					ast_channel_unlock(caller);
+				}				
+			}
+
 			/* We create a fake call-id which the phone will send back in an INVITE
 			   Replaces header which we can grab and do some magic with. */
 			ast_str_append(&tmp, 0, 
 					"<dialog id=\"%s\" call-id=\"pickup-%s\" direction=\"recipient\">\n"
 					"<remote>\n"
-					/* Note that the identity and target elements for the local participant are currently
-					   (and may forever be) incorrect since we have no reliable way to get at that information 
-					   at the moment.  Luckily the phone seems to still live happily without it being correct */
-					"<identity>%s</identity>\n"
+					/* See the limitations of this above.  Luckily the phone seems to still be
+					   happy when these values are not correct. */
+					"<identity display=\"%s\">%s</identity>\n"
 					"<target uri=\"%s\"/>\n"
 					"</remote>\n"
 					"<local>\n"
 					"<identity>%s</identity>\n"
 					"<target uri=\"%s\"/>\n"
 					"</local>\n",
-					p->exten, p->callid,
-					mto, mto, mto, mto);
+					p->exten, p->callid, local_display, local_target, local_target, mto, mto);
 		} else {
 			ast_str_append(&tmp, 0, "<dialog id=\"%s\">\n", p->exten);
 		}
@@ -14451,6 +14472,9 @@
 	ast_cli(a->fd, "  Outbound reg. timeout:  %d secs\n", global_reg_timeout);
 	ast_cli(a->fd, "  Outbound reg. attempts: %d\n", global_regattempts_max);
 	ast_cli(a->fd, "  Notify ringing state:   %s\n", cli_yesno(global_notifyringing));
+	if (global_notifyringing) {
+		ast_cli(a->fd, "    Include CID:          %s\n", cli_yesno(global_notifycid));
+	}
 	ast_cli(a->fd, "  Notify hold state:      %s\n", cli_yesno(global_notifyhold));
 	ast_cli(a->fd, "  SIP Transfer mode:      %s\n", transfermode2str(global_allowtransfer));
 	ast_cli(a->fd, "  Max Call Bitrate:       %d kbps\n", default_maxcallbitrate);
@@ -22384,6 +22408,7 @@
 	global_regcontext[0] = '\0';
 	sip_cfg.regextenonqualify = DEFAULT_REGEXTENONQUALIFY;
 	global_notifyringing = DEFAULT_NOTIFYRINGING;
+	global_notifycid = DEFAULT_NOTIFYCID;
 	global_notifyhold = FALSE;		/*!< Keep track of hold status for a peer */
 	sip_cfg.directrtpsetup = FALSE;		/* Experimental feature, disabled by default */
 	sip_cfg.alwaysauthreject = DEFAULT_ALWAYSAUTHREJECT;
@@ -22599,6 +22624,8 @@
 			global_notifyringing = ast_true(v->value);
 		} else if (!strcasecmp(v->name, "notifyhold")) {
 			global_notifyhold = ast_true(v->value);
+		} else if (!strcasecmp(v->name, "notifycid")) {
+			global_notifycid = ast_true(v->value);
 		} else if (!strcasecmp(v->name, "alwaysauthreject")) {
 			sip_cfg.alwaysauthreject = ast_true(v->value);
 		} else if (!strcasecmp(v->name, "mohinterpret")) {

Modified: team/seanbright/issue13827/configs/sip.conf.sample
URL: http://svn.digium.com/view/asterisk/team/seanbright/issue13827/configs/sip.conf.sample?view=diff&rev=153825&r1=153824&r2=153825
==============================================================================
--- team/seanbright/issue13827/configs/sip.conf.sample (original)
+++ team/seanbright/issue13827/configs/sip.conf.sample Mon Nov  3 07:05:34 2008
@@ -378,6 +378,16 @@
 ;notifyhold = yes               ; Notify subscriptions on HOLD state (default: no)
                                 ; Turning on notifyringing and notifyhold will add a lot
                                 ; more database transactions if you are using realtime.
+;notifycid = yes                ; Control whether caller ID information is sent along with
+                                ; dialog-info+xml notifications (supported by snom phones).
+                                ; Note that this feature will only work properly when the
+                                ; incoming call is using the same extension and context that
+                                ; is being used as the hint for the called extension.  This means
+                                ; that it won't work when using subscribecontext for your sip
+                                ; user or peer (if subscribecontext is different than context).
+                                ; This is also limited to a single caller, meaning that if an
+                                ; extension is ringing because multiple calls are incoming,
+                                ; only one will be used as the source of caller ID.
 ;callcounter = yes              ; Enable call counters on devices. This can be set per
                                 ; device too.
 ;counteronpeer = yes            ; Apply call counting on peers only. This will improve 




More information about the asterisk-commits mailing list