зеркало из https://github.com/mozilla/gecko-dev.git
Bug 797277 - Part 3/5: RIL implementation, r=philikon
This commit is contained in:
Родитель
2206bbacce
Коммит
bd1fc11feb
|
@ -25,6 +25,8 @@ const DELIVERY_STATUS_SUCCESS = "success";
|
||||||
const DELIVERY_STATUS_PENDING = "pending";
|
const DELIVERY_STATUS_PENDING = "pending";
|
||||||
const DELIVERY_STATUS_ERROR = "error";
|
const DELIVERY_STATUS_ERROR = "error";
|
||||||
|
|
||||||
|
const MESSAGE_CLASS_NORMAL = "normal";
|
||||||
|
|
||||||
const FILTER_TIMESTAMP = "timestamp";
|
const FILTER_TIMESTAMP = "timestamp";
|
||||||
const FILTER_NUMBERS = "numbers";
|
const FILTER_NUMBERS = "numbers";
|
||||||
const FILTER_DELIVERY = "delivery";
|
const FILTER_DELIVERY = "delivery";
|
||||||
|
@ -326,6 +328,7 @@ SmsDatabaseService.prototype = {
|
||||||
message.sender,
|
message.sender,
|
||||||
message.receiver,
|
message.receiver,
|
||||||
message.body,
|
message.body,
|
||||||
|
message.messageClass,
|
||||||
message.timestamp,
|
message.timestamp,
|
||||||
message.read);
|
message.read);
|
||||||
gSmsRequestManager.notifyCreateMessageList(requestId,
|
gSmsRequestManager.notifyCreateMessageList(requestId,
|
||||||
|
@ -354,7 +357,7 @@ SmsDatabaseService.prototype = {
|
||||||
* nsISmsDatabaseService API
|
* nsISmsDatabaseService API
|
||||||
*/
|
*/
|
||||||
|
|
||||||
saveReceivedMessage: function saveReceivedMessage(sender, body, date) {
|
saveReceivedMessage: function saveReceivedMessage(sender, body, messageClass, date) {
|
||||||
let receiver = this.mRIL.rilContext.icc ? this.mRIL.rilContext.icc.msisdn : null;
|
let receiver = this.mRIL.rilContext.icc ? this.mRIL.rilContext.icc.msisdn : null;
|
||||||
|
|
||||||
let message = {delivery: DELIVERY_RECEIVED,
|
let message = {delivery: DELIVERY_RECEIVED,
|
||||||
|
@ -362,6 +365,7 @@ SmsDatabaseService.prototype = {
|
||||||
sender: sender,
|
sender: sender,
|
||||||
receiver: receiver,
|
receiver: receiver,
|
||||||
body: body,
|
body: body,
|
||||||
|
messageClass: messageClass,
|
||||||
timestamp: date,
|
timestamp: date,
|
||||||
read: FILTER_READ_UNREAD};
|
read: FILTER_READ_UNREAD};
|
||||||
return this.saveMessage(message);
|
return this.saveMessage(message);
|
||||||
|
@ -375,6 +379,7 @@ SmsDatabaseService.prototype = {
|
||||||
sender: sender,
|
sender: sender,
|
||||||
receiver: receiver,
|
receiver: receiver,
|
||||||
body: body,
|
body: body,
|
||||||
|
messageClass: MESSAGE_CLASS_NORMAL,
|
||||||
timestamp: date,
|
timestamp: date,
|
||||||
read: FILTER_READ_READ};
|
read: FILTER_READ_READ};
|
||||||
return this.saveMessage(message);
|
return this.saveMessage(message);
|
||||||
|
@ -469,6 +474,7 @@ SmsDatabaseService.prototype = {
|
||||||
data.sender,
|
data.sender,
|
||||||
data.receiver,
|
data.receiver,
|
||||||
data.body,
|
data.body,
|
||||||
|
data.messageClass,
|
||||||
data.timestamp,
|
data.timestamp,
|
||||||
data.read);
|
data.read);
|
||||||
gSmsRequestManager.notifyGotSms(requestId, message);
|
gSmsRequestManager.notifyGotSms(requestId, message);
|
||||||
|
@ -694,6 +700,7 @@ SmsDatabaseService.prototype = {
|
||||||
message.sender,
|
message.sender,
|
||||||
message.receiver,
|
message.receiver,
|
||||||
message.body,
|
message.body,
|
||||||
|
message.messageClass,
|
||||||
message.timestamp,
|
message.timestamp,
|
||||||
message.read);
|
message.read);
|
||||||
gSmsRequestManager.notifyGotNextMessage(requestId, sms);
|
gSmsRequestManager.notifyGotNextMessage(requestId, sms);
|
||||||
|
|
|
@ -1230,9 +1230,10 @@ RadioInterfaceLayer.prototype = {
|
||||||
}
|
}
|
||||||
|
|
||||||
let id = -1;
|
let id = -1;
|
||||||
if (message.messageClass != RIL.PDU_DCS_MSG_CLASS_0) {
|
if (message.messageClass != RIL.GECKO_SMS_MESSAGE_CLASSES[RIL.PDU_DCS_MSG_CLASS_0]) {
|
||||||
id = gSmsDatabaseService.saveReceivedMessage(message.sender || null,
|
id = gSmsDatabaseService.saveReceivedMessage(message.sender || null,
|
||||||
message.fullBody || null,
|
message.fullBody || null,
|
||||||
|
message.messageClass,
|
||||||
message.timestamp);
|
message.timestamp);
|
||||||
}
|
}
|
||||||
let sms = gSmsService.createSmsMessage(id,
|
let sms = gSmsService.createSmsMessage(id,
|
||||||
|
@ -1241,6 +1242,7 @@ RadioInterfaceLayer.prototype = {
|
||||||
message.sender || null,
|
message.sender || null,
|
||||||
message.receiver || null,
|
message.receiver || null,
|
||||||
message.fullBody || null,
|
message.fullBody || null,
|
||||||
|
message.messageClass,
|
||||||
message.timestamp,
|
message.timestamp,
|
||||||
false);
|
false);
|
||||||
|
|
||||||
|
@ -1251,6 +1253,7 @@ RadioInterfaceLayer.prototype = {
|
||||||
sender: message.sender || null,
|
sender: message.sender || null,
|
||||||
receiver: message.receiver || null,
|
receiver: message.receiver || null,
|
||||||
body: message.fullBody || null,
|
body: message.fullBody || null,
|
||||||
|
messageClass: message.messageClass,
|
||||||
timestamp: message.timestamp,
|
timestamp: message.timestamp,
|
||||||
read: false});
|
read: false});
|
||||||
Services.obs.notifyObservers(sms, kSmsReceivedObserverTopic, null);
|
Services.obs.notifyObservers(sms, kSmsReceivedObserverTopic, null);
|
||||||
|
@ -1280,6 +1283,7 @@ RadioInterfaceLayer.prototype = {
|
||||||
}
|
}
|
||||||
|
|
||||||
let timestamp = Date.now();
|
let timestamp = Date.now();
|
||||||
|
let messageClass = RIL.GECKO_SMS_MESSAGE_CLASSES[RIL.PDU_DCS_MSG_CLASS_NORMAL];
|
||||||
let id = gSmsDatabaseService.saveSentMessage(options.number,
|
let id = gSmsDatabaseService.saveSentMessage(options.number,
|
||||||
options.fullBody,
|
options.fullBody,
|
||||||
timestamp);
|
timestamp);
|
||||||
|
@ -1289,6 +1293,7 @@ RadioInterfaceLayer.prototype = {
|
||||||
null,
|
null,
|
||||||
options.number,
|
options.number,
|
||||||
options.fullBody,
|
options.fullBody,
|
||||||
|
messageClass,
|
||||||
timestamp,
|
timestamp,
|
||||||
true);
|
true);
|
||||||
|
|
||||||
|
@ -1314,6 +1319,7 @@ RadioInterfaceLayer.prototype = {
|
||||||
}
|
}
|
||||||
delete this._sentSmsEnvelopes[message.envelopeId];
|
delete this._sentSmsEnvelopes[message.envelopeId];
|
||||||
|
|
||||||
|
let messageClass = RIL.GECKO_SMS_MESSAGE_CLASSES[RIL.PDU_DCS_MSG_CLASS_NORMAL];
|
||||||
gSmsDatabaseService.setMessageDeliveryStatus(options.id,
|
gSmsDatabaseService.setMessageDeliveryStatus(options.id,
|
||||||
message.deliveryStatus);
|
message.deliveryStatus);
|
||||||
let sms = gSmsService.createSmsMessage(options.id,
|
let sms = gSmsService.createSmsMessage(options.id,
|
||||||
|
@ -1322,6 +1328,7 @@ RadioInterfaceLayer.prototype = {
|
||||||
null,
|
null,
|
||||||
options.number,
|
options.number,
|
||||||
options.fullBody,
|
options.fullBody,
|
||||||
|
messageClass,
|
||||||
options.timestamp,
|
options.timestamp,
|
||||||
true);
|
true);
|
||||||
|
|
||||||
|
|
|
@ -964,11 +964,11 @@ const PDU_PID_USIM_DATA_DOWNLOAD = 0x7F;
|
||||||
const PDU_DCS_MSG_CODING_7BITS_ALPHABET = 0x00;
|
const PDU_DCS_MSG_CODING_7BITS_ALPHABET = 0x00;
|
||||||
const PDU_DCS_MSG_CODING_8BITS_ALPHABET = 0x04;
|
const PDU_DCS_MSG_CODING_8BITS_ALPHABET = 0x04;
|
||||||
const PDU_DCS_MSG_CODING_16BITS_ALPHABET = 0x08;
|
const PDU_DCS_MSG_CODING_16BITS_ALPHABET = 0x08;
|
||||||
const PDU_DCS_MSG_CLASS_UNKNOWN = 0xFF;
|
const PDU_DCS_MSG_CLASS_NORMAL = 0xFF;
|
||||||
const PDU_DCS_MSG_CLASS_0 = 0x00;
|
const PDU_DCS_MSG_CLASS_0 = 0x00;
|
||||||
const PDU_DCS_MSG_CLASS_ME_SPECIFIC = 0x01;
|
const PDU_DCS_MSG_CLASS_1 = 0x01;
|
||||||
const PDU_DCS_MSG_CLASS_SIM_SPECIFIC = 0x02;
|
const PDU_DCS_MSG_CLASS_2 = 0x02;
|
||||||
const PDU_DCS_MSG_CLASS_TE_SPECIFIC = 0x03;
|
const PDU_DCS_MSG_CLASS_3 = 0x03;
|
||||||
const PDU_DCS_CODING_GROUP_BITS = 0xF0;
|
const PDU_DCS_CODING_GROUP_BITS = 0xF0;
|
||||||
const PDU_DCS_MSG_CLASS_BITS = 0x03;
|
const PDU_DCS_MSG_CLASS_BITS = 0x03;
|
||||||
const PDU_DCS_MWI_ACTIVE_BITS = 0x08;
|
const PDU_DCS_MWI_ACTIVE_BITS = 0x08;
|
||||||
|
@ -979,6 +979,13 @@ const PDU_DCS_MWI_TYPE_FAX = 0x01;
|
||||||
const PDU_DCS_MWI_TYPE_EMAIL = 0x02;
|
const PDU_DCS_MWI_TYPE_EMAIL = 0x02;
|
||||||
const PDU_DCS_MWI_TYPE_OTHER = 0x03;
|
const PDU_DCS_MWI_TYPE_OTHER = 0x03;
|
||||||
|
|
||||||
|
const GECKO_SMS_MESSAGE_CLASSES = {};
|
||||||
|
GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL] = "normal";
|
||||||
|
GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_0] = "class-0";
|
||||||
|
GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_1] = "class-1";
|
||||||
|
GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_2] = "class-2";
|
||||||
|
GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_3] = "class-3";
|
||||||
|
|
||||||
// Because service center timestamp omit the century. Yay.
|
// Because service center timestamp omit the century. Yay.
|
||||||
const PDU_TIMESTAMP_YEAR_OFFSET = 2000;
|
const PDU_TIMESTAMP_YEAR_OFFSET = 2000;
|
||||||
|
|
||||||
|
|
|
@ -3751,7 +3751,7 @@ let RIL = {
|
||||||
return PDU_FCS_OK;
|
return PDU_FCS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.messageClass == PDU_DCS_MSG_CLASS_SIM_SPECIFIC) {
|
if (message.messageClass == GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_2]) {
|
||||||
switch (message.epid) {
|
switch (message.epid) {
|
||||||
case PDU_PID_ANSI_136_R_DATA:
|
case PDU_PID_ANSI_136_R_DATA:
|
||||||
case PDU_PID_USIM_DATA_DOWNLOAD:
|
case PDU_PID_USIM_DATA_DOWNLOAD:
|
||||||
|
@ -3777,13 +3777,13 @@ let RIL = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Bug 739143: B2G SMS: Support SMS Storage Full event
|
// TODO: Bug 739143: B2G SMS: Support SMS Storage Full event
|
||||||
if ((message.messageClass != PDU_DCS_MSG_CLASS_0) && !true) {
|
if ((message.messageClass != GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_0]) && !true) {
|
||||||
// `When a mobile terminated message is class 0..., the MS shall display
|
// `When a mobile terminated message is class 0..., the MS shall display
|
||||||
// the message immediately and send a ACK to the SC ..., irrespective of
|
// the message immediately and send a ACK to the SC ..., irrespective of
|
||||||
// whether there is memory available in the (U)SIM or ME.` ~ 3GPP 23.038
|
// whether there is memory available in the (U)SIM or ME.` ~ 3GPP 23.038
|
||||||
// clause 4.
|
// clause 4.
|
||||||
|
|
||||||
if (message.messageClass == PDU_DCS_MSG_CLASS_SIM_SPECIFIC) {
|
if (message.messageClass == GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_2]) {
|
||||||
// `If all the short message storage at the MS is already in use, the
|
// `If all the short message storage at the MS is already in use, the
|
||||||
// MS shall return "memory capacity exceeded".` ~ 3GPP 23.038 clause 4.
|
// MS shall return "memory capacity exceeded".` ~ 3GPP 23.038 clause 4.
|
||||||
return PDU_FCS_MEMORY_CAPACITY_EXCEEDED;
|
return PDU_FCS_MEMORY_CAPACITY_EXCEEDED;
|
||||||
|
@ -3809,7 +3809,7 @@ let RIL = {
|
||||||
this.sendDOMMessage(message);
|
this.sendDOMMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.messageClass == PDU_DCS_MSG_CLASS_SIM_SPECIFIC) {
|
if (message.messageClass == GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_2]) {
|
||||||
// `MS shall ensure that the message has been to the SMS data field in
|
// `MS shall ensure that the message has been to the SMS data field in
|
||||||
// the (U)SIM before sending an ACK to the SC.` ~ 3GPP 23.038 clause 4
|
// the (U)SIM before sending an ACK to the SC.` ~ 3GPP 23.038 clause 4
|
||||||
return PDU_FCS_RESERVED;
|
return PDU_FCS_RESERVED;
|
||||||
|
@ -5925,7 +5925,7 @@ let GsmPDUHelper = {
|
||||||
if (DEBUG) debug("PDU: read dcs: " + dcs);
|
if (DEBUG) debug("PDU: read dcs: " + dcs);
|
||||||
|
|
||||||
// No message class by default.
|
// No message class by default.
|
||||||
let messageClass = PDU_DCS_MSG_CLASS_UNKNOWN;
|
let messageClass = PDU_DCS_MSG_CLASS_NORMAL;
|
||||||
// 7 bit is the default fallback encoding.
|
// 7 bit is the default fallback encoding.
|
||||||
let encoding = PDU_DCS_MSG_CODING_7BITS_ALPHABET;
|
let encoding = PDU_DCS_MSG_CODING_7BITS_ALPHABET;
|
||||||
switch (dcs & PDU_DCS_CODING_GROUP_BITS) {
|
switch (dcs & PDU_DCS_CODING_GROUP_BITS) {
|
||||||
|
@ -6002,7 +6002,7 @@ let GsmPDUHelper = {
|
||||||
|
|
||||||
msg.dcs = dcs;
|
msg.dcs = dcs;
|
||||||
msg.encoding = encoding;
|
msg.encoding = encoding;
|
||||||
msg.messageClass = messageClass;
|
msg.messageClass = GECKO_SMS_MESSAGE_CLASSES[messageClass];
|
||||||
|
|
||||||
if (DEBUG) debug("PDU: message encoding is " + encoding + " bit.");
|
if (DEBUG) debug("PDU: message encoding is " + encoding + " bit.");
|
||||||
},
|
},
|
||||||
|
|
Загрузка…
Ссылка в новой задаче