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

#include "codec.h"

+ Inheritance diagram for epics::pvAccess::detail::BlockingClientTCPTransportCodec:
+ Collaboration diagram for epics::pvAccess::detail::BlockingClientTCPTransportCodec:

Public Member Functions

 POINTER_DEFINITIONS (BlockingClientTCPTransportCodec)
 
virtual void start () OVERRIDE FINAL
 
virtual ~BlockingClientTCPTransportCodec () OVERRIDE FINAL
 
virtual void timerStopped () OVERRIDE FINAL
 
virtual void callback () OVERRIDE FINAL
 
virtual bool acquire (std::tr1::shared_ptr< ClientChannelImpl > const &client) OVERRIDE FINAL
 
virtual void release (pvAccessID clientId) OVERRIDE FINAL
 
virtual void send (epics::pvData::ByteBuffer *buffer, TransportSendControl *control) OVERRIDE FINAL
 
void authNZInitialize (const std::vector< std::string > &offeredSecurityPlugins)
 
virtual void authenticationCompleted (epics::pvData::Status const &status, const std::tr1::shared_ptr< PeerInfo > &peer) OVERRIDE FINAL
 
virtual void verified (epics::pvData::Status const &status) OVERRIDE FINAL
 
- Public Member Functions inherited from epics::pvAccess::detail::BlockingTCPTransportCodec
 POINTER_DEFINITIONS (BlockingTCPTransportCodec)
 
 BlockingTCPTransportCodec (bool serverFlag, Context::shared_pointer const &context, SOCKET channel, ResponseHandler::shared_pointer const &responseHandler, size_t sendBufferSize, size_t receiveBufferSize, epics::pvData::int16 priority)
 
virtual ~BlockingTCPTransportCodec ()
 
virtual void readPollOne () OVERRIDE FINAL
 
virtual void writePollOne () OVERRIDE FINAL
 
virtual void scheduleSend () OVERRIDE FINAL
 
virtual void sendCompleted () OVERRIDE FINAL
 
virtual void close () OVERRIDE FINAL
 
virtual void waitJoin () OVERRIDE FINAL
 Call after close() to wait for any worker threads to exit. More...
 
virtual bool terminated () OVERRIDE FINAL
 
virtual bool isOpen () OVERRIDE FINAL
 
virtual int read (epics::pvData::ByteBuffer *dst) OVERRIDE FINAL
 
virtual int write (epics::pvData::ByteBuffer *src) OVERRIDE FINAL
 
virtual const osiSockAddrgetLastReadBufferSocketAddress () OVERRIDE FINAL
 
virtual void invalidDataStreamHandler () OVERRIDE FINAL
 
virtual std::string getType () const OVERRIDE FINAL
 
virtual void processControlMessage () OVERRIDE FINAL
 
virtual void processApplicationMessage () OVERRIDE FINAL
 
virtual const osiSockAddrgetRemoteAddress () const OVERRIDE FINAL
 
virtual const std::string & getRemoteName () const OVERRIDE FINAL
 
virtual std::size_t getReceiveBufferSize () const OVERRIDE FINAL
 
virtual epics::pvData::int16 getPriority () const OVERRIDE FINAL
 
virtual void setRemoteTransportReceiveBufferSize (std::size_t remoteTransportReceiveBufferSize) OVERRIDE FINAL
 
virtual void setRemoteTransportSocketReceiveBufferSize (std::size_t socketReceiveBufferSize) OVERRIDE FINAL
 
virtual std::tr1::shared_ptr< const epics::pvData::FieldcachedDeserialize (epics::pvData::ByteBuffer *buffer) OVERRIDE FINAL
 
virtual void cachedSerialize (const std::tr1::shared_ptr< const epics::pvData::Field > &field, epics::pvData::ByteBuffer *buffer) OVERRIDE FINAL
 
virtual void flushSendQueue () OVERRIDE FINAL
 
virtual bool isClosed () OVERRIDE FINAL
 
void activate ()
 
virtual bool verify (epics::pvData::int32 timeoutMs) OVERRIDE
 
