Skip to content

Commit

Permalink
Merge branch 'apohl79-master'
Browse files Browse the repository at this point in the history
  • Loading branch information
tatsuhiro-t committed Dec 19, 2015
2 parents 5a2d755 + e71948d commit c5ea2b4
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 4 deletions.
5 changes: 3 additions & 2 deletions src/asio_server_connection.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,9 @@ class connection : public std::enable_shared_from_this<connection<socket_type>>,

/// 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;
}
Expand Down
10 changes: 9 additions & 1 deletion src/asio_server_http2_handler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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_)) {}
Expand Down Expand Up @@ -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();
}
Expand Down
6 changes: 5 additions & 1 deletion src/asio_server_http2_handler.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -89,6 +90,8 @@ class http2_handler : public std::enable_shared_from_this<http2_handler> {

boost::asio::io_service &io_service();

const boost::asio::ip::tcp::endpoint &remote_endpoint();

const std::string &http_date();

template <size_t N>
Expand Down Expand Up @@ -152,6 +155,7 @@ class http2_handler : public std::enable_shared_from_this<http2_handler> {
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_;
Expand Down
4 changes: 4 additions & 0 deletions src/asio_server_request.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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
8 changes: 8 additions & 0 deletions src/asio_server_request_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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
5 changes: 5 additions & 0 deletions src/asio_server_request_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -54,12 +55,16 @@ class request_impl {
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
Expand Down
3 changes: 3 additions & 0 deletions src/includes/nghttp2/asio_http2_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ class request {
// 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_;
};
Expand Down

0 comments on commit c5ea2b4

Please sign in to comment.