diff options
author | Pekka Pessi <Pekka.Pessi@nokia.com> | 2011-02-01 20:37:37 +0200 |
---|---|---|
committer | Pekka Pessi <Pekka.Pessi@nokia.com> | 2011-02-01 21:06:07 +0200 |
commit | ece07824f30c380c587ca6a5b6526b66844a7f8c (patch) | |
tree | aabc475bd745fe4bd2dcb0b4cf9f03159b189c6c | |
parent | d89fac0a04f9938aa82fb193cef041f0c8a98ff3 (diff) |
modem/sms: add address validation functions
-rw-r--r-- | modem/sms-service.c | 70 | ||||
-rw-r--r-- | modem/sms.h | 3 |
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_*/ |