compose ServerResponseHandler
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
#include <pv/remote.h>
|
||||
#include <pv/serverChannelImpl.h>
|
||||
#include <pv/baseChannelRequester.h>
|
||||
#include <pv/securityImpl.h>
|
||||
|
||||
namespace epics {
|
||||
namespace pvAccess {
|
||||
@@ -48,27 +49,6 @@ public:
|
||||
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||
};
|
||||
|
||||
/**
|
||||
* PVAS request handler - main handler which dispatches requests to appropriate handlers.
|
||||
*/
|
||||
class ServerResponseHandler : public ResponseHandler {
|
||||
public:
|
||||
ServerResponseHandler(ServerContextImpl::shared_pointer const & context);
|
||||
|
||||
virtual ~ServerResponseHandler() {
|
||||
}
|
||||
|
||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||
private:
|
||||
/**
|
||||
* Table of response handlers for each command ID.
|
||||
*/
|
||||
std::vector<ResponseHandler::shared_pointer> m_handlerTable;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Connection validation message handler.
|
||||
*/
|
||||
@@ -785,6 +765,48 @@ private:
|
||||
epics::pvData::PVStructure::shared_pointer _pvResponse;
|
||||
epics::pvData::Status _status;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* PVAS request handler - main handler which dispatches requests to appropriate handlers.
|
||||
*/
|
||||
class ServerResponseHandler : public ResponseHandler {
|
||||
public:
|
||||
ServerResponseHandler(ServerContextImpl::shared_pointer const & context);
|
||||
|
||||
virtual ~ServerResponseHandler() {
|
||||
}
|
||||
|
||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||
private:
|
||||
ServerBadResponse handle_bad;
|
||||
|
||||
ServerNoopResponse handle_beacon;
|
||||
ServerConnectionValidationHandler handle_validation;
|
||||
ServerEchoHandler handle_echo;
|
||||
ServerSearchHandler handle_search;
|
||||
AuthNZHandler handle_authnz;
|
||||
ServerCreateChannelHandler handle_create;
|
||||
ServerDestroyChannelHandler handle_destroy;
|
||||
ServerGetHandler handle_get;
|
||||
ServerPutHandler handle_put;
|
||||
ServerPutGetHandler handle_putget;
|
||||
ServerMonitorHandler handle_monitor;
|
||||
ServerArrayHandler handle_array;
|
||||
ServerDestroyRequestHandler handle_close;
|
||||
ServerProcessHandler handle_process;
|
||||
ServerGetFieldHandler handle_getfield;
|
||||
ServerRPCHandler handle_rpc;
|
||||
ServerCancelRequestHandler handle_cancel;
|
||||
/**
|
||||
* Table of response handlers for each command ID.
|
||||
*/
|
||||
std::vector<ResponseHandler*> m_handlerTable;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -104,34 +104,51 @@ void ServerBadResponse::handleResponse(osiSockAddr* responseFrom,
|
||||
|
||||
ServerResponseHandler::ServerResponseHandler(ServerContextImpl::shared_pointer const & context)
|
||||
:ResponseHandler(context.get(), "ServerResponseHandler")
|
||||
,handle_bad(context)
|
||||
,handle_beacon(context, "Beacon")
|
||||
,handle_validation(context)
|
||||
,handle_echo(context)
|
||||
,handle_search(context)
|
||||
,handle_authnz(context.get())
|
||||
,handle_create(context)
|
||||
,handle_destroy(context)
|
||||
,handle_get(context)
|
||||
,handle_put(context)
|
||||
,handle_putget(context)
|
||||
,handle_monitor(context)
|
||||
,handle_array(context)
|
||||
,handle_close(context)
|
||||
,handle_process(context)
|
||||
,handle_getfield(context)
|
||||
,handle_rpc(context)
|
||||
,handle_cancel(context)
|
||||
,m_handlerTable(CMD_CANCEL_REQUEST+1, &handle_bad)
|
||||
{
|
||||
ResponseHandler::shared_pointer badResponse(new ServerBadResponse(context));
|
||||
m_handlerTable.resize(CMD_CANCEL_REQUEST+1);
|
||||
|
||||
m_handlerTable[CMD_BEACON].reset(new ServerNoopResponse(context, "Beacon")); /* 0 */
|
||||
m_handlerTable[CMD_CONNECTION_VALIDATION].reset(new ServerConnectionValidationHandler(context)); /* 1 */
|
||||
m_handlerTable[CMD_ECHO].reset(new ServerEchoHandler(context)); /* 2 */
|
||||
m_handlerTable[CMD_SEARCH].reset(new ServerSearchHandler(context)); /* 3 */
|
||||
m_handlerTable[CMD_SEARCH_RESPONSE] = badResponse;
|
||||
m_handlerTable[CMD_AUTHNZ].reset(new AuthNZHandler(context.get())); /* 5 */
|
||||
m_handlerTable[CMD_ACL_CHANGE] = badResponse; /* 6 - access right change */
|
||||
m_handlerTable[CMD_CREATE_CHANNEL].reset(new ServerCreateChannelHandler(context)); /* 7 */
|
||||
m_handlerTable[CMD_DESTROY_CHANNEL].reset(new ServerDestroyChannelHandler(context)); /* 8 */
|
||||
m_handlerTable[CMD_CONNECTION_VALIDATED] = badResponse; /* 9 */
|
||||
m_handlerTable[CMD_BEACON] = &handle_beacon; /* 0 */
|
||||
m_handlerTable[CMD_CONNECTION_VALIDATION] = &handle_validation; /* 1 */
|
||||
m_handlerTable[CMD_ECHO] = &handle_echo; /* 2 */
|
||||
m_handlerTable[CMD_SEARCH] = &handle_search; /* 3 */
|
||||
m_handlerTable[CMD_SEARCH_RESPONSE] = &handle_bad;
|
||||
m_handlerTable[CMD_AUTHNZ] = &handle_authnz; /* 5 */
|
||||
m_handlerTable[CMD_ACL_CHANGE] = &handle_bad; /* 6 - access right change */
|
||||
m_handlerTable[CMD_CREATE_CHANNEL] = &handle_create; /* 7 */
|
||||
m_handlerTable[CMD_DESTROY_CHANNEL] = &handle_destroy; /* 8 */
|
||||
m_handlerTable[CMD_CONNECTION_VALIDATED] = &handle_bad; /* 9 */
|
||||
|
||||
m_handlerTable[CMD_GET].reset(new ServerGetHandler(context)); /* 10 - get response */
|
||||
m_handlerTable[CMD_PUT].reset(new ServerPutHandler(context)); /* 11 - put response */
|
||||
m_handlerTable[CMD_PUT_GET].reset(new ServerPutGetHandler(context)); /* 12 - put-get response */
|
||||
m_handlerTable[CMD_MONITOR].reset(new ServerMonitorHandler(context)); /* 13 - monitor response */
|
||||
m_handlerTable[CMD_ARRAY].reset(new ServerArrayHandler(context)); /* 14 - array response */
|
||||
m_handlerTable[CMD_DESTROY_REQUEST].reset(new ServerDestroyRequestHandler(context)); /* 15 - destroy request */
|
||||
m_handlerTable[CMD_PROCESS].reset(new ServerProcessHandler(context)); /* 16 - process response */
|
||||
m_handlerTable[CMD_GET_FIELD].reset(new ServerGetFieldHandler(context)); /* 17 - get field response */
|
||||
m_handlerTable[CMD_MESSAGE] = badResponse; /* 18 - message to Requester */
|
||||
m_handlerTable[CMD_MULTIPLE_DATA] = badResponse; /* 19 - grouped monitors */
|
||||
m_handlerTable[CMD_GET] = &handle_get; /* 10 - get response */
|
||||
m_handlerTable[CMD_PUT] = &handle_put; /* 11 - put response */
|
||||
m_handlerTable[CMD_PUT_GET] = &handle_putget; /* 12 - put-get response */
|
||||
m_handlerTable[CMD_MONITOR] = &handle_monitor; /* 13 - monitor response */
|
||||
m_handlerTable[CMD_ARRAY] = &handle_array; /* 14 - array response */
|
||||
m_handlerTable[CMD_DESTROY_REQUEST] = &handle_close; /* 15 - destroy request */
|
||||
m_handlerTable[CMD_PROCESS] = &handle_process; /* 16 - process response */
|
||||
m_handlerTable[CMD_GET_FIELD] = &handle_getfield; /* 17 - get field response */
|
||||
m_handlerTable[CMD_MESSAGE] = &handle_bad; /* 18 - message to Requester */
|
||||
m_handlerTable[CMD_MULTIPLE_DATA] = &handle_bad; /* 19 - grouped monitors */
|
||||
|
||||
m_handlerTable[CMD_RPC].reset(new ServerRPCHandler(context)); /* 20 - RPC response */
|
||||
m_handlerTable[CMD_CANCEL_REQUEST].reset(new ServerCancelRequestHandler(context)); /* 21 - cancel request */
|
||||
m_handlerTable[CMD_RPC] = &handle_rpc; /* 20 - RPC response */
|
||||
m_handlerTable[CMD_CANCEL_REQUEST] = &handle_cancel; /* 21 - cancel request */
|
||||
}
|
||||
|
||||
void ServerResponseHandler::handleResponse(osiSockAddr* responseFrom,
|
||||
|
||||
Reference in New Issue
Block a user