#include "asterisk.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/logger.h"
#include "asterisk/utils.h"
#include "asterisk/app.h"
#include "asterisk/options.h"
#include "asterisk/callerid.h"
Include dependency graph for func_callerid.c:
Go to the source code of this file.
Functions | |
AST_MODULE_INFO_STANDARD (ASTERISK_GPL_KEY,"Caller ID related dialplan function") | |
static int | callerid_read (struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) |
static int | callerid_write (struct ast_channel *chan, char *cmd, char *data, const char *value) |
static int | load_module (void) |
static int | unload_module (void) |
Variables | |
static struct ast_custom_function | callerid_function |
Definition in file func_callerid.c.
AST_MODULE_INFO_STANDARD | ( | ASTERISK_GPL_KEY | , | |
"Caller ID related dialplan function" | ||||
) |
static int callerid_read | ( | struct ast_channel * | chan, | |
char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
Definition at line 42 of file func_callerid.c.
References ast_callerid_split(), ast_log(), ast_channel::cid, ast_callerid::cid_ani, ast_callerid::cid_dnid, ast_callerid::cid_name, ast_callerid::cid_num, ast_callerid::cid_rdnis, LOG_ERROR, name, S_OR, and strsep().
00044 { 00045 char *opt = data; 00046 00047 if (!chan) 00048 return -1; 00049 00050 if (strchr(opt, '|')) { 00051 char name[80], num[80]; 00052 00053 data = strsep(&opt, "|"); 00054 ast_callerid_split(opt, name, sizeof(name), num, sizeof(num)); 00055 00056 if (!strncasecmp("all", data, 3)) { 00057 snprintf(buf, len, "\"%s\" <%s>", name, num); 00058 } else if (!strncasecmp("name", data, 4)) { 00059 ast_copy_string(buf, name, len); 00060 } else if (!strncasecmp("num", data, 3) || 00061 !strncasecmp("number", data, 6)) { 00062 00063 ast_copy_string(buf, num, len); 00064 } else { 00065 ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data); 00066 } 00067 } else { 00068 if (!strncasecmp("all", data, 3)) { 00069 snprintf(buf, len, "\"%s\" <%s>", 00070 S_OR(chan->cid.cid_name, ""), 00071 S_OR(chan->cid.cid_num, "")); 00072 } else if (!strncasecmp("name", data, 4)) { 00073 if (chan->cid.cid_name) { 00074 ast_copy_string(buf, chan->cid.cid_name, len); 00075 } 00076 } else if (!strncasecmp("num", data, 3) 00077 || !strncasecmp("number", data, 6)) { 00078 if (chan->cid.cid_num) { 00079 ast_copy_string(buf, chan->cid.cid_num, len); 00080 } 00081 } else if (!strncasecmp("ani", data, 3)) { 00082 if (chan->cid.cid_ani) { 00083 ast_copy_string(buf, chan->cid.cid_ani, len); 00084 } 00085 } else if (!strncasecmp("dnid", data, 4)) { 00086 if (chan->cid.cid_dnid) { 00087 ast_copy_string(buf, chan->cid.cid_dnid, len); 00088 } 00089 } else if (!strncasecmp("rdnis", data, 5)) { 00090 if (chan->cid.cid_rdnis) { 00091 ast_copy_string(buf, chan->cid.cid_rdnis, len); 00092 } 00093 } else { 00094 ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data); 00095 } 00096 } 00097 00098 return 0; 00099 }
static int callerid_write | ( | struct ast_channel * | chan, | |
char * | cmd, | |||
char * | data, | |||
const char * | value | |||
) | [static] |
Definition at line 101 of file func_callerid.c.
References ast_callerid_split(), ast_log(), ast_set_callerid(), ast_strdup, ast_channel::cid, ast_callerid::cid_dnid, ast_callerid::cid_rdnis, free, LOG_ERROR, and name.
00103 { 00104 if (!value || !chan) 00105 return -1; 00106 00107 if (!strncasecmp("all", data, 3)) { 00108 char name[256]; 00109 char num[256]; 00110 00111 if (!ast_callerid_split(value, name, sizeof(name), num, sizeof(num))) 00112 ast_set_callerid(chan, num, name, num); 00113 } else if (!strncasecmp("name", data, 4)) { 00114 ast_set_callerid(chan, NULL, value, NULL); 00115 } else if (!strncasecmp("num", data, 3) || 00116 !strncasecmp("number", data, 6)) { 00117 ast_set_callerid(chan, value, NULL, NULL); 00118 } else if (!strncasecmp("ani", data, 3)) { 00119 ast_set_callerid(chan, NULL, NULL, value); 00120 } else if (!strncasecmp("dnid", data, 4)) { 00121 /* do we need to lock chan here? */ 00122 if (chan->cid.cid_dnid) 00123 free(chan->cid.cid_dnid); 00124 chan->cid.cid_dnid = ast_strdup(value); 00125 } else if (!strncasecmp("rdnis", data, 5)) { 00126 /* do we need to lock chan here? */ 00127 if (chan->cid.cid_rdnis) 00128 free(chan->cid.cid_rdnis); 00129 chan->cid.cid_rdnis = ast_strdup(value); 00130 } else { 00131 ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data); 00132 } 00133 00134 return 0; 00135 }
static int load_module | ( | void | ) | [static] |
Definition at line 154 of file func_callerid.c.
References ast_custom_function_register(), and callerid_function.
00155 { 00156 return ast_custom_function_register(&callerid_function); 00157 }
static int unload_module | ( | void | ) | [static] |
Definition at line 149 of file func_callerid.c.
References ast_custom_function_unregister(), and callerid_function.
00150 { 00151 return ast_custom_function_unregister(&callerid_function); 00152 }
struct ast_custom_function callerid_function [static] |