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