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

View File

@ -89,14 +89,6 @@ public:
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(
std::size_t /*receiveBufferSize*/) OVERRIDE FINAL {
// 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 _clientServerFlag;
const size_t _socketSendBufferSize;
public:
mutable epics::pvData::Mutex _mutex;
};
@ -361,9 +364,10 @@ public:
return _socketName;
}
virtual epics::pvData::int8 getRevision() const OVERRIDE FINAL {
return PVA_PROTOCOL_REVISION < _remoteTransportRevision
? PVA_PROTOCOL_REVISION : _remoteTransportRevision;
epics::pvData::int8 getRevision() const {
epicsGuard<epicsMutex> G(_mutex);
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(
std::size_t remoteTransportReceiveBufferSize) OVERRIDE FINAL {
_remoteTransportReceiveBufferSize = remoteTransportReceiveBufferSize;
@ -469,15 +468,11 @@ private:
ResponseHandler::shared_pointer _responseHandler;
size_t _remoteTransportReceiveBufferSize;
epics::pvData::int8 _remoteTransportRevision;
epics::pvData::int16 _priority;
protected:
bool _verified;
epics::pvData::Event _verifiedEvent;
public:
mutable epics::pvData::Mutex _mutex;
};
class BlockingServerTCPTransportCodec :

View File

@ -191,12 +191,6 @@ public:
// TODO getContext?
/**
* Transport protocol minor revision.
* @return protocol minor revision.
*/
virtual epics::pvData::int8 getRevision() const = 0;
/**
* Get receive buffer size.
* @return receive buffer size.
@ -215,12 +209,6 @@ public:
*/
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.
* @param receiveBufferSize receive buffer size.

View File

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

View File

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

View File

@ -399,13 +399,13 @@ void ServerContextImpl::printInfo(ostream& str, int lvl)
const Transport::shared_pointer& transport(*it);
str<<" "<<transport->getType()<<"://"<<transport->getRemoteName()
<<" ver="<<unsigned(transport->getRevision())
<<" "<<(transport->isClosed()?"closed!":"");
const detail::BlockingServerTCPTransportCodec *casTransport = dynamic_cast<const detail::BlockingServerTCPTransportCodec*>(transport.get());
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;
{

View File

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