naughtyfilter.cpp
来自「一个UNIX/LINUX下的基于内容的过滤服务器源代码」· C++ 代码 · 共 603 行 · 第 1/2 页
CPP
603 行
} if (!wasbefore) { weight = (*o.lm.l[(*o.fg[filtergroup]).banned_phrase_list]).getWeightAt(found[i]); weighting += weight; if (o.show_weighted_found == 1) { if (weightedphrase.length() > 0) { weightedphrase += "+"; } if (weight < 0) { weightedphrase += "-"; } weightedphrase += (*o.lm.l[(*o.fg[filtergroup]).banned_phrase_list]).getItemAtInt(found[i]); } #ifdef DGDEBUG cout << "found weighted phrase:" << (*o.lm.l[(*o.fg[filtergroup]).banned_phrase_list]).getItemAtInt(found[i]) << std::endl; #endif } } } else if (type == -1) { exceptionphrase = (*o.lm.l[(*o.fg[filtergroup]).banned_phrase_list]).getItemAtInt(found[i]); isException = true; break; // no point in going further } } #ifdef DGDEBUG std::cout << "WEIGHTING: " << weighting << std::endl; #endif if (isException) { isItNaughty = false; whatIsNaughtyLog = o.language_list.getTranslation(604); // Exception phrase found: whatIsNaughtyLog += exceptionphrase; whatIsNaughty = ""; return; } if (isItNaughty) { whatIsNaughtyLog = o.language_list.getTranslation(300); // Banned Phrase found: whatIsNaughtyLog += bannedphrase; whatIsNaughty = o.language_list.getTranslation(301); // Banned phrase found. return; } if (weighting > (*o.fg[filtergroup]).naughtyness_limit) { isItNaughty = true; whatIsNaughtyLog = o.language_list.getTranslation(402); // Weighted phrase limit of whatIsNaughtyLog += String((*o.fg[filtergroup]).naughtyness_limit).toCharArray(); whatIsNaughtyLog += " : "; whatIsNaughtyLog += String(weighting).toCharArray(); if (o.show_weighted_found == 1) { whatIsNaughtyLog += " ("; whatIsNaughtyLog += weightedphrase; whatIsNaughtyLog += ")"; } whatIsNaughty = o.language_list.getTranslation(403); // Weighted phrase limit exceeded. return; } if (bannedcombifound) { isItNaughty = true; whatIsNaughtyLog = o.language_list.getTranslation(400); // Banned combination phrase found: whatIsNaughtyLog += combifound; whatIsNaughty = o.language_list.getTranslation(401); // Banned combination phrase found. return; } // whatIsNaughty is what is displayed in the browser // whatIsNaughtyLog is what is logged in the log file if at all}// when checkPICS is called we assume checkphrase has made the document// lower case.void NaughtyFilter::checkPICS(char* file, int l) { file[l] = 0; // to ensure end of c-string marker is there (*o.fg[filtergroup]).pics1.match(file); if (!(*o.fg[filtergroup]).pics1.matched()) {return;} // exit if not found for (int i = 0; i < (*o.fg[filtergroup]).pics1.numberOfMatches(); i++) { checkPICSrating((*o.fg[filtergroup]).pics1.result(i)); // pass on result for further // tests }}void NaughtyFilter::checkPICSrating(std::string label) { (*o.fg[filtergroup]).pics2.match(label.c_str()); if (!(*o.fg[filtergroup]).pics2.matched()) {return;} // exit if not found String lab = label.c_str(); // convert to a String for easy manip String r; String service; for (int i = 0; i < (*o.fg[filtergroup]).pics2.numberOfMatches(); i++) { r = (*o.fg[filtergroup]).pics2.result(i).c_str(); // ditto r = r.after("("); r = r.before(")"); // remove the brackets // Only check the substring of lab that is between // the start of lab (or the end of the previous match) // and the start of this rating. // It is possible to have multiple ratings in one pics-label. // This is done on e.g. http://www.jesusfilm.org/ if (i == 0) { service = lab.subString(0, (*o.fg[filtergroup]).pics2.offset(i)); } else { service = lab.subString((*o.fg[filtergroup]).pics2.offset(i-1)+(*o.fg[filtergroup]).pics2.length(i-1), (*o.fg[filtergroup]).pics2.offset(i)); } if (service.contains("safesurf")) {checkPICSratingSafeSurf(r);} if (isItNaughty) {return;} if (service.contains("evaluweb")) {checkPICSratingevaluWEB(r);} if (isItNaughty) {return;} if (service.contains("microsys")) {checkPICSratingCyberNOT(r);} if (isItNaughty) {return;} if (service.contains("icra")) {checkPICSratingICRA(r);} if (isItNaughty) {return;} if (service.contains("rsac")) {checkPICSratingRSAC(r);} if (isItNaughty) {return;} if (service.contains("weburbia")) {checkPICSratingWeburbia(r);} if (isItNaughty) {return;} if (service.contains("vancouver")) {checkPICSratingVancouver(r);} // check label for word denoting rating system then pass on to the // appropriate function the rating String. }}// The next few funtions are flipin obvious so no explanation...void NaughtyFilter::checkPICSratingSafeSurf(String r) { checkPICSagainstoption(r, "000 ", (*o.fg[filtergroup]).pics_safesurf_agerange, "Safesurf age range"); if (isItNaughty) {return;} checkPICSagainstoption(r, "001 ", (*o.fg[filtergroup]).pics_safesurf_profanity, "Safesurf profanity"); if (isItNaughty) {return;} checkPICSagainstoption(r, "002 ", (*o.fg[filtergroup]).pics_safesurf_heterosexualthemes, "Safesurf heterosexualthemes"); if (isItNaughty) {return;} checkPICSagainstoption(r, "003 ", (*o.fg[filtergroup]).pics_safesurf_homosexualthemes, "Safesurf "); if (isItNaughty) {return;} checkPICSagainstoption(r, "004 ", (*o.fg[filtergroup]).pics_safesurf_nudity, "Safesurf nudity"); if (isItNaughty) {return;} checkPICSagainstoption(r, "005 ", (*o.fg[filtergroup]).pics_safesurf_violence, "Safesurf violence"); if (isItNaughty) {return;} checkPICSagainstoption(r, "006 ", (*o.fg[filtergroup]).pics_safesurf_sexviolenceandprofanity, "Safesurf sexviolenceandprofanity"); if (isItNaughty) {return;} checkPICSagainstoption(r, "007 ", (*o.fg[filtergroup]).pics_safesurf_intolerance, "Safesurf intolerance"); if (isItNaughty) {return;} checkPICSagainstoption(r, "008 ", (*o.fg[filtergroup]).pics_safesurf_druguse, "Safesurf druguse"); if (isItNaughty) {return;} checkPICSagainstoption(r, "009 ", (*o.fg[filtergroup]).pics_safesurf_otheradultthemes, "Safesurf otheradultthemes"); if (isItNaughty) {return;} checkPICSagainstoption(r, "00A ", (*o.fg[filtergroup]).pics_safesurf_gambling, "Safesurf gambling"); if (isItNaughty) {return;}}void NaughtyFilter::checkPICSratingevaluWEB(String r) { checkPICSagainstoption(r, "rating ", (*o.fg[filtergroup]).pics_evaluweb_rating, "evaluWEB age range");}void NaughtyFilter::checkPICSratingCyberNOT(String r) { checkPICSagainstoption(r, "sex ", (*o.fg[filtergroup]).pics_cybernot_sex, "CyberNOT sex rating"); if (isItNaughty) {return;} checkPICSagainstoption(r, "other ", (*o.fg[filtergroup]).pics_cybernot_sex, "CyberNOT other rating");}void NaughtyFilter::checkPICSratingRSAC(String r) { checkPICSagainstoption(r, "v ", (*o.fg[filtergroup]).pics_rsac_violence, "RSAC violence"); if (isItNaughty) {return;} checkPICSagainstoption(r, "s ", (*o.fg[filtergroup]).pics_rsac_sex, "RSAC sex"); if (isItNaughty) {return;} checkPICSagainstoption(r, "n ", (*o.fg[filtergroup]).pics_rsac_nudity, "RSAC nudity"); if (isItNaughty) {return;} checkPICSagainstoption(r, "l ", (*o.fg[filtergroup]).pics_rsac_language, "RSAC language");}void NaughtyFilter::checkPICSratingICRA(String r) { checkPICSagainstoption(r, "la ", (*o.fg[filtergroup]).pics_icra_languagesexual, "ICRA languagesexual"); if (isItNaughty) {return;} checkPICSagainstoption(r, "ca ", (*o.fg[filtergroup]).pics_icra_chat, "ICRA chat"); if (isItNaughty) {return;} checkPICSagainstoption(r, "cb ", (*o.fg[filtergroup]).pics_icra_moderatedchat, "ICRA moderatedchat"); if (isItNaughty) {return;} checkPICSagainstoption(r, "lb ", (*o.fg[filtergroup]).pics_icra_languageprofanity, "ICRA languageprofanity"); if (isItNaughty) {return;} checkPICSagainstoption(r, "lc ", (*o.fg[filtergroup]).pics_icra_languagemildexpletives, "ICRA languagemildexpletives"); if (isItNaughty) {return;} checkPICSagainstoption(r, "na ", (*o.fg[filtergroup]).pics_icra_nuditygraphic, "ICRA nuditygraphic"); if (isItNaughty) {return;} checkPICSagainstoption(r, "nb ", (*o.fg[filtergroup]).pics_icra_nuditymalegraphic, "ICRA nuditymalegraphic"); if (isItNaughty) {return;} checkPICSagainstoption(r, "nc ", (*o.fg[filtergroup]).pics_icra_nudityfemalegraphic, "ICRA nudityfemalegraphic"); if (isItNaughty) {return;} checkPICSagainstoption(r, "nd ", (*o.fg[filtergroup]).pics_icra_nuditytopless, "ICRA nuditytopless"); if (isItNaughty) {return;} checkPICSagainstoption(r, "ne ", (*o.fg[filtergroup]).pics_icra_nuditybottoms, "ICRA nuditybottoms"); if (isItNaughty) {return;} checkPICSagainstoption(r, "nf ", (*o.fg[filtergroup]).pics_icra_nuditysexualacts, "ICRA nuditysexualacts"); if (isItNaughty) {return;} checkPICSagainstoption(r, "ng ", (*o.fg[filtergroup]).pics_icra_nudityobscuredsexualacts, "ICRA nudityobscuredsexualacts"); if (isItNaughty) {return;} checkPICSagainstoption(r, "nh ", (*o.fg[filtergroup]).pics_icra_nuditysexualtouching, "ICRA nuditysexualtouching"); if (isItNaughty) {return;} checkPICSagainstoption(r, "ni ", (*o.fg[filtergroup]).pics_icra_nuditykissing, "ICRA nuditykissing"); if (isItNaughty) {return;} checkPICSagainstoption(r, "nr ", (*o.fg[filtergroup]).pics_icra_nudityartistic, "ICRA nudityartistic"); if (isItNaughty) {return;} checkPICSagainstoption(r, "ns ", (*o.fg[filtergroup]).pics_icra_nudityeducational, "ICRA nudityeducational"); if (isItNaughty) {return;} checkPICSagainstoption(r, "nt ", (*o.fg[filtergroup]).pics_icra_nuditymedical, "ICRA nuditymedical"); if (isItNaughty) {return;} checkPICSagainstoption(r, "oa ", (*o.fg[filtergroup]).pics_icra_drugstobacco, "ICRA drugstobacco"); if (isItNaughty) {return;} checkPICSagainstoption(r, "ob ", (*o.fg[filtergroup]).pics_icra_drugsalcohol, "ICRA drugsalcohol"); if (isItNaughty) {return;} checkPICSagainstoption(r, "oc ", (*o.fg[filtergroup]).pics_icra_drugsuse, "ICRA drugsuse"); if (isItNaughty) {return;} checkPICSagainstoption(r, "od ", (*o.fg[filtergroup]).pics_icra_gambling, "ICRA gambling"); if (isItNaughty) {return;} checkPICSagainstoption(r, "oe ", (*o.fg[filtergroup]).pics_icra_weaponuse, "ICRA weaponuse"); if (isItNaughty) {return;} checkPICSagainstoption(r, "of ", (*o.fg[filtergroup]).pics_icra_intolerance, "ICRA intolerance"); if (isItNaughty) {return;} checkPICSagainstoption(r, "og ", (*o.fg[filtergroup]).pics_icra_badexample, "ICRA badexample"); if (isItNaughty) {return;} checkPICSagainstoption(r, "oh ", (*o.fg[filtergroup]).pics_icra_pgmaterial, "ICRA pgmaterial"); if (isItNaughty) {return;} checkPICSagainstoption(r, "va ", (*o.fg[filtergroup]).pics_icra_violencerape, "ICRA violencerape"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vb ", (*o.fg[filtergroup]).pics_icra_violencetohumans, "ICRA violencetohumans"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vc ", (*o.fg[filtergroup]).pics_icra_violencetoanimals, "ICRA violencetoanimals"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vd ", (*o.fg[filtergroup]).pics_icra_violencetofantasy, "ICRA violencetofantasy"); if (isItNaughty) {return;} checkPICSagainstoption(r, "ve ", (*o.fg[filtergroup]).pics_icra_violencekillinghumans, "ICRA violencekillinghumans"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vf ", (*o.fg[filtergroup]).pics_icra_violencekillinganimals, "ICRA violencekillinganimals"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vg ", (*o.fg[filtergroup]).pics_icra_violencekillingfantasy, "ICRA violencekillingfantasy"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vh ", (*o.fg[filtergroup]).pics_icra_violenceinjuryhumans, "ICRA violenceinjuryhumans"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vi ", (*o.fg[filtergroup]).pics_icra_violenceinjuryanimals, "ICRA violenceinjuryanimals"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vj ", (*o.fg[filtergroup]).pics_icra_violenceinjuryfantasy, "ICRA violenceinjuryfantasy"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vr ", (*o.fg[filtergroup]).pics_icra_violenceartisitic, "ICRA violenceartisitic"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vs ", (*o.fg[filtergroup]).pics_icra_violenceeducational, "ICRA violenceeducational"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vt ", (*o.fg[filtergroup]).pics_icra_violencemedical, "ICRA violencemedical"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vu ", (*o.fg[filtergroup]).pics_icra_violencesports, "ICRA violencesports"); if (isItNaughty) {return;} checkPICSagainstoption(r, "vk ", (*o.fg[filtergroup]).pics_icra_violenceobjects, "ICRA violenceobjects");}void NaughtyFilter::checkPICSratingWeburbia(String r) { checkPICSagainstoption(r, "s ", (*o.fg[filtergroup]).pics_weburbia_rating, "Weburbia rating");}void NaughtyFilter::checkPICSratingVancouver(String r) { checkPICSagainstoption(r, "MC ", (*o.fg[filtergroup]).pics_vancouver_multiculturalism, "Vancouvermulticulturalism"); checkPICSagainstoption(r, "Edu ", (*o.fg[filtergroup]).pics_vancouver_educationalcontent, "Vancouvereducationalcontent"); checkPICSagainstoption(r, "Env ", (*o.fg[filtergroup]).pics_vancouver_environmentalawareness, "Vancouverenvironmentalawareness"); checkPICSagainstoption(r, "Tol ", (*o.fg[filtergroup]).pics_vancouver_tolerance, "Vancouvertolerance"); checkPICSagainstoption(r, "V ", (*o.fg[filtergroup]).pics_vancouver_violence, "Vancouverviolence"); checkPICSagainstoption(r, "S ", (*o.fg[filtergroup]).pics_vancouver_sex, "Vancouversex"); checkPICSagainstoption(r, "P ", (*o.fg[filtergroup]).pics_vancouver_profanity, "Vancouverprofanity"); checkPICSagainstoption(r, "SF ", (*o.fg[filtergroup]).pics_vancouver_safety, "Vancouversafety"); checkPICSagainstoption(r, "Can ", (*o.fg[filtergroup]).pics_vancouver_canadiancontent, "Vancouvercanadiancontent"); checkPICSagainstoption(r, "Com ", (*o.fg[filtergroup]).pics_vancouver_commercialcontent, "Vancouvercommercialcontent"); checkPICSagainstoption(r, "Gam ", (*o.fg[filtergroup]).pics_vancouver_gambling, "Vancouvergambling");}void NaughtyFilter::checkPICSagainstoption(String s, char* l, int opt, std::string m) { if (s.indexOf(l) != -1) { // if the rating contains the label then: int i = 0; s = s.after(l); // get the rating label value if (s.indexOf(" ") != -1) {s = s.before(" ");} //remove anything after it if (s.length() > 0) { // sanity checking i = s.toInteger(); // convert the value in a String to an integer if (opt < i) { // check its value against the option in config file isItNaughty = true; // must be over limit whatIsNaughty = m + " "; whatIsNaughty += o.language_list.getTranslation(1000); // PICS labeling level exceeded on the above site. whatIsNaughtyLog = whatIsNaughty; } } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?