de-virt Transport::getRevision()

Makes clear that this is/was only for TCP,
and eliminate redundant storage.  Also apply
locking to this storage.

Use header version directly in search handler.
Correct as only UDP search is actually used atm.
This commit is contained in:
Michael Davidsaver
2019-04-15 13:16:46 -07:00
parent be1bbe4aa8
commit 0084b6e60a
8 changed files with 13 additions and 47 deletions

View File

@ -141,6 +141,8 @@ void AbstractCodec::processRead() {
void AbstractCodec::processHeader() { void AbstractCodec::processHeader() {
Guard G(_mutex); // guards access to _version et al.
// magic code // magic code
int8_t magicCode = _socketBuffer.getByte(); int8_t magicCode = _socketBuffer.getByte();
@ -1220,7 +1222,7 @@ BlockingTCPTransportCodec::BlockingTCPTransportCodec(bool serverFlag, const Cont
,_channel(channel) ,_channel(channel)
,_context(context), _responseHandler(responseHandler) ,_context(context), _responseHandler(responseHandler)
,_remoteTransportReceiveBufferSize(MAX_TCP_RECV) ,_remoteTransportReceiveBufferSize(MAX_TCP_RECV)
,_remoteTransportRevision(0), _priority(priority) ,_priority(priority)
,_verified(false) ,_verified(false)
{ {
REFTRACE_INCREMENT(num_instances); REFTRACE_INCREMENT(num_instances);

View File

@ -89,14 +89,6 @@ public:
return PVA_DEFAULT_PRIORITY; return PVA_DEFAULT_PRIORITY;
} }
virtual epics::pvData::int8 getRevision() const OVERRIDE FINAL {
return PVA_PROTOCOL_REVISION;
}
virtual void setRemoteRevision(epics::pvData::int8 /*revision*/) OVERRIDE FINAL {
// noop
}
virtual void setRemoteTransportReceiveBufferSize( virtual void setRemoteTransportReceiveBufferSize(
std::size_t /*receiveBufferSize*/) OVERRIDE FINAL { std::size_t /*receiveBufferSize*/) OVERRIDE FINAL {
// noop for UDP (limited by 64k; MAX_UDP_SEND for PVA) // noop for UDP (limited by 64k; MAX_UDP_SEND for PVA)

View File

@ -291,6 +291,9 @@ private:
epics::pvData::int8 _byteOrderFlag; epics::pvData::int8 _byteOrderFlag;
epics::pvData::int8 _clientServerFlag; epics::pvData::int8 _clientServerFlag;
const size_t _socketSendBufferSize; const size_t _socketSendBufferSize;
public:
mutable epics::pvData::Mutex _mutex;
}; };
@ -361,9 +364,10 @@ public:
return _socketName; return _socketName;
} }
virtual epics::pvData::int8 getRevision() const OVERRIDE FINAL { epics::pvData::int8 getRevision() const {
return PVA_PROTOCOL_REVISION < _remoteTransportRevision epicsGuard<epicsMutex> G(_mutex);
? PVA_PROTOCOL_REVISION : _remoteTransportRevision; return PVA_PROTOCOL_REVISION < _version
? PVA_PROTOCOL_REVISION : _version;
} }
@ -377,11 +381,6 @@ public:
} }
virtual void setRemoteRevision(epics::pvData::int8 revision) OVERRIDE FINAL {
_remoteTransportRevision = revision;
}
virtual void setRemoteTransportReceiveBufferSize( virtual void setRemoteTransportReceiveBufferSize(
std::size_t remoteTransportReceiveBufferSize) OVERRIDE FINAL { std::size_t remoteTransportReceiveBufferSize) OVERRIDE FINAL {
_remoteTransportReceiveBufferSize = remoteTransportReceiveBufferSize; _remoteTransportReceiveBufferSize = remoteTransportReceiveBufferSize;
@ -469,15 +468,11 @@ private:
ResponseHandler::shared_pointer _responseHandler; ResponseHandler::shared_pointer _responseHandler;
size_t _remoteTransportReceiveBufferSize; size_t _remoteTransportReceiveBufferSize;
epics::pvData::int8 _remoteTransportRevision;
epics::pvData::int16 _priority; epics::pvData::int16 _priority;
protected: protected:
bool _verified; bool _verified;
epics::pvData::Event _verifiedEvent; epics::pvData::Event _verifiedEvent;
public:
mutable epics::pvData::Mutex _mutex;
}; };
class BlockingServerTCPTransportCodec : class BlockingServerTCPTransportCodec :

