зеркало из https://github.com/mozilla/gecko-dev.git
Bug 913313 - [wasabi][CDMA] There is no tick icon next to the message sent after enabling "Delivery reports". r=gene
This commit is contained in:
Родитель
d450713b9e
Коммит
934642e3ff
|
@ -2772,16 +2772,18 @@ this.PDU_CDMA_MSG_CODING_7BITS_GSM = 0x09; // GSM 7-bit default alphabet(7-bi
|
|||
this.PDU_CDMA_MSG_CODING_GSM_DCS = 0x0A; // GSM Data-Coding-Scheme, Not supported
|
||||
|
||||
// SMS Message Type, as defined in 3GPP2 C.S0015-A v2.0, Table 4.5.1-1
|
||||
this.PDU_CDMA_MSG_TYPE_DELIVER = 0x01; // Receive
|
||||
this.PDU_CDMA_MSG_TYPE_SUBMIT = 0x02; // Send
|
||||
this.PDU_CDMA_MSG_TYPE_DELIVER = 0x01; // Deliver
|
||||
this.PDU_CDMA_MSG_TYPE_SUBMIT = 0x02; // Submit
|
||||
this.PDU_CDMA_MSG_TYPE_DELIVER_ACK = 0x04; // Delivery Acknowledgment
|
||||
|
||||
// SMS User Data Subparameters, as defined in 3GPP2 C.S0015-A v2.0, Table 4.5-1
|
||||
this.PDU_CDMA_MSG_USERDATA_MSG_ID = 0x00; // Message Identifier
|
||||
this.PDU_CDMA_MSG_USERDATA_BODY = 0x01; // User Data Body
|
||||
this.PDU_CDMA_MSG_USERDATA_TIMESTAMP = 0x03; // Message Center Time Stamp
|
||||
this.PDU_CDMA_REPLY_OPTION = 0x0A; // Reply Option
|
||||
this.PDU_CDMA_LANGUAGE_INDICATOR = 0x0D; // Language Indicator
|
||||
this.PDU_CDMA_MSG_USERDATA_MSG_ID = 0x00; // Message Identifier
|
||||
this.PDU_CDMA_MSG_USERDATA_BODY = 0x01; // User Data Body
|
||||
this.PDU_CDMA_MSG_USERDATA_TIMESTAMP = 0x03; // Message Center Time Stamp
|
||||
this.PDU_CDMA_MSG_USERDATA_REPLY_OPTION = 0x0A; // Reply Option
|
||||
this.PDU_CDMA_LANGUAGE_INDICATOR = 0x0D; // Language Indicator
|
||||
this.PDU_CDMA_MSG_USERDATA_CALLBACK_NUMBER = 0x0E; // Callback Number
|
||||
this.PDU_CDMA_MSG_USER_DATA_MSG_STATUS = 0x14; // Message Status
|
||||
|
||||
// CDMA Language Indicator: Language groups
|
||||
// see 3GPP2 C.R1001-F table 9.2-1
|
||||
|
|
|
@ -4306,6 +4306,46 @@ let RIL = {
|
|||
return PDU_FCS_OK;
|
||||
},
|
||||
|
||||
/**
|
||||
* Helper for processing CDMA SMS Delivery Acknowledgment Message
|
||||
*
|
||||
* @param message
|
||||
* decoded SMS Delivery ACK message from CdmaPDUHelper.
|
||||
*
|
||||
* @return A failure cause defined in 3GPP 23.040 clause 9.2.3.22.
|
||||
*/
|
||||
_processCdmaSmsStatusReport: function _processCdmaSmsStatusReport(message) {
|
||||
let options = this._pendingSentSmsMap[message.msgId];
|
||||
if (!options) {
|
||||
if (DEBUG) debug("no pending SMS-SUBMIT message");
|
||||
return PDU_FCS_OK;
|
||||
}
|
||||
|
||||
if (message.errorClass === 2) {
|
||||
if (DEBUG) debug("SMS-STATUS-REPORT: delivery still pending, msgStatus: " + message.msgStatus);
|
||||
return PDU_FCS_OK;
|
||||
}
|
||||
|
||||
delete this._pendingSentSmsMap[message.msgId];
|
||||
|
||||
if (message.errorClass === -1 && message.body) {
|
||||
// Process as normal incoming SMS, if errorClass is invalid
|
||||
// but message body is available.
|
||||
return this._processSmsMultipart(message);
|
||||
}
|
||||
|
||||
let deliveryStatus = (message.errorClass === 0)
|
||||
? GECKO_SMS_DELIVERY_STATUS_SUCCESS
|
||||
: GECKO_SMS_DELIVERY_STATUS_ERROR;
|
||||
this.sendChromeMessage({
|
||||
rilMessageType: options.rilMessageType,
|
||||
rilMessageToken: options.rilMessageToken,
|
||||
deliveryStatus: deliveryStatus
|
||||
});
|
||||
|
||||
return PDU_FCS_OK;
|
||||
},
|
||||
|
||||
/**
|
||||
* Helper for processing received multipart SMS.
|
||||
*
|
||||
|
@ -6206,7 +6246,11 @@ RIL[UNSOLICITED_RESPONSE_CDMA_NEW_SMS] = function UNSOLICITED_RESPONSE_CDMA_NEW_
|
|||
let [message, result] = CdmaPDUHelper.processReceivedSms(length);
|
||||
|
||||
if (message) {
|
||||
result = this._processSmsMultipart(message);
|
||||
if (message.subMsgType === PDU_CDMA_MSG_TYPE_DELIVER_ACK) {
|
||||
result = this._processCdmaSmsStatusReport(message);
|
||||
} else {
|
||||
result = this._processSmsMultipart(message);
|
||||
}
|
||||
}
|
||||
|
||||
if (result == PDU_FCS_RESERVED || result == MOZ_FCS_WAIT_FOR_EXPLICIT_ACK) {
|
||||
|
@ -8667,6 +8711,9 @@ let CdmaPDUHelper = {
|
|||
// User Data
|
||||
this.encodeUserDataMsg(options);
|
||||
|
||||
// Reply Option
|
||||
this.encodeUserDataReplyOption(options);
|
||||
|
||||
return userDataBuffer;
|
||||
},
|
||||
|
||||
|
@ -8791,6 +8838,21 @@ let CdmaPDUHelper = {
|
|||
BitBufferHelper.overwriteWriteBuffer(lengthPosition - 1, [currentPosition - lengthPosition]);
|
||||
},
|
||||
|
||||
/**
|
||||
* User data subparameter encoder : Reply Option
|
||||
*
|
||||
* @see 3GGP2 C.S0015-B 2.0, 4.5.11 Reply Option
|
||||
*/
|
||||
encodeUserDataReplyOption: function cdma_encodeUserDataReplyOption(options) {
|
||||
if (options.requestStatusReport) {
|
||||
BitBufferHelper.writeBits(PDU_CDMA_MSG_USERDATA_REPLY_OPTION, 8);
|
||||
BitBufferHelper.writeBits(1, 8);
|
||||
BitBufferHelper.writeBits(0, 1); // USER_ACK_REQ
|
||||
BitBufferHelper.writeBits(1, 1); // DAK_REQ
|
||||
BitBufferHelper.flushWithPadding();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Entry point for SMS decoding, the returned object is made compatible
|
||||
* with existing readMessage() of GsmPDUHelper
|
||||
|
@ -8838,39 +8900,56 @@ let CdmaPDUHelper = {
|
|||
message.sender += String.fromCharCode(addrDigit);
|
||||
}
|
||||
|
||||
// User Data
|
||||
// Bearer Data
|
||||
this.decodeUserData(message);
|
||||
|
||||
// Bearer Data Sub-Parameter: User Data
|
||||
let userData = message[PDU_CDMA_MSG_USERDATA_BODY];
|
||||
[message.header, message.body, message.encoding] =
|
||||
(userData)? [userData.header, userData.body, userData.encoding]
|
||||
: [null, null, null];
|
||||
|
||||
// Bearer Data Sub-Parameter: Message Status
|
||||
// Success Delivery (0) if both Message Status and User Data are absent.
|
||||
// Message Status absent (-1) if only User Data is available.
|
||||
let msgStatus = message[PDU_CDMA_MSG_USER_DATA_MSG_STATUS];
|
||||
[message.errorClass, message.msgStatus] =
|
||||
(msgStatus)? [msgStatus.errorClass, msgStatus.msgStatus]
|
||||
: ((message.body)? [-1, -1]: [0, 0]);
|
||||
|
||||
// Transform message to GSM msg
|
||||
let msg = {
|
||||
SMSC: "",
|
||||
mti: 0,
|
||||
udhi: 0,
|
||||
sender: message.sender,
|
||||
recipient: null,
|
||||
pid: PDU_PID_DEFAULT,
|
||||
epid: PDU_PID_DEFAULT,
|
||||
dcs: 0,
|
||||
mwi: null, //message[PDU_CDMA_MSG_USERDATA_BODY].header ? message[PDU_CDMA_MSG_USERDATA_BODY].header.mwi : null,
|
||||
replace: false,
|
||||
header: message[PDU_CDMA_MSG_USERDATA_BODY].header,
|
||||
body: message[PDU_CDMA_MSG_USERDATA_BODY].body,
|
||||
data: null,
|
||||
timestamp: message[PDU_CDMA_MSG_USERDATA_TIMESTAMP],
|
||||
language: message[PDU_CDMA_LANGUAGE_INDICATOR],
|
||||
status: null,
|
||||
scts: null,
|
||||
dt: null,
|
||||
encoding: message[PDU_CDMA_MSG_USERDATA_BODY].encoding,
|
||||
messageClass: GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL],
|
||||
messageType: message.messageType,
|
||||
serviceCategory: message.service
|
||||
SMSC: "",
|
||||
mti: 0,
|
||||
udhi: 0,
|
||||
sender: message.sender,
|
||||
recipient: null,
|
||||
pid: PDU_PID_DEFAULT,
|
||||
epid: PDU_PID_DEFAULT,
|
||||
dcs: 0,
|
||||
mwi: null,
|
||||
replace: false,
|
||||
header: message.header,
|
||||
body: message.body,
|
||||
data: null,
|
||||
timestamp: message[PDU_CDMA_MSG_USERDATA_TIMESTAMP],
|
||||
language: message[PDU_CDMA_LANGUAGE_INDICATOR],
|
||||
status: null,
|
||||
scts: null,
|
||||
dt: null,
|
||||
encoding: message.encoding,
|
||||
messageClass: GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL],
|
||||
messageType: message.messageType,
|
||||
serviceCategory: message.service,
|
||||
subMsgType: message[PDU_CDMA_MSG_USERDATA_MSG_ID].msgType,
|
||||
msgId: message[PDU_CDMA_MSG_USERDATA_MSG_ID].msgId,
|
||||
errorClass: message.errorClass,
|
||||
msgStatus: message.msgStatus
|
||||
};
|
||||
|
||||
return msg;
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Helper for processing received SMS parcel data.
|
||||
*
|
||||
|
@ -8963,8 +9042,8 @@ let CdmaPDUHelper = {
|
|||
case PDU_CDMA_MSG_USERDATA_TIMESTAMP:
|
||||
message[id] = this.decodeUserDataTimestamp();
|
||||
break;
|
||||
case PDU_CDMA_REPLY_OPTION:
|
||||
message[id] = this.decodeUserDataReplyAction();
|
||||
case PDU_CDMA_MSG_USERDATA_REPLY_OPTION:
|
||||
message[id] = this.decodeUserDataReplyOption();
|
||||
break;
|
||||
case PDU_CDMA_LANGUAGE_INDICATOR:
|
||||
message[id] = this.decodeLanguageIndicator();
|
||||
|
@ -8972,6 +9051,9 @@ let CdmaPDUHelper = {
|
|||
case PDU_CDMA_MSG_USERDATA_CALLBACK_NUMBER:
|
||||
message[id] = this.decodeUserDataCallbackNumber();
|
||||
break;
|
||||
case PDU_CDMA_MSG_USER_DATA_MSG_STATUS:
|
||||
message[id] = this.decodeUserDataMsgStatus();
|
||||
break;
|
||||
}
|
||||
|
||||
userDataLength -= (length + 2);
|
||||
|
@ -9338,7 +9420,7 @@ let CdmaPDUHelper = {
|
|||
*
|
||||
* @see 3GGP2 C.S0015-B 2.0, 4.5.11 Reply Option
|
||||
*/
|
||||
decodeUserDataReplyAction: function cdma_decodeUserDataReplyAction() {
|
||||
decodeUserDataReplyOption: function cdma_decodeUserDataReplyOption() {
|
||||
let replyAction = BitBufferHelper.readBits(4),
|
||||
result = { userAck: (replyAction & 0x8) ? true : false,
|
||||
deliverAck: (replyAction & 0x4) ? true : false,
|
||||
|
@ -9386,6 +9468,20 @@ let CdmaPDUHelper = {
|
|||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
* User data subparameter decoder : Message Status
|
||||
*
|
||||
* @see 3GGP2 C.S0015-B 2.0, 4.5.21 Message Status
|
||||
*/
|
||||
decodeUserDataMsgStatus: function cdma_decodeUserDataMsgStatus() {
|
||||
let result = {
|
||||
errorClass: BitBufferHelper.readBits(2),
|
||||
msgStatus: BitBufferHelper.readBits(6)
|
||||
};
|
||||
|
||||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
* Decode information record parcel.
|
||||
*/
|
||||
|
|
Загрузка…
Ссылка в новой задаче