From 5f6652af0b1de2ef321871618fbedfbed3a58210 Mon Sep 17 00:00:00 2001 From: miha_vitorovic Date: Wed, 5 Jan 2011 10:29:46 +0100 Subject: [PATCH] - Moved osiSockAddr comparators to 'inetAddressUtil.h' - moved serve response handler implementation(s) to '/server' and fixed #includes and Makefile --- pvAccessApp/Makefile | 3 +- pvAccessApp/remote/blockingTCP.h | 15 +-- pvAccessApp/remote/blockingTCPAcceptor.cpp | 1 + pvAccessApp/remote/remote.h | 71 -------------- .../{remote => server}/responseHandlers.cpp | 30 ++++++ pvAccessApp/server/responseHandlers.h | 93 +++++++++++++++++++ pvAccessApp/utils/inetAddressUtil.h | 30 ++++++ pvAccessApp/utils/transportRegistry.h | 10 -- 8 files changed, 157 insertions(+), 96 deletions(-) rename pvAccessApp/{remote => server}/responseHandlers.cpp (69%) create mode 100644 pvAccessApp/server/responseHandlers.h diff --git a/pvAccessApp/Makefile b/pvAccessApp/Makefile index a6ebef8..b6071bd 100644 --- a/pvAccessApp/Makefile +++ b/pvAccessApp/Makefile @@ -37,6 +37,8 @@ LIBSRCS += pvAccess.cpp SRC_DIRS += $(PVACCESS)/server INC += serverContext.h +INC += responseHandlers.h +LIBSRCS += responseHandlers.cpp SRC_DIRS += $(PVACCESS)/factory @@ -61,7 +63,6 @@ LIBSRCS += blockingClientTCPTransport.cpp LIBSRCS += blockingTCPConnector.cpp LIBSRCS += blockingServerTCPTransport.cpp LIBSRCS += blockingTCPAcceptor.cpp -LIBSRCS += responseHandlers.cpp LIBRARY = pvAccess pvAccess_LIBS += Com diff --git a/pvAccessApp/remote/blockingTCP.h b/pvAccessApp/remote/blockingTCP.h index 8e11405..c6bd5dc 100644 --- a/pvAccessApp/remote/blockingTCP.h +++ b/pvAccessApp/remote/blockingTCP.h @@ -15,6 +15,7 @@ #include "transportRegistry.h" #include "introspectionRegistry.h" #include "namedLockPattern.h" +#include "inetAddressUtil.h" /* pvData */ #include @@ -474,20 +475,6 @@ namespace epics { void responsiveTransport(); }; - /** - * comparator for osiSockAddr* - */ - struct comp_osiSockAddrPtr - { - bool operator()(osiSockAddr const *a, osiSockAddr const *b) - { - if (a->sa.sa_family < b->sa.sa_family) return true; - if ((a->sa.sa_family == b->sa.sa_family) && (a->ia.sin_addr.s_addr < b->ia.sin_addr.s_addr )) return true; - if ((a->sa.sa_family == b->sa.sa_family) && (a->ia.sin_addr.s_addr == b->ia.sin_addr.s_addr ) && ( a->ia.sin_port < b->ia.sin_port )) return true; - return false; - } - }; - /** * Channel Access TCP connector. * @author Matej Sekoranja diff --git a/pvAccessApp/remote/blockingTCPAcceptor.cpp b/pvAccessApp/remote/blockingTCPAcceptor.cpp index edb93c0..d35b92c 100644 --- a/pvAccessApp/remote/blockingTCPAcceptor.cpp +++ b/pvAccessApp/remote/blockingTCPAcceptor.cpp @@ -9,6 +9,7 @@ #include "blockingTCP.h" #include "remote.h" #include "serverContext.h" +#include "responseHandlers.h" /* pvData */ #include diff --git a/pvAccessApp/remote/remote.h b/pvAccessApp/remote/remote.h index 3dd3720..a63b833 100644 --- a/pvAccessApp/remote/remote.h +++ b/pvAccessApp/remote/remote.h @@ -270,77 +270,6 @@ namespace epics { bool _debug; }; - /** - * @author Matej Sekoranja - * @version $Id: AbstractServerResponseHandler.java,v 1.1 2010/05/03 14:45:39 mrkraimer Exp $ - */ - class AbstractServerResponseHandler : public AbstractResponseHandler { - public: - /** - * @param context - * @param description - */ - AbstractServerResponseHandler(ServerContextImpl* context, - String description) : - AbstractResponseHandler(description), _context(context) { - } - - virtual ~AbstractServerResponseHandler() { - } - protected: - ServerContextImpl* _context; - }; - - /** - * Bad request handler. - * @author Matej Sekoranja - * @version $Id: BadResponse.java,v 1.1 2010/05/03 14:45:39 mrkraimer Exp $ - */ - class BadResponse : public AbstractServerResponseHandler { - public: - /** - * @param context - */ - BadResponse(ServerContextImpl* context) : - AbstractServerResponseHandler(context, "Bad request") { - } - - virtual ~BadResponse() { - } - - virtual void handleResponse(osiSockAddr* responseFrom, - Transport* transport, int8 version, int8 command, - int payloadSize, epics::pvData::ByteBuffer* payloadBuffer); - }; - - /** - * CAS request handler - main handler which dispatches requests to appropriate handlers. - * @author Matej Sekoranja - * @version $Id: ServerResponseHandler.java,v 1.1 2010/05/03 14:45:48 mrkraimer Exp $ - */ - class ServerResponseHandler : public ResponseHandler { - public: - ServerResponseHandler(ServerContextImpl* context); - - virtual ~ServerResponseHandler(); - - virtual void handleResponse(osiSockAddr* responseFrom, - Transport* transport, int8 version, int8 command, - int payloadSize, epics::pvData::ByteBuffer* payloadBuffer); - private: - static const int HANDLER_TABLE_LENGTH = 28; - /** - * Table of response handlers for each command ID. - */ - ResponseHandler** _handlerTable; - - /** - * Context instance. - */ - ServerContextImpl* _context; - - }; - /** * Client (user) of the transport. * @author Matej Sekoranja diff --git a/pvAccessApp/remote/responseHandlers.cpp b/pvAccessApp/server/responseHandlers.cpp similarity index 69% rename from pvAccessApp/remote/responseHandlers.cpp rename to pvAccessApp/server/responseHandlers.cpp index b1820da..745387a 100644 --- a/pvAccessApp/remote/responseHandlers.cpp +++ b/pvAccessApp/server/responseHandlers.cpp @@ -5,6 +5,7 @@ * Author: Miha Vitorovic */ +#include "responseHandlers.h" #include "remote.h" #include "hexDump.h" @@ -61,10 +62,39 @@ namespace epics { BadResponse* badResponse = new BadResponse(context); _handlerTable = new ResponseHandler*[HANDLER_TABLE_LENGTH]; + // TODO add real handlers, as they are developed _handlerTable[0] = badResponse; + _handlerTable[1] = badResponse; + _handlerTable[2] = badResponse; + _handlerTable[3] = badResponse; + _handlerTable[4] = badResponse; + _handlerTable[5] = badResponse; + _handlerTable[6] = badResponse; + _handlerTable[7] = badResponse; + _handlerTable[8] = badResponse; + _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; } ServerResponseHandler::~ServerResponseHandler() { + delete _handlerTable[0]; delete[] _handlerTable; } diff --git a/pvAccessApp/server/responseHandlers.h b/pvAccessApp/server/responseHandlers.h new file mode 100644 index 0000000..ef74d08 --- /dev/null +++ b/pvAccessApp/server/responseHandlers.h @@ -0,0 +1,93 @@ +/* + * responseHandlers.h + * + * Created on: Jan 5, 2011 + * Author: user + */ + +#ifndef RESPONSEHANDLERS_H_ +#define RESPONSEHANDLERS_H_ + +#include "remote.h" + +namespace epics { + namespace pvAccess { + + /** + * @author Matej Sekoranja + * @version $Id: AbstractServerResponseHandler.java,v 1.1 2010/05/03 14:45:39 mrkraimer Exp $ + */ + class AbstractServerResponseHandler : public AbstractResponseHandler { + public: + /** + * @param context + * @param description + */ + AbstractServerResponseHandler(ServerContextImpl* context, + String description) : + AbstractResponseHandler(description), _context(context) { + } + + virtual ~AbstractServerResponseHandler() { + } + protected: + ServerContextImpl* _context; + }; + + /** + * Bad request handler. + * @author Matej Sekoranja + * @version $Id: BadResponse.java,v 1.1 2010/05/03 14:45:39 mrkraimer Exp $ + */ + class BadResponse : public AbstractServerResponseHandler { + public: + /** + * @param context + */ + BadResponse(ServerContextImpl* context) : + AbstractServerResponseHandler(context, "Bad request") { + } + + virtual ~BadResponse() { + } + + virtual void handleResponse(osiSockAddr* responseFrom, + Transport* transport, int8 version, int8 command, + int payloadSize, epics::pvData::ByteBuffer* payloadBuffer); + }; + + /** + * CAS request handler - main handler which dispatches requests to appropriate handlers. + * @author Matej Sekoranja + * @version $Id: ServerResponseHandler.java,v 1.1 2010/05/03 14:45:48 mrkraimer Exp $ + */ + class ServerResponseHandler : public ResponseHandler { + public: + ServerResponseHandler(ServerContextImpl* context); + + virtual ~ServerResponseHandler(); + + virtual void handleResponse(osiSockAddr* responseFrom, + Transport* transport, int8 version, int8 command, + int payloadSize, epics::pvData::ByteBuffer* payloadBuffer); + private: + static const int HANDLER_TABLE_LENGTH = 28; + /** + * Table of response handlers for each command ID. + */ + ResponseHandler** _handlerTable; + + /** + * Context instance. + */ + ServerContextImpl* _context; + + }; + + + + } +} + + +#endif /* RESPONSEHANDLERS_H_ */ diff --git a/pvAccessApp/utils/inetAddressUtil.h b/pvAccessApp/utils/inetAddressUtil.h index 512cd86..6910279 100644 --- a/pvAccessApp/utils/inetAddressUtil.h +++ b/pvAccessApp/utils/inetAddressUtil.h @@ -73,6 +73,36 @@ namespace epics { const String inetAddressToString(const osiSockAddr *addr, bool displayHex = false); + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + /** + * comparators for osiSockAddr + */ + struct comp_osiSockAddrPtr { + bool operator()(osiSockAddr const *a, osiSockAddr const *b) { + if(a->sa.sa_familysa.sa_family) return true; + if((a->sa.sa_family==b->sa.sa_family)&&(a->ia.sin_addr.s_addr + ia.sin_addr.s_addr)) return true; + if((a->sa.sa_family==b->sa.sa_family)&&(a->ia.sin_addr.s_addr + ==b->ia.sin_addr.s_addr)&&(a->ia.sin_port + ia.sin_port)) return true; + return false; + } + }; + + //TODO if unordered map is used instead of map we can use sockAddrAreIdentical routine from osiSock.h + struct comp_osiSockAddr { + bool operator()(osiSockAddr const *a, osiSockAddr const *b) { + if(a->sa.sa_familysa.sa_family) return true; + if((a->sa.sa_family==b->sa.sa_family)&&(a->ia.sin_addr.s_addr + ia.sin_addr.s_addr)) return true; + if((a->sa.sa_family==b->sa.sa_family)&&(a->ia.sin_addr.s_addr + ==b->ia.sin_addr.s_addr)&&(a->ia.sin_port + ia.sin_port)) return true; + return false; + } + }; + } } diff --git a/pvAccessApp/utils/transportRegistry.h b/pvAccessApp/utils/transportRegistry.h index a51f967..bf2bf0e 100644 --- a/pvAccessApp/utils/transportRegistry.h +++ b/pvAccessApp/utils/transportRegistry.h @@ -25,16 +25,6 @@ namespace epics { namespace pvAccess { class Transport; //TODO if unordered map is used instead of map we can use sockAddrAreIdentical routine from osiSock.h -struct comp_osiSockAddr -{ - bool operator()(osiSockAddr const *a, osiSockAddr const *b) - { - if (a->sa.sa_family < b->sa.sa_family) return true; - if ((a->sa.sa_family == b->sa.sa_family) && (a->ia.sin_addr.s_addr < b->ia.sin_addr.s_addr )) return true; - if ((a->sa.sa_family == b->sa.sa_family) && (a->ia.sin_addr.s_addr == b->ia.sin_addr.s_addr ) && ( a->ia.sin_port < b->ia.sin_port )) return true; - return false; - } -}; typedef std::map prioritiesMap_t; typedef std::map transportsMap_t;