Provide methods that output error headers into the socket

Signed-off-by: Jan Dageförde <jan.dagefoerde@googlemail.com>
Change-Id: Ia354248b824662fa4b47acee61ac444832eeb302
This commit is contained in:
Jan Dageförde 2020-10-26 13:45:23 +01:00 committed by Muhammet Kara
parent 57bb7cb51d
commit c543e44150
3 changed files with 69 additions and 0 deletions

View file

@ -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 \

41
net/HttpHelper.cpp Normal file
View file

@ -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 <config.h>
#include "HttpHelper.hpp"
#include <Poco/MemoryStream.h>
#include <Poco/Net/HTTPRequest.h>
#include <Poco/Net/HTTPResponse.h>
#include <common/Common.hpp>
#include <common/Util.hpp>
#include <net/Socket.hpp>
namespace HttpHelper
{
void sendError(int errorCode, const std::shared_ptr<StreamSocket>& 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<StreamSocket>& 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: */

26
net/HttpHelper.hpp Normal file
View file

@ -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<StreamSocket>& 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<StreamSocket>& socket,
const std::string& body = std::string(),
const std::string& extraHeader = std::string());
} // namespace HttpHelper
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */