aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoramol.lad <amol.lad@4rf.com>2019-09-19 16:49:15 +0530
committerAleksander Morgado <aleksander@aleksander.es>2019-09-22 09:15:51 +0200
commit16145c29def4dfb7202fd0167d567f0b1a9caef4 (patch)
treecc8df7396c18e9263f30153f25f020d04c7b33e4
parent59e82b3f32a35b351be8c4921e9092ad337aa1ea (diff)
sms-part-3gpp: SMS timestamp in ISO8601 format
-rw-r--r--src/mm-sms-part-3gpp.c31
-rw-r--r--src/tests/test-sms-part-3gpp.c26
2 files changed, 29 insertions, 28 deletions
diff --git a/src/mm-sms-part-3gpp.c b/src/mm-sms-part-3gpp.c
index 7e3f5374..d9779898 100644
--- a/src/mm-sms-part-3gpp.c
+++ b/src/mm-sms-part-3gpp.c
@@ -156,25 +156,26 @@ sms_decode_address (const guint8 *address, int len)
return utf8;
}
-static char *
+static gchar *
sms_decode_timestamp (const guint8 *timestamp)
{
- /* YYMMDDHHMMSS+ZZ */
- char *timestr;
- int quarters, hours;
-
- timestr = g_malloc0 (16);
- sms_semi_octets_to_bcd_string (timestr, timestamp, 6);
+ /* ISO8601 format: YYYY-MM-DDTHH:MM:SS+HHMM */
+ guint year, month, day, hour, minute, second;
+ gint quarters, offset_minutes;
+
+ year = 2000 + ((timestamp[0] & 0xf) * 10) + ((timestamp[0] >> 4) & 0xf);
+ month = ((timestamp[1] & 0xf) * 10) + ((timestamp[1] >> 4) & 0xf);
+ day = ((timestamp[2] & 0xf) * 10) + ((timestamp[2] >> 4) & 0xf);
+ hour = ((timestamp[3] & 0xf) * 10) + ((timestamp[3] >> 4) & 0xf);
+ minute = ((timestamp[4] & 0xf) * 10) + ((timestamp[4] >> 4) & 0xf);
+ second = ((timestamp[5] & 0xf) * 10) + ((timestamp[5] >> 4) & 0xf);
quarters = ((timestamp[6] & 0x7) * 10) + ((timestamp[6] >> 4) & 0xf);
- hours = quarters / 4;
+ offset_minutes = quarters * 15;
if (timestamp[6] & 0x08)
- timestr[12] = '-';
- else
- timestr[12] = '+';
- timestr[13] = (hours / 10) + '0';
- timestr[14] = (hours % 10) + '0';
- /* TODO(njw): Change timestamp rep to something that includes quarter-hours */
- return timestr;
+ offset_minutes = -1 * offset_minutes;
+
+ return mm_new_iso8601_time (year, month, day, hour,
+ minute, second, TRUE, offset_minutes);
}
static MMSmsEncoding
diff --git a/src/tests/test-sms-part-3gpp.c b/src/tests/test-sms-part-3gpp.c
index dcf4cc87..387cf151 100644
--- a/src/tests/test-sms-part-3gpp.c
+++ b/src/tests/test-sms-part-3gpp.c
@@ -136,7 +136,7 @@ test_pdu1 (void)
pdu, sizeof (pdu),
"+12404492164", /* smsc */
"+16175927198", /* number */
- "110228115050-05", /* timestamp */
+ "2011-02-28T11:50:50-05:00", /* timestamp */
FALSE,
"Here's a longer message [{with some extended characters}] "
"thrown in, such as £ and ΩΠΨ and §¿ as well.", /* text */
@@ -157,7 +157,7 @@ test_pdu2 (void)
pdu, sizeof (pdu),
"+79037011111", /* smsc */
"InternetSMS", /* number */
- "110329192004+04", /* timestamp */
+ "2011-03-29T19:20:04+04:00", /* timestamp */
FALSE,
"тест", /* text */
NULL, 0);
@@ -177,7 +177,7 @@ test_pdu3 (void)
pdu, sizeof (pdu),
"+12345678901", /* smsc */
"+18005551212", /* number */
- "110101123456+00", /* timestamp */
+ "2011-01-01T12:34:56+00:00", /* timestamp */
FALSE,
"hellohello", /* text */
NULL, 0);
@@ -198,7 +198,7 @@ test_pdu3_nzpid (void)
pdu, sizeof (pdu),
"+12345678901", /* smsc */
"+18005551212", /* number */
- "110101123456+00", /* timestamp */
+ "2011-01-01T12:34:56+00:00", /* timestamp */
FALSE,
"hellohello", /* text */
NULL, 0);
@@ -219,7 +219,7 @@ test_pdu3_mms (void)
pdu, sizeof (pdu),
"+12345678901", /* smsc */
"+18005551212", /* number */
- "110101123456+00", /* timestamp */
+ "2011-01-01T12:34:56+00:00", /* timestamp */
FALSE,
"hellohello", /* text */
NULL, 0);
@@ -240,7 +240,7 @@ test_pdu3_natl (void)
pdu, sizeof (pdu),
"+12345678901", /* smsc */
"18005551212", /* number, no plus */
- "110101123456+00", /* timestamp */
+ "2011-01-01T12:34:56+00:00", /* timestamp */
FALSE,
"hellohello", /* text */
NULL, 0);
@@ -262,7 +262,7 @@ test_pdu3_8bit (void)
pdu, sizeof (pdu),
"+12345678901", /* smsc */
"+18005551212", /* number */
- "110101123456+00", /* timestamp */
+ "2011-01-01T12:34:56+00:00", /* timestamp */
FALSE,
NULL, /* text */
expected_data, /* data */
@@ -310,7 +310,7 @@ test_pdu_dcsf1 (void)
pdu, sizeof (pdu),
"+33609001390", /* smsc */
"1800", /* number */
- "110624130815+02", /* timestamp */
+ "2011-06-24T13:08:15+02:00", /* timestamp */
FALSE,
"Info SFR - Confidentiel, à ne jamais transmettre -\r\n"
"Voici votre nouveau mot de passe : sw2ced pour gérer "
@@ -334,7 +334,7 @@ test_pdu_dcsf_8bit (void)
pdu, sizeof (pdu),
"+12345678901", /* smsc */
"+18005551212", /* number */
- "110101123456+00", /* timestamp */
+ "2011-01-01T12:34:56+00:00", /* timestamp */
FALSE,
NULL, /* text */
expected_data, /* data */
@@ -380,7 +380,7 @@ test_pdu_udhi (void)
hexpdu,
"+31653131316", /* smsc */
"1002", /* number */
- "110629233219+02", /* timestamp */
+ "2011-06-29T23:32:19+02:00", /* timestamp */
TRUE,
"Welkom, bel om uw Voicemail te beluisteren naar +31612001233"
" (PrePay: *100*1233#). Voicemail ontvangen is altijd gratis."
@@ -405,7 +405,7 @@ test_pdu_multipart (void)
hexpdu1,
"+12063130025", /* smsc */
"+16175046925", /* number */
- "120425195650-04", /* timestamp */
+ "2012-04-25T19:56:50-04:00", /* timestamp */
TRUE, /* multipart! */
"This is a very long test designed to exercise multi part capability. It should "
"show up as one message, not as two, as the underlying encoding represents ", /* text */
@@ -415,7 +415,7 @@ test_pdu_multipart (void)
hexpdu2,
"+12063130026", /* smsc */
"+16175046925", /* number */
- "120425195651-04", /* timestamp */
+ "2012-04-25T19:56:51-04:00", /* timestamp */
TRUE, /* multipart! */
"that the parts are related to one another. ", /* text */
NULL, 0);
@@ -448,7 +448,7 @@ test_pdu_not_stored (void)
hexpdu1,
"+34656000311", /* smsc */
"639337937", /* number */
- "120911074036+02", /* timestamp */
+ "2012-09-11T07:40:36+02:00", /* timestamp */
FALSE, /* multipart! */
NULL, /* text */
NULL, 0);