1 /*
2  * Copyright (C) 1996-2021 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 /* DEBUG: section 54    Interprocess Communication */
10 
11 #ifndef SQUID_IPC_STRAND_H
12 #define SQUID_IPC_STRAND_H
13 
14 #include "ipc/forward.h"
15 #include "ipc/Port.h"
16 #include "mgr/forward.h"
17 #if SQUID_SNMP
18 #include "snmp/forward.h"
19 #endif
20 
21 namespace Ipc
22 {
23 
24 class StrandCoord;
25 
26 /// Receives coordination messages on behalf of its process or thread
27 class Strand: public Port
28 {
29     CBDATA_CLASS(Strand);
30 
31 public:
32     Strand();
33 
34     virtual void start(); // Port (AsyncJob) API
35 
36 protected:
37     virtual void timedout(); // Port (UsdOp) API
38     virtual void receive(const TypedMsgHdr &message); // Port API
39 
40 private:
41     void registerSelf(); /// let Coordinator know this strand exists
42     void handleRegistrationResponse(const HereIamMessage &msg);
43     void handleCacheMgrRequest(const Mgr::Request& request);
44     void handleCacheMgrResponse(const Mgr::Response& response);
45 #if SQUID_SNMP
46     void handleSnmpRequest(const Snmp::Request& request);
47     void handleSnmpResponse(const Snmp::Response& response);
48 #endif
49 
50 private:
51     bool isRegistered; ///< whether Coordinator ACKed registration (unused)
52 
53 private:
54     Strand(const Strand&); // not implemented
55     Strand& operator =(const Strand&); // not implemented
56 };
57 
58 }
59 
60 #endif /* SQUID_IPC_STRAND_H */
61 
62