diff --git a/Makefile.am b/Makefile.am index bbdb3fd97..ca397f880 100644 --- a/Makefile.am +++ b/Makefile.am @@ -102,6 +102,7 @@ shared_sources = common/FileUtil.cpp \ common/Util.cpp \ common/Authorization.cpp \ net/DelaySocket.cpp \ + net/HttpHelper.cpp \ net/Socket.cpp if ENABLE_SSL shared_sources += net/Ssl.cpp @@ -263,6 +264,7 @@ shared_headers = common/Common.hpp \ common/SpookyV2.h \ net/DelaySocket.hpp \ net/FakeSocket.hpp \ + net/HttpHelper.hpp \ net/ServerSocket.hpp \ net/Socket.hpp \ net/WebSocketHandler.hpp \ diff --git a/net/HttpHelper.cpp b/net/HttpHelper.cpp new file mode 100644 index 000000000..1c2db511e --- /dev/null +++ b/net/HttpHelper.cpp @@ -0,0 +1,41 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include "HttpHelper.hpp" + +#include +#include +#include +#include +#include +#include + +namespace HttpHelper +{ +void sendError(int errorCode, const std::shared_ptr& socket, const std::string& body, + const std::string& extraHeader) +{ + std::ostringstream oss; + oss << "HTTP/1.1 " << errorCode << "\r\n" + << "Date: " << Util::getHttpTimeNow() << "\r\n" + << "User-Agent: " << WOPI_AGENT_STRING << "\r\n" + << "Content-Length: " << body.size() << "\r\n" + << extraHeader << "\r\n" + << body; + socket->send(oss.str()); +} + +void sendErrorAndShutdown(int errorCode, const std::shared_ptr& socket, + const std::string& body, const std::string& extraHeader) +{ + sendError(errorCode, socket, body, extraHeader); + socket->shutdown(); +} +} // namespace HttpHelper +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/net/HttpHelper.hpp b/net/HttpHelper.hpp new file mode 100644 index 000000000..00c0e89d0 --- /dev/null +++ b/net/HttpHelper.hpp @@ -0,0 +1,26 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include "Socket.hpp" + +namespace HttpHelper +{ +/// Write headers and body for an error response. +void sendError(int errorCode, const std::shared_ptr& socket, + const std::string& body = std::string(), + const std::string& extraHeader = std::string()); + +/// Write headers and body for an error response. Afterwards, shutdown the socket. +void sendErrorAndShutdown(int errorCode, const std::shared_ptr& socket, + const std::string& body = std::string(), + const std::string& extraHeader = std::string()); + +} // namespace HttpHelper + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */