summaryrefslogtreecommitdiff
path: root/src/pdu.h
diff options
context:
space:
mode:
authorSerhii Kostiuk <serhii.o.kostiuk@globallogic.com>2019-12-13 17:40:34 +0200
committerSerhii Kostiuk <serhii.o.kostiuk@globallogic.com>2019-12-13 19:03:12 +0200
commit5d0e55f465b750d1379eea934055b8738db8fc8a (patch)
tree0b7c5fcfadf4fb8559130ae27302e0fcb52cbafc /src/pdu.h
parent02d34f9196aa86cef2bc17ebd0ed62da95cb25c5 (diff)
downloadsms-utils-5d0e55f465b750d1379eea934055b8738db8fc8a.tar.gz
sms-utils-5d0e55f465b750d1379eea934055b8738db8fc8a.tar.bz2
sms-utils-5d0e55f465b750d1379eea934055b8738db8fc8a.zip
[MTX-3102] mPower Feb20: IN:3899 MTCDT-LVW3 fails SMS with GUI
Fixed the logic for parsing single-part and multi-part messages for LVW3 and LNA3. Now single-part messages should be parsed as correctly as multi-part messages. This logic improves the logic that were previously implemented in with multi-part messages support for LVW2: bbf6ae9b1790c7129bf249641350b302def3ee27. What changed: - CDMA-specific SMS Teleservice ID is now saved as part of the PDU structure - SMS Teleservice ID is now used to determine if the message CDMA Wireless Enhanced Messaging Teleservice (WEMT) with an actual UDH header - UDH headers are used for multi-part messages in LVW3/LNA3 Why changed: - UDH header may NOT be present in the SMS PDU - first byte of user data may be a letter instead of the UDH header size - when letter is parsed as side we get a lot of issues with segmentation faults, parsing issues, garbage in payload and so on - so this commit adds SMS type detection before actual UDH header parsing attempt is performed Sources for implementation: - Telit LE910 V2 SERIES AT COMMANDS REFERENCE GUIDE 80446ST10707A Rev.3, section 5.1.5.5.7 Read Message (3GPP2) - +CMGR contains definition of Teleservice ID field and four of the types: 4097 page, 4098 SMS (0x1002), 4099 voice mail, 262144 voice mail notification - 3GPP2 X.S0004-550-E, section 2.256 SMS_TeleserviceIdentifier contains definition for additional SMS types including 4101 (0x1005) CDMA Wireless Enhanced Messaging Teleservice (WEMT). - Teleservice ID 0x1002 is actually used for short messages in Verizon: ```+CMGL: 12,1,"",23 098010310REDACTED4F3 191213 050558 1002 0009 0C D4F29C0E32CBDF6D503508``` - Teleservice ID 0x1005 is actually used for multi-part messages in Verizon: ```+CMGL: 13,1,"",152 098010310REDACTED4F3 191213 050741 1005 0009 A0 05 00 03 4A 02 01 CC 66B3D96C369BCD66B3D96C369BCDE6E3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCFE7F3F97C3E9FCF +CMGL: 14,1,"",143 098010310REDACTED4F3 191213 050743 1005 0009 95 05 00 03 4A 02 02 CE E7F3F97C3E9FCFE7F3F97C3E9FCFE7B3D96C369BCD66B3D96C369BCD66B3D96C369BCDE670381C0E87C3E170381C0E87C3E170381C0E87C3E170381C0E87C3E170381C0E87C3E170381C0E87C3E170381C0E87C3E170381C0E87C3E170381C0E87C3E170381C0E87C3E17038168BC562B1582C168BC562B1582C1603```
Diffstat (limited to 'src/pdu.h')
-rw-r--r--src/pdu.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/pdu.h b/src/pdu.h
index 5b4eb15..dea429a 100644
--- a/src/pdu.h
+++ b/src/pdu.h
@@ -60,6 +60,21 @@ enum {
PDU_ALPHABET_DEFAULT_MULTI = 9,//no GSM, LVW2 7-bit, multi-part
};
+// CDMA Teleservice Identifiers (what type of message is received in CDMA network)
+// All such identifiers are described in 3GPP2 X.S0004-550-E, section 2.256 SMS_TeleserviceIdentifier
+enum {
+ PDU_TELE_ID_UNUSED = 0, // Not used.
+ // 1 - Reserved for maintenance.
+ // 2 through 4095 - Reserved for assignment by MAP.
+ // ...
+ PDU_TELE_ID_CDMA_PAGE = 4097, // CDMA Cellular Paging Teleservice.
+ PDU_TELE_ID_CDMA_MSG = 4098, // CDMA Cellular Messaging Teleservices.
+ PDU_TELE_ID_CDMA_VOICE_MSG_NOTIF = 4099, // CDMA Voice Mail Notification
+ // ...
+ PDU_TELE_ID_CDMA_WEMT = 4101 // CDMA Wireless Enhanced Messaging Teleservice (WEMT).
+ // ...
+};
+
struct pdu_info {
int msg_len;
struct pdu_addr smsc_addr;
@@ -77,6 +92,7 @@ struct pdu_info {
} type;
uint8_t msg_reference;
uint8_t protocol_id;
+ uint16_t teleservice_id; // CDMA-specific, see 3GPP2 X.S0004-550-E for details
union {
uint8_t data_coding;
struct {