]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/ipc/StrandCoord.h
Source Format Enforcement (#763)
[thirdparty/squid.git] / src / ipc / StrandCoord.h
index 02f2056de88ae47f97db42be88a57c54aa94b3e5..133a711314f51cbb3a30324a714b73caec782911 100644 (file)
@@ -1,13 +1,18 @@
 /*
- * $Id$
+ * 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.
+ * Please see the COPYING and CONTRIBUTORS files for details.
  */
 
 #ifndef SQUID_IPC_STRAND_COORD_H
 #define SQUID_IPC_STRAND_COORD_H
 
 #include "ipc/forward.h"
-#include <sys/types.h>
+#include "ipc/Messages.h"
+#include "ipc/QuestionerId.h"
+#include "SquidString.h"
 
 namespace Ipc
 {
@@ -17,15 +22,41 @@ class StrandCoord
 {
 public:
     StrandCoord(); ///< unknown location
-    StrandCoord(int akidId, pid_t aPid); ///< from registrant
-    explicit StrandCoord(const TypedMsgHdr &hdrMsg); ///< from recvmsg()
+    StrandCoord(int akidId, pid_t aPid);
+
     void pack(TypedMsgHdr &hdrMsg) const; ///< prepare for sendmsg()
+    void unpack(const TypedMsgHdr &hdrMsg); ///< from recvmsg()
 
 public:
     int kidId; ///< internal Squid process number
     pid_t pid; ///< OS process or thread identifier
+
+    String tag; ///< optional unique well-known key (e.g., cache_dir path)
+};
+
+/// an IPC message carrying StrandCoord
+class StrandMessage
+{
+public:
+    explicit StrandMessage(const StrandCoord &, QuestionerId);
+    explicit StrandMessage(const TypedMsgHdr &);
+    void pack(MessageType, TypedMsgHdr &) const;
+
+    /// creates and sends StrandMessage to Coordinator
+    static void NotifyCoordinator(MessageType, const char *tag);
+
+    /// for Mine() tests
+    QuestionerId intendedRecepient() const { return qid; }
+
+public:
+    StrandCoord strand; ///< messageType-specific coordinates (e.g., sender)
+
+    /// For IPC requests/questions: The sender of this request.
+    /// For IPC responses/answers: The sender of the corresponding request.
+    QuestionerId qid;
 };
 
 } // namespace Ipc;
 
 #endif /* SQUID_IPC_STRAND_COORD_H */
+