diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-sms-part-3gpp.c | 31 | ||||
-rw-r--r-- | src/tests/test-sms-part-3gpp.c | 26 |
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); |