virtual void authNZMessage (epics::pvData::PVStructure::shared_pointer const &data) OVERRIDE FINAL
 
virtual void sendSecurityPluginMessage (epics::pvData::PVStructure::const_shared_pointer const &data) OVERRIDE FINAL
 
- Public Member Functions inherited from epics::pvAccess::detail::AbstractCodec
 AbstractCodec (bool serverFlag, size_t sendBufferSize, size_t receiveBufferSize, int32_t socketSendBufferSize, bool blockingProcessQueue)
 
virtual ~AbstractCodec ()
 
virtual void alignBuffer (std::size_t alignment) OVERRIDE FINAL
 
virtual void ensureData (std::size_t size) OVERRIDE FINAL
 
virtual void alignData (std::size_t alignment) OVERRIDE FINAL
 
virtual void startMessage (epics::pvData::int8 command, std::size_t ensureCapacity=0, epics::pvData::int32 payloadSize=0) OVERRIDE FINAL
 
void putControlMessage (epics::pvData::int8 command, epics::pvData::int32 data)
 
virtual void endMessage () OVERRIDE FINAL
 
virtual void ensureBuffer (std::size_t size) OVERRIDE FINAL
 
virtual void flushSerializeBuffer () OVERRIDE FINAL
 
virtual void flush (bool lastMessageCompleted) OVERRIDE FINAL
 
void processWrite ()
 
void processRead ()
 
void processSendQueue ()
 
virtual void enqueueSendRequest (TransportSender::shared_pointer const &sender) OVERRIDE FINAL
 
void enqueueSendRequest (TransportSender::shared_pointer const &sender, std::size_t requiredBufferSize)
 
void setSenderThread ()
 
virtual void setRecipient (osiSockAddr const &sendTo) OVERRIDE FINAL
 
virtual void setByteOrder (int byteOrder) OVERRIDE FINAL
 
virtual bool directSerialize (epics::pvData::ByteBuffer *, const char *, std::size_t, std::size_t) OVERRIDE
 
virtual bool directDeserialize (epics::pvData::ByteBuffer *, char *, std::size_t, std::size_t) OVERRIDE
 
bool sendQueueEmpty () const
 
epics::pvData::int8 getRevision () const
 
- Public Member Functions inherited from epics::pvAccess::TransportSendControl
 POINTER_DEFINITIONS (TransportSendControl)
 
virtual ~TransportSendControl ()
 
- Public Member Functions inherited from epics::pvData::SerializableControl
virtual ~SerializableControl ()
 
virtual void cachedSerialize (std::tr1::shared_ptr< const Field > const &field, ByteBuffer *buffer)=0
 
- Public Member Functions inherited from epics::pvAccess::Transport
 POINTER_DEFINITIONS (Transport)
 
 Transport ()
 
virtual ~Transport ()
 
- Public Member Functions inherited from epics::pvData::DeserializableControl
virtual ~DeserializableControl ()
 
- Public Member Functions inherited from epics::pvAccess::AuthenticationPluginControl
 POINTER_DEFINITIONS (AuthenticationPluginControl)
 
virtual ~AuthenticationPluginControl ()
 
- Public Member Functions inherited from epics::pvAccess::TransportSender
 POINTER_DEFINITIONS (TransportSender)
 
 TransportSender ()
 
virtual ~TransportSender ()
 
- Public Member Functions inherited from epics::pvAccess::Lockable
 POINTER_DEFINITIONS (Lockable)
 
virtual ~Lockable ()
 
virtual void lock ()
 
virtual void unlock ()
 
- Public Member Functions inherited from epics::pvAccess::fair_queue< T >::entry
 entry ()
 
 ~entry ()
 
- Public Member Functions inherited from epics::pvData::TimerCallback
 POINTER_DEFINITIONS (TimerCallback)
 
 TimerCallback ()
 
virtual ~TimerCallback ()
 

Static Public Member Functions

static shared_pointer create (Context::shared_pointer const &context, SOCKET channel, ResponseHandler::shared_pointer const &responseHandler, int32_t sendBufferSize, int32_t receiveBufferSize, std::tr1::shared_ptr< ClientChannelImpl > const &client, int8_t remoteTransportRevision, float heartbeatInterval, int16_t priority)
 
