Hi Aki,
On 09/02/2010 02:52 AM, Aki Niemi wrote:
> ---
> src/sms.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
> 1 files changed, 85 insertions(+), 2 deletions(-)
>
> diff --git a/src/sms.c b/src/sms.c
> index 2012fe5..8262d0c 100644
> --- a/src/sms.c
> +++ b/src/sms.c
> @@ -65,6 +65,7 @@ struct ofono_sms {
> GKeyFile *settings;
> char *imsi;
> int bearer;
> + int alphabet;
You might want to use the enum here
> const struct ofono_sms_driver *driver;
> void *driver_data;
> struct ofono_atom *atom;
> @@ -121,6 +122,39 @@ static int sms_bearer_from_string(const char *str)
> return -1;
> }
>
> +static const char *sms_alphabet_to_string(int alphabet)
> +{
> + switch (alphabet) {
> + case SMS_ALPHABET_TURKISH:
> + return "turkish";
> + case SMS_ALPHABET_SPANISH:
> + return "spanish";
> + case SMS_ALPHABET_PORTUGUESE:
> + return "portuguese";
> + case SMS_ALPHABET_REDUCED:
> + return "reduced";
> + case SMS_ALPHABET_DEFAULT:
> + default:
> + return "default";
> + }
I suggest dropping the default label and returning NULL here.
> +}
> +
> +static int sms_alphabet_from_string(const char *str)
> +{
> + if (g_str_equal(str, "default"))
> + return SMS_ALPHABET_DEFAULT;
> + else if (g_str_equal(str, "turkish"))
> + return SMS_ALPHABET_TURKISH;
> + else if (g_str_equal(str, "spanish"))
> + return SMS_ALPHABET_SPANISH;
> + else if (g_str_equal(str, "portuguese"))
> + return SMS_ALPHABET_PORTUGUESE;
> + else if (g_str_equal(str, "reduced"))
> + return SMS_ALPHABET_REDUCED;
> +
> + return -1;
> +}
> +
You might want to do:
static gboolean sms_alphabet_from_string(const char *str,
enum *alphabet)
> static void set_bearer(struct ofono_sms *sms, int bearer)
> {
> DBusConnection *conn = ofono_dbus_get_connection();
> @@ -140,6 +174,25 @@ static void set_bearer(struct ofono_sms *sms, int bearer)
> DBUS_TYPE_STRING, &value);
> }
>
> +static void set_alphabet(struct ofono_sms *sms, int alphabet)
> +{
> + DBusConnection *conn = ofono_dbus_get_connection();
> + const char *path = __ofono_atom_get_path(sms->atom);
> + const char *value;
> +
> + if (sms->alphabet == alphabet)
> + return;
> +
> + sms->alphabet = alphabet;
> +
> + value = sms_alphabet_to_string(sms->alphabet);
> +
> + ofono_dbus_signal_property_changed(conn, path,
> + OFONO_MESSAGE_MANAGER_INTERFACE,
> + "Alphabet",
> + DBUS_TYPE_STRING, &value);
> +}
> +
> static void set_sca(struct ofono_sms *sms,
> const struct ofono_phone_number *sca)
> {
> @@ -171,6 +224,7 @@ static DBusMessage *generate_get_properties_reply(struct
> ofono_sms *sms,
> DBusMessageIter dict;
> const char *sca;
> const char *bearer;
> + const char *alphabet;
>
> reply = dbus_message_new_method_return(msg);
>
> @@ -194,6 +248,9 @@ static DBusMessage *generate_get_properties_reply(struct
> ofono_sms *sms,
> bearer = sms_bearer_to_string(sms->bearer);
> ofono_dbus_dict_append(&dict, "Bearer", DBUS_TYPE_STRING, &bearer);
>
> + alphabet = sms_alphabet_to_string(sms->alphabet);
> + ofono_dbus_dict_append(&dict, "Alphabet", DBUS_TYPE_STRING, &alphabet);
> +
> dbus_message_iter_close_container(&iter, &dict);
>
> return reply;
> @@ -403,6 +460,25 @@ static DBusMessage *sms_set_property(DBusConnection
> *conn, DBusMessage *msg,
> return NULL;
> }
>
> + if (!strcmp(property, "Alphabet")) {
> + const char *value;
> + int alphabet;
> +
> + if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_STRING)
> + return __ofono_error_invalid_args(msg);
> +
> + dbus_message_iter_get_basic(&var, &value);
> +
> + alphabet = sms_alphabet_from_string(value);
> + if (alphabet < 0)
> + return __ofono_error_invalid_format(msg);
> +
> + set_alphabet(sms, alphabet);
> +
> + g_dbus_send_reply(conn, msg, DBUS_TYPE_INVALID);
> + return NULL;
> + }
> +
> return __ofono_error_invalid_args(msg);
> }
>
> @@ -620,8 +696,10 @@ static DBusMessage *sms_send_message(DBusConnection
> *conn, DBusMessage *msg,
> if (valid_phone_number_format(to) == FALSE)
> return __ofono_error_invalid_format(msg);
>
> - msg_list = sms_text_prepare(text, 0, TRUE, &ref_offset,
> - sms->use_delivery_reports);
> + msg_list = sms_text_prepare_with_alphabet(text, 0, TRUE,
> + &ref_offset,
> + sms->use_delivery_reports,
> + sms->alphabet);
>
> if (!msg_list)
> return __ofono_error_invalid_format(msg);
> @@ -1146,6 +1224,8 @@ static void sms_remove(struct ofono_atom *atom)
> sms->use_delivery_reports);
> g_key_file_set_integer(sms->settings, SETTINGS_GROUP,
> "Bearer", sms->bearer);
> + g_key_file_set_integer(sms->settings, SETTINGS_GROUP,
> + "Alphabet", sms->alphabet);
>
> storage_close(sms->imsi, SETTINGS_STORE, sms->settings, TRUE);
>
> @@ -1251,6 +1331,9 @@ static void sms_load_settings(struct ofono_sms *sms,
> const char *imsi)
> "Bearer", &error);
> if (error)
> sms->bearer = 3; /* Default to CS then PS */
> +
> + sms->alphabet = g_key_file_get_integer(sms->settings, SETTINGS_GROUP,
> + "Alphabet", &error);
> }
>
> static void bearer_init_callback(const struct ofono_error *error, void *data)
Regards,
-Denis
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono