From bc1117fc37a79484040166db9cbf0497770a66c8 Mon Sep 17 00:00:00 2001 From: KeeBum Kim Date: Mon, 27 Aug 2012 17:25:45 +0900 Subject: [PATCH] Modify filter related operations. --- framework/main.cpp | 1 - framework/storage-handler/MsgStorageFilter.cpp | 35 +++------------ include/mapi/msg_types.h | 6 ++- utils/MsgSpamFilter.cpp | 60 +++++--------------------- 4 files changed, 19 insertions(+), 83 deletions(-) diff --git a/framework/main.cpp b/framework/main.cpp index 0fd8b76..7e8f619 100755 --- a/framework/main.cpp +++ b/framework/main.cpp @@ -22,7 +22,6 @@ #include "MsgContact.h" #include "MsgMemory.h" #include "MsgGconfWrapper.h" -#include "MsgSpamFilter.h" #include "MsgPluginManager.h" #include "MsgSettingHandler.h" #include "MsgStorageHandler.h" diff --git a/framework/storage-handler/MsgStorageFilter.cpp b/framework/storage-handler/MsgStorageFilter.cpp index 4e15eec..ac18aa6 100755 --- a/framework/storage-handler/MsgStorageFilter.cpp +++ b/framework/storage-handler/MsgStorageFilter.cpp @@ -39,32 +39,8 @@ msg_error_t MsgStoCheckDuplicatedFilter(const MSG_FILTER_S *pFilter) memset(sqlQuery, 0x00, sizeof(sqlQuery)); - if (pFilter->filterType == MSG_FILTER_BY_ADDRESS) { - if (strlen(pFilter->filterValue) > VALID_ADDRESS_LEN) { - char newNumber[VALID_ADDRESS_LEN+1]; - memset(newNumber, 0x00, sizeof(newNumber)); - - int overLen = 0, i = 0; - - overLen = strlen(pFilter->filterValue) - VALID_ADDRESS_LEN; - - for (i = 0; i < VALID_ADDRESS_LEN; i++) - newNumber[i] = pFilter->filterValue[i+overLen]; - - newNumber[i] = '\0'; - - snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s \ - WHERE FILTER_TYPE = %d AND FILTER_VALUE LIKE '%%%s';", - MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS, newNumber); - } else { - snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s \ - WHERE FILTER_TYPE = %d AND FILTER_VALUE = '%s';", - MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS, pFilter->filterValue); - } - } else { - snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_VALUE FROM %s WHERE FILTER_TYPE = %d AND FILTER_VALUE like '%s';", - MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_SUBJECT, pFilter->filterValue); - } + snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND FILTER_VALUE = '%s';", + MSGFW_FILTER_TABLE_NAME, pFilter->filterType, pFilter->filterValue); MSG_DEBUG("sql : %s", sqlQuery); @@ -78,6 +54,7 @@ msg_error_t MsgStoCheckDuplicatedFilter(const MSG_FILTER_S *pFilter) dbHandle.freeTable(); MSG_END(); + return err; } @@ -181,8 +158,7 @@ msg_error_t MsgStoDeleteFilter(msg_filter_id_t filterId) memset(sqlQuery, 0x00, sizeof(sqlQuery)); - snprintf(sqlQuery, sizeof(sqlQuery), "DELETE FROM %s WHERE FILTER_ID = %d;", - MSGFW_FILTER_TABLE_NAME, filterId); + snprintf(sqlQuery, sizeof(sqlQuery), "DELETE FROM %s WHERE FILTER_ID = %d;", MSGFW_FILTER_TABLE_NAME, filterId); // Delete Filter if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS) { @@ -214,8 +190,7 @@ msg_error_t MsgStoGetFilterList(msg_struct_list_s *pFilterList) // Get filters from DB memset(sqlQuery, 0x00, sizeof(sqlQuery)); - snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID, FILTER_TYPE, FILTER_VALUE FROM %s;", - MSGFW_FILTER_TABLE_NAME); + snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID, FILTER_TYPE, FILTER_VALUE FROM %s;", MSGFW_FILTER_TABLE_NAME); msg_error_t err = MSG_SUCCESS; diff --git a/include/mapi/msg_types.h b/include/mapi/msg_types.h index 4afa307..d2286d2 100755 --- a/include/mapi/msg_types.h +++ b/include/mapi/msg_types.h @@ -980,8 +980,10 @@ enum _MSG_READ_REPORT_STATUS_E */ enum _MSG_FILTER_TYPE_E { - MSG_FILTER_BY_ADDRESS = 0, /**< Filtered by where the message is come */ - MSG_FILTER_BY_SUBJECT, /**< Filtered by sub string in the subject */ + MSG_FILTER_BY_WORD = 0, /**< Filtered by sub string in the text */ + MSG_FILTER_BY_ADDRESS_SAME, /**< Filtered by address exactly same as */ + MSG_FILTER_BY_ADDRESS_START, /**< Filtered by address start with */ + MSG_FILTER_BY_ADDRESS_INCLUDE, /**< Filtered by address include */ }; diff --git a/utils/MsgSpamFilter.cpp b/utils/MsgSpamFilter.cpp index 0b05523..554e00e 100755 --- a/utils/MsgSpamFilter.cpp +++ b/utils/MsgSpamFilter.cpp @@ -50,19 +50,6 @@ msg_error_t MsgGetFilterOperation(bool *pSetFlag) } -void GetValidNumber(const char *pSrcNum, char *pDestNum) -{ - int overLen = 0, i = 0; - - overLen = strlen(pSrcNum) - VALID_ADDRESS_LEN; - - for (i = 0; i < VALID_ADDRESS_LEN; i++) - pDestNum[i] = pSrcNum[i+overLen]; - - pDestNum[i] = '\0'; -} - - bool MsgCheckFilter(MsgDbHandler *pDbHandle, MSG_MESSAGE_INFO_S *pMsgInfo) { MSG_BEGIN(); @@ -70,28 +57,6 @@ bool MsgCheckFilter(MsgDbHandler *pDbHandle, MSG_MESSAGE_INFO_S *pMsgInfo) msg_error_t err = MSG_SUCCESS; // ======================================================================= - // Check Block List of Call-log (Auto Reject) - // ======================================================================= - int ret = 0; - - MSG_DEBUG("bAutoReject = [%d], bUnknownAutoReject = [%d]", MsgSettingGetAutoReject(), MsgSettingGetUnknownAutoReject()); - - if (MsgSettingGetAutoReject()) { - char checkNumber[MAX_ADDRESS_VAL_LEN+1] = {0,}; - snprintf(checkNumber, MAX_ADDRESS_VAL_LEN, "%s", pMsgInfo->addressList[0].addressVal); - - if (checkNumber[0] == '\0') { - if (MsgSettingGetUnknownAutoReject()) - return true; - } - - if (ret > 0) { - MSG_DEBUG("Message is Rejected by auto-reject option."); - return true; - } - } - - // ======================================================================= // Check Filter Operation // ======================================================================= bool filterFlag = false; @@ -110,23 +75,16 @@ bool MsgCheckFilter(MsgDbHandler *pDbHandle, MSG_MESSAGE_INFO_S *pMsgInfo) MSG_DEBUG("pMsg->addressList[0].addressVal [%s]", pMsgInfo->addressList[0].addressVal); - char newNumber[VALID_ADDRESS_LEN+1]; char sqlQuery[MAX_QUERY_LEN+1]; - if (strlen(pMsgInfo->addressList[0].addressVal) > VALID_ADDRESS_LEN) { - memset(newNumber, 0x00, sizeof(newNumber)); - memset(sqlQuery, 0x00, sizeof(sqlQuery)); - - GetValidNumber(pMsgInfo->addressList[0].addressVal, newNumber); + memset(sqlQuery, 0x00, sizeof(sqlQuery)); - snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND FILTER_VALUE LIKE '%%%s';", - MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS, newNumber); - } else { - memset(sqlQuery, 0x00, sizeof(sqlQuery)); - - snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND FILTER_VALUE = '%s';", - MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS, pMsgInfo->addressList[0].addressVal); - } + snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND '%s' = FILTER_VALUE \ + UNION SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND '%s' LIKE SUBSTR(FILTER_VALUE,1)||'%%' \ + UNION SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND '%s' LIKE '%%'||SUBSTR(FILTER_VALUE,1)||'%%';", + MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS_SAME, pMsgInfo->addressList[0].addressVal, + MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS_START, pMsgInfo->addressList[0].addressVal, + MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS_INCLUDE, pMsgInfo->addressList[0].addressVal); err = pDbHandle->getTable(sqlQuery, &rowCnt); @@ -141,6 +99,8 @@ bool MsgCheckFilter(MsgDbHandler *pDbHandle, MSG_MESSAGE_INFO_S *pMsgInfo) } else { MSG_DEBUG("Msg is NOT Filtered by Address : [%s]", pMsgInfo->addressList[0].addressVal); + MSG_DEBUG("sqlQuery [%s]", sqlQuery); + pDbHandle->freeTable(); } @@ -151,7 +111,7 @@ bool MsgCheckFilter(MsgDbHandler *pDbHandle, MSG_MESSAGE_INFO_S *pMsgInfo) memset(sqlQuery, 0x00, sizeof(sqlQuery)); snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_VALUE FROM %s WHERE FILTER_TYPE = %d;", - MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_SUBJECT); + MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_WORD); rowCnt = 0; -- 2.7.4