- Static Public Member Functions inherited from epics::pvAccess::detail::AbstractCodec
static std::size_t alignedValue (std::size_t value, std::size_t alignment)
 

Protected Member Functions

 BlockingClientTCPTransportCodec (Context::shared_pointer const &context, SOCKET channel, ResponseHandler::shared_pointer const &responseHandler, int32_t sendBufferSize, int32_t receiveBufferSize, std::tr1::shared_ptr< ClientChannelImpl > const &client, epics::pvData::int8 remoteTransportRevision, float heartbeatInterval, int16_t priority)
 
virtual void internalClose () OVERRIDE FINAL
 
- Protected Member Functions inherited from epics::pvAccess::detail::BlockingTCPTransportCodec
virtual void setRxTimeout (bool ena) OVERRIDE FINAL
 
virtual void sendBufferFull (int tries) OVERRIDE FINAL
 
- Protected Member Functions inherited from epics::pvAccess::detail::AbstractCodec
void send (epics::pvData::ByteBuffer *buffer)
 
void flushSendBuffer ()
 

Additional Inherited Members

- Public Attributes inherited from epics::pvAccess::detail::BlockingTCPTransportCodec
PeerInfo::const_shared_pointer _peerInfo
 
- Public Attributes inherited from epics::pvAccess::detail::AbstractCodec
epics::pvData::Mutex _mutex
 
- Public Attributes inherited from epics::pvAccess::Transport
size_t _totalBytesSent
 
size_t _totalBytesRecv
 
- Public Attributes inherited from epics::pvAccess::TransportSender
size_t bytesTX
 
size_t bytesRX
 
- Static Public Attributes inherited from epics::pvAccess::detail::BlockingTCPTransportCodec
static size_t num_instances
 
- Static Public Attributes inherited from epics::pvAccess::detail::AbstractCodec
static const std::size_t MAX_MESSAGE_PROCESS = 100
 
static const std::size_t MAX_MESSAGE_SEND = 100
 
static const std::size_t MAX_ENSURE_SIZE = 1024
 
static const std::size_t MAX_ENSURE_DATA_SIZE = MAX_ENSURE_SIZE/2
 
static const std::size_t MAX_ENSURE_BUFFER_SIZE = MAX_ENSURE_SIZE
 
static const std::size_t MAX_ENSURE_DATA_BUFFER_SIZE = 1024
 
- Static Public Attributes inherited from epics::pvAccess::Transport
static size_t num_instances
 
- Protected Attributes inherited from epics::pvAccess::detail::BlockingTCPTransportCodec
osiSockAddr _socketAddress
 
std::string _socketName
 
Context::shared_pointer _context
 
IntrospectionRegistry _incomingIR
 
IntrospectionRegistry _outgoingIR
 
std::string _authSessionName
 
AuthenticationSession::shared_pointer _authSession
 
bool _verified
 
epics::pvData::Event _verifiedEvent
 
- Protected Attributes inherited from epics::pvAccess::detail::AbstractCodec
ReadMode _readMode
 
int8_t _version
 
int8_t _flags
 
int8_t _command
 
int32_t _payloadSize
 
epics::pvData::int32 _remoteTransportSocketReceiveBufferSize
 
osiSockAddr _sendTo
 
epicsThreadId _senderThread
 
WriteMode _writeMode
 
bool _writeOpReady
 
epics::pvData::ByteBuffer _socketBuffer
 
epics::pvData::ByteBuffer _sendBuffer
 
fair_queue< TransportSender_sendQueue
 
const epics::pvData::int8 _clientServerFlag
 

Detailed Description

Definition at line 558 of file codec.h.

Constructor & Destructor Documentation

epics::pvAccess::detail::BlockingClientTCPTransportCodec::BlockingClientTCPTransportCodec ( Context::shared_pointer const &  context,
SOCKET  channel,
ResponseHandler::shared_pointer const &  responseHandler,
int32_t  sendBufferSize,
int32_t  receiveBufferSize,
std::tr1::shared_ptr< ClientChannelImpl > const &  client,
epics::pvData::int8  remoteTransportRevision,
float  heartbeatInterval,
int16_t  priority 
)
protected

