]> git.ipfire.org Git - thirdparty/squid.git/blame_incremental - src/ipc/Coordinator.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / ipc / Coordinator.h
... / ...
CommitLineData
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/* DEBUG: section 54 Interprocess Communication */
10
11#ifndef SQUID_IPC_COORDINATOR_H
12#define SQUID_IPC_COORDINATOR_H
13
14#include "ipc/Messages.h"
15#include "ipc/Port.h"
16#include "ipc/SharedListen.h"
17#include "ipc/StrandCoords.h"
18#include "ipc/StrandSearch.h"
19#include "mgr/forward.h"
20#if SQUID_SNMP
21#include "snmp/forward.h"
22#endif
23#include <list>
24#include <map>
25
26namespace Ipc
27{
28
29/// Coordinates shared activities of Strands (Squid processes or threads)
30class Coordinator: public Port
31{
32 CBDATA_CLASS(Coordinator);
33
34public:
35 static Coordinator* Instance();
36
37public:
38 Coordinator();
39
40 void broadcastSignal(int sig) const; ///< send sig to registered strands
41
42 const StrandCoords &strands() const; ///< currently registered strands
43
44protected:
45 virtual void start(); // Port (AsyncJob) API
46 virtual void receive(const TypedMsgHdr& message); // Port API
47
48 StrandCoord* findStrand(int kidId); ///< registered strand or NULL
49 void registerStrand(const StrandCoord &); ///< adds or updates existing
50 void handleRegistrationRequest(const HereIamMessage &); ///< register,ACK
51
52 /// answer the waiting search request
53 void notifySearcher(const StrandSearchRequest &request, const StrandCoord&);
54 /// answers or queues the request if the answer is not yet known
55 void handleSearchRequest(const StrandSearchRequest &request);
56
57 /// returns cached socket or calls openListenSocket()
58 void handleSharedListenRequest(const SharedListenRequest& request);
59 void handleCacheMgrRequest(const Mgr::Request& request);
60 void handleCacheMgrResponse(const Mgr::Response& response);
61#if SQUID_SNMP
62 void handleSnmpRequest(const Snmp::Request& request);
63 void handleSnmpResponse(const Snmp::Response& response);
64#endif
65 /// calls comm_open_listener()
66 Comm::ConnectionPointer openListenSocket(const SharedListenRequest& request, int &errNo);
67
68private:
69 StrandCoords strands_; ///< registered processes and threads
70
71 typedef std::list<StrandSearchRequest> Searchers; ///< search requests
72 Searchers searchers; ///< yet unanswered search requests in arrival order
73
74 typedef std::map<OpenListenerParams, Comm::ConnectionPointer> Listeners; ///< params:connection map
75 Listeners listeners; ///< cached comm_open_listener() results
76
77 static Coordinator* TheInstance; ///< the only class instance in existence
78
79private:
80 Coordinator(const Coordinator&); // not implemented
81 Coordinator& operator =(const Coordinator&); // not implemented
82};
83
84} // namespace Ipc
85
86#endif /* SQUID_IPC_COORDINATOR_H */
87