Extend CALLERID() function for "pres" and "ton" values

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@44685 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Paul Cadach 2006-10-07 14:45:49 +00:00
parent 901a66c401
commit 500353e095
4 changed files with 56 additions and 3 deletions

View File

@ -37,3 +37,6 @@ Changes since Asterisk 1.4-beta was branched:
Read() - timeout now can be floating pt.
WaitForRing() now takes floating pt timeout arg.
SpeechBackground() -- clarified in the docstrings that the timeout is an integer seconds.
* Extend CALLERID() function with "pres" and "ton" parameters to
fetch string representation of calling number presentation indicator
and numeric representation of type of calling number value.

View File

@ -87,6 +87,10 @@ static int callerid_read(struct ast_channel *chan, char *cmd, char *data,
if (chan->cid.cid_rdnis) {
ast_copy_string(buf, chan->cid.cid_rdnis, len);
}
} else if (!strncasecmp("pres", data, 4)) {
ast_copy_string(buf, ast_named_caller_presentation(chan->cid.cid_pres), len);
} else if (!strncasecmp("ton", data, 3)) {
snprintf(buf, len, "%d", chan->cid.cid_ton);
} else {
ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data);
}
@ -124,6 +128,34 @@ static int callerid_write(struct ast_channel *chan, char *cmd, char *data,
if (chan->cid.cid_rdnis)
free(chan->cid.cid_rdnis);
chan->cid.cid_rdnis = ast_strdup(value);
} else if (!strncasecmp("pres", data, 4)) {
int i;
char *s, *val;
/* Strip leading spaces */
while ((value[0] == '\t') || (value[0] == ' '))
++value;
val = ast_strdupa(value);
/* Strip trailing spaces */
s = val + strlen(val);
while ((s != val) && ((s[-1] == '\t') || (s[-1] == ' ')))
--s;
*s = '\0';
if ((val[0] >= '0') && (val[0] <= '9'))
i = atoi(val);
else
i = ast_parse_caller_presentation(val);
if (i < 0)
ast_log(LOG_ERROR, "Unknown calling number presentation '%s', value unchanged\n", val);
else
chan->cid.cid_pres = i;
} else if (!strncasecmp("ton", data, 3)) {
int i = atoi(value);
chan->cid.cid_ton = i;
} else {
ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data);
}
@ -137,7 +169,8 @@ static struct ast_custom_function callerid_function = {
.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"
"are \"all\", \"name\", \"num\", \"ANI\", \"DNID\", \"RDNIS\", \"pres\",\n"
"and \"ton\".\n"
"Uses channel callerid by default or optional callerid, if specified.\n",
.read = callerid_read,
.write = callerid_write,

View File

@ -311,6 +311,7 @@ static inline float callerid_getcarrier(float *cr, float *ci, int bit)
int ast_parse_caller_presentation(const char *data);
const char *ast_describe_caller_presentation(int data);
const char *ast_named_caller_presentation(int data);
/*! \page Def_CallerPres Caller ID Presentation

View File

@ -1048,8 +1048,8 @@ int ast_callerid_split(const char *buf, char *name, int namelen, char *num, int
/*! \brief Translation table for Caller ID Presentation settings */
static struct {
int val;
char *name;
char *description;
const char *name;
const char *description;
} pres_types[] = {
{ AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED, "allowed_not_screened", "Presentation Allowed, Not Screened"},
{ AST_PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN, "allowed_passed_screen", "Presentation Allowed, Passed Screen"},
@ -1094,3 +1094,19 @@ const char *ast_describe_caller_presentation(int data)
return "unknown";
}
/*! \brief Convert caller ID pres value to text code
\param data text string
\return string for config file
*/
const char *ast_named_caller_presentation(int data)
{
int i;
for (i = 0; i < ((sizeof(pres_types) / sizeof(pres_types[0]))); i++) {
if (pres_types[i].val == data)
return pres_types[i].name;
}
return "unknown";
}