Definition at line 1698 of file codec.cpp.

1707  :
1708  BlockingTCPTransportCodec(false, context, channel, responseHandler,
1709  sendBufferSize, receiveBufferSize, priority),
1710  _connectionTimeout(heartbeatInterval),
1711  _verifyOrEcho(true),
1712  sendQueued(true) // don't start sending echo until after auth complete
1713 {
1714  // initialize owners list, send queue
1715  acquire(client);
1716 
1717  // use immediate for clients
1718  //setFlushStrategy(DELAYED);
1719 }
BlockingTCPTransportCodec(bool serverFlag, Context::shared_pointer const &context, SOCKET channel, ResponseHandler::shared_pointer const &responseHandler, size_t sendBufferSize, size_t receiveBufferSize, epics::pvData::int16 priority)
Definition: codec.cpp:1226
Definition: server.h:76
virtual bool acquire(std::tr1::shared_ptr< ClientChannelImpl > const &client) OVERRIDE FINAL
Definition: codec.cpp:1759
epics::pvAccess::detail::BlockingClientTCPTransportCodec::~BlockingClientTCPTransportCodec ( )
virtual

Definition at line 1732 of file codec.cpp.

1732  {
1733 }

Member Function Documentation

bool epics::pvAccess::detail::BlockingClientTCPTransportCodec::acquire ( std::tr1::shared_ptr< ClientChannelImpl > const &  client)
virtual

Acquires transport.

Parameters
clientclient (channel) acquiring the transport
Returns
true if transport was granted, false otherwise.

Implements epics::pvAccess::Transport.

Definition at line 1759 of file codec.cpp.

1759  {
1760  Lock lock(_mutex);
1761  if(isClosed()) return false;
1762 
1764  {
1765  LOG(logLevelDebug, "Acquiring transport to %s.", _socketName.c_str());
1766  }
1767 
1768  _owners[client->getID()] = ClientChannelImpl::weak_pointer(client);
1769  //_owners.insert(ClientChannelImpl::weak_pointer(client));
1770 
1771  return true;
1772 }
A lock for multithreading.
Definition: lock.h:36
epics::pvData::Mutex _mutex
Definition: codec.h:264
#define LOG(level, format,...)
Definition: logger.h:48
Definition: server.h:76
virtual bool isClosed() OVERRIDE FINAL
Definition: codec.h:375
virtual void lock()
Definition: pvAccess.h:97
#define IS_LOGGABLE(level)
Definition: logger.h:51
void epics::pvAccess::detail::BlockingClientTCPTransportCodec::authenticationCompleted ( epics::pvData::Status const &  status,
const std::tr1::shared_ptr< PeerInfo > &  peer 
)
virtual

Called by server plugin to indicate the the exchange has completed.

Parameters
statusIf !status.isSuccess() then the connection will be closed without being used.
peerPartially initialized PeerInfo. See AuthenticationPlugin::createSession(). PeerInfo::realm and/or PeerInfo::account will now be considered valid. Caller transfers ownership to callee, which may modify.

Implements epics::pvAccess::AuthenticationPluginControl.

Definition at line 1944 of file codec.cpp.

1946 {
1947  // noop for client side (server will send ConnectionValidation message)
1948 }
void epics::pvAccess::detail::BlockingClientTCPTransportCodec::authNZInitialize ( const std::vector< std::string > &  offeredSecurityPlugins)

Definition at line 1898 of file codec.cpp.