View File

@ -191,12 +191,6 @@ public:
// TODO getContext? // TODO getContext?
/**
* Transport protocol minor revision.
* @return protocol minor revision.
*/
virtual epics::pvData::int8 getRevision() const = 0;
/** /**
* Get receive buffer size. * Get receive buffer size.
* @return receive buffer size. * @return receive buffer size.
@ -215,12 +209,6 @@ public:
*/ */
virtual epics::pvData::int16 getPriority() const = 0; virtual epics::pvData::int16 getPriority() const = 0;
/**
* Set remote transport protocol revision.
* @param revision protocol revision.
*/
virtual void setRemoteRevision(epics::pvData::int8 revision) = 0;
/** /**
* Set remote transport receive buffer size. * Set remote transport receive buffer size.
* @param receiveBufferSize receive buffer size. * @param receiveBufferSize receive buffer size.

View File

@ -2784,8 +2784,6 @@ public:
{ {
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer); AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
transport->setRemoteRevision(version);
transport->ensureData(4+2); transport->ensureData(4+2);
transport->setRemoteTransportReceiveBufferSize(payloadBuffer->getInt()); transport->setRemoteTransportReceiveBufferSize(payloadBuffer->getInt());

View File

@ -181,8 +181,6 @@ void ServerConnectionValidationHandler::handleResponse(
AbstractServerResponseHandler::handleResponse(responseFrom, AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer); transport, version, command, payloadSize, payloadBuffer);
transport->setRemoteRevision(version);
transport->ensureData(4+2+2); transport->ensureData(4+2+2);
transport->setRemoteTransportReceiveBufferSize(payloadBuffer->getInt()); transport->setRemoteTransportReceiveBufferSize(payloadBuffer->getInt());
// TODO clientIntrospectionRegistryMaxSize // TODO clientIntrospectionRegistryMaxSize
@ -340,7 +338,7 @@ void ServerSearchHandler::handleResponse(osiSockAddr* responseFrom,
info.reset(new PeerInfo); info.reset(new PeerInfo);
info->transport = "pva"; info->transport = "pva";
info->peer = inetAddressToString(*responseFrom); info->peer = inetAddressToString(*responseFrom);
info->transportVersion = transport->getRevision(); info->transportVersion = version;
} }
if (count > 0) if (count > 0)

View File

@ -399,13 +399,13 @@ void ServerContextImpl::printInfo(ostream& str, int lvl)
const Transport::shared_pointer& transport(*it); const Transport::shared_pointer& transport(*it);
str<<" "<<transport->getType()<<"://"<<transport->getRemoteName() str<<" "<<transport->getType()<<"://"<<transport->getRemoteName()
<<" ver="<<unsigned(transport->getRevision())
<<" "<<(transport->isClosed()?"closed!":""); <<" "<<(transport->isClosed()?"closed!":"");
const detail::BlockingServerTCPTransportCodec *casTransport = dynamic_cast<const detail::BlockingServerTCPTransportCodec*>(transport.get()); const detail::BlockingServerTCPTransportCodec *casTransport = dynamic_cast<const detail::BlockingServerTCPTransportCodec*>(transport.get());
if(casTransport) { if(casTransport) {
str<<" "<<(casTransport ? casTransport->getChannelCount() : size_t(-1))<<" channels"; str<<" ver="<<unsigned(casTransport->getRevision())
<<" "<<(casTransport ? casTransport->getChannelCount() : size_t(-1))<<" channels";
PeerInfo::const_shared_pointer peer; PeerInfo::const_shared_pointer peer;
{ {

View File

@ -358,11 +358,6 @@ public:
return dummyRemoteName; return dummyRemoteName;
} }
epics::pvData::int8 getRevision() const
{
return PVA_PROTOCOL_REVISION;
}
std::size_t getReceiveBufferSize() const { std::size_t getReceiveBufferSize() const {
return 16384; return 16384;
} }
@ -376,8 +371,6 @@ public:
return 16384; return 16384;
} }
void setRemoteRevision(epics::pvData::int8 revision) {}
void setRemoteTransportSocketReceiveBufferSize( void setRemoteTransportSocketReceiveBufferSize(
std::size_t socketReceiveBufferSize) {} std::size_t socketReceiveBufferSize) {}