From fa23f39967a42b5c35600f2aaf6323fae6c636d7 Mon Sep 17 00:00:00 2001 From: Gasper Jansa Date: Fri, 18 Feb 2011 17:36:25 +0100 Subject: [PATCH 1/6] removed one const --- pvAccessApp/server/serverChannelImpl.cpp | 2 +- pvAccessApp/server/serverChannelImpl.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pvAccessApp/server/serverChannelImpl.cpp b/pvAccessApp/server/serverChannelImpl.cpp index 661b762..30a350f 100644 --- a/pvAccessApp/server/serverChannelImpl.cpp +++ b/pvAccessApp/server/serverChannelImpl.cpp @@ -40,7 +40,7 @@ int16 ServerChannelImpl::getAccessRights() return 0; } -void ServerChannelImpl::registerRequest(const pvAccessID id, Destroyable* const request) +void ServerChannelImpl::registerRequest(const pvAccessID id, Destroyable* request) { if (request == NULL) { diff --git a/pvAccessApp/server/serverChannelImpl.h b/pvAccessApp/server/serverChannelImpl.h index 2d14f6c..dadbc54 100644 --- a/pvAccessApp/server/serverChannelImpl.h +++ b/pvAccessApp/server/serverChannelImpl.h @@ -59,7 +59,7 @@ public: * @param id request ID. * @param request request to be registered. */ - void registerRequest(pvAccessID id, Destroyable* const request); + void registerRequest(pvAccessID id, Destroyable* request); /** * Unregister request. From 5af10bb7b6ed48f37d126273811085ce02ad1003 Mon Sep 17 00:00:00 2001 From: Gasper Jansa Date: Fri, 18 Feb 2011 17:37:09 +0100 Subject: [PATCH 2/6] BaseChannelRequester --- pvAccessApp/server/baseChannelRequester.cpp | 151 ++++++++++++++++++++ pvAccessApp/server/baseChannelRequester.h | 86 +++++++++++ 2 files changed, 237 insertions(+) create mode 100644 pvAccessApp/server/baseChannelRequester.cpp create mode 100644 pvAccessApp/server/baseChannelRequester.h diff --git a/pvAccessApp/server/baseChannelRequester.cpp b/pvAccessApp/server/baseChannelRequester.cpp new file mode 100644 index 0000000..a602803 --- /dev/null +++ b/pvAccessApp/server/baseChannelRequester.cpp @@ -0,0 +1,151 @@ +/* + * baseChannelRequester.cpp + */ + +#include "baseChannelRequester.h" + +using namespace epics::pvData; + +namespace epics { namespace pvAccess { + +const Status BaseChannelRequester::okStatus = Status(); +const Status BaseChannelRequester::badCIDStatus = Status(Status::STATUSTYPE_ERROR, "bad channel id"); +const Status BaseChannelRequester::badIOIDStatus = Status(Status::STATUSTYPE_ERROR, "bad request id"); +const Status BaseChannelRequester::noReadACLStatus = Status(Status::STATUSTYPE_ERROR, "no read access"); +const Status BaseChannelRequester::noWriteACLStatus = Status(Status::STATUSTYPE_ERROR, "no write access"); +const Status BaseChannelRequester::noProcessACLStatus = Status(Status::STATUSTYPE_ERROR, "no process access"); +const Status BaseChannelRequester::otherRequestPendingStatus = Status(Status::STATUSTYPE_ERROR, "other request pending"); + +const int32 BaseChannelRequester::NULL_REQUEST = -1; + +BaseChannelRequester::BaseChannelRequester(ServerContextImpl* context, ServerChannelImpl* channel,const pvAccessID ioid, Transport* transport) : + _ioid(ioid), + _transport(transport), + _channel(channel), + _context(context), + _pendingRequest(BaseChannelRequester::NULL_REQUEST) +{ + +} + +boolean BaseChannelRequester::startRequest(int32 qos) +{ + Lock guard(_mutex); + if (_pendingRequest != NULL_REQUEST) + { + return false; + } + + _pendingRequest = qos; + return true; +} + +void BaseChannelRequester::stopRequest() +{ + Lock guard(_mutex); + _pendingRequest = NULL_REQUEST; +} + +int32 BaseChannelRequester::getPendingRequest() +{ + Lock guard(_mutex); + return _pendingRequest; +} + +String BaseChannelRequester::getRequesterName() +{ + stringstream name; + name << typeid(*_transport).name() << "/" << _ioid; + return name.str(); +} + +void BaseChannelRequester::message(const String& message, const epics::pvData::MessageType messageType) +{ + BaseChannelRequester::message(_transport, _ioid, message, messageType); +} + +void BaseChannelRequester::message(Transport* transport, const pvAccessID ioid, const String& message, const MessageType messageType) +{ + transport->enqueueSendRequest( new BaseChannelRequesterMessageTransportSender(ioid, message, messageType)); +} + +void BaseChannelRequester::sendFailureMessage(const int8 command, Transport* transport, const pvAccessID ioid, const int8 qos, const Status status) +{ + transport->enqueueSendRequest( new BaseChannelRequesterFailureMessageTransportSender(command, transport, ioid, qos, status)); +} + +BaseChannelRequesterMessageTransportSender::BaseChannelRequesterMessageTransportSender(const pvAccessID ioid, const String message,const epics::pvData::MessageType messageType): + _ioid(ioid), + _message(message), + _messageType(messageType) +{ +} + +void BaseChannelRequesterMessageTransportSender::send(ByteBuffer* buffer, TransportSendControl* control) +{ + control->startMessage((int8)18, sizeof(int32)/sizeof(int8) + 1); + buffer->putInt(_ioid); + buffer->putByte((int8)_messageType); + epics::pvData::SerializeHelper::serializeString(_message, buffer, control); +} + +void BaseChannelRequesterMessageTransportSender::lock() +{ + // noop +} + +void BaseChannelRequesterMessageTransportSender::unlock() +{ + // noop +} + +void BaseChannelRequesterMessageTransportSender::release() +{ + delete this; +} + +void BaseChannelRequesterMessageTransportSender::acquire() +{ + // noop +} + +BaseChannelRequesterFailureMessageTransportSender::BaseChannelRequesterFailureMessageTransportSender(const int8 command, + Transport* transport, const pvAccessID ioid, const int8 qos, const Status status) : + _command(command), + _ioid(ioid), + _qos(qos), + _status(status), + _transport(transport) +{ +} + +void BaseChannelRequesterFailureMessageTransportSender::send(ByteBuffer* buffer, TransportSendControl* control) +{ + control->startMessage(_command, sizeof(int32)/sizeof(int8) + 1); + buffer->putInt(_ioid); + buffer->put(_qos); + _transport->getIntrospectionRegistry()->serializeStatus(buffer, control, _status); +} + +void BaseChannelRequesterFailureMessageTransportSender::lock() +{ + // noop +} + +void BaseChannelRequesterFailureMessageTransportSender::unlock() +{ + // noop +} + +void BaseChannelRequesterFailureMessageTransportSender::release() +{ + delete this; +} + +void BaseChannelRequesterFailureMessageTransportSender::acquire() +{ + // noop +} + +} +} diff --git a/pvAccessApp/server/baseChannelRequester.h b/pvAccessApp/server/baseChannelRequester.h new file mode 100644 index 0000000..36eefa6 --- /dev/null +++ b/pvAccessApp/server/baseChannelRequester.h @@ -0,0 +1,86 @@ +/* + * baseChannelRequester.h + */ + +#ifndef BASECHANNELREQUESTER_H_ +#define BASECHANNELREQUESTER_H_ + +#include "serverContext.h" +#include "serverChannelImpl.h" + +#include +#include + +namespace epics { +namespace pvAccess { + +class BaseChannelRequester : public epics::pvData::Requester, public epics::pvData::Destroyable +{ +public: + BaseChannelRequester(ServerContextImpl* context, ServerChannelImpl* channel,const pvAccessID ioid, Transport* transport); + ~BaseChannelRequester() {}; + + boolean startRequest(int32 qos); + void stopRequest(); + int32 getPendingRequest(); + String getRequesterName(); + void message(const String& message, const epics::pvData::MessageType messageType); + static void message(Transport* transport, const pvAccessID ioid, const String& message, const epics::pvData::MessageType messageType); + static void sendFailureMessage(const int8 command, Transport* transport, const pvAccessID ioid, const int8 qos, const Status status); + + static const Status okStatus; + static const Status badCIDStatus; + static const Status badIOIDStatus; + static const Status noReadACLStatus; + static const Status noWriteACLStatus; + static const Status noProcessACLStatus; + static const Status otherRequestPendingStatus; +protected: + const pvAccessID _ioid; + Transport* _transport; + ServerChannelImpl* _channel; +private: + ServerContextImpl* _context; + static const int32 NULL_REQUEST; + int32 _pendingRequest; + epics::pvData::Mutex _mutex; +}; + +class BaseChannelRequesterMessageTransportSender : public TransportSender +{ +public: + BaseChannelRequesterMessageTransportSender(const pvAccessID _ioid, const String message,const epics::pvData::MessageType messageType); + void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control); + void lock(); + void unlock(); + void release(); + void acquire(); +private: + const pvAccessID _ioid; + const String _message; + const epics::pvData::MessageType _messageType; +}; + +class BaseChannelRequesterFailureMessageTransportSender : public TransportSender +{ +public: + BaseChannelRequesterFailureMessageTransportSender(const int8 command, Transport* transport, const pvAccessID ioid, const int8 qos, const Status status); + void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control); + void lock(); + void unlock(); + void release(); + void acquire(); + +private: + const int8 _command; + const pvAccessID _ioid; + const int8 _qos; + const Status _status; + Transport* _transport; +}; + +} +} + + +#endif /* BASECHANNELREQUESTER_H_ */ From 1494fd2637ead8062c8d38037ad9e76e9965bb61 Mon Sep 17 00:00:00 2001 From: Gasper Jansa Date: Fri, 18 Feb 2011 17:37:56 +0100 Subject: [PATCH 3/6] some more handlers --- pvAccessApp/server/responseHandlers.cpp | 215 +++++++++++++++++++++--- pvAccessApp/server/responseHandlers.h | 54 +++++- 2 files changed, 241 insertions(+), 28 deletions(-) diff --git a/pvAccessApp/server/responseHandlers.cpp b/pvAccessApp/server/responseHandlers.cpp index ba69edc..c4fb82d 100644 --- a/pvAccessApp/server/responseHandlers.cpp +++ b/pvAccessApp/server/responseHandlers.cpp @@ -41,7 +41,7 @@ namespace epics { ServerResponseHandler::ServerResponseHandler(ServerContextImpl* context) { - BadResponse* badResponse = new BadResponse(context); + _badResponse = new BadResponse(context); _handlerTable = new ResponseHandler*[HANDLER_TABLE_LENGTH]; // TODO add real handlers, as they are developed @@ -49,33 +49,34 @@ namespace epics { _handlerTable[1] = new ConnectionValidationHandler(context); _handlerTable[2] = new EchoHandler(context); _handlerTable[3] = new SearchHandler(context); - _handlerTable[4] = badResponse; + _handlerTable[4] = _badResponse; _handlerTable[5] = new IntrospectionSearchHandler(context); - _handlerTable[6] = badResponse; + _handlerTable[6] = _badResponse; _handlerTable[7] = new CreateChannelHandler(context); _handlerTable[8] = new DestroyChannelHandler(context); - _handlerTable[9] = badResponse; - _handlerTable[10] = badResponse; - _handlerTable[11] = badResponse; - _handlerTable[12] = badResponse; - _handlerTable[13] = badResponse; - _handlerTable[14] = badResponse; - _handlerTable[15] = badResponse; - _handlerTable[16] = badResponse; - _handlerTable[17] = badResponse; - _handlerTable[18] = badResponse; - _handlerTable[19] = badResponse; - _handlerTable[20] = badResponse; - _handlerTable[21] = badResponse; - _handlerTable[22] = badResponse; - _handlerTable[23] = badResponse; - _handlerTable[24] = badResponse; - _handlerTable[25] = badResponse; - _handlerTable[26] = badResponse; - _handlerTable[27] = badResponse; + _handlerTable[9] = _badResponse; + //_handlerTable[10] = new GetHandler(context); + _handlerTable[11] = _badResponse; + _handlerTable[12] = _badResponse; + _handlerTable[13] = _badResponse; + _handlerTable[14] = _badResponse; + _handlerTable[15] = _badResponse; + _handlerTable[16] = _badResponse; + _handlerTable[17] = _badResponse; + _handlerTable[18] = _badResponse; + _handlerTable[19] = _badResponse; + _handlerTable[20] = _badResponse; + _handlerTable[21] = _badResponse; + _handlerTable[22] = _badResponse; + _handlerTable[23] = _badResponse; + _handlerTable[24] = _badResponse; + _handlerTable[25] = _badResponse; + _handlerTable[26] = _badResponse; + _handlerTable[27] = _badResponse; } ServerResponseHandler::~ServerResponseHandler() { + delete _badResponse; delete _handlerTable[0]; delete _handlerTable[1]; delete _handlerTable[2]; @@ -83,6 +84,7 @@ namespace epics { delete _handlerTable[5]; delete _handlerTable[7]; delete _handlerTable[8]; + delete _handlerTable[10]; delete _handlerTable[27]; delete[] _handlerTable; } @@ -329,7 +331,7 @@ namespace epics { } - void ChannelRequesterImpl::channelCreated(const Status& status, Channel* const channel) + void ChannelRequesterImpl::channelCreated(const Status& status, Channel* channel) { Lock guard(_mutex); _status = status; @@ -337,7 +339,7 @@ namespace epics { _transport->enqueueSendRequest(this); } - void ChannelRequesterImpl::channelStateChange(Channel* constc, const Channel::ConnectionState isConnected) + void ChannelRequesterImpl::channelStateChange(Channel* c, const Channel::ConnectionState isConnected) { //noop } @@ -481,7 +483,170 @@ namespace epics { casTransport->unregisterChannel(sid); // send response back - transport->enqueueSendRequest( new DestroyChannelHandlerTransportSender(cid, sid)); + transport->enqueueSendRequest(new DestroyChannelHandlerTransportSender(cid, sid)); + } + + /****************************************************************************************/ + + void GetHandler::handleResponse(osiSockAddr* responseFrom, + Transport* transport, int8 version, int8 command, + int payloadSize, epics::pvData::ByteBuffer* payloadBuffer) { + AbstractServerResponseHandler::handleResponse(responseFrom, + transport, version, command, payloadSize, payloadBuffer); + + // NOTE: we do not explicitly check if transport is OK + ChannelHostingTransport* casTransport = dynamic_cast(transport); + + transport->ensureData(2*sizeof(int32)/sizeof(int8)+1); + const pvAccessID sid = payloadBuffer->getInt(); + const pvAccessID ioid = payloadBuffer->getInt(); + + // mode + const int8 qosCode = payloadBuffer->getByte(); + + ServerChannelImpl* channel = static_cast(casTransport->getChannel(sid)); + if (channel == NULL) + { + BaseChannelRequester::sendFailureMessage((int8)10, transport, ioid, qosCode, BaseChannelRequester::badCIDStatus); + return; + } + + const boolean init = (QOS_INIT & qosCode) != 0; + if (init) + { + // pvRequest + PVStructurePtr pvRequest = transport->getIntrospectionRegistry()->deserializePVRequest(payloadBuffer, transport); + + // create... + // new ChannelGetRequesterImpl(_context, channel, ioid, transport, pvRequest); + } + /* else + { + final boolean lastRequest = QoS.DESTROY.isSet(qosCode); + + ChannelGetRequesterImpl request = (ChannelGetRequesterImpl)channel.getRequest(ioid); + if (request == null) { + BaseChannelRequester.sendFailureMessage((byte)10, transport, ioid, qosCode, BaseChannelRequester.badIOIDStatus); + return; + } + + if (!request.startRequest(qosCode)) { + BaseChannelRequester.sendFailureMessage((byte)10, transport, ioid, qosCode, BaseChannelRequester.otherRequestPendingStatus); + return; + } + + /* + // check read access rights + if (!AccessRights.READ.isSet(channel.getAccessRights())) + { + getFailureResponse(transport, ioid, qosCode, BaseChannelRequester.noReadACLStatus); + if (lastRequest) + request.destroy(); + return; + } + */ + // request.getChannelGet().get(lastRequest); + // } + + } + + ChannelGetRequesterImpl::ChannelGetRequesterImpl(ServerContextImpl* context, ServerChannelImpl* channel, const pvAccessID ioid, Transport* transport, + epics::pvData::PVStructurePtr pvRequest) : + BaseChannelRequester(context, channel, ioid, transport) + { + startRequest(QOS_INIT); + channel->registerRequest(ioid, this); + _channelGet = channel->getChannel()->createChannelGet(this, pvRequest); + // TODO what if last call fails... registration is still present + } + + void ChannelGetRequesterImpl::channelGetConnect(const epics::pvData::Status& status, ChannelGet* channelGet, epics::pvData::PVStructurePtr pvStructure, + epics::pvData::BitSet* bitSet) + { + { + Lock guard(&_mutex); + _bitSet = bitSet; + _pvStructure = pvStructure; + _status = status; + _channelGet = channelGet; + } + _transport->enqueueSendRequest(this); + + // self-destruction + if (!status.isSuccess()) + { + destroy(); + } + } + + void ChannelGetRequesterImpl::getDone(const epics::pvData::Status& status) + { + { + Lock guard(&_mutex); + _status = status; + } + _transport->enqueueSendRequest(this); + } + + void ChannelGetRequesterImpl::destroy() + { + _channel->unregisterRequest(_ioid); + if (_channelGet != NULL) + { + _channelGet->destroy(); + } + } + + ChannelGet* ChannelGetRequesterImpl::getChannelGet() + { + return _channelGet; + } + + void ChannelGetRequesterImpl::lock() + { + //TODO + } + + void ChannelGetRequesterImpl::unlock() + { + //TODO + } + + void ChannelGetRequesterImpl::send(ByteBuffer* buffer, TransportSendControl* control) + { + const int32 request = getPendingRequest(); + + control->startMessage((int8)10, sizeof(int32)/sizeof(int8) + 1); + buffer->putInt(_ioid); + buffer->put((int8)request); + IntrospectionRegistry* introspectionRegistry = _transport->getIntrospectionRegistry(); + { + Lock guard(&_mutex); + introspectionRegistry->serializeStatus(buffer, control, _status); + } + + if (_status.isSuccess()) + { + if (request & QOS_INIT) + { + Lock guard(&_mutex); + introspectionRegistry->serialize(_pvStructure != NULL ? _pvStructure->getField() : NULL, buffer, control); + + } + else + { + _bitSet->serialize(buffer, control); + _pvStructure->serialize(buffer, control, _bitSet); + } + } + + stopRequest(); + + // lastRequest + if (request & QOS_DESTROY) + { + destroy(); + } } } } diff --git a/pvAccessApp/server/responseHandlers.h b/pvAccessApp/server/responseHandlers.h index cda5e39..3c5c759 100644 --- a/pvAccessApp/server/responseHandlers.h +++ b/pvAccessApp/server/responseHandlers.h @@ -11,6 +11,7 @@ #include "serverContext.h" #include "remote.h" #include "serverChannelImpl.h" +#include "baseChannelRequester.h" namespace epics { namespace pvAccess { @@ -73,6 +74,10 @@ namespace epics { int payloadSize, epics::pvData::ByteBuffer* payloadBuffer); private: static const int HANDLER_TABLE_LENGTH = 28; + /** + * Bad response handlers. + */ + BadResponse *_badResponse; /** * Table of response handlers for each command ID. */ @@ -226,6 +231,7 @@ namespace epics { AbstractServerResponseHandler(context, "Create channel request") { } + //TODO where is implementation??? virtual void handleResponse(osiSockAddr* responseFrom, Transport* transport, int8 version, int8 command, int payloadSize, epics::pvData::ByteBuffer* payloadBuffer); @@ -237,9 +243,9 @@ namespace epics { class ChannelRequesterImpl : public ChannelRequester, public TransportSender { public: - ChannelRequesterImpl(Transport* transport, const String channelName, const int32 cid); - void channelCreated(const Status& status, Channel* const channel); - void channelStateChange(Channel* const c, const Channel::ConnectionState isConnected); + ChannelRequesterImpl(Transport* transport, const String channelName, const pvAccessID cid); + void channelCreated(const Status& status, Channel* channel); + void channelStateChange(Channel* c, const Channel::ConnectionState isConnected); String getRequesterName(); void message(const String message, const epics::pvData::MessageType messageType); void lock(); @@ -310,6 +316,48 @@ namespace epics { pvAccessID _sid; }; + /****************************************************************************************/ + /** + * Get request handler. + */ + class GetHandler : public AbstractServerResponseHandler + { + public: + /** + * @param context + */ + GetHandler(ServerContextImpl* context) : + AbstractServerResponseHandler(context, "Get request") { + } + + virtual void handleResponse(osiSockAddr* responseFrom, + Transport* transport, int8 version, int8 command, + int payloadSize, epics::pvData::ByteBuffer* payloadBuffer); + }; + + class ChannelGetRequesterImpl : private BaseChannelRequester, public ChannelGetRequester, public TransportSender + { + public: + ChannelGetRequesterImpl(ServerContextImpl* context, ServerChannelImpl* channel, const pvAccessID ioid, Transport* transport, + epics::pvData::PVStructurePtr pvRequest); + void channelGetConnect(const epics::pvData::Status& status, ChannelGet* channelGet, epics::pvData::PVStructurePtr pvStructure, + epics::pvData::BitSet* bitSet); + void getDone(const epics::pvData::Status& status); + void destroy(); + /** + * @return the channelGet + */ + ChannelGet* getChannelGet(); + void lock(); + void unlock(); + void send(ByteBuffer* buffer, TransportSendControl* control); + private: + ChannelGet* _channelGet; + epics::pvData::BitSet* _bitSet; + epics::pvData::PVStructurePtr _pvStructure; + epics::pvData::Status _status; + epics::pvData::Mutex _mutex; + }; } } From 14a12729aa0fa96ef17e60ffd0acc40fac72582d Mon Sep 17 00:00:00 2001 From: Gasper Jansa Date: Fri, 18 Feb 2011 17:38:53 +0100 Subject: [PATCH 4/6] small fix --- pvAccessApp/server/serverContext.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pvAccessApp/server/serverContext.h b/pvAccessApp/server/serverContext.h index 6b16093..bfb21a4 100644 --- a/pvAccessApp/server/serverContext.h +++ b/pvAccessApp/server/serverContext.h @@ -327,7 +327,7 @@ private: /** * Timer. */ - Timer* _timer; + epics::pvData::Timer* _timer; /** * Broadcast transport needed for channel searches. @@ -373,12 +373,12 @@ private: /** * Run mutex. */ - Mutex _mutex; + epics::pvData::Mutex _mutex; /** * Run event. */ - Event _runEvent; + epics::pvData::Event _runEvent; /** * Beacon server status provider interface (optional). From faac27d1fcc66e216c2df9c8b80d06cd575523c7 Mon Sep 17 00:00:00 2001 From: Gasper Jansa Date: Fri, 18 Feb 2011 17:39:45 +0100 Subject: [PATCH 5/6] added baseChannelRequester files --- pvAccessApp/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pvAccessApp/Makefile b/pvAccessApp/Makefile index 0cb2d77..fd2ce7b 100644 --- a/pvAccessApp/Makefile +++ b/pvAccessApp/Makefile @@ -43,10 +43,11 @@ SRC_DIRS += $(PVACCESS)/server INC += serverContext.h INC += responseHandlers.h INC += serverChannelImpl.h +INC += baseChannelRequester.h LIBSRCS += responseHandlers.cpp LIBSRCS += serverContext.cpp LIBSRCS += serverChannelImpl.cpp - +LIBSRCS += baseChannelRequester.cpp SRC_DIRS += $(PVACCESS)/factory LIBSRCS += ChannelAccessFactory.cpp From 1aecd168ab7454c285f58f9435fd02c0db834e4d Mon Sep 17 00:00:00 2001 From: Gasper Jansa Date: Fri, 18 Feb 2011 17:57:29 +0100 Subject: [PATCH 6/6] mutex fix --- pvAccessApp/server/responseHandlers.cpp | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/pvAccessApp/server/responseHandlers.cpp b/pvAccessApp/server/responseHandlers.cpp index c4fb82d..7418652 100644 --- a/pvAccessApp/server/responseHandlers.cpp +++ b/pvAccessApp/server/responseHandlers.cpp @@ -515,7 +515,7 @@ namespace epics { if (init) { // pvRequest - PVStructurePtr pvRequest = transport->getIntrospectionRegistry()->deserializePVRequest(payloadBuffer, transport); + //PVStructurePtr pvRequest = transport->getIntrospectionRegistry()->deserializePVRequest(payloadBuffer, transport); // create... // new ChannelGetRequesterImpl(_context, channel, ioid, transport, pvRequest); @@ -535,18 +535,9 @@ namespace epics { return; } - /* - // check read access rights - if (!AccessRights.READ.isSet(channel.getAccessRights())) - { - getFailureResponse(transport, ioid, qosCode, BaseChannelRequester.noReadACLStatus); - if (lastRequest) - request.destroy(); - return; - } - */ - // request.getChannelGet().get(lastRequest); - // } + request.getChannelGet().get(lastRequest); + } + */ } @@ -564,7 +555,7 @@ namespace epics { epics::pvData::BitSet* bitSet) { { - Lock guard(&_mutex); + Lock guard(_mutex); _bitSet = bitSet; _pvStructure = pvStructure; _status = status; @@ -582,7 +573,7 @@ namespace epics { void ChannelGetRequesterImpl::getDone(const epics::pvData::Status& status) { { - Lock guard(&_mutex); + Lock guard(_mutex); _status = status; } _transport->enqueueSendRequest(this); @@ -621,7 +612,7 @@ namespace epics { buffer->put((int8)request); IntrospectionRegistry* introspectionRegistry = _transport->getIntrospectionRegistry(); { - Lock guard(&_mutex); + Lock guard(_mutex); introspectionRegistry->serializeStatus(buffer, control, _status); } @@ -629,7 +620,7 @@ namespace epics { { if (request & QOS_INIT) { - Lock guard(&_mutex); + Lock guard(_mutex); introspectionRegistry->serialize(_pvStructure != NULL ? _pvStructure->getField() : NULL, buffer, control); }