1899 {
1901  std::string selectedName;
1902  AuthenticationPlugin::shared_pointer plugin;
1903 
1904  // because of a missing break; the original SecurityPlugin effectively treated the offered list as being
1905  // in order of increasing preference (last is preferred).
1906  // we continue with this because, hey isn't compatibility fun...
1907 
1908  for(std::vector<std::string>::const_reverse_iterator it(offeredSecurityPlugins.rbegin()), end(offeredSecurityPlugins.rend());
1909  it!=end; ++it)
1910  {
1911  plugin = plugins.lookup(*it);
1912  if(plugin) {
1913  selectedName = *it;
1914  break;
1915  }
1916  }
1917 
1918  if(!plugin) {
1919  // mis-match and legacy. some early servers (java?) don't advertise any plugins.
1920  // treat this as anonymous
1921  selectedName = "anonymous";
1922  plugin = plugins.lookup(selectedName);
1923  assert(plugin); // fallback required
1924  }
1925 
1926  {
1927  PeerInfo::shared_pointer info(new PeerInfo);
1928  info->peer = _socketName; // this is the server name
1929  info->transport = "pva";
1930  info->transportVersion = getRevision();
1931  info->authority = selectedName;
1932 
1933  AuthenticationSession::shared_pointer sess(plugin->createSession(info, shared_from_this(), pvData::PVStructure::shared_pointer()));
1934 
1935  Guard G(_mutex);
1936  _authSessionName = selectedName;
1937  _authSession = sess;
1938  }
1939 
1940  TransportSender::shared_pointer transportSender = std::tr1::dynamic_pointer_cast<TransportSender>(shared_from_this());
1941  enqueueSendRequest(transportSender);
1942 }
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
Information provded by a client to a server-type ChannelProvider.
Definition: security.h:119
epics::pvData::Mutex _mutex
Definition: codec.h:264
AuthenticationSession::shared_pointer _authSession
Definition: codec.h:425
epics::pvData::int8 getRevision() const
Definition: codec.h:205
AuthenticationPlugin::shared_pointer lookup(const std::string &name) const
Definition: security.cpp:242
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:808
static AuthenticationRegistry & clients()
The client side of the conversation.
Definition: security.cpp:197
virtual void enqueueSendRequest(TransportSender::shared_pointer const &sender) OVERRIDE FINAL
Definition: codec.cpp:873
void epics::pvAccess::detail::BlockingClientTCPTransportCodec::callback ( )
virtual

The method that is called when a timer expires.

Implements epics::pvData::TimerCallback.

Definition at line 1743 of file codec.cpp.

1744 {
1745  {
1746  Guard G(_mutex);
1747  if(sendQueued) return;
1748  sendQueued = true;
1749  }
1750  // send echo
1751  TransportSender::shared_pointer transportSender = std::tr1::dynamic_pointer_cast<TransportSender>(shared_from_this());
1752  enqueueSendRequest(transportSender);
1753 }
epics::pvData::Mutex _mutex
Definition: codec.h:264
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:808
virtual void enqueueSendRequest(TransportSender::shared_pointer const &sender) OVERRIDE FINAL
Definition: codec.cpp:873
static shared_pointer epics::pvAccess::detail::BlockingClientTCPTransportCodec::create ( Context::shared_pointer const &  context,
SOCKET  channel,
ResponseHandler::shared_pointer const &  responseHandler,
int32_t  sendBufferSize,
int32_t  receiveBufferSize,
std::tr1::shared_ptr< ClientChannelImpl > const &  client,
int8_t  remoteTransportRevision,
float  heartbeatInterval,
int16_t  priority 
)
inlinestatic

Definition at line 579 of file codec.h.

589  {
590  shared_pointer thisPointer(
592  context, channel, responseHandler,
593  sendBufferSize, receiveBufferSize,
594  client, remoteTransportRevision,
595  heartbeatInterval, priority)
596  );
597  thisPointer->activate();
598  return thisPointer;
599  }
Definition: server.h:76
BlockingClientTCPTransportCodec(Context::shared_pointer const &context, SOCKET channel, ResponseHandler::shared_pointer const &responseHandler, int32_t sendBufferSize, int32_t receiveBufferSize, std::tr1::shared_ptr< ClientChannelImpl > const &client, epics::pvData::int8 remoteTransportRevision, float heartbeatInterval, int16_t priority)
Definition: codec.cpp:1698
void epics::pvAccess::detail::BlockingClientTCPTransportCodec::internalClose ( )
protectedvirtual

