This is Unofficial EPICS BASE Doxygen Site
epics::pvAccess::ServerConnectionValidationHandler Class Reference

#include "responseHandlers.h"

+ Inheritance diagram for epics::pvAccess::ServerConnectionValidationHandler:
+ Collaboration diagram for epics::pvAccess::ServerConnectionValidationHandler:

Public Member Functions

 ServerConnectionValidationHandler (ServerContextImpl::shared_pointer const &context)
 
virtual ~ServerConnectionValidationHandler ()
 
virtual void handleResponse (osiSockAddr *responseFrom, Transport::shared_pointer const &transport, epics::pvData::int8 version, epics::pvData::int8 command, std::size_t payloadSize, epics::pvData::ByteBuffer *payloadBuffer) OVERRIDE FINAL
 
- Public Member Functions inherited from epics::pvAccess::AbstractServerResponseHandler
 AbstractServerResponseHandler (ServerContextImpl::shared_pointer const &context, std::string description)
 
virtual ~AbstractServerResponseHandler ()
 
- Public Member Functions inherited from epics::pvAccess::ResponseHandler
 POINTER_DEFINITIONS (ResponseHandler)
 
 ResponseHandler (Context *context, const std::string &description)
 
virtual ~ResponseHandler ()
 

Additional Inherited Members

- Static Public Attributes inherited from epics::pvAccess::ResponseHandler
static size_t num_instances
 
- Protected Attributes inherited from epics::pvAccess::AbstractServerResponseHandler
ServerContextImpl::shared_pointer _context
 
- Protected Attributes inherited from epics::pvAccess::ResponseHandler
std::string _description
 
epics::pvData::int32 _debugLevel
 

Detailed Description

Connection validation message handler.

Definition at line 56 of file responseHandlers.h.

Constructor & Destructor Documentation

epics::pvAccess::ServerConnectionValidationHandler::ServerConnectionValidationHandler ( ServerContextImpl::shared_pointer const &  context)
inline

Definition at line 58 of file responseHandlers.h.

58  :
59  AbstractServerResponseHandler(context, "Connection validation") {
60  }
AbstractServerResponseHandler(ServerContextImpl::shared_pointer const &context, std::string description)
virtual epics::pvAccess::ServerConnectionValidationHandler::~ServerConnectionValidationHandler ( )
inlinevirtual

Definition at line 61 of file responseHandlers.h.

61 {}

Member Function Documentation

void epics::pvAccess::ServerConnectionValidationHandler::handleResponse ( osiSockAddr responseFrom,
Transport::shared_pointer const &  transport,
epics::pvData::int8  version,
epics::pvData::int8  command,
std::size_t  payloadSize,
epics::pvData::ByteBuffer payloadBuffer 
)
virtual

Handle response.

Parameters
[in]responseFromremote address of the responder, 0 if unknown.
[in]transportresponse source transport.
[in]versionmessage version.
[in]payloadSizesize of this message data available in the payloadBuffer.
[in]payloadBuffermessage payload data. Note that this might not be the only message in the buffer. Code must not manipulate buffer.

Reimplemented from epics::pvAccess::ResponseHandler.

Definition at line 174 of file responseHandlers.cpp.

178 {
180  transport, version, command, payloadSize, payloadBuffer);
181 
182  transport->ensureData(4+2+2);
183  transport->setRemoteTransportReceiveBufferSize(payloadBuffer->getInt());
184  // TODO clientIntrospectionRegistryMaxSize
185  /* int clientIntrospectionRegistryMaxSize = */ payloadBuffer->getShort();
186  // TODO connectionQoS
187  /* int16 connectionQoS = */ payloadBuffer->getShort();
188 
189  // authNZ
190  std::string securityPluginName = SerializeHelper::deserializeString(payloadBuffer, transport.get());
191 
192  // optional authNZ plug-in initialization data
193  PVStructure::shared_pointer data;
194  if (payloadBuffer->getRemaining()) {
195  PVField::shared_pointer raw(SerializationHelper::deserializeFull(payloadBuffer, transport.get()));
196  if(raw && raw->getField()->getType()==structure) {
198  } else {
199  // was originally allowed, but never used
200  }
201  }
202 
203  detail::BlockingServerTCPTransportCodec* casTransport(static_cast<detail::BlockingServerTCPTransportCodec*>(transport.get()));
204  //TODO: simplify byzantine class heirarchy...
205  assert(casTransport);
206 
207  try {
208  casTransport->authNZInitialize(securityPluginName, data);
209  }catch(std::exception& e){
211  {
212  LOG(logLevelDebug, "Security plug-in '%s' failed to create a session for PVA client: %s.", securityPluginName.c_str(), casTransport->getRemoteName().c_str());
213  }
214  casTransport->verified(pvData::Status::error(e.what()));
215  throw;
216  }
217 }
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
static std::string deserializeString(ByteBuffer *buffer, DeserializableControl *control)
static Status error(const std::string &m)
Definition: status.h:50
virtual void handleResponse(osiSockAddr *responseFrom, Transport::shared_pointer const &transport, epics::pvData::int8 version, epics::pvData::int8 command, std::size_t payloadSize, epics::pvData::ByteBuffer *payloadBuffer)
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:788
static epics::pvData::PVField::shared_pointer deserializeFull(epics::pvData::ByteBuffer *payloadBuffer, epics::pvData::DeserializableControl *control)
EPICS_ALWAYS_INLINE int32 getInt()
Definition: byteBuffer.h:629
#define LOG(level, format,...)
Definition: logger.h:48
EPICS_ALWAYS_INLINE int16 getShort()
Definition: byteBuffer.h:623
Data interface for a structure,.
Definition: pvData.h:712
std::size_t getRemaining() const
Definition: byteBuffer.h:391
#define IS_LOGGABLE(level)
Definition: logger.h:51

The documentation for this class was generated from the following files: