mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-03 19:16:46 +00:00
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:
3
CHANGES
3
CHANGES
@@ -37,3 +37,6 @@ Changes since Asterisk 1.4-beta was branched:
|
|||||||
Read() - timeout now can be floating pt.
|
Read() - timeout now can be floating pt.
|
||||||
WaitForRing() now takes floating pt timeout arg.
|
WaitForRing() now takes floating pt timeout arg.
|
||||||
SpeechBackground() -- clarified in the docstrings that the timeout is an integer seconds.
|
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.
|
||||||
|
@@ -87,6 +87,10 @@ static int callerid_read(struct ast_channel *chan, char *cmd, char *data,
|
|||||||
if (chan->cid.cid_rdnis) {
|
if (chan->cid.cid_rdnis) {
|
||||||
ast_copy_string(buf, chan->cid.cid_rdnis, len);
|
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 {
|
} else {
|
||||||
ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data);
|
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)
|
if (chan->cid.cid_rdnis)
|
||||||
free(chan->cid.cid_rdnis);
|
free(chan->cid.cid_rdnis);
|
||||||
chan->cid.cid_rdnis = ast_strdup(value);
|
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 {
|
} else {
|
||||||
ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data);
|
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>])",
|
.syntax = "CALLERID(datatype[,<optional-CID>])",
|
||||||
.desc =
|
.desc =
|
||||||
"Gets or sets Caller*ID data on the channel. The allowable datatypes\n"
|
"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",
|
"Uses channel callerid by default or optional callerid, if specified.\n",
|
||||||
.read = callerid_read,
|
.read = callerid_read,
|
||||||
.write = callerid_write,
|
.write = callerid_write,
|
||||||
|
@@ -311,6 +311,7 @@ static inline float callerid_getcarrier(float *cr, float *ci, int bit)
|
|||||||
|
|
||||||
int ast_parse_caller_presentation(const char *data);
|
int ast_parse_caller_presentation(const char *data);
|
||||||
const char *ast_describe_caller_presentation(int data);
|
const char *ast_describe_caller_presentation(int data);
|
||||||
|
const char *ast_named_caller_presentation(int data);
|
||||||
|
|
||||||
/*! \page Def_CallerPres Caller ID Presentation
|
/*! \page Def_CallerPres Caller ID Presentation
|
||||||
|
|
||||||
|
@@ -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 */
|
/*! \brief Translation table for Caller ID Presentation settings */
|
||||||
static struct {
|
static struct {
|
||||||
int val;
|
int val;
|
||||||
char *name;
|
const char *name;
|
||||||
char *description;
|
const char *description;
|
||||||
} pres_types[] = {
|
} pres_types[] = {
|
||||||
{ AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED, "allowed_not_screened", "Presentation Allowed, Not Screened"},
|
{ 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"},
|
{ 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";
|
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";
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user