From d9377e2589d770eb6226a8b26fddfa4d3a25badb Mon Sep 17 00:00:00 2001 From: "Brian R. Bondy" Date: Fri, 15 Mar 2019 23:32:46 -0400 Subject: [PATCH] Add an explicitcancel option --- filter.cc | 6 ++++-- filter.h | 7 +++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/filter.cc b/filter.cc index 205fbb8..58a0b7b 100644 --- a/filter.cc +++ b/filter.cc @@ -322,6 +322,8 @@ void Filter::parseOption(const char *input, int len) { *pFilterOption = static_cast(*pFilterOption | FOWebsocket); } else if (!strncmp(pStart, "important", len)) { *pFilterOption = static_cast(*pFilterOption | FOImportant); + } else if (!strncmp(pStart, "explicitcancel", len)) { + *pFilterOption = static_cast(*pFilterOption | FOExplicitCancel); } else { *pFilterOption = static_cast(*pFilterOption | FOUnknown); std::string option(pStart, len); @@ -445,12 +447,12 @@ bool Filter::matchesOptions(const char *input, FilterOption context, // blocking a the HTTP level, don't block here because we don't have enough // information if (context != FONoFilterOption) { - if ((filterOption & ~FOThirdParty) != FONoFilterOption + if ((filterOption & ~BehavioralFilterOnly) != FONoFilterOption && !(filterOption & FOResourcesOnly & context)) { return false; } - if ((antiFilterOption & ~FOThirdParty) != FONoFilterOption + if ((antiFilterOption & ~BehavioralFilterOnly) != FONoFilterOption && (antiFilterOption & FOResourcesOnly & context)) { return false; } diff --git a/filter.h b/filter.h index 27534c4..7931e58 100644 --- a/filter.h +++ b/filter.h @@ -5,7 +5,6 @@ #ifndef FILTER_H_ #define FILTER_H_ - #include #include #include "./base.h" @@ -72,6 +71,8 @@ enum FilterOption { FOWebsocket = 0200000000, // important means to ignore all exception filters (those prefixed with @@). FOImportant = 0400000000, + // Cancel the request instead of using a 200 OK response + FOExplicitCancel = 01000000000, FOUnknown = 04000000000, FOResourcesOnly = FOScript|FOImage|FOStylesheet|FOObject|FOXmlHttpRequest| @@ -79,7 +80,9 @@ enum FilterOption { FOWebRTC|FOWebsocket|FOPing, FOUnsupportedSoSkipCheck = FOPopup|FOCSP|FOElemHide|FOGenericHide| FOGenericBlock|FOEmpty|FOUnknown, - FOUnsupportedButIgnore = FORedirect|FOImportant + // Non matching related filters, alters behavior + BehavioralFilterOnly = FORedirect|FOImportant|FOExplicitCancel| + FOThirdParty|FONotThirdParty }; class Filter {