summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
0c134c5)
Patch by jcomellas, heavily modified by oej
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@16425
65c4cc65-6c06-0410-ace0-
fbb531ad65f3
-/*! \brief checks if string consists only of digits and * \# and +
- \return 1 if string is valid AST phone number
- \return 0 if not
+/*! \brief Checks if phone number consists of valid characters
+ \param exten String that needs to be checked
+ \param valid Valid characters in string
+ \return 1 if valid string, 0 if string contains invalid characters
-int ast_isphonenumber(char *n)
+static int ast_is_valid_string(const char *exten, const char *valid)
- if (ast_strlen_zero(n))
+
+ if (ast_strlen_zero(exten))
- for (x=0;n[x];x++)
- if (!strchr("0123456789*#+", n[x]))
+ for (x=0; exten[x]; x++)
+ if (!strchr(valid, exten[x]))
+/*! \brief checks if string consists only of digits and * \# and +
+ \return 1 if string is valid AST phone number
+ \return 0 if not
+*/
+int ast_isphonenumber(const char *n)
+{
+ return ast_is_valid_string(n, "0123456789*#+");
+}
+
+/*! \brief checks if string consists only of digits and ( ) - * \# and +
+ Pre-qualifies the string for ast_shrink_phone_number()
+ \return 1 if string is valid AST shrinkable phone number
+ \return 0 if not
+*/
+int ast_is_shrinkable_phonenumber(const char *exten)
+{
+ return ast_is_valid_string(exten, "0123456789*#+()-.");
+}
+
/*! \brief parse string for caller id information
\return always returns 0, as the code always returns something.
XXX note that 'name' is not parsed consistently e.g. we have
/*! \brief parse string for caller id information
\return always returns 0, as the code always returns something.
XXX note that 'name' is not parsed consistently e.g. we have
*c = '\0';
tmp = ast_strdupa(of);
if (tmp) {
*c = '\0';
tmp = ast_strdupa(of);
if (tmp) {
- ast_shrink_phone_number(tmp);
+ if (ast_is_shrinkable_phonenumber(tmp))
+ ast_shrink_phone_number(tmp);
ast_string_field_set(p, cid_num, tmp);
} else {
ast_string_field_set(p, cid_num, of);
ast_string_field_set(p, cid_num, tmp);
} else {
ast_string_field_set(p, cid_num, of);
ast_string_field_set(p, cid_name, calleridname);
tmp = ast_strdupa(rpid_num);
if (tmp) {
ast_string_field_set(p, cid_name, calleridname);
tmp = ast_strdupa(rpid_num);
if (tmp) {
- ast_shrink_phone_number(tmp);
+ if (ast_is_shrinkable_phonenumber(tmp))
+ ast_shrink_phone_number(tmp);
ast_string_field_set(p, cid_num, tmp);
} else {
ast_string_field_set(p, cid_num, rpid_num);
ast_string_field_set(p, cid_num, tmp);
} else {
ast_string_field_set(p, cid_num, rpid_num);
if (!ast_strlen_zero(user->cid_num) && !ast_strlen_zero(p->cid_num)) {
char *tmp = ast_strdupa(user->cid_num);
if (tmp) {
if (!ast_strlen_zero(user->cid_num) && !ast_strlen_zero(p->cid_num)) {
char *tmp = ast_strdupa(user->cid_num);
if (tmp) {
- ast_shrink_phone_number(tmp);
+ if (ast_is_shrinkable_phonenumber(tmp))
+ ast_shrink_phone_number(tmp);
ast_string_field_set(p, cid_num, tmp);
} else {
ast_string_field_set(p, cid_num, user->cid_num);
ast_string_field_set(p, cid_num, tmp);
} else {
ast_string_field_set(p, cid_num, user->cid_num);
if (*calleridname)
ast_string_field_set(p, cid_name, calleridname);
if (tmp) {
if (*calleridname)
ast_string_field_set(p, cid_name, calleridname);
if (tmp) {
- ast_shrink_phone_number(tmp);
+ if (ast_is_shrinkable_phonenumber(tmp))
+ ast_shrink_phone_number(tmp);
ast_string_field_set(p, cid_num, tmp);
} else {
ast_string_field_set(p, cid_num, rpid_num);
ast_string_field_set(p, cid_num, tmp);
} else {
ast_string_field_set(p, cid_num, rpid_num);
if (!ast_strlen_zero(peer->cid_num) && !ast_strlen_zero(p->cid_num)) {
char *tmp = ast_strdupa(peer->cid_num);
if (tmp) {
if (!ast_strlen_zero(peer->cid_num) && !ast_strlen_zero(p->cid_num)) {
char *tmp = ast_strdupa(peer->cid_num);
if (tmp) {
- ast_shrink_phone_number(tmp);
+ if (ast_is_shrinkable_phonenumber(tmp))
+ ast_shrink_phone_number(tmp);
ast_string_field_set(p, cid_num, tmp);
} else {
ast_string_field_set(p, cid_num, peer->cid_num);
ast_string_field_set(p, cid_num, tmp);
} else {
ast_string_field_set(p, cid_num, peer->cid_num);
*/
extern void ast_shrink_phone_number(char *n);
*/
extern void ast_shrink_phone_number(char *n);
-/*! \brief Check if a string consists only of digits.
+/*! \brief Check if a string consists only of digits and + \#
\param n number to be checked.
\return Returns 0 if n is a number, 1 if it's not.
*/
\param n number to be checked.
\return Returns 0 if n is a number, 1 if it's not.
*/
-extern int ast_isphonenumber(char *n);
+extern int ast_isphonenumber(const char *n);
+
+/*! \brief Check if a string consists only of digits and and + \# ( ) - .
+ (meaning it can be cleaned with ast_shrink_phone_number)
+ \param exten The extension (or URI) to be checked.
+ \return Returns 0 if n is a number, 1 if it's not.
+ */
+extern int ast_is_shrinkable_phonenumber(const char *exten);
extern int ast_callerid_split(const char *src, char *name, int namelen, char *num, int numlen);
extern int ast_callerid_split(const char *src, char *name, int namelen, char *num, int numlen);