Open Source Telephony
 help / color / mirror / Atom feed
From: Denis Kenzior <denkenz@gmail.com>
To: ofono@ofono.org
Subject: Re: [SMS D-Bus 03/19] sms: implement SHA256-based message IDs [incomplete]
Date: Thu, 05 Aug 2010 12:20:34 -0500	[thread overview]
Message-ID: <4C5AF2E2.2090009@gmail.com> (raw)
In-Reply-To: <91ce0be38ecd281e810284966d0f285ad187db23.1280879410.git.inaky.perez-gonzalez@intel.com>

[-- Attachment #1: Type: text/plain, Size: 8021 bytes --]

Hi Inaky,

On 08/03/2010 06:50 PM, Inaky Perez-Gonzalez wrote:
> From: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
> 
> This patch removes the sequential SMS message identification gig and
> replaces it with a 16-bit hash cookie based off message contents.
> 
> FIXME: [incomplete] need to figure out how to do so that identical
> messages sent to different or the same numbers also have a different
> ID.
> ---
>  src/ofono.h |    9 +++++----
>  src/sms.c   |   55 +++++++++++++++++++++++--------------------------------
>  src/stk.c   |    5 +++--
>  3 files changed, 31 insertions(+), 38 deletions(-)
> 
> diff --git a/src/ofono.h b/src/ofono.h
> index aaa01d9..b73797b 100644
> --- a/src/ofono.h
> +++ b/src/ofono.h
> @@ -185,10 +185,11 @@ enum ofono_sms_submit_flag {
>  
>  typedef void (*ofono_sms_txq_submit_cb_t)(gboolean ok, void *data);
>  
> -unsigned int __ofono_sms_txq_submit(struct ofono_sms *sms, GSList *list,
> -					unsigned int flags,
> -					ofono_sms_txq_submit_cb_t cb,
> -					void *data, ofono_destroy_func destroy);
> +struct tx_queue_entry *__ofono_sms_txq_submit(
> +	struct ofono_sms *sms, GSList *list,
> +	unsigned int flags, unsigned ref,
> +	ofono_sms_txq_submit_cb_t cb,
> +	void *data, ofono_destroy_func destroy);

As I said before, please don't mess with this function.

>  
>  #include <ofono/sim.h>
>  #include <ofono/stk.h>
> diff --git a/src/sms.c b/src/sms.c
> index 35364db..39d4a32 100644
> --- a/src/sms.c
> +++ b/src/sms.c
> @@ -55,7 +55,6 @@ struct ofono_sms {
>  	DBusMessage *pending;
>  	struct ofono_phone_number sca;
>  	struct sms_assembly *assembly;
> -	unsigned int next_msg_id;
>  	guint ref;
>  	GQueue *txq;
>  	gint tx_source;
> @@ -589,7 +588,8 @@ static DBusMessage *sms_send_message(DBusConnection *conn, DBusMessage *msg,
>  	int ref_offset;
>  	struct ofono_modem *modem;
>  	unsigned int flags;
> -	unsigned int msg_id;
> +	guint16 msg_id;
> +	struct tx_queue_entry *sms_msg;
>  
>  	if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &to,
>  					DBUS_TYPE_STRING, &text,
> @@ -605,24 +605,19 @@ static DBusMessage *sms_send_message(DBusConnection *conn, DBusMessage *msg,
>  	if (!msg_list)
>  		return __ofono_error_invalid_format(msg);
>  
> -	set_ref_and_to(msg_list, sms->ref, ref_offset, to);
> -	DBG("ref: %d, offset: %d", sms->ref, ref_offset);
> -
> -	if (ref_offset != 0) {
> -		if (sms->ref == 65536)
> -			sms->ref = 1;
> -		else
> -			sms->ref = sms->ref + 1;
> -	}
> +	msg_id = sms_uuid_from_pdu_list(msg_list);

You're calculating the ID before setting the ref and to? That is pretty
silly ;)

> +	set_ref_and_to(msg_list, msg_id, ref_offset, to);
> +	DBG("SMS ID: 0x%04x", msg_id);
>  
>  	flags = OFONO_SMS_SUBMIT_FLAG_RECORD_HISTORY;
>  	flags |= OFONO_SMS_SUBMIT_FLAG_RETRY;
>  	if (sms->use_delivery_reports)
>  		flags |= OFONO_SMS_SUBMIT_FLAG_REQUEST_SR;
>  
> -	msg_id = __ofono_sms_txq_submit(sms, msg_list, flags, send_message_cb,
> -						dbus_message_ref(msg),
> -						send_message_destroy);
> +	sms_msg = __ofono_sms_txq_submit(sms, msg_list, flags, msg_id,
> +					 send_message_cb,
> +					 dbus_message_ref(msg),
> +					 send_message_destroy);

Make the ID calculation happen inside tx_queue_entry_new.  That function
already converts all the SMS objects into a PDU.  So simply hashing the
PDUs there would be very easy.

>  
>  	g_slist_foreach(msg_list, (GFunc)g_free, NULL);
>  	g_slist_free(msg_list);
> @@ -659,7 +654,7 @@ static void dispatch_app_datagram(struct ofono_sms *sms, int dst, int src,
>  }
>  
>  static void dispatch_text_message(struct ofono_sms *sms,
> -					const char *message,
> +					const char *message, guint16 msg_id,
>  					enum sms_class cls,
>  					const struct sms_address *addr,
>  					const struct sms_scts *scts)
> @@ -717,11 +712,9 @@ static void dispatch_text_message(struct ofono_sms *sms,
>  
>  	g_dbus_send_message(conn, signal);
>  
> -	if (cls != SMS_CLASS_0) {
> -		__ofono_history_sms_received(modem, sms->next_msg_id, str,
> +	if (cls != SMS_CLASS_0)
> +		__ofono_history_sms_received(modem, msg_id, str,
>  						&remote, &local, message);
> -		sms->next_msg_id += 1;
> -	}
>  }
>  
>  static void sms_dispatch(struct ofono_sms *sms, GSList *sms_list)
> @@ -732,6 +725,7 @@ static void sms_dispatch(struct ofono_sms *sms, GSList *sms_list)
>  	enum sms_class cls;
>  	int srcport = -1;
>  	int dstport = -1;
> +	guint16 msg_id;
>  
>  	if (sms_list == NULL)
>  		return;
> @@ -749,6 +743,7 @@ static void sms_dispatch(struct ofono_sms *sms, GSList *sms_list)
>  	 * used, the addresses are the same across all segments.
>  	 */
>  
> +	msg_id = sms_uuid_from_pdu_list(sms_list);
>  	for (l = sms_list; l; l = l->next) {
>  		guint8 dcs;
>  		gboolean comp = FALSE;
> @@ -825,8 +820,8 @@ static void sms_dispatch(struct ofono_sms *sms, GSList *sms_list)
>  
>  		s = sms_list->data;
>  
> -		dispatch_text_message(sms, message, cls, &s->deliver.oaddr,
> -					&s->deliver.scts);
> +		dispatch_text_message(sms, message, msg_id, cls,
> +					&s->deliver.oaddr, &s->deliver.scts);
>  		g_free(message);
>  	}
>  }
> @@ -1104,8 +1099,6 @@ static void sms_remove(struct ofono_atom *atom)
>  
>  	if (sms->settings) {
>  		g_key_file_set_integer(sms->settings, SETTINGS_GROUP,
> -					"NextMessageId", sms->next_msg_id);
> -		g_key_file_set_integer(sms->settings, SETTINGS_GROUP,
>  					"NextReference", sms->ref);
>  		g_key_file_set_boolean(sms->settings, SETTINGS_GROUP,
>  					"UseDeliveryReports",
> @@ -1201,9 +1194,6 @@ static void sms_load_settings(struct ofono_sms *sms, const char *imsi)
>  
>  	sms->imsi = g_strdup(imsi);
>  
> -	sms->next_msg_id = g_key_file_get_integer(sms->settings, SETTINGS_GROUP,
> -							"NextMessageId", NULL);
> -
>  	sms->ref = g_key_file_get_integer(sms->settings, SETTINGS_GROUP,
>  							"NextReference", NULL);
>  	if (sms->ref >= 65536)
> @@ -1306,10 +1296,11 @@ void *ofono_sms_get_data(struct ofono_sms *sms)
>  	return sms->driver_data;
>  }
>  
> -unsigned int __ofono_sms_txq_submit(struct ofono_sms *sms, GSList *list,
> -					unsigned int flags,
> -					ofono_sms_txq_submit_cb_t cb,
> -					void *data, ofono_destroy_func destroy)
> +struct tx_queue_entry *__ofono_sms_txq_submit(
> +	struct ofono_sms *sms, GSList *list,
> +	unsigned int flags, unsigned msg_id,
> +	ofono_sms_txq_submit_cb_t cb,
> +	void *data, ofono_destroy_func destroy)
>  {
>  	struct tx_queue_entry *entry = tx_queue_entry_new(list);
>  
> @@ -1320,7 +1311,7 @@ unsigned int __ofono_sms_txq_submit(struct ofono_sms *sms, GSList *list,
>  				sizeof(entry->receiver));
>  	}
>  
> -	entry->msg_id = sms->next_msg_id++;
> +	entry->msg_id = msg_id;
>  	entry->flags = flags;
>  	entry->cb = cb;
>  	entry->data = data;
> @@ -1331,5 +1322,5 @@ unsigned int __ofono_sms_txq_submit(struct ofono_sms *sms, GSList *list,
>  	if (g_queue_get_length(sms->txq) == 1)
>  		sms->tx_source = g_timeout_add(0, tx_next, sms);
>  
> -	return entry->msg_id;
> +	return entry;
>  }
> diff --git a/src/stk.c b/src/stk.c
> index 556dc68..620811b 100644
> --- a/src/stk.c
> +++ b/src/stk.c
> @@ -323,6 +323,7 @@ static gboolean handle_command_send_sms(const struct stk_command *cmd,
>  	struct ofono_atom *sms_atom;
>  	struct ofono_sms *sms;
>  	GSList msg_list;
> +	guint16 msg_id;
>  
>  	sms_atom = __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_SMS);
>  
> @@ -338,8 +339,8 @@ static gboolean handle_command_send_sms(const struct stk_command *cmd,
>  
>  	msg_list.data = (void *) &cmd->send_sms.gsm_sms;
>  	msg_list.next = NULL;
> -
> -	__ofono_sms_txq_submit(sms, &msg_list, 0, send_sms_submit_cb,
> +	msg_id = sms_uuid_from_pdu_list(&msg_list);
> +	__ofono_sms_txq_submit(sms, &msg_list, 0, msg_id, send_sms_submit_cb,
>  				stk->sms_submit_req, g_free);
>  
>  	stk->cancel_cmd = send_sms_cancel;

Regards,
-Denis

  reply	other threads:[~2010-08-05 17:20 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-03 23:50 [SMS D-Bus 00/19] pull request Inaky Perez-Gonzalez
2010-08-03 23:50 ` [SMS D-Bus 01/19] write_file: make transaction-safe Inaky Perez-Gonzalez
2010-08-05 17:03   ` Denis Kenzior
2010-08-03 23:50 ` [SMS D-Bus 02/19] sms: introduce message ID API Inaky Perez-Gonzalez
2010-08-05 17:10   ` Denis Kenzior
2010-08-05 17:18     ` Inaky Perez-Gonzalez
2010-08-05 18:02       ` Denis Kenzior
2010-08-05 18:07         ` Inaky Perez-Gonzalez
2010-08-05 18:21           ` Denis Kenzior
2010-08-05 18:37             ` Inaky Perez-Gonzalez
2010-08-05 23:34             ` Inaky Perez-Gonzalez
2010-08-03 23:50 ` [SMS D-Bus 03/19] sms: implement SHA256-based message IDs [incomplete] Inaky Perez-Gonzalez
2010-08-05 17:20   ` Denis Kenzior [this message]
2010-08-05 18:17     ` Inaky Perez-Gonzalez
2010-08-03 23:50 ` [SMS D-Bus 04/19] sms: document the org.ofono.SmsMessage interface Inaky Perez-Gonzalez
2010-08-03 23:50 ` [SMS D-Bus 05/19] sms: document handle_sms_status_report() Inaky Perez-Gonzalez
2010-08-03 23:50 ` [SMS D-Bus 06/19] struct tx_queue_entry: add a destructor Inaky Perez-Gonzalez
2010-08-05 17:04   ` Denis Kenzior
2010-08-03 23:50 ` [SMS D-Bus 07/19] sms: introduce bare state machine and transitions Inaky Perez-Gonzalez
2010-08-03 23:50 ` [SMS D-Bus 08/19] sms: introduce the Wait-for-Status-Report state Inaky Perez-Gonzalez
2010-08-03 23:50 ` [SMS D-Bus 09/19] sms: introduce a state change callback for messages Inaky Perez-Gonzalez
2010-08-03 23:50 ` [SMS D-Bus 10/19] sms: export outgoing messages over D-Bus Inaky Perez-Gonzalez
2010-08-03 23:51 ` [SMS D-Bus 11/19] sms: send PropertyChanged signals on state change Inaky Perez-Gonzalez
2010-08-03 23:51 ` [SMS D-Bus 12/19] sms: introduce sms_msg_cancel and its D-Bus wrapper Inaky Perez-Gonzalez
2010-08-03 23:51 ` [SMS D-Bus 13/19] sms: Implement D-Bus SMS-MSG::GetProperties Inaky Perez-Gonzalez
2010-08-03 23:51 ` [SMS D-Bus 14/19] sms: document SMS Message's D-Bus 'To' property Inaky Perez-Gonzalez
2010-08-03 23:51 ` [SMS D-Bus 15/19] sms: test code for message's D-Bus GetProperties Inaky Perez-Gonzalez
2010-08-03 23:51 ` [SMS D-Bus 16/19] automake: fix generation of symlinks for headers Inaky Perez-Gonzalez
2010-08-03 23:51 ` [SMS D-Bus 17/19] sms: document variable usage in sms_msg_send() Inaky Perez-Gonzalez
2010-08-03 23:51 ` [SMS D-Bus 18/19] sms: add test case for message cancel Inaky Perez-Gonzalez
2010-08-03 23:51 ` [SMS D-Bus 19/19] sms: add test case for state change signals Inaky Perez-Gonzalez

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C5AF2E2.2090009@gmail.com \
    --to=denkenz@gmail.com \
    --cc=ofono@ofono.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox