Mercurial > hg > orthanc
diff OrthancFramework/Sources/HttpServer/IHttpHandler.cpp @ 4329:9dc0e42f868b
moving static methods from HttpToolbox to IHttpHandler
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 25 Nov 2020 13:46:49 +0100 |
parents | |
children | a01b1c9cbef4 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancFramework/Sources/HttpServer/IHttpHandler.cpp Wed Nov 25 13:46:49 2020 +0100 @@ -0,0 +1,131 @@ +/** + * Orthanc - A Lightweight, RESTful DICOM Store + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/>. + **/ + + +#include "../PrecompiledHeaders.h" +#include "IHttpHandler.h" + +#include "HttpOutput.h" +#include "HttpToolbox.h" +#include "StringHttpOutput.h" + +static const char* LOCALHOST = "127.0.0.1"; + + +namespace Orthanc +{ + bool IHttpHandler::SimpleGet(std::string& result, + IHttpHandler& handler, + RequestOrigin origin, + const std::string& uri, + const IHttpHandler::Arguments& httpHeaders) + { + UriComponents curi; + IHttpHandler::GetArguments getArguments; + HttpToolbox::ParseGetQuery(curi, getArguments, uri.c_str()); + + StringHttpOutput stream; + HttpOutput http(stream, false /* no keep alive */); + + if (handler.Handle(http, origin, LOCALHOST, "", HttpMethod_Get, curi, + httpHeaders, getArguments, NULL /* no body for GET */, 0)) + { + stream.GetOutput(result); + return true; + } + else + { + return false; + } + } + + + static bool SimplePostOrPut(std::string& result, + IHttpHandler& handler, + RequestOrigin origin, + HttpMethod method, + const std::string& uri, + const void* bodyData, + size_t bodySize, + const IHttpHandler::Arguments& httpHeaders) + { + IHttpHandler::GetArguments getArguments; // No GET argument for POST/PUT + + UriComponents curi; + Toolbox::SplitUriComponents(curi, uri); + + StringHttpOutput stream; + HttpOutput http(stream, false /* no keep alive */); + + if (handler.Handle(http, origin, LOCALHOST, "", method, curi, + httpHeaders, getArguments, bodyData, bodySize)) + { + stream.GetOutput(result); + return true; + } + else + { + return false; + } + } + + + bool IHttpHandler::SimplePost(std::string& result, + IHttpHandler& handler, + RequestOrigin origin, + const std::string& uri, + const void* bodyData, + size_t bodySize, + const IHttpHandler::Arguments& httpHeaders) + { + return SimplePostOrPut(result, handler, origin, HttpMethod_Post, uri, bodyData, bodySize, httpHeaders); + } + + + bool IHttpHandler::SimplePut(std::string& result, + IHttpHandler& handler, + RequestOrigin origin, + const std::string& uri, + const void* bodyData, + size_t bodySize, + const IHttpHandler::Arguments& httpHeaders) + { + return SimplePostOrPut(result, handler, origin, HttpMethod_Put, uri, bodyData, bodySize, httpHeaders); + } + + + bool IHttpHandler::SimpleDelete(IHttpHandler& handler, + RequestOrigin origin, + const std::string& uri, + const IHttpHandler::Arguments& httpHeaders) + { + UriComponents curi; + Toolbox::SplitUriComponents(curi, uri); + + IHttpHandler::GetArguments getArguments; // No GET argument for DELETE + + StringHttpOutput stream; + HttpOutput http(stream, false /* no keep alive */); + + return handler.Handle(http, origin, LOCALHOST, "", HttpMethod_Delete, curi, + httpHeaders, getArguments, NULL /* no body for DELETE */, 0); + } +}