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 + -
显示快捷键?