10 #ifdef epicsExportSharedSymbols 11 # define blockingUDPEpicsExportSharedSymbols 12 # undef epicsExportSharedSymbols 25 #ifdef blockingUDPEpicsExportSharedSymbols 26 # define epicsExportSharedSymbols 27 # undef blockingUDPEpicsExportSharedSymbols 39 class ClientChannelImpl;
40 class BlockingUDPConnector;
47 public epicsThreadRunable
56 std::tr1::weak_ptr<BlockingUDPTransport> internal_this;
59 ResponseHandler::shared_pointer
const & responseHandler,
61 short remoteTransportRevision);
71 return _remoteAddress;
79 return std::string(
"udp");
83 return _receiveBuffer.
getSize();
133 _receiveBuffer.
align(alignment);
137 std::size_t , std::size_t )
OVERRIDE FINAL
143 std::size_t , std::size_t )
OVERRIDE FINAL
156 _sendToEnabled =
true;
161 _localMulticastAddressEnabled =
true;
162 _localMulticastAddress = sendTo;
166 return _localMulticastAddressEnabled;
170 return _localMulticastAddress;
182 _sendBuffer.
align(alignment);
189 field->serialize(buffer,
this);
192 virtual std::tr1::shared_ptr<const epics::pvData::Field>
212 _ignoredAddresses = addresses;
220 return _ignoredAddresses;
228 _tappedNIF = addresses;
239 bool send(
const char* buffer,
size_t length,
const osiSockAddr& address);
250 return _sendAddresses;
258 return &_bindAddress;
263 for (
size_t i = 0;
i < broadcastAddresses.size();
i++)
264 if (broadcastAddresses[
i].ia.sin_addr.s_addr == address->
ia.sin_addr.s_addr)
271 _sendAddresses.swap(addresses);
272 _isSendAddressUnicast.swap(address_types);
292 void close(
bool waitForThreadToComplete);
318 std::
string _remoteName;
325 std::vector<
bool> _isSendAddressUnicast;
347 bool _localMulticastAddressEnabled;
362 int _lastMessageStartPosition;
375 epics::pvData::
int8 _clientServerWithEndianFlag;
388 BlockingUDPTransport::shared_pointer connect(
389 ResponseHandler::shared_pointer
const & responseHandler,
407 BlockingUDPTransportVector& udpTransports,
409 const ResponseHandler::shared_pointer& responseHandler,
410 BlockingUDPTransport::shared_pointer& sendTransport,
412 bool autoAddressList,
413 const std::string& addressList,
414 const std::string& ignoreAddressList);
virtual void setRemoteTransportReceiveBufferSize(std::size_t) OVERRIDE FINAL
virtual const std::string & getRemoteName() const OVERRIDE FINAL
virtual void alignData(std::size_t alignment) OVERRIDE FINAL
BlockingUDPConnector(bool serverFlag)
virtual void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity, epics::pvData::int32 payloadSize=0) OVERRIDE FINAL
virtual void flush(bool) OVERRIDE FINAL
virtual std::string getType() const OVERRIDE FINAL
virtual std::size_t getReceiveBufferSize() const OVERRIDE FINAL
const osiSockAddr & getLocalMulticastAddress() const
virtual void ensureBuffer(std::size_t) OVERRIDE FINAL
virtual ~BlockingUDPTransport()
POINTER_DEFINITIONS(BlockingUDPTransport)
void join(const osiSockAddr &mcastAddr, const osiSockAddr &nifAddr)
virtual void run() OVERRIDE FINAL
virtual bool directDeserialize(epics::pvData::ByteBuffer *, char *, std::size_t, std::size_t) OVERRIDE FINAL
virtual void setByteOrder(int byteOrder) OVERRIDE FINAL
TODO only here because of the Lockable.
virtual void enqueueSendRequest(TransportSender::shared_pointer const &sender) OVERRIDE FINAL
bool hasLocalMulticastAddress() const
ResponseHandler::shared_pointer _responseHandler
bool isBroadcastAddress(const osiSockAddr *address, const InetAddrVector &broadcastAddresses)
Mark external symbols and entry points for shared libraries.
EPICS_ALWAYS_INLINE std::size_t getSize() const
static size_t num_instances
void align(std::size_t size, char fill='\0')
virtual void ensureData(std::size_t size) OVERRIDE FINAL
virtual void authNZMessage(epics::pvData::PVStructure::shared_pointer const &data) OVERRIDE FINAL
virtual void close() OVERRIDE FINAL
virtual const osiSockAddr & getRemoteAddress() const OVERRIDE FINAL
std::vector< BlockingUDPTransport::shared_pointer > BlockingUDPTransportVector
virtual void flushSerializeBuffer() OVERRIDE FINAL
virtual void cachedSerialize(const std::tr1::shared_ptr< const epics::pvData::Field > &field, epics::pvData::ByteBuffer *buffer) OVERRIDE FINAL
virtual void alignBuffer(std::size_t alignment) OVERRIDE FINAL
virtual bool acquire(std::tr1::shared_ptr< ClientChannelImpl > const &) OVERRIDE FINAL
const InetAddrVector & getTappedNIF() const
virtual bool isClosed() OVERRIDE FINAL
std::vector< osiSockAddr > InetAddrVector
const osiSockAddr * getBindAddress() const
const InetAddrVector & getIgnoredAddresses() const
virtual void setRecipient(const osiSockAddr &sendTo) OVERRIDE FINAL
virtual void flushSendQueue() OVERRIDE FINAL
void setIgnoredAddresses(const InetAddrVector &addresses)
std::vector< ifaceNode > IfaceNodeVector
This class implements a Bytebuffer that is like the java.nio.ByteBuffer.
void setSendAddresses(InetAddrVector &addresses, std::vector< bool > &address_types)
virtual epics::pvData::int16 getPriority() const OVERRIDE FINAL
FORCE_INLINE const FieldCreatePtr & getFieldCreate()
void initializeUDPTransports(bool serverFlag, BlockingUDPTransportVector &udpTransports, const IfaceNodeVector &ifaceList, const ResponseHandler::shared_pointer &responseHandler, BlockingUDPTransport::shared_pointer &sendTransport, int32 &listenPort, bool autoAddressList, const std::string &addressList, const std::string &ignoreAddressList)
virtual void endMessage() OVERRIDE FINAL
void setLocalMulticastAddress(const osiSockAddr &sendTo)
const InetAddrVector & getSendAddresses()
virtual void verified(epics::pvData::Status const &) OVERRIDE FINAL
virtual void release(pvAccessID) OVERRIDE FINAL
void setEndianess(int byteOrder)
virtual void setRemoteTransportSocketReceiveBufferSize(std::size_t) OVERRIDE FINAL
void setTappedNIF(const InetAddrVector &addresses)
bool send(const char *buffer, size_t length, const osiSockAddr &address)
virtual std::tr1::shared_ptr< const epics::pvData::Field > cachedDeserialize(epics::pvData::ByteBuffer *buffer) OVERRIDE FINAL
const epics::pvData::int16 PVA_DEFAULT_PRIORITY
virtual bool verify(epics::pvData::int32) OVERRIDE FINAL
C++ and C descriptions for a thread.
#define EPICS_NOT_COPYABLE(CLASS)
Disable implicit copyable.
void setMutlicastNIF(const osiSockAddr &nifAddr, bool loopback)
virtual bool directSerialize(epics::pvData::ByteBuffer *, const char *, std::size_t, std::size_t) OVERRIDE FINAL