Skip to content

Commit 76a2dd2

Browse files
authored
Merge pull request #723 from evoskuil/master
Add send_redirect.
2 parents 2d73549 + 23973e5 commit 76a2dd2

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

include/bitcoin/network/protocols/protocol_http.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ class BCT_API protocol_http
8686
virtual void send_method_not_allowed(const http::request& request={}) NOEXCEPT;
8787
virtual void send_internal_server_error(const code& reason,
8888
const http::request& request={}) NOEXCEPT;
89+
virtual void send_redirect(const system::wallet::uri& uri,
90+
http::status status_3xx, const http::request& request={}) NOEXCEPT;
8991
virtual void send_bad_target(const code& reason={},
9092
const http::request& request={}) NOEXCEPT;
9193

src/protocols/protocol_http.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,25 @@ void protocol_http::send_internal_server_error(const code& reason,
175175
SEND(std::move(out), handle_complete, _1, error::internal_server_error);
176176
}
177177

178+
// Closes channel.
179+
void protocol_http::send_redirect(const system::wallet::uri& uri,
180+
status status_3xx, const request& request) NOEXCEPT
181+
{
182+
BC_ASSERT(stranded());
183+
BC_ASSERT(status_3xx != status::not_modified);
184+
BC_ASSERT(300 <= to_value(status_3xx) && to_value(status_3xx) <= 399);
185+
std::string details{ "from=" };
186+
details += request.target();
187+
const auto code = status_3xx;
188+
const auto media = to_media_type(request[field::accept]);
189+
response out{ code, request.version() };
190+
add_common_headers(out, request, true);
191+
out.set(field::location, uri.encoded());
192+
out.body() = string_status(code, out.reason(), media, details);
193+
out.prepare_payload();
194+
SEND(std::move(out), handle_complete, _1, error::success);
195+
}
196+
178197
void protocol_http::send_bad_target(const code& reason,
179198
const request& request) NOEXCEPT
180199
{

0 commit comments

Comments
 (0)