modify msg-service to support dpm feature
[platform/core/messaging/msg-service.git] / framework / storage-handler / MsgStorageMessage.cpp
index 6886f74..b1275f6 100755 (executable)
@@ -34,6 +34,7 @@
 #include "MsgStorageHandler.h"
 #include "MsgNotificationWrapper.h"
 #include "MsgDevicedWrapper.h"
+#include "MsgTransManager.h"
 
 using namespace std;
 
@@ -135,10 +136,10 @@ msg_error_t MsgStoAddMessage(MSG_MESSAGE_INFO_S *pMsg, MSG_SENDINGOPT_INFO_S *pS
        /* Add Message */
        memset(sqlQuery, 0x00, sizeof(sqlQuery));
 
-       snprintf(sqlQuery, sizeof(sqlQuery), "INSERT INTO %s VALUES (%d, %d, %d, %d, %d, %d, %u, %d, %d, %d, %d, %d, %d, %d, %d, ?, '', '', ?, 0, %d, '%s');",
+       snprintf(sqlQuery, sizeof(sqlQuery), "INSERT INTO %s VALUES (%d, %d, %d, %d, %d, %d, %u, %d, %d, %d, %d, %d, %d, %d, %d, ?, '', '', ?, 0, %d, '%s', %d);",
                        MSGFW_MESSAGE_TABLE_NAME, rowId, convId, pMsg->folderId, pMsg->storageId, pMsg->msgType.mainType, pMsg->msgType.subType,
                        (unsigned int)pMsg->displayTime, pMsg->dataSize, pMsg->networkStatus, pMsg->bRead, pMsg->bProtected, pMsg->priority, pMsg->direction,
-                       0, pMsg->bBackup, pMsg->sim_idx, imsi);
+                       0, pMsg->bBackup, pMsg->sim_idx, imsi, pMsg->bRestricted);
 
        MSG_DEBUG("QUERY : %s", sqlQuery);
 
@@ -1987,7 +1988,7 @@ msg_error_t MsgStoGetMessage(msg_message_id_t msgId, MSG_MESSAGE_INFO_S *pMsg, M
        memset(sqlQuery, 0x00, sizeof(sqlQuery));
        snprintf(sqlQuery, sizeof(sqlQuery), "SELECT MSG_ID, CONV_ID, FOLDER_ID, STORAGE_ID, MAIN_TYPE, \
                        SUB_TYPE, DISPLAY_TIME, DATA_SIZE, NETWORK_STATUS, READ_STATUS, PROTECTED, \
-                       BACKUP, PRIORITY, MSG_DIRECTION, SCHEDULED_TIME, SUBJECT, MSG_TEXT, THUMB_PATH, SIM_INDEX \
+                       BACKUP, PRIORITY, MSG_DIRECTION, DPM_RESTRICTED, SCHEDULED_TIME, SUBJECT, MSG_TEXT, THUMB_PATH, SIM_INDEX \
                        FROM %s WHERE MSG_ID = %d;",
                        MSGFW_MESSAGE_TABLE_NAME, msgId);
 
@@ -2011,8 +2012,9 @@ msg_error_t MsgStoGetMessage(msg_message_id_t msgId, MSG_MESSAGE_INFO_S *pMsg, M
                pMsg->bBackup = dbHandle->columnInt(11);
                pMsg->priority = dbHandle->columnInt(12);
                pMsg->direction = dbHandle->columnInt(13);
+               pMsg->bRestricted = dbHandle->columnInt(14);
 
-               strncpy(pMsg->subject, (char *)dbHandle->columnText(15), MAX_SUBJECT_LEN);
+               strncpy(pMsg->subject, (char *)dbHandle->columnText(16), MAX_SUBJECT_LEN);
 
                /* Temp_File_Handling */
                if (pMsg->msgType.mainType == MSG_SMS_TYPE || pMsg->msgType.subType == MSG_NOTIFICATIONIND_MMS) {
@@ -2020,7 +2022,7 @@ msg_error_t MsgStoGetMessage(msg_message_id_t msgId, MSG_MESSAGE_INFO_S *pMsg, M
                                char msgData[pMsg->dataSize+1];
                                memset(msgData, 0x00, sizeof(msgData));
 
-                               strncpy(msgData, (char *)dbHandle->columnText(16), pMsg->dataSize);
+                               strncpy(msgData, (char *)dbHandle->columnText(17), pMsg->dataSize);
 
                                /* Save Message Data into File */
                                char fileName[MSG_FILENAME_LEN_MAX+1];
@@ -2043,7 +2045,7 @@ msg_error_t MsgStoGetMessage(msg_message_id_t msgId, MSG_MESSAGE_INFO_S *pMsg, M
                                pMsg->bTextSms = false;
                        } else {
                                memset(pMsg->msgText, 0x00, sizeof(pMsg->msgText));
-                               strncpy(pMsg->msgText, (char *)dbHandle->columnText(16), pMsg->dataSize);
+                               strncpy(pMsg->msgText, (char *)dbHandle->columnText(17), pMsg->dataSize);
 
                                /* For WAP PUSH SI Message */
                                if (pMsg->msgType.subType == MSG_WAP_SI_SMS) {
@@ -2057,15 +2059,25 @@ msg_error_t MsgStoGetMessage(msg_message_id_t msgId, MSG_MESSAGE_INFO_S *pMsg, M
                        }
                } else {
                        if (dbHandle->columnText(16) != NULL)
-                               strncpy(pMsg->msgText, (char *)dbHandle->columnText(16), MAX_MSG_TEXT_LEN);
+                               strncpy(pMsg->msgText, (char *)dbHandle->columnText(17), MAX_MSG_TEXT_LEN);
                }
 
                /* thumbnail path */
-               if (dbHandle->columnText(17)!= NULL && ((char *)dbHandle->columnText(17))[0] != '\0') {
-                       strncpy(pMsg->thumbPath, (char *)dbHandle->columnText(17), MSG_FILEPATH_LEN_MAX);
+               if (dbHandle->columnText(18)!= NULL && ((char *)dbHandle->columnText(18))[0] != '\0') {
+                       strncpy(pMsg->thumbPath, (char *)dbHandle->columnText(18), MSG_FILEPATH_LEN_MAX);
                        MSG_DEBUG("pMsg->thumbPath : [%s]", pMsg->thumbPath);
                }
-               pMsg->sim_idx = dbHandle->columnInt(18);
+
+               if (pMsg->bRestricted == true) {
+                       pMsg->dataSize = 0;
+                       memset(pMsg->msgData, 0x00, sizeof(pMsg->msgData));
+                       memset(pMsg->msgText, 0x00, sizeof(pMsg->msgText));
+                       memset(pMsg->subject, 0x00, sizeof(pMsg->subject));
+                       memset(pMsg->thumbPath, 0x00, sizeof(pMsg->thumbPath));
+
+               }
+
+               pMsg->sim_idx = dbHandle->columnInt(19);
        } else {
                dbHandle->finalizeQuery();
                MSG_DEBUG("%s", sqlQuery);
@@ -3143,3 +3155,49 @@ msg_error_t MsgStoUpdateIMSI(int sim_idx)
 
        return MSG_SUCCESS;
 }
+
+
+msg_error_t MsgStoUpdateDPMRestrictedStatus(MSG_MAIN_TYPE_T msgType)
+{
+       msg_error_t err = MSG_SUCCESS;
+
+       char sqlQuery[MAX_QUERY_LEN+1];
+       MsgDbHandler *dbHandle = getDbHandle();
+
+       msg_id_list_s msgIdList = {0,};
+       int rowCnt = 0;
+
+       memset(sqlQuery, 0x00, sizeof(sqlQuery));
+       snprintf(sqlQuery, sizeof(sqlQuery), "SELECT MSG_ID FROM %s WHERE MAIN_TYPE = %d AND DPM_RESTRICTED = 1;",
+                       MSGFW_MESSAGE_TABLE_NAME, msgType);
+
+       err = dbHandle->getTable(sqlQuery, &rowCnt, NULL);
+       if (err != MSG_SUCCESS) {
+               dbHandle->freeTable();
+               return err;
+       }
+
+       msg_message_id_t *msgIds = new msg_message_id_t[rowCnt];
+       for (int i = 0; i < rowCnt; i++) {
+               msgIds[i] = dbHandle->getColumnToInt(i + 1);
+       }
+
+       dbHandle->freeTable();
+
+       msgIdList.nCount = rowCnt;
+       msgIdList.msgIdList = msgIds;
+
+       memset(sqlQuery, 0x00, sizeof(sqlQuery));
+       snprintf(sqlQuery, sizeof(sqlQuery), "UPDATE %s SET DPM_RESTRICTED = 0 WHERE MAIN_TYPE = %d AND DPM_RESTRICTED = 1;",
+                       MSGFW_MESSAGE_TABLE_NAME, msgType);
+
+       err = dbHandle->execQuery(sqlQuery);
+       if (err == MSG_SUCCESS) {
+               MsgTransactionManager::instance()->broadcastStorageChangeCB(err, MSG_STORAGE_CHANGE_UPDATE, &msgIdList);
+       }
+
+       if (msgIdList.msgIdList)
+               delete [] msgIdList.msgIdList;
+
+       return err;
+}