int main(int argc,char* argv[]) { if (argc != 3) { cerr << "Usage: " << argv[0] << " <-s|-n|-S|-N> <email>" << endl; exit(-1); } int feed_type = 0; if (string(argv[1]) == "-s") feed_type = FEED_SPAM; else if (string(argv[1]) == "-n") feed_type = FEED_HAM; else if (string(argv[1]) == "-S") feed_type = UN_FEED_SPAM; else if (string(argv[1]) == "-N") feed_type = UN_FEED_HAM; else { cerr << "Usage: " << argv[0] << " <-s|-n|-S|-N> <email>" << endl; exit(-1); } FastString email_data = get_file_content(argv[2]); MimeMessage msg(email_data); FastString charset=""; FastString plain = ""; FastString html = ""; FastString subject=""; set<string> result; CFenci myFenci; myFenci.setDict("/usr/local/etc/dict_chs.utf8.xdb"); myFenci.setRule("/usr/local/etc/rules.utf8.ini"); myFenci.setCharset("utf-8"); myFenci.setIgnoreSign(); /* parse subject */ msg.getSubject(subject,charset); myFenci.getFenciResult(format_to_check(subject.c_str(),charset.c_str()),result); /* parse plain */ msg.getTextPlain(plain,charset); myFenci.getFenciResult(format_to_check(subject.c_str(),charset.c_str()),result); /* parse html */ msg.getTextHtml(html,charset); string html_to_check = get_text_from_html(html.c_str()); myFenci.getFenciResult(format_to_check(html_to_check,charset.c_str()),result); /* connect redis */ CRedis myRedis("127.0.0.1",6379); const int CONNECT_TIMEOUT = 1; myRedis.setTimeout(CONNECT_TIMEOUT); if (false == myRedis.Connect()) { cerr << myRedis.getError() << endl; return -1; } /* feed spam */ if (feed_type == FEED_SPAM) { for (set<string>::iterator it = result.begin(); it != result.end(); ++it) { string buffer = myRedis.Get(*it); if (buffer != "") { CDataParse myData(buffer," "); vector<string> ret = myData.getVector(); ret[0] = my_int2str((my_str2int(ret[0]) + 1)); myData.setVector(ret); if (false == myRedis.Set(*it,myData.getString())) { cerr << myRedis.getError() << endl; return -1; } } else { if (false == myRedis.Set(*it,"1 0")) { cerr << myRedis.getError() << endl; return -1; } } } } /* feed ham */ if (feed_type == FEED_HAM) { for (set<string>::iterator it = result.begin(); it != result.end(); ++it) { string buffer = myRedis.Get(*it); if (buffer != "") { CDataParse myData(buffer," "); vector<string> ret = myData.getVector(); ret[1] = my_int2str((my_str2int(ret[1]) + 1)); myData.setVector(ret); if (false == myRedis.Set(*it,myData.getString())) { cerr << myRedis.getError() << endl; return -1; } } else { if (false == myRedis.Set(*it,"0 1")) { cerr << myRedis.getError() << endl; return -1; } } } } /* unfeed spam */ if (feed_type == UN_FEED_SPAM) { for (set<string>::iterator it = result.begin(); it != result.end(); ++it) { string buffer = myRedis.Get(*it); if (buffer != "") { CDataParse myData(buffer," "); vector<string> ret = myData.getVector(); if (my_str2int(ret[0]) > 0) ret[0] = my_int2str(my_str2int(ret[0]) - 1); myData.setVector(ret); if (false == myRedis.Set(*it,myData.getString())) { cerr << myRedis.getError() << endl; return -1; } } } } /* unfeed ham */ if (feed_type == UN_FEED_HAM) { for (set<string>::iterator it = result.begin(); it != result.end(); ++it) { string buffer = myRedis.Get(*it); if (buffer != "") { CDataParse myData(buffer," "); vector<string> ret = myData.getVector(); if (my_str2int(ret[1]) > 0) ret[1] = my_int2str(my_str2int(ret[1]) - 1); myData.setVector(ret); if (false == myRedis.Set(*it,myData.getString())) { cerr << myRedis.getError() << endl; return -1; } } } } /* close redis */ myRedis.Close(); exit(0); }
int append(const FastString<SrcMaxSize>& value) { return append(value.c_str(), value.size()); }