[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