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

#include "responseHandlers.h"

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

Public Member Functions

 ServerDestroyChannelHandler (ServerContextImpl::shared_pointer const &context)
 
virtual ~ServerDestroyChannelHandler ()
 
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

Destroy channel request handler.

Definition at line 237 of file responseHandlers.h.

Constructor & Destructor Documentation

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

Definition at line 240 of file responseHandlers.h.

240  :
241  AbstractServerResponseHandler(context, "Destroy channel request") {
242  }
AbstractServerResponseHandler(ServerContextImpl::shared_pointer const &context, std::string description)
virtual epics::pvAccess::ServerDestroyChannelHandler::~ServerDestroyChannelHandler ( )
inlinevirtual

Definition at line 243 of file responseHandlers.h.

243 {}

Member Function Documentation

void epics::pvAccess::ServerDestroyChannelHandler::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 968 of file responseHandlers.cpp.

971 {
973  transport, version, command, payloadSize, payloadBuffer);
974 
975  // NOTE: we do not explicitly check if transport OK
976  detail::BlockingServerTCPTransportCodec* casTransport(static_cast<detail::BlockingServerTCPTransportCodec*>(transport.get()));
977 
978 
979  transport->ensureData(8);
980  const pvAccessID sid = payloadBuffer->getInt();
981  const pvAccessID cid = payloadBuffer->getInt();
982 
983  // get channel by SID
984  ServerChannel::shared_pointer channel = casTransport->getChannel(sid);
985  if (channel.get() == NULL)
986  {
987  if (!transport->isClosed())
988  {
989  char host[100];
990  sockAddrToDottedIP(&responseFrom->sa,host,100);
991  LOG(logLevelDebug, "Trying to destroy a channel that no longer exists (SID: %d, CID %d, client: %s).", sid, cid, host);
992  }
993  return;
994  }
995 
996  // destroy
997  channel->destroy();
998 
999  // .. and unregister
1000  casTransport->unregisterChannel(sid);
1001 
1002  // send response back
1003  TransportSender::shared_pointer sr(new ServerDestroyChannelHandlerTransportSender(cid, sid));
1004  transport->enqueueSendRequest(sr);
1005 }
unsigned epicsStdCall sockAddrToDottedIP(const struct sockaddr *paddr, char *pBuf, unsigned bufSize)
Definition: osiSock.c:118
epicsInt32 pvAccessID
Definition: pvaDefs.h:18
struct sockaddr sa
Definition: osiSock.h:158
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)
#define NULL
Definition: catime.c:38
EPICS_ALWAYS_INLINE int32 getInt()
Definition: byteBuffer.h:629
#define LOG(level, format,...)
Definition: logger.h:48

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