Called from close(). after start of shutdown (isOpen()==false) but before worker thread shutdown.

Reimplemented from epics::pvAccess::detail::BlockingTCPTransportCodec.

Definition at line 1775 of file codec.cpp.

1775  {
1777 
1779  _context->getTimer()->cancel(tcb);
1780 
1781  // _owners cannot change when transport is closed
1782 
1783  // Notifies clients about disconnect.
1784 
1785  // check if still acquired
1786  size_t refs = _owners.size();
1787  if(refs>0) {
1788 
1790  {
1791  LOG(
1792  logLevelDebug,
1793  "Transport to %s still has %zu client(s) active and closing...",
1794  _socketName.c_str(), refs);
1795  }
1796 
1797  TransportClientMap_t::iterator it = _owners.begin();
1798  for(; it!=_owners.end(); it++) {
1799  ClientChannelImpl::shared_pointer client = it->second.lock();
1800  if (client)
1801  {
1802  EXCEPTION_GUARD(client->transportClosed());
1803  }
1804  }
1805 
1806  }
1807 
1808  _owners.clear();
1809 }
#define EXCEPTION_GUARD(code)
Definition: codec.cpp:1755
Class that must be implemented by code that makes Timer requests.
Definition: timer.h:40
#define LOG(level, format,...)
Definition: logger.h:48
Definition: server.h:76
std::tr1::shared_ptr< TimerCallback > TimerCallbackPtr
Definition: timer.h:32
epicsMutexId lock
Definition: server.h:82
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:808
#define IS_LOGGABLE(level)
Definition: logger.h:51
epics::pvAccess::detail::BlockingClientTCPTransportCodec::POINTER_DEFINITIONS ( BlockingClientTCPTransportCodec  )
void epics::pvAccess::detail::BlockingClientTCPTransportCodec::release ( pvAccessID  clientId)
virtual

Releases transport.

Parameters
clientclient (channel) releasing the transport

Implements epics::pvAccess::Transport.

Definition at line 1812 of file codec.cpp.

1812  {
1813  Lock lock(_mutex);
1814  if(isClosed()) return;
1815 
1817  {
1818  LOG(logLevelDebug, "Releasing TCP transport to %s.", _socketName.c_str());
1819  }
1820 
1821  _owners.erase(clientID);
1822  //_owners.erase(ClientChannelImpl::weak_pointer(client));
1823 
1824  // not used anymore, close it
1825  // TODO consider delayed destruction (can improve performance!!!)
1826  if(_owners.size()==0) {
1827  lock.unlock();
1828  close();
1829  }
1830 }
A lock for multithreading.
Definition: lock.h:36
epics::pvData::Mutex _mutex
Definition: codec.h:264
#define LOG(level, format,...)
Definition: logger.h:48
virtual bool isClosed() OVERRIDE FINAL
Definition: codec.h:375
virtual void lock()
Definition: pvAccess.h:97
#define IS_LOGGABLE(level)
Definition: logger.h:51
void epics::pvAccess::detail::BlockingClientTCPTransportCodec::send ( epics::pvData::ByteBuffer buffer,
TransportSendControl control 
)
virtual

Called by transport. By this call transport gives callee ownership over the buffer. Calls on TransportSendControl instance must be made from calling thread. Moreover, ownership is valid only for the time of call of this method. NOTE: these limitations allow efficient implementation.

Implements epics::pvAccess::TransportSender.

Definition at line 1832 of file codec.cpp.

