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:
@ -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);
|
||||||
|
@ -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)
|
||||||
|
@ -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 :
|
||||||
|
@ -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.
|
||||||
|
@ -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());
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
{
|
{
|
||||||
|
@ -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) {}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user