* [PATCH 1/3] smsutil: Change the range of time zone
@ 2010-11-30 10:44 Yang Gu
2010-11-30 10:44 ` [PATCH 2/3] Make timezone an optional field Yang Gu
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Yang Gu @ 2010-11-30 10:44 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1303 bytes --]
---
src/smsutil.c | 11 +++++++++--
1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/smsutil.c b/src/smsutil.c
index b06e9bf..644e3e0 100644
--- a/src/smsutil.c
+++ b/src/smsutil.c
@@ -51,6 +51,13 @@
#define SMS_ADDR_FMT "%24[0-9A-F]"
#define SMS_MSGID_FMT "%40[0-9A-F]"
+/*
+ * Time zone accounts for daylight saving time, and the two extreme time
+ * zones on earth are UTC-12 and UTC+14.
+ */
+#define MAX_TIMEZONE 56
+#define MIN_TIMEZONE -48
+
static GSList *sms_assembly_add_fragment_backup(struct sms_assembly *assembly,
const struct sms *sms, time_t ts,
const struct sms_address *addr,
@@ -339,7 +346,7 @@ gboolean sms_encode_scts(const struct sms_scts *in, unsigned char *pdu,
if (in->second > 59)
return FALSE;
- if ((in->timezone > 12*4-1) || (in->timezone < -(12*4-1)))
+ if ((in->timezone > MAX_TIMEZONE) || (in->timezone < MIN_TIMEZONE))
return FALSE;
pdu = pdu + *offset;
@@ -426,7 +433,7 @@ gboolean sms_decode_scts(const unsigned char *pdu, int len,
if (oct & 0x08)
out->timezone = out->timezone * -1;
- if ((out->timezone > 12*4-1) || (out->timezone < -(12*4-1)))
+ if ((out->timezone > MAX_TIMEZONE) || (out->timezone < MIN_TIMEZONE))
return FALSE;
return TRUE;
--
1.7.2.3
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 2/3] Make timezone an optional field 2010-11-30 10:44 [PATCH 1/3] smsutil: Change the range of time zone Yang Gu @ 2010-11-30 10:44 ` Yang Gu 2010-12-08 14:05 ` Denis Kenzior 2010-11-30 10:44 ` [PATCH 3/3] stk: Handle provide local info proactive command Yang Gu 2010-12-07 13:39 ` [PATCH 1/3] smsutil: Change the range of time zone Denis Kenzior 2 siblings, 1 reply; 8+ messages in thread From: Yang Gu @ 2010-11-30 10:44 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2893 bytes --] --- src/smsutil.c | 11 ++++++++++- src/smsutil.h | 1 + src/stkutil.c | 13 ++----------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/smsutil.c b/src/smsutil.c index 644e3e0..20af30a 100644 --- a/src/smsutil.c +++ b/src/smsutil.c @@ -346,7 +346,8 @@ gboolean sms_encode_scts(const struct sms_scts *in, unsigned char *pdu, if (in->second > 59) return FALSE; - if ((in->timezone > MAX_TIMEZONE) || (in->timezone < MIN_TIMEZONE)) + if ((in->timezone > MAX_TIMEZONE || in->timezone < MIN_TIMEZONE) && + in->has_timezone == TRUE) return FALSE; pdu = pdu + *offset; @@ -358,6 +359,11 @@ gboolean sms_encode_scts(const struct sms_scts *in, unsigned char *pdu, pdu[4] = ((in->minute / 10) & 0x0f) | (((in->minute % 10) & 0x0f) << 4); pdu[5] = ((in->second / 10) & 0x0f) | (((in->second % 10) & 0x0f) << 4); + if (in->has_timezone == FALSE) { + pdu[6] = 0xff; + goto out; + } + timezone = abs(in->timezone); pdu[6] = ((timezone / 10) & 0x07) | (((timezone % 10) & 0x0f) << 4); @@ -365,6 +371,7 @@ gboolean sms_encode_scts(const struct sms_scts *in, unsigned char *pdu, if (in->timezone < 0) pdu[6] |= 0x8; +out: *offset += 7; return TRUE; @@ -436,6 +443,8 @@ gboolean sms_decode_scts(const unsigned char *pdu, int len, if ((out->timezone > MAX_TIMEZONE) || (out->timezone < MIN_TIMEZONE)) return FALSE; + out->has_timezone = TRUE; + return TRUE; } diff --git a/src/smsutil.h b/src/smsutil.h index 4b05313..4b6159f 100644 --- a/src/smsutil.h +++ b/src/smsutil.h @@ -223,6 +223,7 @@ struct sms_scts { guint8 hour; guint8 minute; guint8 second; + gboolean has_timezone; gint8 timezone; }; diff --git a/src/stkutil.c b/src/stkutil.c index a211462..01a0021 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -4548,7 +4548,6 @@ static gboolean build_dataobj_datetime_timezone(struct stk_tlv_builder *tlv, const void *data, gboolean cr) { const struct sms_scts *scts = data; - struct sms_scts timestamp; unsigned char value[7]; int offset = 0; unsigned char tag = STK_DATA_OBJECT_TYPE_DATETIME_TIMEZONE; @@ -4556,16 +4555,8 @@ static gboolean build_dataobj_datetime_timezone(struct stk_tlv_builder *tlv, if (scts->month == 0 && scts->day == 0) return TRUE; - /* Time zone information is optional */ - if (scts->timezone == (gint8) 0xff) { - memcpy(×tamp, scts, sizeof(timestamp)); - timestamp.timezone = 0; - if (sms_encode_scts(×tamp, value, &offset) != TRUE) - return FALSE; - value[6] = 0xff; - } else - if (sms_encode_scts(scts, value, &offset) != TRUE) - return FALSE; + if (sms_encode_scts(scts, value, &offset) != TRUE) + return FALSE; return stk_tlv_builder_open_container(tlv, cr, tag, FALSE) && stk_tlv_builder_append_bytes(tlv, value, 7) && -- 1.7.2.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] Make timezone an optional field 2010-11-30 10:44 ` [PATCH 2/3] Make timezone an optional field Yang Gu @ 2010-12-08 14:05 ` Denis Kenzior 0 siblings, 0 replies; 8+ messages in thread From: Denis Kenzior @ 2010-12-08 14:05 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 276 bytes --] Hi Yang, On 11/30/2010 04:44 AM, Yang Gu wrote: > --- > src/smsutil.c | 11 ++++++++++- > src/smsutil.h | 1 + > src/stkutil.c | 13 ++----------- > 3 files changed, 13 insertions(+), 12 deletions(-) > Patch has been applied, thanks. Regards, -Denis ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] stk: Handle provide local info proactive command 2010-11-30 10:44 [PATCH 1/3] smsutil: Change the range of time zone Yang Gu 2010-11-30 10:44 ` [PATCH 2/3] Make timezone an optional field Yang Gu @ 2010-11-30 10:44 ` Yang Gu 2010-11-30 20:43 ` Jeevaka.Badrappan 2010-12-08 14:05 ` Denis Kenzior 2010-12-07 13:39 ` [PATCH 1/3] smsutil: Change the range of time zone Denis Kenzior 2 siblings, 2 replies; 8+ messages in thread From: Yang Gu @ 2010-11-30 10:44 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2814 bytes --] --- src/stk.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 77 insertions(+), 0 deletions(-) diff --git a/src/stk.c b/src/stk.c index a4abb7d..08353f2 100644 --- a/src/stk.c +++ b/src/stk.c @@ -26,6 +26,7 @@ #define _GNU_SOURCE #include <string.h> #include <stdio.h> +#include <stdlib.h> #include <stdint.h> #include <glib.h> @@ -1995,6 +1996,77 @@ static gboolean handle_command_refresh(const struct stk_command *cmd, return TRUE; } +static void get_time(struct stk_response *rsp) +{ + time_t now; + struct tm *t; + + time(&now); + t = localtime(&now); + + rsp->result.type = STK_RESULT_TYPE_SUCCESS; + + if (t->tm_year > 100) + rsp->provide_local_info.datetime.year = t->tm_year - 100; + else + rsp->provide_local_info.datetime.year = t->tm_year; + + rsp->provide_local_info.datetime.month = t->tm_mon + 1; + rsp->provide_local_info.datetime.day = t->tm_mday; + rsp->provide_local_info.datetime.hour = t->tm_hour; + rsp->provide_local_info.datetime.minute = t->tm_min; + rsp->provide_local_info.datetime.second = t->tm_sec; + rsp->provide_local_info.datetime.timezone = t->tm_gmtoff / 900; + rsp->provide_local_info.datetime.has_timezone = TRUE; + + return; +} + +static void get_lang(struct stk_response *rsp, struct ofono_stk *stk) +{ + char *l; + char lang[3]; + struct ofono_error failure = { .type = OFONO_ERROR_TYPE_FAILURE }; + + l = getenv("LANG"); + if (l == NULL) { + rsp->result.type = STK_RESULT_TYPE_NOT_CAPABLE; + goto out; + } + + memcpy(lang, l, 2); + lang[2] = '\0'; + + rsp->result.type = STK_RESULT_TYPE_SUCCESS; + rsp->provide_local_info.language = lang; + +out: + if (stk_respond(stk, rsp, stk_command_cb)) + stk_command_cb(&failure, stk); +} + +static gboolean handle_command_provide_local_info(const struct stk_command *cmd, + struct stk_response *rsp, struct ofono_stk *stk) +{ + switch (cmd->qualifier) { + case 3: + DBG("Date, time and time zone"); + get_time(rsp); + return TRUE; + + case 4: + DBG("Language setting"); + get_lang(rsp, stk); + return FALSE; + + default: + ofono_info("Unsupported Provide Local Info qualifier: %d", + cmd->qualifier); + rsp->result.type = STK_RESULT_TYPE_NOT_CAPABLE; + return TRUE; + } +} + static void send_dtmf_cancel(struct ofono_stk *stk) { struct ofono_voicecall *vc = NULL; @@ -2427,6 +2499,11 @@ void ofono_stk_proactive_command_notify(struct ofono_stk *stk, &rsp, stk); break; + case STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO: + respond = handle_command_provide_local_info(stk->pending_cmd, + &rsp, stk); + break; + case STK_COMMAND_TYPE_SEND_DTMF: respond = handle_command_send_dtmf(stk->pending_cmd, &rsp, stk); -- 1.7.2.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* RE: [PATCH 3/3] stk: Handle provide local info proactive command 2010-11-30 10:44 ` [PATCH 3/3] stk: Handle provide local info proactive command Yang Gu @ 2010-11-30 20:43 ` Jeevaka.Badrappan 2010-12-01 2:03 ` Gu, Yang 2010-12-08 14:05 ` Denis Kenzior 1 sibling, 1 reply; 8+ messages in thread From: Jeevaka.Badrappan @ 2010-11-30 20:43 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 508 bytes --] Hi Yang, > > +static void get_time(struct stk_response *rsp) { > + time_t now; > + struct tm *t; > + > + time(&now); > + t = localtime(&now); > + > + rsp->result.type = STK_RESULT_TYPE_SUCCESS; > + > + if (t->tm_year > 100) > + rsp->provide_local_info.datetime.year = > t->tm_year - 100; > + else > + rsp->provide_local_info.datetime.year = t->tm_year; > + Incase of error, localtime shall return a null pointer. I think its better to add the NULL check. Regards, Jeevaka ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH 3/3] stk: Handle provide local info proactive command 2010-11-30 20:43 ` Jeevaka.Badrappan @ 2010-12-01 2:03 ` Gu, Yang 0 siblings, 0 replies; 8+ messages in thread From: Gu, Yang @ 2010-12-01 2:03 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 910 bytes --] Hi Jeevaka, >-----Original Message----- >From: ofono-bounces(a)ofono.org [mailto:ofono-bounces(a)ofono.org] On Behalf Of >Jeevaka.Badrappan(a)elektrobit.com >Sent: Wednesday, December 01, 2010 4:43 AM >To: ofono(a)ofono.org >Subject: RE: [PATCH 3/3] stk: Handle provide local info proactive command > > >Hi Yang, > >> >> +static void get_time(struct stk_response *rsp) { >> + time_t now; >> + struct tm *t; >> + >> + time(&now); >> + t = localtime(&now); >> + >> + rsp->result.type = STK_RESULT_TYPE_SUCCESS; >> + >> + if (t->tm_year > 100) >> + rsp->provide_local_info.datetime.year = >> t->tm_year - 100; >> + else >> + rsp->provide_local_info.datetime.year = t->tm_year; >> + > >Incase of error, localtime shall return a null pointer. I think its >better to add the NULL check. Thanks for the comment. I have sent out the modified version. Regards, -Yang ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] stk: Handle provide local info proactive command 2010-11-30 10:44 ` [PATCH 3/3] stk: Handle provide local info proactive command Yang Gu 2010-11-30 20:43 ` Jeevaka.Badrappan @ 2010-12-08 14:05 ` Denis Kenzior 1 sibling, 0 replies; 8+ messages in thread From: Denis Kenzior @ 2010-12-08 14:05 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 255 bytes --] Hi Yang, On 11/30/2010 04:44 AM, Yang Gu wrote: > --- > src/stk.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 77 insertions(+), 0 deletions(-) > Patch has been applied, thanks. Regards, -Denis ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] smsutil: Change the range of time zone 2010-11-30 10:44 [PATCH 1/3] smsutil: Change the range of time zone Yang Gu 2010-11-30 10:44 ` [PATCH 2/3] Make timezone an optional field Yang Gu 2010-11-30 10:44 ` [PATCH 3/3] stk: Handle provide local info proactive command Yang Gu @ 2010-12-07 13:39 ` Denis Kenzior 2 siblings, 0 replies; 8+ messages in thread From: Denis Kenzior @ 2010-12-07 13:39 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 208 bytes --] Hi Yang, On 11/30/2010 04:44 AM, Yang Gu wrote: > --- > src/smsutil.c | 11 +++++++++-- > 1 files changed, 9 insertions(+), 2 deletions(-) > Patch has been applied, thanks. Regards, -Denis ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2010-12-08 14:05 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-11-30 10:44 [PATCH 1/3] smsutil: Change the range of time zone Yang Gu 2010-11-30 10:44 ` [PATCH 2/3] Make timezone an optional field Yang Gu 2010-12-08 14:05 ` Denis Kenzior 2010-11-30 10:44 ` [PATCH 3/3] stk: Handle provide local info proactive command Yang Gu 2010-11-30 20:43 ` Jeevaka.Badrappan 2010-12-01 2:03 ` Gu, Yang 2010-12-08 14:05 ` Denis Kenzior 2010-12-07 13:39 ` [PATCH 1/3] smsutil: Change the range of time zone Denis Kenzior
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.