10 #ifdef epicsExportSharedSymbols 11 # define remoteEpicsExportSharedSymbols 12 # undef epicsExportSharedSymbols 20 #include <pv/serialize.h> 21 #include <pv/pvType.h> 22 #include <pv/byteBuffer.h> 24 #include <pv/pvData.h> 25 #include <pv/sharedPtr.h> 27 #ifdef remoteEpicsExportSharedSymbols 28 # define epicsExportSharedSymbols 29 # undef remoteEpicsExportSharedSymbols 32 #include <pv/pvaConstants.h> 33 #include <pv/configuration.h> 34 #include <pv/fairQueue.h> 35 #include <pv/pvaDefs.h> 38 #include <pv/pvAccess.h> 43 class TransportRegistry;
44 class ClientChannelImpl;
85 enum ApplicationCommands {
87 CMD_CONNECTION_VALIDATION = 1,
90 CMD_SEARCH_RESPONSE = 4,
93 CMD_CREATE_CHANNEL = 7,
94 CMD_DESTROY_CHANNEL = 8,
95 CMD_CONNECTION_VALIDATED = 9,
101 CMD_DESTROY_REQUEST = 15,
105 CMD_MULTIPLE_DATA = 19,
107 CMD_CANCEL_REQUEST = 21,
111 enum ControlCommands {
114 CMD_SET_ENDIANESS = 2
117 void hackAroundRTEMSSocketInterrupt();
122 class TransportSendControl :
public epics::pvData::SerializableControl {
124 POINTER_DEFINITIONS(TransportSendControl);
126 virtual ~TransportSendControl() {}
128 virtual void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity, epics::pvData::int32 payloadSize = 0) = 0;
129 virtual void endMessage() = 0;
131 virtual void flush(
bool lastMessageCompleted) = 0;
133 virtual void setRecipient(osiSockAddr
const & sendTo) = 0;
139 class TransportSender :
public Lockable,
public fair_queue<TransportSender>::entry {
141 POINTER_DEFINITIONS(TransportSender);
143 TransportSender() :bytesTX(0u), bytesRX(0u) {}
144 virtual ~TransportSender() {}
154 virtual void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control) = 0;
160 class ClientChannelImpl;
161 class SecuritySession;
257 virtual void close() = 0;
279 class SecurityPlugin;
280 class AuthenticationRegistry;
287 POINTER_DEFINITIONS(Context);
289 virtual ~Context() {}
291 virtual epics::pvData::Timer::shared_pointer getTimer() = 0;
293 virtual TransportRegistry* getTransportRegistry() = 0;
298 virtual Configuration::const_shared_pointer getConfiguration() = 0;
306 virtual std::tr1::shared_ptr<Channel> getChannel(pvAccessID id) = 0;
307 virtual Transport::shared_pointer getSearchTransport() = 0;
313 class ResponseHandler {
315 POINTER_DEFINITIONS(ResponseHandler);
317 static size_t num_instances;
319 ResponseHandler(Context* context,
const std::string& description);
320 virtual ~ResponseHandler();
353 class ResponseRequest :
public TransportSender {
355 POINTER_DEFINITIONS(ResponseRequest);
357 virtual ~ResponseRequest() {}
363 virtual pvAccessID
getIOID()
const = 0;
373 virtual void cancel() = 0;
379 virtual void reportStatus(Channel::ConnectionState status) = 0;
virtual pvAccessID getIOID() const =0
Get I/O ID.
virtual void timeout()=0
Timeout notification.
Interface defining transport (connection).
Require reply (acknowledgment for reliable operation).
std::string _description
Response hanlder description.
virtual std::tr1::shared_ptr< ChannelBaseRequester > getRequester()=0
used by MessageHandler and reportChannelStateChange().
Best-effort option (no reply).
virtual void authNZMessage(epics::pvData::PVStructure::shared_pointer const &data)=0
Pass data to the active security plug-in session.
epics::pvData::int32 _debugLevel
Debug flag.
virtual void send(epics::pvData::ByteBuffer *buffer, TransportSendControl *control)=0
Called by transport.
virtual void response(Transport::shared_pointer const &transport, epics::pvData::int8 version, epics::pvData::ByteBuffer *payloadBuffer)=0
Notification response.
virtual void newServerDetected()=0
due to ClientContextImpl
virtual void cancel()=0
Cancel response request (always to be called to complete/destroy).
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 reportStatus(Channel::ConnectionState status)=0
Report status to clients (e.g.