remove super abstract authNZInitialize(void*)
with separate client and server calls. Still dynamic_cast ugliness as Transport and Codec hierarchies don't have a common root.
This commit is contained in:
@@ -1597,20 +1597,14 @@ void BlockingServerTCPTransportCodec::authenticationCompleted(epics::pvData::Sta
|
||||
|
||||
epics::pvData::Status BlockingServerTCPTransportCodec::invalidSecurityPluginNameStatus(Status::STATUSTYPE_ERROR, "invalid security plug-in name");
|
||||
|
||||
void BlockingServerTCPTransportCodec::authNZInitialize(void *arg)
|
||||
void BlockingServerTCPTransportCodec::authNZInitialize(const std::string& securityPluginName,
|
||||
const epics::pvData::PVField::shared_pointer& data)
|
||||
{
|
||||
struct InitData {
|
||||
std::string securityPluginName;
|
||||
PVField::shared_pointer data;
|
||||
};
|
||||
|
||||
InitData* initData = static_cast<InitData*>(arg);
|
||||
|
||||
// check if plug-in name is valid
|
||||
SecurityPlugin::shared_pointer securityPlugin;
|
||||
|
||||
map<string, SecurityPlugin::shared_pointer>::iterator spIter =
|
||||
_context->getSecurityPlugins().find(initData->securityPluginName);
|
||||
_context->getSecurityPlugins().find(securityPluginName);
|
||||
if (spIter != _context->getSecurityPlugins().end())
|
||||
securityPlugin = spIter->second;
|
||||
if (!securityPlugin)
|
||||
@@ -1638,7 +1632,7 @@ void BlockingServerTCPTransportCodec::authNZInitialize(void *arg)
|
||||
{
|
||||
char ipAddrStr[48];
|
||||
ipAddrToDottedIP(&_socketAddress.ia, ipAddrStr, sizeof(ipAddrStr));
|
||||
LOG(logLevelDebug, "Accepted security plug-in '%s' for PVA client: %s.", initData->securityPluginName.c_str(), ipAddrStr);
|
||||
LOG(logLevelDebug, "Accepted security plug-in '%s' for PVA client: %s.", securityPluginName.c_str(), ipAddrStr);
|
||||
}
|
||||
|
||||
try
|
||||
@@ -1646,11 +1640,11 @@ void BlockingServerTCPTransportCodec::authNZInitialize(void *arg)
|
||||
// create session
|
||||
SecurityPluginControl::shared_pointer spc = std::tr1::dynamic_pointer_cast<SecurityPluginControl>(shared_from_this());
|
||||
// TODO sync
|
||||
_securitySession = securityPlugin->createSession(_socketAddress, spc, initData->data);
|
||||
_securitySession = securityPlugin->createSession(_socketAddress, spc, data);
|
||||
} catch (SecurityException &se) {
|
||||
if (IS_LOGGABLE(logLevelDebug))
|
||||
{
|
||||
LOG(logLevelDebug, "Security plug-in '%s' failed to create a session for PVA client: %s.", initData->securityPluginName.c_str(), _socketName.c_str());
|
||||
LOG(logLevelDebug, "Security plug-in '%s' failed to create a session for PVA client: %s.", securityPluginName.c_str(), _socketName.c_str());
|
||||
}
|
||||
Status status(Status::STATUSTYPE_ERROR, se.what());
|
||||
verified(status);
|
||||
@@ -1915,16 +1909,15 @@ void BlockingClientTCPTransportCodec::send(ByteBuffer* buffer,
|
||||
}
|
||||
|
||||
|
||||
void BlockingClientTCPTransportCodec::authNZInitialize(void *arg)
|
||||
void BlockingClientTCPTransportCodec::authNZInitialize(const std::vector<std::string>& offeredSecurityPlugins)
|
||||
{
|
||||
vector<string>* offeredSecurityPlugins = static_cast< vector<string>* >(arg);
|
||||
if (!offeredSecurityPlugins->empty())
|
||||
if (!offeredSecurityPlugins.empty())
|
||||
{
|
||||
map<string, SecurityPlugin::shared_pointer>& availableSecurityPlugins =
|
||||
_context->getSecurityPlugins();
|
||||
|
||||
for (vector<string>::const_iterator offeredSP = offeredSecurityPlugins->begin();
|
||||
offeredSP != offeredSecurityPlugins->end(); offeredSP++)
|
||||
for (vector<string>::const_iterator offeredSP = offeredSecurityPlugins.begin();
|
||||
offeredSP != offeredSecurityPlugins.end(); offeredSP++)
|
||||
{
|
||||
map<string, SecurityPlugin::shared_pointer>::iterator spi = availableSecurityPlugins.find(*offeredSP);
|
||||
if (spi != availableSecurityPlugins.end())
|
||||
|
||||
@@ -140,10 +140,6 @@ public:
|
||||
// noop
|
||||
}
|
||||
|
||||
virtual void authNZInitialize(void*) {
|
||||
// noop
|
||||
}
|
||||
|
||||
virtual void authNZMessage(epics::pvData::PVField::shared_pointer const & data) {
|
||||
// noop
|
||||
}
|
||||
|
||||
@@ -574,7 +574,8 @@ public:
|
||||
// noop on server-side
|
||||
}
|
||||
|
||||
virtual void authNZInitialize(void *) OVERRIDE FINAL;
|
||||
void authNZInitialize(const std::string& securityPluginName,
|
||||
const epics::pvData::PVField::shared_pointer& data);
|
||||
|
||||
virtual void authenticationCompleted(epics::pvData::Status const & status) OVERRIDE FINAL;
|
||||
|
||||
@@ -679,7 +680,7 @@ public:
|
||||
virtual void send(epics::pvData::ByteBuffer* buffer,
|
||||
TransportSendControl* control) OVERRIDE FINAL;
|
||||
|
||||
virtual void authNZInitialize(void *) OVERRIDE FINAL;
|
||||
void authNZInitialize(const std::vector<std::string>& offeredSecurityPlugins);
|
||||
|
||||
virtual void authenticationCompleted(epics::pvData::Status const & status) OVERRIDE FINAL;
|
||||
|
||||
|
||||
@@ -295,12 +295,6 @@ public:
|
||||
*/
|
||||
virtual bool isClosed() = 0;
|
||||
|
||||
/**
|
||||
* Used to initialize authNZ (select security plug-in).
|
||||
* @param data
|
||||
*/
|
||||
virtual void authNZInitialize(void*) = 0;
|
||||
|
||||
/**
|
||||
* Pass data to the active security plug-in session.
|
||||
* @param data the data (any data), can be <code>null</code>.
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <pv/inetAddressUtil.h>
|
||||
#include <pv/hexDump.h>
|
||||
#include <pv/remote.h>
|
||||
#include <pv/codec.h>
|
||||
#include <pv/channelSearchManager.h>
|
||||
#include <pv/serializationHelper.h>
|
||||
#include <pv/simpleChannelSearchManagerImpl.h>
|
||||
@@ -2834,7 +2835,11 @@ public:
|
||||
SerializeHelper::deserializeString(payloadBuffer, transport.get())
|
||||
);
|
||||
|
||||
transport->authNZInitialize(&offeredSecurityPlugins);
|
||||
epics::pvAccess::detail::BlockingClientTCPTransportCodec* cliTransport(static_cast<epics::pvAccess::detail::BlockingClientTCPTransportCodec*>(transport.get()));
|
||||
//TODO: simplify byzantine class heirarchy...
|
||||
assert(cliTransport);
|
||||
|
||||
cliTransport->authNZInitialize(offeredSecurityPlugins);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <pv/serializationHelper.h>
|
||||
#include <pv/logger.h>
|
||||
#include <pv/pvAccessMB.h>
|
||||
#include <pv/codec.h>
|
||||
#include <pv/rpcServer.h>
|
||||
#include <pv/securityImpl.h>
|
||||
|
||||
@@ -183,12 +184,11 @@ void ServerConnectionValidationHandler::handleResponse(
|
||||
if (payloadBuffer->getRemaining())
|
||||
data = SerializationHelper::deserializeFull(payloadBuffer, transport.get());
|
||||
|
||||
struct {
|
||||
std::string securityPluginName;
|
||||
PVField::shared_pointer data;
|
||||
} initData = { securityPluginName, data };
|
||||
detail::BlockingServerTCPTransportCodec* casTransport(static_cast<detail::BlockingServerTCPTransportCodec*>(transport.get()));
|
||||
//TODO: simplify byzantine class heirarchy...
|
||||
assert(casTransport);
|
||||
|
||||
transport->authNZInitialize(&initData);
|
||||
casTransport->authNZInitialize(securityPluginName, data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -399,7 +399,6 @@ public:
|
||||
void aliveNotification() {}
|
||||
|
||||
void authNZMessage(epics::pvData::PVField::shared_pointer const & data) {}
|
||||
void authNZInitialize(void*) {}
|
||||
|
||||
virtual std::tr1::shared_ptr<SecuritySession> getSecuritySession() const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user