err = SmsPluginStorage::instance()->checkMessage(&msgInfo);
if (err == MSG_SUCCESS) {
- MSG_CB_MSG_S cbOutMsg = {0, };
-
- /*cbOutMsg.type = MSG_CB_SMS; */
- cbOutMsg.type = msgInfo.msgType.subType;
- cbOutMsg.receivedTime = cbMsg->recvTime;
- cbOutMsg.serialNum = encodeCbSerialNum(CbMsgPage.pageHeader.serialNum);
- cbOutMsg.messageId = cbMsg->msgId;
- cbOutMsg.dcs = CbMsgPage.pageHeader.dcs.rawData;
- memset (cbOutMsg.cbText, 0x00, sizeof(cbOutMsg.cbText));
-
- cbOutMsg.cbTextLen = convertTextToUtf8((unsigned char*)cbOutMsg.cbText, sizeof(cbOutMsg.cbText), cbMsg);
- memset(cbOutMsg.language_type, 0x00, sizeof(cbOutMsg.language_type));
- memcpy(cbOutMsg.language_type, CbMsgPage.pageHeader.dcs.iso639Lang, 3);
- err = SmsPluginEventHandler::instance()->callbackCBMsgIncoming(&cbOutMsg, &msgInfo);
- if (err != MSG_SUCCESS)
- MSG_WARN("callbackMsgIncoming() Error !! [%d]", err);
+ bool is_duplicated = SmsPluginStorage::instance()->isDuplicatedCBMsg(&msgInfo);
+ if (is_duplicated == false) {
+ MSG_CB_MSG_S cbOutMsg = {0, };
+
+ /*cbOutMsg.type = MSG_CB_SMS; */
+ cbOutMsg.type = msgInfo.msgType.subType;
+ cbOutMsg.receivedTime = cbMsg->recvTime;
+ cbOutMsg.serialNum = cbMsg->serialNum;
+ cbOutMsg.messageId = cbMsg->msgId;
+ cbOutMsg.dcs = CbMsgPage.pageHeader.dcs.rawData;
+ memset (cbOutMsg.cbText, 0x00, sizeof(cbOutMsg.cbText));
+
+ cbOutMsg.cbTextLen = convertTextToUtf8((unsigned char*)cbOutMsg.cbText, sizeof(cbOutMsg.cbText), cbMsg);
+ memset(cbOutMsg.language_type, 0x00, sizeof(cbOutMsg.language_type));
+ memcpy(cbOutMsg.language_type, CbMsgPage.pageHeader.dcs.iso639Lang, 3);
+ err = SmsPluginEventHandler::instance()->callbackCBMsgIncoming(&cbOutMsg, &msgInfo);
+ if (err != MSG_SUCCESS)
+ MSG_WARN("callbackMsgIncoming() Error !! [%d]", err);
+ } else {
+ MSG_DEBUG("This cb message is duplicated");
+ }
} else {
MSG_WARN("checkMessage() Error !! [%d]", err);
}
void SmsPluginCbMsgHandler::Decode2gCbMsg(TelSmsCbMsg_t *pCbMsg, SMS_CBMSG_PAGE_S *pCbPage)
{
- unsigned char cbData[pCbMsg->Length+1];
-
- memset(cbData, 0x00, sizeof(cbData));
+ unsigned char cbData[pCbMsg->Length+1] = {0};
memcpy(cbData, pCbMsg->szMsgData, pCbMsg->Length);
cbData[pCbMsg->Length] = '\0';
dataLen = (dataLen*8) / 7;
SmsPluginUDCodec udCodec;
- char pageData[MAX_CBMSG_PAGE_SIZE+1];
+ char pageData[MAX_CBMSG_PAGE_SIZE*8/7] = {0};
int unpackLen = udCodec.unpack7bitChar(&cbData[6], dataLen, 0, pageData);
if (pCbPage->pageHeader.dcs.iso639Lang[0]) {
void SmsPluginCbMsgHandler::Decode3gCbMsg(TelSmsCbMsg_t *pCbMsg, SMS_CBMSG_PAGE_S *pCbPage)
{
- unsigned char cbData[(MAX_CBMSG_PAGE_SIZE*MAX_CBMSG_PAGE_NUM)+1];
-
- memset(cbData, 0x00, sizeof(cbData));
+ unsigned char cbData[MAX_CBMSG_TOTAL_PAGE_SIZE + 1] = {0};
memcpy(cbData, pCbMsg->szMsgData, pCbMsg->Length);
cbData[pCbMsg->Length] = '\0';
switch (pCbPage->pageHeader.dcs.codingScheme) {
case SMS_CHARSET_7BIT: {
for (int i = 0; i < pCbPage->pageHeader.totalPages; ++i) {
- char cbMessage[MAX_CBMSG_PAGE_SIZE] = {0, };
- dataLen = cbData[7+(i+1)*82 + i];
- memcpy(cbMessage, &cbData[7+(i*82)+ i], dataLen);
-
- dataLen = (dataLen*8) / 7;
+ unsigned char cbMessage[MAX_CBMSG_PAGE_SIZE] = {0};
+ dataLen = cbData[7 + (i + 1) * MAX_CBMSG_PAGE_SIZE + i];
if (dataLen > MAX_CBMSG_PAGE_SIZE)
THROW(MsgException::SMS_PLG_ERROR, "CB Msg Size is over MAX [%d]", dataLen);
+ memcpy(cbMessage, &cbData[7+(i*MAX_CBMSG_PAGE_SIZE)+ i], dataLen);
+ dataLen = (dataLen*8) / 7;
+
SmsPluginUDCodec udCodec;
int unpackLen = udCodec.unpack7bitChar((const unsigned char *)cbMessage, dataLen, 0, pCbPage->pageData + offset);
offset += unpackLen;
char cbMessage[MAX_CBMSG_PAGE_SIZE]= {0, };
for (int i = 0; i < pCbPage->pageHeader.totalPages; ++i) {
- dataLen = cbData[7+(i+1)*82 + i];
- memcpy(cbMessage + offset, &cbData[7+(i*82)+ i], dataLen);
+ dataLen = cbData[7+(i+1)*MAX_CBMSG_PAGE_SIZE + i];
+ memcpy(cbMessage + offset, &cbData[7+(i*MAX_CBMSG_PAGE_SIZE)+ i], dataLen);
offset += dataLen;
}
dataLen = offset;
pCbPage->pageLength = dataLen;
}
#else
- char cbMessage[MAX_CBMSG_PAGE_SIZE] = {0, };
+ char cbMessage[MAX_CBMSG_PAGE_SIZE*MAX_CBMSG_PAGE_NUM+1] = {0, };
for (int i = 0; i < pCbPage->pageHeader.totalPages; ++i) {
if (pCbPage->pageHeader.dcs.iso639Lang[0]) {
- dataLen = cbData[7+(i+1)*82 + i] - 2;
- memcpy(cbMessage + offset, &cbData[7+(i*82)+ i + 2], dataLen);
- offset += dataLen;
+ dataLen = cbData[7+(i+1)*MAX_CBMSG_PAGE_SIZE + i] - 2;
+ if (dataLen > 0) {
+ memcpy(cbMessage + offset, &cbData[7+(i*MAX_CBMSG_PAGE_SIZE)+ i + 2], dataLen);
+ offset += dataLen;
+ }
} else {
- dataLen = cbData[7+(i+1)*82 + i];
- memcpy(cbMessage + offset, &cbData[7+(i*82)+ i], dataLen);
- offset += dataLen;
+ dataLen = cbData[7+(i+1)*MAX_CBMSG_PAGE_SIZE + i];
+ if (dataLen > 0) {
+ memcpy(cbMessage + offset, &cbData[7+(i*MAX_CBMSG_PAGE_SIZE)+ i], dataLen);
+ offset += dataLen;
+ }
}
}
dataLen = offset;
char keyName[MAX_VCONFKEY_NAME_LEN];
memset(keyName, 0x00, sizeof(keyName));
snprintf(keyName, sizeof(keyName), "%s/%d", CB_RECEIVE, simIndex);
- MsgSettingGetBool(keyName, &bReceive);
+ if (MsgSettingGetBool(keyName, &bReceive) != MSG_SUCCESS)
+ MSG_INFO("MsgSettingGetBool() is failed");
/* Receive CB Msg = FALSE */
if (!bReceive) {
snprintf(keyName, sizeof(keyname), "%s/%d", CB_LANGUAGE, MSG_CBLANG_TYPE_ALL);
bool bAllLang = false;
- MsgSettingGetBool(keyName, &bAllLang);
+ if (MsgSettingGetBool(keyName, &bAllLang) != MSG_SUCCESS)
+ MSG_INFO("MsgSettingGetBool() is failed");
if (!bAllLang) {
MSG_DEBUG("ALL LANGUAGE = FALSE");
bool bLang = false;
- MsgSettingGetBool(keyName, &bLang);
+ if (MsgSettingGetBool(keyName, &bLang) != MSG_SUCCESS)
+ MSG_INFO("MsgSettingGetBool() is failed");
if (!bLang || CbPage.pageHeader.langType == MSG_CBLANG_TYPE_MAX) {
MSG_DEBUG("LANGUAGE [%d] = FALSE", CbPage.pageHeader.langType);
pCbMsg->classType = CbPage->pageHeader.dcs.classType;
pCbMsg->codingScheme = CbPage->pageHeader.dcs.codingScheme;
pCbMsg->recvTime = CbPage->pageHeader.recvTime;
+ pCbMsg->serialNum = encodeCbSerialNum(CbPage->pageHeader.serialNum);
cbPageMap::iterator it;
int offset = 0;
void SmsPluginCbMsgHandler::convertCbMsgToMsginfo(SMS_CBMSG_S *pCbMsg, MSG_MESSAGE_INFO_S *pMsgInfo, msg_sim_slot_id_t simIndex)
{
pMsgInfo->msgId = (msg_message_id_t)pCbMsg->msgId;
+ pMsgInfo->serialNum = pCbMsg->serialNum;
pMsgInfo->folderId = MSG_CBMSGBOX_ID;
pCbMsg->msgData[pCbMsg->msgLength-1] == '\r' ||
pCbMsg->msgData[pCbMsg->msgLength-1] == '\n') {
pCbMsg->msgLength--;
- }
- else {
+ } else {
break;
}
}