diff options
author | Pekka Pessi <Pekka.Pessi@nokia.com> | 2011-02-01 20:48:26 +0200 |
---|---|---|
committer | Pekka Pessi <Pekka.Pessi@nokia.com> | 2011-02-01 21:21:07 +0200 |
commit | a2fa821e1b69b18904d79737fb26112a963a0f56 (patch) | |
tree | d3e787d95df9ca14d85ec959e31467a252bd00a4 | |
parent | 02afe5741229a998a2a1c55c18c473e0662d1a20 (diff) |
modem/sms: emit incoming-message and immediate-message signals
-rw-r--r-- | modem/sms-service.c | 110 | ||||
-rw-r--r-- | modem/sms.h | 15 |
2 files changed, 109 insertions, 16 deletions
diff --git a/modem/sms-service.c b/modem/sms-service.c index 2ae20db..af82b50 100644 --- a/modem/sms-service.c +++ b/modem/sms-service.c @@ -56,6 +56,8 @@ G_DEFINE_TYPE (ModemSMSService, modem_sms_service, MODEM_TYPE_OFACE) /* Signals we emit */ enum { + SIGNAL_INCOMING_MESSAGE, + SIGNAL_IMMEDIATE_MESSAGE, #if nomore SIGNAL_DELIVER, SIGNAL_OUTGOING_COMPLETE, @@ -104,6 +106,7 @@ static void modem_sms_incoming_deliver (ModemSMSService *self, #endif static void on_incoming_message (DBusGProxy *, char const *, GHashTable *, gpointer); +static void on_immediate_message (DBusGProxy *, char const *, GHashTable *, gpointer); static void on_manager_message_added (DBusGProxy *, char const *, GHashTable *, gpointer); static void on_manager_message_removed (DBusGProxy *, char const *, gpointer); @@ -277,10 +280,7 @@ modem_sms_service_connect (ModemOface *_self) dbus_g_proxy_add_signal (proxy, (name), ##signature); \ dbus_g_proxy_connect_signal (proxy, (name), G_CALLBACK (handler), self, NULL) - /* XXX: SMS class 0. Does Ofono actually need a separate - * signal for them instead of providing the class in the - * properties dict? */ - CONNECT (on_incoming_message, "ImmediateMessage", + CONNECT (on_immediate_message, "ImmediateMessage", G_TYPE_STRING, MODEM_TYPE_DBUS_DICT, G_TYPE_INVALID); CONNECT (on_incoming_message, "IncomingMessage", @@ -365,7 +365,7 @@ modem_sms_service_disconnect (ModemOface *_self) priv->signals = FALSE; dbus_g_proxy_disconnect_signal (proxy, "IncomingMessage", - G_CALLBACK (on_incoming_message), self); + G_CALLBACK (on_immediate_message), self); dbus_g_proxy_disconnect_signal (proxy, "ImmediateMessage", G_CALLBACK (on_incoming_message), self); dbus_g_proxy_disconnect_signal (proxy, "MessageAdded", @@ -441,6 +441,26 @@ modem_sms_service_class_init (ModemSMSServiceClass *klass) G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); + signals[SIGNAL_IMMEDIATE_MESSAGE] = + g_signal_new ("immediate-message", + G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, + 0, + NULL, NULL, + _modem__marshal_VOID__STRING_BOXED, + G_TYPE_NONE, 2, + G_TYPE_STRING, G_TYPE_HASH_TABLE); + + signals[SIGNAL_INCOMING_MESSAGE] = + g_signal_new ("incoming-message", + G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, + 0, + NULL, NULL, + _modem__marshal_VOID__STRING_BOXED, + G_TYPE_NONE, 2, + G_TYPE_STRING, G_TYPE_HASH_TABLE); + #if nomore signals[SIGNAL_DELIVER] = g_signal_new ("deliver", @@ -508,6 +528,24 @@ modem_sms_connect_to_deliver (ModemSMSService *self, } #endif +gulong +modem_sms_connect_to_incoming_message (ModemSMSService *self, + ModemSMSMessageHandler *handler, + gpointer data) +{ + return g_signal_connect (self, "incoming-message", + G_CALLBACK (handler), data); +} + +gulong +modem_sms_connect_to_immediate_message (ModemSMSService *self, + ModemSMSMessageHandler *handler, + gpointer data) +{ + return g_signal_connect (self, "immediate-message", + G_CALLBACK (handler), data); +} + /* ------------------------------------------------------------------------- */ /* modem_sms_service interface */ @@ -520,6 +558,18 @@ modem_sms_service_time_connected (ModemSMSService const *self) return 0; } +gint64 +modem_sms_parse_time (gchar const *s) +{ + struct tm tm = { }; + char *rest; + + rest = strptime (s, "%Y-%m-%dT%H:%M:%S%z", &tm); + + return (gint64) mktime (&tm); +} + + /* ------------------------------------------------------------------------- */ static void @@ -579,17 +629,6 @@ dump_message_dict (GHashTable *dict) } } -static void -on_incoming_message (DBusGProxy *proxy, - char const *message, - GHashTable *dict, - gpointer _self) -{ - DEBUG ("message = \"%s\"", message); - - dump_message_dict (dict); -} - #if nomore static void @@ -743,6 +782,45 @@ modem_sms_incoming_status_report (ModemSMSService *self, } #endif +static void +on_immediate_message (DBusGProxy *proxy, + char const *message, + GHashTable *dict, + gpointer _self) +{ + ModemSMSService *self = MODEM_SMS_SERVICE (_self); + ModemSMSServicePrivate *priv = self->priv; + + if (!priv->connected) + return; + + DEBUG ("immediate = \"%50s\"%s", message, strlen (message) > 50 ? "..." : ""); + dump_message_dict (dict); + + g_signal_emit (self, signals[SIGNAL_IMMEDIATE_MESSAGE], 0, + message, dict); +} + +static void +on_incoming_message (DBusGProxy *proxy, + char const *message, + GHashTable *dict, + gpointer _self) +{ + ModemSMSService *self = MODEM_SMS_SERVICE (_self); + ModemSMSServicePrivate *priv = self->priv; + + if (!priv->connected) + return; + + DEBUG ("incoming = \"%50s\"%s", message, strlen (message) > 50 ? "..." : ""); + dump_message_dict (dict); + + g_signal_emit (self, signals[SIGNAL_INCOMING_MESSAGE], 0, + message, dict); +} + + /* ---------------------------------------------------------------------- */ /* Sending */ diff --git a/modem/sms.h b/modem/sms.h index 68ac36a..182dba8 100644 --- a/modem/sms.h +++ b/modem/sms.h @@ -76,6 +76,11 @@ typedef void ModemSMSDeliverHandler (ModemSMSService *, SMSGDeliver *, gpointer); #endif +typedef void ModemSMSMessageHandler (ModemSMSService *self, + gchar const *message, + GHashTable *info, + gpointer user_data); + typedef void ModemSMSServiceReply (ModemSMSService *self, ModemRequest *request, GError const *error, @@ -101,8 +106,18 @@ gulong modem_sms_connect_to_deliver (ModemSMSService *self, gpointer user_data); #endif +gulong modem_sms_connect_to_incoming_message (ModemSMSService *self, + ModemSMSMessageHandler *handler, + gpointer data); + +gulong modem_sms_connect_to_immediate_message (ModemSMSService *self, + ModemSMSMessageHandler *handler, + gpointer data); + guint64 modem_sms_service_time_connected (ModemSMSService const *self); +gint64 modem_sms_parse_time (gchar const *); + /* ---------------------------------------------------------------------- */ ModemRequest *modem_sms_set_sc_address (ModemSMSService *self, |