Skip to content

Commit 7e06ac1

Browse files
committed
Merge branch 'akonskarm-master'
2 parents e5b3f9a + c6d8c40 commit 7e06ac1

4 files changed

Lines changed: 52 additions & 12 deletions

File tree

src/asio_client_session.cc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,15 @@ session::session(boost::asio::io_service &io_service, const std::string &host,
4444
impl_->start_resolve(host, service);
4545
}
4646

47+
session::session(boost::asio::io_service &io_service,
48+
const boost::asio::ip::tcp::endpoint &local_endpoint,
49+
const std::string &host, const std::string &service)
50+
: impl_(std::make_shared<session_tcp_impl>(
51+
io_service, local_endpoint, host, service,
52+
boost::posix_time::seconds(60))) {
53+
impl_->start_resolve(host, service);
54+
}
55+
4756
session::session(boost::asio::io_service &io_service, const std::string &host,
4857
const std::string &service,
4958
const boost::posix_time::time_duration &connect_timeout)
@@ -52,6 +61,15 @@ session::session(boost::asio::io_service &io_service, const std::string &host,
5261
impl_->start_resolve(host, service);
5362
}
5463

64+
session::session(boost::asio::io_service &io_service,
65+
const boost::asio::ip::tcp::endpoint &local_endpoint,
66+
const std::string &host, const std::string &service,
67+
const boost::posix_time::time_duration &connect_timeout)
68+
: impl_(std::make_shared<session_tcp_impl>(io_service, local_endpoint, host,
69+
service, connect_timeout)) {
70+
impl_->start_resolve(host, service);
71+
}
72+
5573
session::session(boost::asio::io_service &io_service,
5674
boost::asio::ssl::context &tls_ctx, const std::string &host,
5775
const std::string &service)

src/asio_client_session_tcp_impl.cc

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,31 @@ session_tcp_impl::session_tcp_impl(
3434
const boost::posix_time::time_duration &connect_timeout)
3535
: session_impl(io_service, connect_timeout), socket_(io_service) {}
3636

37+
session_tcp_impl::session_tcp_impl(
38+
boost::asio::io_service &io_service,
39+
const boost::asio::ip::tcp::endpoint &local_endpoint,
40+
const std::string &host, const std::string &service,
41+
const boost::posix_time::time_duration &connect_timeout)
42+
: session_impl(io_service, connect_timeout),
43+
socket_(io_service, local_endpoint) {}
44+
3745
session_tcp_impl::~session_tcp_impl() {}
3846

3947
void session_tcp_impl::start_connect(tcp::resolver::iterator endpoint_it) {
4048
auto self = shared_from_this();
41-
boost::asio::async_connect(socket_, endpoint_it,
42-
[self](const boost::system::error_code &ec,
43-
tcp::resolver::iterator endpoint_it) {
44-
if (self->stopped()) {
45-
return;
46-
}
49+
socket_.async_connect(
50+
*endpoint_it, [self, endpoint_it](const boost::system::error_code &ec) {
51+
if (self->stopped()) {
52+
return;
53+
}
4754

48-
if (ec) {
49-
self->not_connected(ec);
50-
return;
51-
}
55+
if (ec) {
56+
self->not_connected(ec);
57+
return;
58+
}
5259

53-
self->connected(endpoint_it);
54-
});
60+
self->connected(endpoint_it);
61+
});
5562
}
5663

5764
tcp::socket &session_tcp_impl::socket() { return socket_; }

src/asio_client_session_tcp_impl.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ class session_tcp_impl : public session_impl {
4040
session_tcp_impl(boost::asio::io_service &io_service, const std::string &host,
4141
const std::string &service,
4242
const boost::posix_time::time_duration &connect_timeout);
43+
session_tcp_impl(boost::asio::io_service &io_service,
44+
const boost::asio::ip::tcp::endpoint &local_endpoint,
45+
const std::string &host, const std::string &service,
46+
const boost::posix_time::time_duration &connect_timeout);
4347
virtual ~session_tcp_impl();
4448

4549
virtual void start_connect(tcp::resolver::iterator endpoint_it);

src/includes/nghttp2/asio_http2_client.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,24 @@ class session {
150150
session(boost::asio::io_service &io_service, const std::string &host,
151151
const std::string &service);
152152

153+
// Same as previous but with pegged local endpoint
154+
session(boost::asio::io_service &io_service,
155+
const boost::asio::ip::tcp::endpoint &local_endpoint,
156+
const std::string &host, const std::string &service);
157+
153158
// Starts HTTP/2 session by connecting to |host| and |service|
154159
// (e.g., "80") using clear text TCP connection with given connect
155160
// timeout.
156161
session(boost::asio::io_service &io_service, const std::string &host,
157162
const std::string &service,
158163
const boost::posix_time::time_duration &connect_timeout);
159164

165+
// Same as previous but with pegged local endpoint
166+
session(boost::asio::io_service &io_service,
167+
const boost::asio::ip::tcp::endpoint &local_endpoint,
168+
const std::string &host, const std::string &service,
169+
const boost::posix_time::time_duration &connect_timeout);
170+
160171
// Starts HTTP/2 session by connecting to |host| and |service|
161172
// (e.g., "443") using encrypted SSL/TLS connection with connect
162173
// timeout 60 seconds.

0 commit comments

Comments
 (0)