Merge distinctive ring for MGCP (bug #2880, with mods)
authorMark Spencer <markster@digium.com>
Thu, 6 Jan 2005 04:02:33 +0000 (04:02 +0000)
committerMark Spencer <markster@digium.com>
Thu, 6 Jan 2005 04:02:33 +0000 (04:02 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4690 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_mgcp.c

index 2cc84fc..aff41bc 100755 (executable)
  * the GNU General Public License
  */
 
+/* FO: Changes
+ * -- add distinctive ring signalling (part of RFC 3660)
+ */
+
 /* JS: Changes
    -- add support for the wildcard endpoint
    -- seteable wildcard with wcardep on mgcp.conf
@@ -848,24 +852,41 @@ static int send_request(struct mgcp_endpoint *p, struct mgcp_subchannel *sub,
 
 static int mgcp_call(struct ast_channel *ast, char *dest, int timeout)
 {
-       int res;
-       struct mgcp_endpoint *p;
+    int res;
+    struct mgcp_endpoint *p;
     struct mgcp_subchannel *sub;
-    char *tone;
+    char tone[50]="";
+    char *distinctive_ring = NULL;
+    struct varshead *headp;
+    struct ast_var_t *current;
 
     if (mgcpdebug) {
         ast_verbose(VERBOSE_PREFIX_3 "MGCP mgcp_call(%s)\n", ast->name);
     }
-       sub = ast->pvt->pvt;
+    sub = ast->pvt->pvt;
     p = sub->parent;
-       ast_mutex_lock(&sub->lock);
+    headp=&ast->varshead;
+    AST_LIST_TRAVERSE(headp,current,entries) {
+        /* Check whether there is a ALERT_INFO variable */
+        if (strcasecmp(ast_var_name(current),"ALERT_INFO")==0) {
+            distinctive_ring = ast_var_value(current);
+        }
+    }
+                           +
+    ast_mutex_lock(&sub->lock);
     switch (p->hookstate) {
         case MGCP_OFFHOOK:
-            tone = "L/wt";
+                   snprintf(tone, sizeof(tone), "L/wt");
             break;
         case MGCP_ONHOOK:
         default:
-            tone = "L/rg";
+            if (distinctive_ring && !ast_strlen_zero(distinctive_ring)) {
+                snprintf(tone, sizeof(tone), "L/r%s", distinctive_ring);
+                ast_verbose(VERBOSE_PREFIX_2 "MGCP distinctive ring %s\n", tone);
+            } else {
+                snprintf(tone, sizeof(tone), "L/rg");
+                ast_verbose(VERBOSE_PREFIX_2 "MGCP default ring\n");
+            }
             break;
     }