summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPekka Pessi <Pekka.Pessi@nokia.com>2011-02-01 20:37:37 +0200
committerPekka Pessi <Pekka.Pessi@nokia.com>2011-02-01 21:06:07 +0200
commitece07824f30c380c587ca6a5b6526b66844a7f8c (patch)
treeaabc475bd745fe4bd2dcb0b4cf9f03159b189c6c
parentd89fac0a04f9938aa82fb193cef041f0c8a98ff3 (diff)
modem/sms: add address validation functions
-rw-r--r--modem/sms-service.c70
-rw-r--r--modem/sms.h3
2 files changed, 69 insertions, 4 deletions
diff --git a/modem/sms-service.c b/modem/sms-service.c
index 268ba32..7ff6141 100644
--- a/modem/sms-service.c
+++ b/modem/sms-service.c
@@ -752,8 +752,70 @@ modem_sms_request_send (ModemSMSService *self,
return request;
}
-/* ---------------------------------------------------------------------- */
-/* Handler interface */
+static gchar const *
+_modem_sms_is_valid_address (gchar const *address)
+{
+ size_t len;
-/* ---------------------------------------------------------------------- */
-/* Error handling */
+ if (address == NULL)
+ return "NULL";
+
+ if (address[0] == '+')
+ {
+ address++;
+ }
+
+ len = strspn (address, "0123456789");
+
+ if (address[len])
+ return "invalid character";
+
+ if (len == 0)
+ return "too short";
+
+ if (len > 20)
+ return "too long";
+
+ return NULL;
+}
+
+/** Return TRUE if @a address is a valid SMS address.
+ *
+ * A valid SMS address is a phone number with at most 20 digits either in
+ * national or in international format (starting with +).
+ *
+ * @param address - ISDN address of address
+ *
+ * @retval TRUE - address is a valid SMS address
+ * @retval FALSE - address is NULL, does not contain valid phone number, or it
+ * is too long.
+ */
+gboolean
+modem_sms_is_valid_address (gchar const *address)
+{
+ return !_modem_sms_is_valid_address (address);
+}
+
+/** Validate a SMS address @a address.
+ *
+ * A valid SMS address is a phone number with at most 20 digits either
+ * in national or in international format (starting with +).
+ *
+ * @param address - ISDN address of address
+ * @param error - return value for GError describing the validation error
+ *
+ * @retval TRUE - address is a valid SMS address
+ * @retval FALSE - address is NULL, does not contain valid phone number, or it
+ * is too long.
+ */
+gboolean
+modem_sms_validate_address (gchar const *address, GError **error)
+{
+ gchar const *reason = _modem_sms_is_valid_address (address);
+
+ if (reason)
+ g_set_error (error, MODEM_SMS_ERRORS, MODEM_SMS_ERROR_INVALID_PARAMETER,
+ "Invalid SMS address \"%s\": %s", address, reason);
+
+ return !reason;
+}
diff --git a/modem/sms.h b/modem/sms.h
index 6470ad7..f0e8e7c 100644
--- a/modem/sms.h
+++ b/modem/sms.h
@@ -115,6 +115,9 @@ ModemRequest *modem_sms_request_send (ModemSMSService *self,
/* ---------------------------------------------------------------------- */
+gboolean modem_sms_is_valid_address (gchar const *address);
+gboolean modem_sms_validate_address (gchar const *address, GError **error);
+
G_END_DECLS
#endif /* #ifndef _MODEM_SMS_SERVICE_H_*/