diff options
author | Rafael Ignacio Zurita <rafael.zurita@profusion.mobi> | 2011-01-25 11:02:38 -0300 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2011-01-25 14:12:24 -0600 |
commit | 4eda451c033244e75972746a5d3b834833a37756 (patch) | |
tree | bcc3b1edd4d5f79f95a433f27ab4495de9a0fe1f /src | |
parent | 78c1e96bf9601b5e5d31d04413baa1265a1c284f (diff) | |
download | ofono-4eda451c033244e75972746a5d3b834833a37756.tar.bz2 |
common: add function to validate long numbers
Also, adapt voicecall to use the new function for outgoing calls.
Diffstat (limited to 'src')
-rw-r--r-- | src/common.c | 20 | ||||
-rw-r--r-- | src/common.h | 2 | ||||
-rw-r--r-- | src/voicecall.c | 2 |
3 files changed, 21 insertions, 3 deletions
diff --git a/src/common.c b/src/common.c index 4d934888..8bf9dbba 100644 --- a/src/common.c +++ b/src/common.c @@ -234,7 +234,7 @@ struct error_entry ceer_errors[] = { { 127, "Interworking, unspecified" }, }; -gboolean valid_phone_number_format(const char *number) +gboolean valid_number_format(const char *number, int length) { int len = strlen(number); int begin = 0; @@ -246,7 +246,7 @@ gboolean valid_phone_number_format(const char *number) if (number[0] == '+') begin = 1; - if ((len - begin) > OFONO_MAX_PHONE_NUMBER_LENGTH) + if ((len - begin) > length) return FALSE; for (i = begin; i < len; i++) { @@ -262,6 +262,22 @@ gboolean valid_phone_number_format(const char *number) return TRUE; } +/* + * According to 3GPP TS 24.011 or 3GPP TS 31.102, some + * addresses (or numbers), like Service Centre address, + * Destination address, or EFADN (Abbreviated dialling numbers), + * are up 20 digits. + */ +gboolean valid_phone_number_format(const char *number) +{ + return valid_number_format(number, 20); +} + +gboolean valid_long_phone_number_format(const char *number) +{ + return valid_number_format(number, OFONO_MAX_PHONE_NUMBER_LENGTH); +} + gboolean valid_cdma_phone_number_format(const char *number) { int len = strlen(number); diff --git a/src/common.h b/src/common.h index 5edff499..09f2deb5 100644 --- a/src/common.h +++ b/src/common.h @@ -137,7 +137,9 @@ enum context_status { const char *telephony_error_to_str(const struct ofono_error *error); +gboolean valid_number_format(const char *number, int length); gboolean valid_phone_number_format(const char *number); +gboolean valid_long_phone_number_format(const char *number); const char *phone_number_to_string(const struct ofono_phone_number *ph); void string_to_phone_number(const char *str, struct ofono_phone_number *ph); diff --git a/src/voicecall.c b/src/voicecall.c index 7e2b3f02..e6bfe041 100644 --- a/src/voicecall.c +++ b/src/voicecall.c @@ -1304,7 +1304,7 @@ static DBusMessage *manager_dial(DBusConnection *conn, DBUS_TYPE_INVALID) == FALSE) return __ofono_error_invalid_args(msg); - if (!valid_phone_number_format(number)) + if (!valid_long_phone_number_format(number)) return __ofono_error_invalid_format(msg); if (clir_string_to_clir(clirstr, &clir) == FALSE) |