svace issues fixed
[platform/core/messaging/msg-service.git] / plugin / sms_plugin / SmsPluginCbMsgHandler.cpp
index 7847359..7f89671 100755 (executable)
@@ -138,22 +138,27 @@ void SmsPluginCbMsgHandler::handleCbMsg(TapiHandle *handle, TelSmsCbMsg_t *pCbMs
                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);
                }
@@ -205,9 +210,7 @@ void SmsPluginCbMsgHandler::handleEtwsMsg(TapiHandle *handle, TelSmsEtwsMsg_t *p
 
 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';
 
@@ -269,7 +272,7 @@ void SmsPluginCbMsgHandler::Decode2gCbMsg(TelSmsCbMsg_t *pCbMsg, SMS_CBMSG_PAGE_
                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]) {
@@ -360,9 +363,7 @@ void SmsPluginCbMsgHandler::DecodeEtwsMsg(TelSmsEtwsMsg_t *pEtwsMsg, SMS_ETWS_PR
 
 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';
 
@@ -411,15 +412,15 @@ void SmsPluginCbMsgHandler::Decode3gCbMsg(TelSmsCbMsg_t *pCbMsg, SMS_CBMSG_PAGE_
        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;
@@ -434,8 +435,8 @@ void SmsPluginCbMsgHandler::Decode3gCbMsg(TelSmsCbMsg_t *pCbMsg, SMS_CBMSG_PAGE_
                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;
@@ -449,19 +450,19 @@ void SmsPluginCbMsgHandler::Decode3gCbMsg(TelSmsCbMsg_t *pCbMsg, SMS_CBMSG_PAGE_
                        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;
+                               dataLen = cbData[7+(i+1)*MAX_CBMSG_PAGE_SIZE + i] - 2;
                                if (dataLen > 0) {
-                                       memcpy(cbMessage + offset, &cbData[7+(i*82)+ i + 2], dataLen);
+                                       memcpy(cbMessage + offset, &cbData[7+(i*MAX_CBMSG_PAGE_SIZE)+ i + 2], dataLen);
                                        offset += dataLen;
                                }
                        } else {
-                               dataLen = cbData[7+(i+1)*82 + i];
+                               dataLen = cbData[7+(i+1)*MAX_CBMSG_PAGE_SIZE + i];
                                if (dataLen > 0) {
-                                       memcpy(cbMessage + offset, &cbData[7+(i*82)+ i], dataLen);
+                                       memcpy(cbMessage + offset, &cbData[7+(i*MAX_CBMSG_PAGE_SIZE)+ i], dataLen);
                                        offset += dataLen;
                                }
                        }
@@ -680,6 +681,7 @@ void SmsPluginCbMsgHandler::MakeCbMsg(SMS_CBMSG_PAGE_S *CbPage, SMS_CBMSG_S *pCb
        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;
@@ -712,6 +714,7 @@ void SmsPluginCbMsgHandler::MakeCbMsg(SMS_CBMSG_PAGE_S *CbPage, SMS_CBMSG_S *pCb
 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;