/*
- * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
+ * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
*
* Squid software is distributed under GPLv2+ license and includes
* contributions from numerous individuals and organizations.
*/
#include "squid.h"
-#include "acl/Checklist.h"
+#include "acl/FilledChecklist.h"
#include "acl/HttpHeaderData.h"
#include "acl/Note.h"
+#include "acl/NoteData.h"
#include "HttpRequest.h"
-#include "Notes.h"
-int
-ACLNoteStrategy::match (ACLData<MatchType> * &data, ACLFilledChecklist *checklist, ACLFlags &)
+/* Acl::AnnotationStrategy */
+
+const Acl::Options &
+Acl::AnnotationStrategy::options()
{
- if (checklist->request != NULL)
- return data->match(checklist->request);
+ static const Acl::CharacterSetOption Delimiters;
+ static const Acl::Options MyOptions = {
+ { "-m", &Delimiters }
+ };
+ Delimiters.linkWith(&delimiters);
+ return MyOptions;
+}
+
+/* ACLNoteStrategy */
+int
+ACLNoteStrategy::match(ACLData<MatchType> * &data, ACLFilledChecklist *checklist)
+{
+ if (const auto request = checklist->request) {
+ if (request->hasNotes() && matchNotes(data, request->notes().getRaw()))
+ return 1;
+#if USE_ADAPTATION
+ const Adaptation::History::Pointer ah = request->adaptLogHistory();
+ if (ah != NULL && ah->metaHeaders != NULL && matchNotes(data, ah->metaHeaders.getRaw()))
+ return 1;
+#endif
+ }
return 0;
}
-ACLNoteStrategy *
-ACLNoteStrategy::Instance()
+bool
+ACLNoteStrategy::matchNotes(ACLData<MatchType> *noteData, const NotePairs *note) const
{
- return &Instance_;
+ const NotePairs::Entries &entries = note->expandListEntries(&delimiters.value);
+ for (auto e: entries)
+ if (noteData->match(e.getRaw()))
+ return true;
+ return false;
}
-ACLNoteStrategy ACLNoteStrategy::Instance_;
-