common: add function to validate long numbers
authorRafael Ignacio Zurita <rafael.zurita@profusion.mobi>
Tue, 25 Jan 2011 14:02:38 +0000 (11:02 -0300)
committerDenis Kenzior <denkenz@gmail.com>
Tue, 25 Jan 2011 20:12:24 +0000 (14:12 -0600)
Also, adapt voicecall to use the new function for outgoing calls.

src/common.c
src/common.h
src/voicecall.c

index 4d93488..8bf9dbb 100644 (file)
@@ -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);
index 5edff49..09f2deb 100644 (file)
@@ -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);
 
index 7e2b3f0..e6bfe04 100644 (file)
@@ -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)