Open Source Telephony
 help / color / mirror / Atom feed
* [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(&timestamp, scts, sizeof(timestamp));
-		timestamp.timezone = 0;
-		if (sms_encode_scts(&timestamp, 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

* [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 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

* 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

* 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

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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox