//////////////////////////////////////////////////////////////////////////////// /// @brief http server implementation /// /// @file /// /// DISCLAIMER /// /// Copyright 2010-2011 triagens GmbH, Cologne, Germany /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. /// You may obtain a copy of the License at /// /// http://www.apache.org/licenses/LICENSE-2.0 /// /// Unless required by applicable law or agreed to in writing, software /// distributed under the License is distributed on an "AS IS" BASIS, /// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. /// See the License for the specific language governing permissions and /// limitations under the License. /// /// Copyright holder is triAGENS GmbH, Cologne, Germany /// /// @author Dr. Frank Celler /// @author Achim Brandt /// @author Copyright 2009-2011, triAGENS GmbH, Cologne, Germany //////////////////////////////////////////////////////////////////////////////// #ifndef TRIAGENS_FYN_HTTP_SERVER_HTTP_SERVER_IMPL_H #define TRIAGENS_FYN_HTTP_SERVER_HTTP_SERVER_IMPL_H 1 #include "HttpServer/HttpServer.h" #include "GeneralServer/GeneralServerDispatcher.h" #include "HttpServer/HttpCommTask.h" #include "HttpServer/ServiceUnavailableHandler.h" namespace triagens { namespace rest { class HttpHandlerFactory; class HttpListenTask; class HttpRequest; //////////////////////////////////////////////////////////////////////////////// /// @brief http server implementation //////////////////////////////////////////////////////////////////////////////// class HttpServerImpl : public GeneralServerDispatcher, virtual public HttpServer { public: //////////////////////////////////////////////////////////////////////////////// /// @brief constructs a new http server //////////////////////////////////////////////////////////////////////////////// HttpServerImpl (Scheduler* scheduler, Dispatcher* dispatcher) : GeneralServerDispatcher(scheduler, dispatcher), _closeWithoutKeepAlive(false) { } public: //////////////////////////////////////////////////////////////////////////////// /// {@inheritDoc} //////////////////////////////////////////////////////////////////////////////// void activateMaintenance () { GeneralServer::activateMaintenance(); } //////////////////////////////////////////////////////////////////////////////// /// {@inheritDoc} //////////////////////////////////////////////////////////////////////////////// void activateMaintenance (MaintenanceCallback* callback) { GeneralServer::activateMaintenance(); _handlerFactory->addMaintenanceCallback(callback); } //////////////////////////////////////////////////////////////////////////////// /// {@inheritDoc} //////////////////////////////////////////////////////////////////////////////// void deactivateMaintenance () { GeneralServer::deactivateMaintenance(); } //////////////////////////////////////////////////////////////////////////////// /// {@inheritDoc} //////////////////////////////////////////////////////////////////////////////// size_t numberActiveHandlers () { return _handlerFactory == 0 ? 0 : _handlerFactory->numberActiveHandlers(); } //////////////////////////////////////////////////////////////////////////////// /// {@inheritDoc} //////////////////////////////////////////////////////////////////////////////// bool getCloseWithoutKeepAlive () const { return _closeWithoutKeepAlive; } //////////////////////////////////////////////////////////////////////////////// /// {@inheritDoc} //////////////////////////////////////////////////////////////////////////////// void setCloseWithoutKeepAlive (bool value = true) { _closeWithoutKeepAlive = value; } //////////////////////////////////////////////////////////////////////////////// /// {@inheritDoc} //////////////////////////////////////////////////////////////////////////////// void setHandlerFactory (HttpHandlerFactory* factory) { GeneralServer::setHandlerFactory(factory); } public: //////////////////////////////////////////////////////////////////////////////// /// @brief creates a maintenance request //////////////////////////////////////////////////////////////////////////////// HttpRequest* createMaintenanceRequest (char const* ptr, size_t length) const { return new HttpRequest(ptr, length); } //////////////////////////////////////////////////////////////////////////////// /// @brief creates a maintenance handler //////////////////////////////////////////////////////////////////////////////// HttpHandler* createMaintenanceHandler () const { return new ServiceUnavailableHandler(); } private: bool _closeWithoutKeepAlive; }; } } #endif