diff --git a/src/cpp/handler/handlerengine.cpp b/src/cpp/handler/handlerengine.cpp index fe1d902d..9eee0a11 100644 --- a/src/cpp/handler/handlerengine.cpp +++ b/src/cpp/handler/handlerengine.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2015-2023 Fanout, Inc. - * Copyright (C) 2023 Fastly, Inc. + * Copyright (C) 2023-2024 Fastly, Inc. * * This file is part of Pushpin. * @@ -963,11 +963,13 @@ class AcceptWorker : public Deferred return; } + QByteArray reqFrom = req->from(); + QVariantHash result; result["accepted"] = true; req->respond(result); - log_debug("accepting %d requests", requestStates.count()); + log_debug("accepting %d requests from %s", requestStates.count(), reqFrom.data()); if(instruct.holdMode == Instruct::ResponseHold) { diff --git a/src/cpp/packet/zrpcrequestpacket.cpp b/src/cpp/packet/zrpcrequestpacket.cpp index d72c5a06..6f3881a3 100644 --- a/src/cpp/packet/zrpcrequestpacket.cpp +++ b/src/cpp/packet/zrpcrequestpacket.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2014 Fanout, Inc. + * Copyright (C) 2024 Fastly, Inc. * * This file is part of Pushpin. * @@ -26,6 +27,9 @@ QVariant ZrpcRequestPacket::toVariant() const { QVariantHash obj; + if(!from.isEmpty()) + obj["from"] = from; + if(!id.isEmpty()) obj["id"] = id; @@ -44,6 +48,14 @@ bool ZrpcRequestPacket::fromVariant(const QVariant &in) QVariantHash obj = in.toHash(); + if(obj.contains("from")) + { + if(obj["from"].type() != QVariant::ByteArray) + return false; + + from = obj["from"].toByteArray(); + } + if(obj.contains("id")) { if(obj["id"].type() != QVariant::ByteArray) diff --git a/src/cpp/packet/zrpcrequestpacket.h b/src/cpp/packet/zrpcrequestpacket.h index a4f66561..41c9feca 100644 --- a/src/cpp/packet/zrpcrequestpacket.h +++ b/src/cpp/packet/zrpcrequestpacket.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2014 Fanout, Inc. + * Copyright (C) 2024 Fastly, Inc. * * This file is part of Pushpin. * @@ -29,6 +30,7 @@ class ZrpcRequestPacket { public: + QByteArray from; QByteArray id; QString method; QVariantHash args; diff --git a/src/cpp/proxy/engine.cpp b/src/cpp/proxy/engine.cpp index 8ff4ebc4..98f01a78 100644 --- a/src/cpp/proxy/engine.cpp +++ b/src/cpp/proxy/engine.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2012-2023 Fanout, Inc. - * Copyright (C) 2023 Fastly, Inc. + * Copyright (C) 2023-2024 Fastly, Inc. * * This file is part of Pushpin. * @@ -257,6 +257,7 @@ class Engine::Private : public QObject if(!config.acceptSpec.isEmpty()) { accept = new ZrpcManager(this); + accept->setInstanceId(config.clientId); accept->setBind(true); accept->setIpcFileMode(config.ipcFileMode); if(!accept->setClientSpecs(QStringList() << config.acceptSpec)) diff --git a/src/cpp/zrpcmanager.cpp b/src/cpp/zrpcmanager.cpp index 41447401..914e4ae8 100644 --- a/src/cpp/zrpcmanager.cpp +++ b/src/cpp/zrpcmanager.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2014-2016 Fanout, Inc. + * Copyright (C) 2024 Fastly, Inc. * * This file is part of Pushpin. * @@ -56,6 +57,7 @@ class ZrpcManager::Private : public QObject }; ZrpcManager *q; + QByteArray instanceId; int ipcFileMode; bool doBind; int timeout; @@ -142,7 +144,10 @@ class ZrpcManager::Private : public QObject { assert(clientSock); - QVariant vpacket = packet.toVariant(); + ZrpcRequestPacket p = packet; + p.from = instanceId; + + QVariant vpacket = p.toVariant(); QByteArray buf = TnetString::fromVariant(vpacket); if(log_outputLevel() >= LOG_LEVEL_DEBUG) @@ -264,6 +269,11 @@ int ZrpcManager::timeout() const return d->timeout; } +void ZrpcManager::setInstanceId(const QByteArray &instanceId) +{ + d->instanceId = instanceId; +} + void ZrpcManager::setIpcFileMode(int mode) { d->ipcFileMode = mode; diff --git a/src/cpp/zrpcmanager.h b/src/cpp/zrpcmanager.h index 75eda4a1..a01ec532 100644 --- a/src/cpp/zrpcmanager.h +++ b/src/cpp/zrpcmanager.h @@ -1,6 +1,6 @@ /* * Copyright (C) 2014 Fanout, Inc. - * Copyright (C) 2023 Fastly, Inc. + * Copyright (C) 2023-2024 Fastly, Inc. * * This file is part of Pushpin. * @@ -43,6 +43,7 @@ class ZrpcManager : public QObject int timeout() const; + void setInstanceId(const QByteArray &instanceId); void setIpcFileMode(int mode); void setBind(bool enable); void setTimeout(int ms); diff --git a/src/cpp/zrpcrequest.cpp b/src/cpp/zrpcrequest.cpp index 5ab87dcb..79e7cf36 100644 --- a/src/cpp/zrpcrequest.cpp +++ b/src/cpp/zrpcrequest.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2014-2015 Fanout, Inc. + * Copyright (C) 2024 Fastly, Inc. * * This file is part of Pushpin. * @@ -38,6 +39,7 @@ class ZrpcRequest::Private : public QObject ZrpcRequest *q; ZrpcManager *manager; QList reqHeaders; + QByteArray from; QByteArray id; QString method; QVariantHash args; @@ -101,6 +103,7 @@ class ZrpcRequest::Private : public QObject void handle(const QList &headers, const ZrpcRequestPacket &packet) { reqHeaders = headers; + from = packet.from; id = packet.id; method = packet.method; args = packet.args; @@ -189,6 +192,11 @@ ZrpcRequest::~ZrpcRequest() delete d; } +QByteArray ZrpcRequest::from() const +{ + return d->from; +} + QByteArray ZrpcRequest::id() const { return d->id; diff --git a/src/cpp/zrpcrequest.h b/src/cpp/zrpcrequest.h index 2ee5c9d2..676c0a9f 100644 --- a/src/cpp/zrpcrequest.h +++ b/src/cpp/zrpcrequest.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2014-2015 Fanout, Inc. + * Copyright (C) 2024 Fastly, Inc. * * This file is part of Pushpin. * @@ -49,6 +50,7 @@ class ZrpcRequest : public QObject ZrpcRequest(ZrpcManager *manager, QObject *parent = 0); ~ZrpcRequest(); + QByteArray from() const; QByteArray id() const; QString method() const; QVariantHash args() const;