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