major dialplan functions update
[asterisk/asterisk.git] / funcs / func_callerid.c
index c907d96..056999e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Asterisk -- An open source telephony toolkit.
  *
- * Copyright (C) 1999 - 2005, Digium, Inc.
+ * Copyright (C) 1999-2006, Digium, Inc.
  *
  * See http://www.asterisk.org for more information about
  * the Asterisk project. Please do not directly contact
@@ -28,7 +28,6 @@
 #include "asterisk.h"
 
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-
 #include "asterisk/module.h"
 #include "asterisk/channel.h"
 #include "asterisk/pbx.h"
@@ -38,7 +37,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/options.h"
 #include "asterisk/callerid.h"
 
-static char *callerid_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) 
+static int callerid_read(struct ast_channel *chan, char *cmd, char *data,
+                        char *buf, size_t len)
 {
        char *opt = data;
 
@@ -49,22 +49,27 @@ static char *callerid_read(struct ast_channel *chan, char *cmd, char *data, char
                ast_callerid_split(opt, name, sizeof(name), num, sizeof(num));
 
                if (!strncasecmp("all", data, 3)) {
-                       snprintf(buf, len, "\"%s\" <%s>", name, num);   
+                       snprintf(buf, len, "\"%s\" <%s>", name, num);
                } else if (!strncasecmp("name", data, 4)) {
                        ast_copy_string(buf, name, len);
-               } else if (!strncasecmp("num", data, 3) || !strncasecmp("number", data, 6)) {
+               } else if (!strncasecmp("num", data, 3) ||
+                          !strncasecmp("number", data, 6)) {
+
                        ast_copy_string(buf, num, len);
                } else {
                        ast_log(LOG_ERROR, "Unknown callerid data type.\n");
                }
        } else {
                if (!strncasecmp("all", data, 3)) {
-                       snprintf(buf, len, "\"%s\" <%s>", chan->cid.cid_name ? chan->cid.cid_name : "", chan->cid.cid_num ? chan->cid.cid_num : "");    
+                       snprintf(buf, len, "\"%s\" <%s>",
+                                chan->cid.cid_name ? chan->cid.cid_name : "",
+                                chan->cid.cid_num ? chan->cid.cid_num : "");
                } else if (!strncasecmp("name", data, 4)) {
                        if (chan->cid.cid_name) {
                                ast_copy_string(buf, chan->cid.cid_name, len);
                        }
-               } else if (!strncasecmp("num", data, 3) || !strncasecmp("number", data, 6)) {
+               } else if (!strncasecmp("num", data, 3)
+                                  || !strncasecmp("number", data, 6)) {
                        if (chan->cid.cid_num) {
                                ast_copy_string(buf, chan->cid.cid_num, len);
                        }
@@ -84,47 +89,54 @@ static char *callerid_read(struct ast_channel *chan, char *cmd, char *data, char
                        ast_log(LOG_ERROR, "Unknown callerid data type.\n");
                }
        }
-       return buf;
+
+       return 0;
 }
 
-static void callerid_write(struct ast_channel *chan, char *cmd, char *data, const char *value) 
+static int callerid_write(struct ast_channel *chan, char *cmd, char *data,
+                         const char *value)
 {
        if (!value)
-                return;
-       
+               return -1;
+
        if (!strncasecmp("all", data, 3)) {
                char name[256];
                char num[256];
+
                if (!ast_callerid_split(value, name, sizeof(name), num, sizeof(num)))
-                       ast_set_callerid(chan, num, name, num); 
-        } else if (!strncasecmp("name", data, 4)) {
-                ast_set_callerid(chan, NULL, value, NULL);
-        } else if (!strncasecmp("num", data, 3) || !strncasecmp("number", data, 6)) {
-                ast_set_callerid(chan, value, NULL, NULL);
-        } else if (!strncasecmp("ani", data, 3)) {
-                ast_set_callerid(chan, NULL, NULL, value);
-        } else if (!strncasecmp("dnid", data, 4)) {
-                /* do we need to lock chan here? */
-                if (chan->cid.cid_dnid)
-                        free(chan->cid.cid_dnid);
-                chan->cid.cid_dnid = ast_strlen_zero(value) ? NULL : strdup(value);
-        } else if (!strncasecmp("rdnis", data, 5)) {
-                /* do we need to lock chan here? */
-                if (chan->cid.cid_rdnis)
-                        free(chan->cid.cid_rdnis);
-                chan->cid.cid_rdnis = ast_strlen_zero(value) ? NULL : strdup(value);
-        } else {
-                ast_log(LOG_ERROR, "Unknown callerid data type.\n");
-        }
+                       ast_set_callerid(chan, num, name, num);
+       } else if (!strncasecmp("name", data, 4)) {
+               ast_set_callerid(chan, NULL, value, NULL);
+       } else if (!strncasecmp("num", data, 3) ||
+                  !strncasecmp("number", data, 6)) {
+               ast_set_callerid(chan, value, NULL, NULL);
+       } else if (!strncasecmp("ani", data, 3)) {
+               ast_set_callerid(chan, NULL, NULL, value);
+       } else if (!strncasecmp("dnid", data, 4)) {
+               /* do we need to lock chan here? */
+               if (chan->cid.cid_dnid)
+                       free(chan->cid.cid_dnid);
+               chan->cid.cid_dnid = ast_strlen_zero(value) ? NULL : strdup(value);
+       } else if (!strncasecmp("rdnis", data, 5)) {
+               /* do we need to lock chan here? */
+               if (chan->cid.cid_rdnis)
+                       free(chan->cid.cid_rdnis);
+               chan->cid.cid_rdnis = ast_strlen_zero(value) ? NULL : strdup(value);
+       } else {
+               ast_log(LOG_ERROR, "Unknown callerid data type.\n");
+       }
+
+       return 0;
 }
 
 static struct ast_custom_function callerid_function = {
        .name = "CALLERID",
        .synopsis = "Gets or sets Caller*ID data on the channel.",
        .syntax = "CALLERID(datatype[,<optional-CID>])",
-       .desc = "Gets or sets Caller*ID data on the channel.  The allowable datatypes\n"
-       "are \"all\", \"name\", \"num\", \"ANI\", \"DNID\", \"RDNIS\".\n"
-       "Uses channel callerid by default or optional callerid, if specified.\n",
+       .desc =
+               "Gets or sets Caller*ID data on the channel.  The allowable datatypes\n"
+               "are \"all\", \"name\", \"num\", \"ANI\", \"DNID\", \"RDNIS\".\n"
+               "Uses channel callerid by default or optional callerid, if specified.\n",
        .read = callerid_read,
        .write = callerid_write,
 };
@@ -133,12 +145,12 @@ static char *tdesc = "Caller ID related dialplan function";
 
 int unload_module(void)
 {
-        return ast_custom_function_unregister(&callerid_function);
+       return ast_custom_function_unregister(&callerid_function);
 }
 
 int load_module(void)
 {
-        return ast_custom_function_register(&callerid_function);
+       return ast_custom_function_register(&callerid_function);
 }
 
 char *description(void)
@@ -155,11 +167,3 @@ char *key()
 {
        return ASTERISK_GPL_KEY;
 }
-
-/*
-Local Variables:
-mode: C
-c-file-style: "linux"
-indent-tabs-mode: nil
-End:
-*/