1834 {
1835  bool voe;
1836  {
1837  Guard G(_mutex);
1838  sendQueued = false;
1839  voe = _verifyOrEcho;
1840  _verifyOrEcho = false;
1841  }
1842 
1843  if(voe) {
1844  /*
1845  * send verification response message
1846  */
1847 
1848  control->startMessage(CMD_CONNECTION_VALIDATION, 4+2+2);
1849 
1850  // receive buffer size
1851  buffer->putInt(static_cast<int32>(getReceiveBufferSize()));
1852 
1853  // max introspection registry size
1854  // TODO
1855  buffer->putShort(0x7FFF);
1856 
1857  // QoS (aka connection priority)
1858  buffer->putShort(getPriority());
1859 
1860  std::string pluginName;
1861  AuthenticationSession::shared_pointer session;
1862  {
1863  Guard G(_mutex);
1864  pluginName = _authSessionName;
1865  session = _authSession;
1866  }
1867 
1868  if (session)
1869  {
1870  // selected authNZ plug-in name
1872 
1873  // optional authNZ plug-in initialization data
1874  SerializationHelper::serializeFull(buffer, control, session->initializationData());
1875  }
1876  else
1877  {
1878  //TODO: allowed?
1879  // emptry authNZ plug-in name
1880  SerializeHelper::serializeString("", buffer, control);
1881 
1882  // no authNZ plug-in initialization data
1883  SerializationHelper::serializeNullField(buffer, control);
1884  }
1885 
1886  // send immediately
1887  control->flush(true);
1888  }
1889  else {
1890  control->startMessage(CMD_ECHO, 0);
1891  // send immediately
1892  control->flush(true);
1893  }
1894 
1895 }
EPICS_ALWAYS_INLINE void putInt(int32 value)
Definition: byteBuffer.h:537
static void serializeFull(epics::pvData::ByteBuffer *buffer, epics::pvData::SerializableControl *control, const epics::pvData::PVField::const_shared_pointer &pvField)
static void serializeNullField(epics::pvData::ByteBuffer *buffer, epics::pvData::SerializableControl *control)
epics::pvData::Mutex _mutex
Definition: codec.h:264
virtual void flush(bool lastMessageCompleted)=0
AuthenticationSession::shared_pointer _authSession
Definition: codec.h:425
static void serializeString(const std::string &value, ByteBuffer *buffer, SerializableControl *flusher)
virtual epics::pvData::int16 getPriority() const OVERRIDE FINAL
Definition: codec.h:340
virtual std::size_t getReceiveBufferSize() const OVERRIDE FINAL
Definition: codec.h:335
virtual void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity, epics::pvData::int32 payloadSize=0)=0
EPICS_ALWAYS_INLINE void putShort(int16 value)
Definition: byteBuffer.h:531
void epics::pvAccess::detail::BlockingClientTCPTransportCodec::start ( )
virtual

Reimplemented from epics::pvAccess::detail::BlockingTCPTransportCodec.

Definition at line 1721 of file codec.cpp.

1722 {
1724  // add some randomness to our timer phase
1725  double R = float(rand())/RAND_MAX; // [0, 1]
1726  // shape a bit
1727  R = R*0.5 + 0.5; // [0.5, 1.0]
1728  _context->getTimer()->schedulePeriodic(tcb, _connectionTimeout/2.0*R, _connectionTimeout/2.0);
1730 }
Class that must be implemented by code that makes Timer requests.
Definition: timer.h:40
std::tr1::shared_ptr< TimerCallback > TimerCallbackPtr
Definition: timer.h:32
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:808
virtual void epics::pvAccess::detail::BlockingClientTCPTransportCodec::timerStopped ( )
inlinevirtual

The timer has stopped.

Implements epics::pvData::TimerCallback.

Definition at line 607 of file codec.h.

607  {
608  // noop
609  }
void epics::pvAccess::detail::BlockingClientTCPTransportCodec::verified ( epics::pvData::Status const &  status)
virtual

Notify transport that it is has been verified.

Parameters
statusvefification status;

Reimplemented from epics::pvAccess::detail::BlockingTCPTransportCodec.

Definition at line 1950 of file codec.cpp.

1951 {
1952  AuthenticationSession::shared_pointer sess;
1953  {
1954  Guard G(_mutex);
1955  sess = _authSession;
1956  }
1957  if(sess)
1958  sess->authenticationComplete(status);
1960 }
pvd::Status status
epics::pvData::Mutex _mutex
Definition: codec.h:264
AuthenticationSession::shared_pointer _authSession
Definition: codec.h:425
virtual void verified(epics::pvData::Status const &status) OVERRIDE
Definition: codec.cpp:1373

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