svace issues fixed
[platform/core/messaging/msg-service.git] / plugin / sms_plugin / SmsPluginCbMsgHandler.cpp
index e082c59..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,17 +450,21 @@ 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;
-                               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;
@@ -542,7 +547,8 @@ bool SmsPluginCbMsgHandler::checkCbOpt(SMS_CBMSG_PAGE_S *CbPage, bool *pJavaMsg,
        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) {
@@ -557,7 +563,8 @@ bool SmsPluginCbMsgHandler::checkCbOpt(SMS_CBMSG_PAGE_S *CbPage, bool *pJavaMsg,
        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");
@@ -567,7 +574,8 @@ bool SmsPluginCbMsgHandler::checkCbOpt(SMS_CBMSG_PAGE_S *CbPage, bool *pJavaMsg,
 
                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);
@@ -673,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;
@@ -705,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;
 
@@ -779,8 +789,7 @@ void SmsPluginCbMsgHandler::convertCbMsgToMsginfo(SMS_CBMSG_S *pCbMsg, MSG_MESSA
                                pCbMsg->msgData[pCbMsg->msgLength-1] == '\r' ||
                                pCbMsg->msgData[pCbMsg->msgLength-1] == '\n') {
                        pCbMsg->msgLength--;
-               }
-               else {
+               } else {
                        break;
                }
        }