]> git.ipfire.org Git - thirdparty/squid.git/blob - src/auth/QueueNode.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / auth / QueueNode.h
1 /*
2 * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 #ifndef SQUID_SRC_AUTH_QUEUENODE_H
10 #define SQUID_SRC_AUTH_QUEUENODE_H
11
12 #include "auth/forward.h"
13 #include "cbdata.h"
14
15 namespace Auth
16 {
17
18 /**
19 * A queue of auth requests waiting for verification to occur.
20 *
21 * Certain authentication schemes such a Basic and Bearer auth
22 * permit credentials tokens to be repeated from multiple sources
23 * simultaneously. This queue node allows multiple validation
24 * queries to be collapsed into one backend helper lookup.
25 * CBDATA and handlers stored in these queue nodes can be notified
26 * all at once with a result when the lookup completes.
27 */
28 class QueueNode
29 {
30 MEMPROXY_CLASS(Auth::QueueNode);
31
32 private:
33 // we store CBDATA here, copy is not safe
34 QueueNode(const QueueNode &);
35 QueueNode &operator =(const QueueNode &);
36
37 public:
38 QueueNode(Auth::UserRequest *aRequest, AUTHCB *aHandler, void *aData) :
39 next(NULL),
40 auth_user_request(aRequest),
41 handler(aHandler),
42 data(cbdataReference(aData)) {}
43 ~QueueNode() {
44 cbdataReferenceDone(data);
45 while (next) {
46 QueueNode *tmp = next->next;
47 next->next = NULL;
48 delete next;
49 next = tmp;
50 };
51 }
52
53 Auth::QueueNode *next;
54 Auth::UserRequest::Pointer auth_user_request;
55 AUTHCB *handler;
56 void *data;
57 };
58
59 } // namespace Auth
60
61 #endif /* SQUID_SRC_AUTH_QUEUENODE_H */
62