7 #ifndef RESPONSEHANDLERS_H_ 8 #define RESPONSEHANDLERS_H_ 14 #include <pv/serverContext.h> 15 #include <pv/remote.h> 16 #include <pv/serverChannelImpl.h> 17 #include <pv/baseChannelRequester.h> 18 #include <pv/securityImpl.h> 25 class AbstractServerResponseHandler :
public ResponseHandler {
27 ServerContextImpl::shared_pointer _context;
29 AbstractServerResponseHandler(ServerContextImpl::shared_pointer
const & context, std::string description) :
30 ResponseHandler(context.get(), description), _context(context) {
33 virtual ~AbstractServerResponseHandler() {}
41 ServerBadResponse(ServerContextImpl::shared_pointer
const & context) :
42 AbstractServerResponseHandler(context,
"Bad request") {
45 virtual ~ServerBadResponse() {
58 ServerConnectionValidationHandler(ServerContextImpl::shared_pointer
const & context) :
59 AbstractServerResponseHandler(context,
"Connection validation") {
61 virtual ~ServerConnectionValidationHandler() {}
73 ServerNoopResponse(ServerContextImpl::shared_pointer
const & context, std::string description) :
74 AbstractServerResponseHandler(context, description) {
76 virtual ~ServerNoopResponse() {}
84 ServerEchoHandler(ServerContextImpl::shared_pointer
const & context) :
85 AbstractServerResponseHandler(context,
"Echo request") {
87 virtual ~ServerEchoHandler() {}
94 class EchoTransportSender :
public TransportSender {
96 EchoTransportSender(osiSockAddr* echoFrom, size_t payloadSize, epics::pvData::ByteBuffer& payloadBuffer) {
97 memcpy(&_echoFrom, echoFrom,
sizeof(osiSockAddr));
98 toEcho.resize(payloadSize);
99 payloadBuffer.getArray(&toEcho[0], payloadSize);
102 virtual ~EchoTransportSender() {}
104 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL {
105 control->startMessage(CMD_ECHO, toEcho.size(), toEcho.size());
106 control->setRecipient(_echoFrom);
107 buffer->putArray<
char>(&toEcho[0], toEcho.size());
111 osiSockAddr _echoFrom;
112 std::vector<
char> toEcho;
123 static const std::string SUPPORTED_PROTOCOL;
125 ServerSearchHandler(ServerContextImpl::shared_pointer
const & context);
126 virtual ~ServerSearchHandler() {}
134 class ServerChannelFindRequesterImpl:
135 public ChannelFindRequester,
136 public TransportSender,
137 public epics::pvData::TimerCallback,
138 public std::tr1::enable_shared_from_this<ServerChannelFindRequesterImpl>
141 ServerChannelFindRequesterImpl(ServerContextImpl::shared_pointer
const & context,
142 const PeerInfo::const_shared_pointer& peer,
143 epics::pvData::int32 expectedResponseCount);
144 virtual ~ServerChannelFindRequesterImpl() {}
146 ServerChannelFindRequesterImpl* set(std::string _name, epics::pvData::int32 searchSequenceId,
147 epics::pvData::int32 cid, osiSockAddr
const & sendTo,
bool responseRequired,
bool serverSearch);
148 virtual void channelFindResult(
const epics::pvData::Status& status, ChannelFind::shared_pointer
const & channelFind,
bool wasFound)
OVERRIDE FINAL;
150 virtual std::tr1::shared_ptr<
const PeerInfo> getPeerInfo()
OVERRIDE FINAL;
151 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL;
159 epics::pvData::int32 _searchSequenceId;
160 epics::pvData::int32 _cid;
162 bool _responseRequired;
164 const ServerContextImpl::shared_pointer _context;
165 const PeerInfo::const_shared_pointer _peer;
166 mutable epics::pvData::Mutex _mutex;
167 const epics::pvData::int32 _expectedResponseCount;
168 epics::pvData::int32 _responseCount;
179 ServerCreateChannelHandler(ServerContextImpl::shared_pointer
const & context)
180 :AbstractServerResponseHandler(context,
"Create channel request")
182 virtual ~ServerCreateChannelHandler() {}
190 static const std::string SERVER_CHANNEL_NAME;
192 void disconnect(Transport::shared_pointer
const & transport);
196 class BlockingServerTCPTransportCodec;
199 class ServerChannelRequesterImpl :
200 public ChannelRequester,
201 public TransportSender,
202 public std::tr1::enable_shared_from_this<ServerChannelRequesterImpl>
204 friend class ServerCreateChannelHandler;
206 typedef std::tr1::shared_ptr<ServerChannelRequesterImpl> shared_pointer;
207 typedef std::tr1::shared_ptr<
const ServerChannelRequesterImpl> const_shared_pointer;
209 ServerChannelRequesterImpl(Transport::shared_pointer
const & transport,
210 const std::string channelName,
211 const pvAccessID cid);
213 virtual ~ServerChannelRequesterImpl() {}
214 static ChannelRequester::shared_pointer create(ChannelProvider::shared_pointer
const & provider,
215 Transport::shared_pointer
const & transport,
const std::string channelName,
216 const pvAccessID cid);
217 virtual void channelCreated(
const epics::pvData::Status& status, Channel::shared_pointer
const & channel)
OVERRIDE FINAL;
218 virtual void channelStateChange(Channel::shared_pointer
const & c,
const Channel::ConnectionState isConnected)
OVERRIDE FINAL;
219 virtual std::tr1::shared_ptr<
const PeerInfo> getPeerInfo()
OVERRIDE FINAL;
221 virtual void message(std::string
const & message, epics::pvData::MessageType messageType)
OVERRIDE FINAL;
222 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL;
224 ServerChannel::weak_pointer _serverChannel;
225 std::tr1::weak_ptr<detail::BlockingServerTCPTransportCodec> _transport;
226 const std::string _channelName;
227 const pvAccessID _cid;
229 epics::pvData::Status _status;
230 epics::pvData::Mutex _mutex;
240 ServerDestroyChannelHandler(ServerContextImpl::shared_pointer
const & context) :
241 AbstractServerResponseHandler(context,
"Destroy channel request") {
243 virtual ~ServerDestroyChannelHandler() {}
251 class ServerDestroyChannelHandlerTransportSender :
public TransportSender
254 ServerDestroyChannelHandlerTransportSender(pvAccessID cid, pvAccessID sid): _cid(cid), _sid(sid) {
257 virtual ~ServerDestroyChannelHandlerTransportSender() {}
258 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL {
259 control->startMessage((epics::pvData::int8)CMD_DESTROY_CHANNEL, 2*
sizeof(epics::pvData::int32)/
sizeof(epics::pvData::int8));
260 buffer->putInt(_sid);
261 buffer->putInt(_cid);
276 ServerGetHandler(ServerContextImpl::shared_pointer
const & context) :
277 AbstractServerResponseHandler(context,
"Get request") {
279 virtual ~ServerGetHandler() {}
286 class ServerChannelGetRequesterImpl :
287 public BaseChannelRequester,
288 public ChannelGetRequester,
289 public std::tr1::enable_shared_from_this<ServerChannelGetRequesterImpl>
292 typedef std::tr1::shared_ptr<ServerChannelGetRequesterImpl> shared_pointer;
293 typedef std::tr1::shared_ptr<
const ServerChannelGetRequesterImpl> const_shared_pointer;
295 ServerChannelGetRequesterImpl(ServerContextImpl::shared_pointer
const & context,
296 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
297 Transport::shared_pointer
const & transport);
298 void activate(epics::pvData::PVStructure::shared_pointer
const & pvRequest);
300 static ChannelGetRequester::shared_pointer create(ServerContextImpl::shared_pointer
const & context,
301 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
302 Transport::shared_pointer
const & transport,
303 epics::pvData::PVStructure::shared_pointer
const & pvRequest);
304 virtual ~ServerChannelGetRequesterImpl() {}
305 virtual void channelGetConnect(
const epics::pvData::Status& status, ChannelGet::shared_pointer
const & channelGet,
306 epics::pvData::Structure::const_shared_pointer
const & structure)
OVERRIDE FINAL;
307 virtual void getDone(
const epics::pvData::Status& status, ChannelGet::shared_pointer
const & channelGet,
308 epics::pvData::PVStructure::shared_pointer
const & pvStructure,
309 epics::pvData::BitSet::shared_pointer
const & bitSet)
OVERRIDE FINAL;
312 ChannelGet::shared_pointer getChannelGet();
313 virtual std::tr1::shared_ptr<ChannelRequest> getOperation()
OVERRIDE FINAL {
return getChannelGet(); }
315 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL;
318 ChannelGet::shared_pointer _channelGet;
319 epics::pvData::PVStructure::shared_pointer _pvStructure;
320 epics::pvData::BitSet::shared_pointer _bitSet;
321 epics::pvData::Status _status;
332 ServerPutHandler(ServerContextImpl::shared_pointer context) :
333 AbstractServerResponseHandler(context,
"Put request") {
335 virtual ~ServerPutHandler() {}
342 class ServerChannelPutRequesterImpl :
343 public BaseChannelRequester,
344 public ChannelPutRequester,
345 public std::tr1::enable_shared_from_this<ServerChannelPutRequesterImpl>
348 typedef std::tr1::shared_ptr<ServerChannelPutRequesterImpl> shared_pointer;
349 typedef std::tr1::shared_ptr<
const ServerChannelPutRequesterImpl> const_shared_pointer;
351 ServerChannelPutRequesterImpl(ServerContextImpl::shared_pointer
const & context,
352 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
353 Transport::shared_pointer
const & transport);
354 void activate(epics::pvData::PVStructure::shared_pointer
const & pvRequest);
356 static ChannelPutRequester::shared_pointer create(ServerContextImpl::shared_pointer
const & context,
357 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
358 Transport::shared_pointer
const & transport,epics::pvData::PVStructure::shared_pointer
const & pvRequest);
360 virtual ~ServerChannelPutRequesterImpl() {}
361 virtual void channelPutConnect(
const epics::pvData::Status& status, ChannelPut::shared_pointer
const & channelPut,
362 epics::pvData::Structure::const_shared_pointer
const & structure)
OVERRIDE FINAL;
363 virtual void putDone(
const epics::pvData::Status& status, ChannelPut::shared_pointer
const & channelPut)
OVERRIDE FINAL;
364 virtual void getDone(
const epics::pvData::Status& status, ChannelPut::shared_pointer
const & channelPut,
365 epics::pvData::PVStructure::shared_pointer
const & pvStructure,
366 epics::pvData::BitSet::shared_pointer
const & bitSet)
OVERRIDE FINAL;
369 ChannelPut::shared_pointer getChannelPut();
370 virtual std::tr1::shared_ptr<ChannelRequest> getOperation()
OVERRIDE FINAL {
return getChannelPut(); }
372 epics::pvData::BitSet::shared_pointer getPutBitSet();
373 epics::pvData::PVStructure::shared_pointer getPutPVStructure();
374 void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL;
377 ChannelPut::shared_pointer _channelPut;
378 epics::pvData::BitSet::shared_pointer _bitSet;
379 epics::pvData::PVStructure::shared_pointer _pvStructure;
380 epics::pvData::Status _status;
390 ServerPutGetHandler(ServerContextImpl::shared_pointer
const & context) :
391 AbstractServerResponseHandler(context,
"Put-get request") {
394 virtual ~ServerPutGetHandler() {}
400 class ServerChannelPutGetRequesterImpl :
401 public BaseChannelRequester,
402 public ChannelPutGetRequester,
403 public std::tr1::enable_shared_from_this<ServerChannelPutGetRequesterImpl>
406 typedef std::tr1::shared_ptr<ServerChannelPutGetRequesterImpl> shared_pointer;
407 typedef std::tr1::shared_ptr<
const ServerChannelPutGetRequesterImpl> const_shared_pointer;
409 ServerChannelPutGetRequesterImpl(ServerContextImpl::shared_pointer
const & context,
410 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
411 Transport::shared_pointer
const & transport);
412 void activate(epics::pvData::PVStructure::shared_pointer
const & pvRequest);
414 static ChannelPutGetRequester::shared_pointer create(ServerContextImpl::shared_pointer
const & context,
415 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
416 Transport::shared_pointer
const & transport,epics::pvData::PVStructure::shared_pointer
const & pvRequest);
417 virtual ~ServerChannelPutGetRequesterImpl() {}
419 virtual void channelPutGetConnect(
const epics::pvData::Status& status, ChannelPutGet::shared_pointer
const & channelPutGet,
420 epics::pvData::Structure::const_shared_pointer
const & putStructure,
421 epics::pvData::Structure::const_shared_pointer
const & getStructure)
OVERRIDE FINAL;
422 virtual void getGetDone(
const epics::pvData::Status& status, ChannelPutGet::shared_pointer
const & channelPutGet,
423 epics::pvData::PVStructure::shared_pointer
const & pvStructure,
424 epics::pvData::BitSet::shared_pointer
const & bitSet)
OVERRIDE FINAL;
425 virtual void getPutDone(
const epics::pvData::Status& status, ChannelPutGet::shared_pointer
const & channelPutGet,
426 epics::pvData::PVStructure::shared_pointer
const & pvStructure,
427 epics::pvData::BitSet::shared_pointer
const & bitSet)
OVERRIDE FINAL;
428 virtual void putGetDone(
const epics::pvData::Status& status, ChannelPutGet::shared_pointer
const & channelPutGet,
429 epics::pvData::PVStructure::shared_pointer
const & pvStructure,
430 epics::pvData::BitSet::shared_pointer
const & bitSet)
OVERRIDE FINAL;
433 ChannelPutGet::shared_pointer getChannelPutGet();
434 virtual std::tr1::shared_ptr<ChannelRequest> getOperation()
OVERRIDE FINAL {
return getChannelPutGet(); }
436 epics::pvData::PVStructure::shared_pointer getPutGetPVStructure();
437 epics::pvData::BitSet::shared_pointer getPutGetBitSet();
439 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL;
442 ChannelPutGet::shared_pointer _channelPutGet;
443 epics::pvData::PVStructure::shared_pointer _pvPutStructure;
444 epics::pvData::BitSet::shared_pointer _pvPutBitSet;
445 epics::pvData::PVStructure::shared_pointer _pvGetStructure;
446 epics::pvData::BitSet::shared_pointer _pvGetBitSet;
447 epics::pvData::Status _status;
458 ServerMonitorHandler(ServerContextImpl::shared_pointer
const & context) :
459 AbstractServerResponseHandler(context,
"Monitor request") {
461 virtual ~ServerMonitorHandler() {}
469 class ServerMonitorRequesterImpl :
470 public BaseChannelRequester,
471 public MonitorRequester,
472 public std::tr1::enable_shared_from_this<ServerMonitorRequesterImpl>
475 typedef std::tr1::shared_ptr<ServerMonitorRequesterImpl> shared_pointer;
476 typedef std::tr1::shared_ptr<
const ServerMonitorRequesterImpl> const_shared_pointer;
478 ServerMonitorRequesterImpl(ServerContextImpl::shared_pointer
const & context,
479 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
480 Transport::shared_pointer
const & transport);
481 void activate(epics::pvData::PVStructure::shared_pointer
const & pvRequest);
483 static shared_pointer create(ServerContextImpl::shared_pointer
const & context,
484 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
485 Transport::shared_pointer
const & transport,epics::pvData::PVStructure::shared_pointer
const & pvRequest);
486 virtual ~ServerMonitorRequesterImpl() {}
488 virtual void monitorConnect(
const epics::pvData::Status& status,
489 Monitor::shared_pointer
const & monitor,
490 epics::pvData::StructureConstPtr
const & structure)
OVERRIDE FINAL;
491 virtual void unlisten(Monitor::shared_pointer
const & monitor)
OVERRIDE FINAL;
492 virtual void monitorEvent(Monitor::shared_pointer
const & monitor)
OVERRIDE FINAL;
495 Monitor::shared_pointer getChannelMonitor();
496 virtual std::tr1::shared_ptr<ChannelRequest> getOperation()
OVERRIDE FINAL {
return std::tr1::shared_ptr<ChannelRequest>(); }
498 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL;
499 void ack(size_t cnt);
502 Monitor::shared_pointer _channelMonitor;
503 epics::pvData::StructureConstPtr _structure;
504 epics::pvData::Status _status;
510 typedef std::list<epics::pvData::MonitorElementPtr> window_t;
511 window_t _window_closed;
524 ServerArrayHandler(ServerContextImpl::shared_pointer
const & context) :
525 AbstractServerResponseHandler(context,
"Array request") {
527 virtual ~ServerArrayHandler() {}
534 class ServerChannelArrayRequesterImpl :
535 public BaseChannelRequester,
536 public ChannelArrayRequester,
537 public std::tr1::enable_shared_from_this<ServerChannelArrayRequesterImpl>
540 typedef std::tr1::shared_ptr<ServerChannelArrayRequesterImpl> shared_pointer;
541 typedef std::tr1::shared_ptr<
const ServerChannelArrayRequesterImpl> const_shared_pointer;
543 ServerChannelArrayRequesterImpl(ServerContextImpl::shared_pointer
const & context,
544 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
545 Transport::shared_pointer
const & transport);
546 void activate(epics::pvData::PVStructure::shared_pointer
const & pvRequest);
548 static ChannelArrayRequester::shared_pointer create(ServerContextImpl::shared_pointer
const & context,
549 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
550 Transport::shared_pointer
const & transport,epics::pvData::PVStructure::shared_pointer
const & pvRequest);
551 virtual ~ServerChannelArrayRequesterImpl() {}
553 virtual void channelArrayConnect(
const epics::pvData::Status& status,
554 ChannelArray::shared_pointer
const & channelArray,
555 epics::pvData::Array::const_shared_pointer
const & array)
OVERRIDE FINAL;
556 virtual void getArrayDone(
const epics::pvData::Status& status,
557 ChannelArray::shared_pointer
const & channelArray,
558 epics::pvData::PVArray::shared_pointer
const & pvArray)
OVERRIDE FINAL;
559 virtual void putArrayDone(
const epics::pvData::Status& status,
560 ChannelArray::shared_pointer
const & channelArray)
OVERRIDE FINAL;
561 virtual void setLengthDone(
const epics::pvData::Status& status,
562 ChannelArray::shared_pointer
const & channelArray)
OVERRIDE FINAL;
563 virtual void getLengthDone(
const epics::pvData::Status& status,
564 ChannelArray::shared_pointer
const & channelArray,
568 ChannelArray::shared_pointer getChannelArray();
569 virtual std::tr1::shared_ptr<ChannelRequest> getOperation()
OVERRIDE FINAL {
return getChannelArray(); }
571 epics::pvData::PVArray::shared_pointer getPVArray();
572 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL;
576 ChannelArray::shared_pointer _channelArray;
577 epics::pvData::PVArray::shared_pointer _pvArray;
580 epics::pvData::Status _status;
590 ServerDestroyRequestHandler(ServerContextImpl::shared_pointer
const & context) :
591 AbstractServerResponseHandler(context,
"Destroy request") {
593 virtual ~ServerDestroyRequestHandler() {}
600 void failureResponse(Transport::shared_pointer
const & transport, pvAccessID ioid,
const epics::pvData::Status& errorStatus);
611 ServerCancelRequestHandler(ServerContextImpl::shared_pointer
const & context) :
612 AbstractServerResponseHandler(context,
"Cancel request") {
614 virtual ~ServerCancelRequestHandler() {}
621 void failureResponse(Transport::shared_pointer
const & transport, pvAccessID ioid,
const epics::pvData::Status& errorStatus);
632 ServerProcessHandler(ServerContextImpl::shared_pointer
const & context) :
633 AbstractServerResponseHandler(context,
"Process request") {
635 virtual ~ServerProcessHandler() {}
642 class ServerChannelProcessRequesterImpl :
643 public BaseChannelRequester,
644 public ChannelProcessRequester,
645 public std::tr1::enable_shared_from_this<ServerChannelProcessRequesterImpl>
648 typedef std::tr1::shared_ptr<ServerChannelProcessRequesterImpl> shared_pointer;
649 typedef std::tr1::shared_ptr<
const ServerChannelProcessRequesterImpl> const_shared_pointer;
651 ServerChannelProcessRequesterImpl(ServerContextImpl::shared_pointer
const & context,
652 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
653 Transport::shared_pointer
const & transport);
654 void activate(epics::pvData::PVStructure::shared_pointer
const & pvRequest);
656 static ChannelProcessRequester::shared_pointer create(ServerContextImpl::shared_pointer
const & context,
657 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
658 Transport::shared_pointer
const & transport, epics::pvData::PVStructure::shared_pointer
const & pvRequest);
659 virtual ~ServerChannelProcessRequesterImpl() {}
661 virtual void channelProcessConnect(
const epics::pvData::Status& status, ChannelProcess::shared_pointer
const & channelProcess)
OVERRIDE FINAL;
662 virtual void processDone(
const epics::pvData::Status& status, ChannelProcess::shared_pointer
const & channelProcess)
OVERRIDE FINAL;
665 ChannelProcess::shared_pointer getChannelProcess();
666 virtual std::tr1::shared_ptr<ChannelRequest> getOperation()
OVERRIDE FINAL {
return getChannelProcess(); }
668 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL;
672 ChannelProcess::shared_pointer _channelProcess;
673 epics::pvData::Status _status;
683 ServerGetFieldHandler(ServerContextImpl::shared_pointer
const & context) :
684 AbstractServerResponseHandler(context,
"Get field request") {
686 virtual ~ServerGetFieldHandler() {}
692 void getFieldFailureResponse(Transport::shared_pointer
const & transport,
const pvAccessID ioid,
const epics::pvData::Status& errorStatus);
695 class ServerGetFieldRequesterImpl :
696 public BaseChannelRequester,
697 public GetFieldRequester,
698 public std::tr1::enable_shared_from_this<ServerGetFieldRequesterImpl>
701 typedef std::tr1::shared_ptr<ServerGetFieldRequesterImpl> shared_pointer;
702 typedef std::tr1::shared_ptr<
const ServerGetFieldRequesterImpl> const_shared_pointer;
704 ServerGetFieldRequesterImpl(ServerContextImpl::shared_pointer
const & context,
705 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
706 Transport::shared_pointer
const & transport);
708 virtual std::tr1::shared_ptr<ChannelRequest> getOperation()
OVERRIDE FINAL {
return std::tr1::shared_ptr<ChannelRequest>(); }
710 virtual ~ServerGetFieldRequesterImpl() {}
711 virtual void getDone(
const epics::pvData::Status& status, epics::pvData::FieldConstPtr
const & field)
OVERRIDE FINAL;
713 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL;
716 epics::pvData::Status _status;
717 epics::pvData::FieldConstPtr _field;
720 class ServerGetFieldHandlerTransportSender :
public TransportSender
723 ServerGetFieldHandlerTransportSender(
const pvAccessID ioid,
const epics::pvData::Status& status, Transport::shared_pointer
const & ):
724 _ioid(ioid), _status(status) {
727 virtual ~ServerGetFieldHandlerTransportSender() {}
729 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL {
730 control->startMessage((epics::pvData::int8)CMD_GET_FIELD,
sizeof(epics::pvData::int32)/
sizeof(epics::pvData::int8));
731 buffer->putInt(_ioid);
732 _status.serialize(buffer, control);
736 const pvAccessID _ioid;
737 const epics::pvData::Status _status;
749 ServerRPCHandler(ServerContextImpl::shared_pointer
const & context) :
750 AbstractServerResponseHandler(context,
"RPC request") {
752 virtual ~ServerRPCHandler() {}
759 class ServerChannelRPCRequesterImpl :
760 public BaseChannelRequester,
761 public ChannelRPCRequester,
762 public std::tr1::enable_shared_from_this<ServerChannelRPCRequesterImpl>
765 typedef std::tr1::shared_ptr<ServerChannelRPCRequesterImpl> shared_pointer;
766 typedef std::tr1::shared_ptr<
const ServerChannelRPCRequesterImpl> const_shared_pointer;
768 ServerChannelRPCRequesterImpl(ServerContextImpl::shared_pointer
const & context,
769 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
770 Transport::shared_pointer
const & transport);
771 void activate(epics::pvData::PVStructure::shared_pointer
const & pvRequest);
773 static ChannelRPCRequester::shared_pointer create(ServerContextImpl::shared_pointer
const & context,
774 std::tr1::shared_ptr<ServerChannel>
const & channel,
const pvAccessID ioid,
775 Transport::shared_pointer
const & transport,epics::pvData::PVStructure::shared_pointer
const & pvRequest);
776 virtual ~ServerChannelRPCRequesterImpl() {}
778 virtual void channelRPCConnect(
const epics::pvData::Status& status, ChannelRPC::shared_pointer
const & channelRPC)
OVERRIDE FINAL;
779 virtual void requestDone(
const epics::pvData::Status& status,
780 ChannelRPC::shared_pointer
const & channelRPC,
781 epics::pvData::PVStructure::shared_pointer
const & pvResponse)
OVERRIDE FINAL;
786 ChannelRPC::shared_pointer getChannelRPC();
787 virtual std::tr1::shared_ptr<ChannelRequest> getOperation()
OVERRIDE FINAL {
return getChannelRPC(); }
789 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control)
OVERRIDE FINAL;
792 ChannelRPC::shared_pointer _channelRPC;
793 epics::pvData::PVStructure::shared_pointer _pvResponse;
794 epics::pvData::Status _status;
803 ServerResponseHandler(ServerContextImpl::shared_pointer
const & context);
805 virtual ~ServerResponseHandler() {}
817 AuthNZHandler handle_authnz;
833 std::vector<ResponseHandler*> m_handlerTable;
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)
Handle response.
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)
Handle response.
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)
Handle response.
Get field request handler.
Connection validation message handler.
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)
Handle response.
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)
Handle response.
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)
Handle response.
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)
Handle response.
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)
Handle response.
virtual void authNZMessage(epics::pvData::PVStructure::shared_pointer const &data)=0
Pass data to the active security plug-in session.
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)
Handle response.
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)
Handle response.
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)
Handle response.
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)
Handle response.
#define FINAL
Copyright - See the COPYRIGHT that is included with this distribution.
Destroy channel request handler.
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)
Handle response.
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)
Handle response.
Search channel request handler.
PVAS request handler - main handler which dispatches requests to appropriate handlers.
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)
Handle response.
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)
Handle response.
Create channel request handler.
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)
Handle response.