Merge branch 'apohl79-master'
This commit is contained in:
commit
c5ea2b4ab5
|
@ -70,8 +70,9 @@ public:
|
||||||
|
|
||||||
/// Start the first asynchronous operation for the connection.
|
/// Start the first asynchronous operation for the connection.
|
||||||
void start() {
|
void start() {
|
||||||
handler_ = std::make_shared<http2_handler>(socket_.get_io_service(),
|
handler_ = std::make_shared<http2_handler>(
|
||||||
[this]() { do_write(); }, mux_);
|
socket_.get_io_service(), socket_.lowest_layer().remote_endpoint(),
|
||||||
|
[this]() { do_write(); }, mux_);
|
||||||
if (handler_->start() != 0) {
|
if (handler_->start() != 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,6 +136,9 @@ int on_frame_recv_callback(nghttp2_session *session, const nghttp2_frame *frame,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto& req = strm->request().impl();
|
||||||
|
req.remote_endpoint(handler->remote_endpoint());
|
||||||
|
|
||||||
handler->call_on_request(*strm);
|
handler->call_on_request(*strm);
|
||||||
|
|
||||||
if (frame->hd.flags & NGHTTP2_FLAG_END_STREAM) {
|
if (frame->hd.flags & NGHTTP2_FLAG_END_STREAM) {
|
||||||
|
@ -225,8 +228,9 @@ int on_frame_not_send_callback(nghttp2_session *session,
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
http2_handler::http2_handler(boost::asio::io_service &io_service,
|
http2_handler::http2_handler(boost::asio::io_service &io_service,
|
||||||
|
boost::asio::ip::tcp::endpoint ep,
|
||||||
connection_write writefun, serve_mux &mux)
|
connection_write writefun, serve_mux &mux)
|
||||||
: writefun_(writefun), mux_(mux), io_service_(io_service),
|
: writefun_(writefun), mux_(mux), io_service_(io_service), remote_ep_(ep),
|
||||||
session_(nullptr), buf_(nullptr), buflen_(0), inside_callback_(false),
|
session_(nullptr), buf_(nullptr), buflen_(0), inside_callback_(false),
|
||||||
tstamp_cached_(time(nullptr)),
|
tstamp_cached_(time(nullptr)),
|
||||||
formatted_date_(util::http_date(tstamp_cached_)) {}
|
formatted_date_(util::http_date(tstamp_cached_)) {}
|
||||||
|
@ -449,6 +453,10 @@ response *http2_handler::push_promise(boost::system::error_code &ec,
|
||||||
|
|
||||||
boost::asio::io_service &http2_handler::io_service() { return io_service_; }
|
boost::asio::io_service &http2_handler::io_service() { return io_service_; }
|
||||||
|
|
||||||
|
const boost::asio::ip::tcp::endpoint &http2_handler::remote_endpoint() {
|
||||||
|
return remote_ep_;
|
||||||
|
}
|
||||||
|
|
||||||
callback_guard::callback_guard(http2_handler &h) : handler(h) {
|
callback_guard::callback_guard(http2_handler &h) : handler(h) {
|
||||||
handler.enter_callback();
|
handler.enter_callback();
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,8 @@ using connection_write = std::function<void(void)>;
|
||||||
|
|
||||||
class http2_handler : public std::enable_shared_from_this<http2_handler> {
|
class http2_handler : public std::enable_shared_from_this<http2_handler> {
|
||||||
public:
|
public:
|
||||||
http2_handler(boost::asio::io_service &io_service, connection_write writefun,
|
http2_handler(boost::asio::io_service &io_service,
|
||||||
|
boost::asio::ip::tcp::endpoint ep, connection_write writefun,
|
||||||
serve_mux &mux);
|
serve_mux &mux);
|
||||||
|
|
||||||
~http2_handler();
|
~http2_handler();
|
||||||
|
@ -89,6 +90,8 @@ public:
|
||||||
|
|
||||||
boost::asio::io_service &io_service();
|
boost::asio::io_service &io_service();
|
||||||
|
|
||||||
|
const boost::asio::ip::tcp::endpoint &remote_endpoint();
|
||||||
|
|
||||||
const std::string &http_date();
|
const std::string &http_date();
|
||||||
|
|
||||||
template <size_t N>
|
template <size_t N>
|
||||||
|
@ -152,6 +155,7 @@ private:
|
||||||
connection_write writefun_;
|
connection_write writefun_;
|
||||||
serve_mux &mux_;
|
serve_mux &mux_;
|
||||||
boost::asio::io_service &io_service_;
|
boost::asio::io_service &io_service_;
|
||||||
|
boost::asio::ip::tcp::endpoint remote_ep_;
|
||||||
nghttp2_session *session_;
|
nghttp2_session *session_;
|
||||||
const uint8_t *buf_;
|
const uint8_t *buf_;
|
||||||
std::size_t buflen_;
|
std::size_t buflen_;
|
||||||
|
|
|
@ -50,6 +50,10 @@ void request::on_data(data_cb cb) const {
|
||||||
|
|
||||||
request_impl &request::impl() const { return *impl_; }
|
request_impl &request::impl() const { return *impl_; }
|
||||||
|
|
||||||
|
const boost::asio::ip::tcp::endpoint &request::remote_endpoint() const {
|
||||||
|
return impl_->remote_endpoint();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace server
|
} // namespace server
|
||||||
} // namespace asio_http2
|
} // namespace asio_http2
|
||||||
} // namespace nghttp2
|
} // namespace nghttp2
|
||||||
|
|
|
@ -54,6 +54,14 @@ void request_impl::call_on_data(const uint8_t *data, std::size_t len) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const boost::asio::ip::tcp::endpoint &request_impl::remote_endpoint() const {
|
||||||
|
return remote_ep_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void request_impl::remote_endpoint(boost::asio::ip::tcp::endpoint ep) {
|
||||||
|
remote_ep_ = ep;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace server
|
} // namespace server
|
||||||
} // namespace asio_http2
|
} // namespace asio_http2
|
||||||
} // namespace nghttp2
|
} // namespace nghttp2
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "nghttp2_config.h"
|
#include "nghttp2_config.h"
|
||||||
|
|
||||||
#include <nghttp2/asio_http2_server.h>
|
#include <nghttp2/asio_http2_server.h>
|
||||||
|
#include <boost/asio/ip/tcp.hpp>
|
||||||
|
|
||||||
namespace nghttp2 {
|
namespace nghttp2 {
|
||||||
namespace asio_http2 {
|
namespace asio_http2 {
|
||||||
|
@ -54,12 +55,16 @@ public:
|
||||||
void stream(class stream *s);
|
void stream(class stream *s);
|
||||||
void call_on_data(const uint8_t *data, std::size_t len);
|
void call_on_data(const uint8_t *data, std::size_t len);
|
||||||
|
|
||||||
|
const boost::asio::ip::tcp::endpoint &remote_endpoint() const;
|
||||||
|
void remote_endpoint(boost::asio::ip::tcp::endpoint ep);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class stream *strm_;
|
class stream *strm_;
|
||||||
header_map header_;
|
header_map header_;
|
||||||
std::string method_;
|
std::string method_;
|
||||||
uri_ref uri_;
|
uri_ref uri_;
|
||||||
data_cb on_data_cb_;
|
data_cb on_data_cb_;
|
||||||
|
boost::asio::ip::tcp::endpoint remote_ep_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace server
|
} // namespace server
|
||||||
|
|
|
@ -59,6 +59,9 @@ public:
|
||||||
// Application must not call this directly.
|
// Application must not call this directly.
|
||||||
request_impl &impl() const;
|
request_impl &impl() const;
|
||||||
|
|
||||||
|
// Returns the remote endpoint of the request
|
||||||
|
const boost::asio::ip::tcp::endpoint &remote_endpoint() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<request_impl> impl_;
|
std::unique_ptr<request_impl> impl_;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue