@@ -95,10 +95,12 @@ struct http_async_connection
95
95
this ->method = method;
96
96
boost::uint16_t port_ = port (request);
97
97
string_type host_ = host (request);
98
+ boost::uint16_t source_port = request.getSourcePort ();
99
+
98
100
resolve_ (resolver_, host_, port_,
99
101
request_strand_.wrap (boost::bind (
100
102
&this_type::handle_resolved, this_type::shared_from_this (),
101
- host_, port_, get_body, callback,
103
+ host_, port_, source_port, get_body, callback,
102
104
generator, boost::arg<1 >(), boost::arg<2 >())));
103
105
if (timeout_ > 0 ) {
104
106
timer_.expires_from_now (boost::posix_time::seconds (timeout_));
@@ -129,7 +131,7 @@ struct http_async_connection
129
131
is_timedout_ = true ;
130
132
}
131
133
132
- void handle_resolved (string_type host, boost::uint16_t port, bool get_body,
134
+ void handle_resolved (string_type host, boost::uint16_t port, boost:: uint16_t source_port, bool get_body,
133
135
body_callback_function_type callback,
134
136
body_generator_function_type generator,
135
137
boost::system::error_code const & ec,
@@ -141,10 +143,10 @@ struct http_async_connection
141
143
resolver_iterator iter = boost::begin (endpoint_range);
142
144
asio::ip::tcp::endpoint endpoint (iter->endpoint ().address (), port);
143
145
delegate_->connect (
144
- endpoint, host,
146
+ endpoint, host, source_port,
145
147
request_strand_.wrap (boost::bind (
146
148
&this_type::handle_connected, this_type::shared_from_this (), host,
147
- port, get_body, callback, generator,
149
+ port, source_port, get_body, callback, generator,
148
150
std::make_pair (++iter, resolver_iterator ()),
149
151
placeholders::error)));
150
152
} else {
@@ -154,7 +156,7 @@ struct http_async_connection
154
156
}
155
157
}
156
158
157
- void handle_connected (string_type host, boost::uint16_t port, bool get_body,
159
+ void handle_connected (string_type host, boost::uint16_t port, boost:: uint16_t source_port, bool get_body,
158
160
body_callback_function_type callback,
159
161
body_generator_function_type generator,
160
162
resolver_iterator_pair endpoint_range,
@@ -174,10 +176,10 @@ struct http_async_connection
174
176
resolver_iterator iter = boost::begin (endpoint_range);
175
177
asio::ip::tcp::endpoint endpoint (iter->endpoint ().address (), port);
176
178
delegate_->connect (
177
- endpoint, host,
179
+ endpoint, host, source_port,
178
180
request_strand_.wrap (boost::bind (
179
181
&this_type::handle_connected, this_type::shared_from_this (),
180
- host, port, get_body, callback, generator,
182
+ host, port, source_port, get_body, callback, generator,
181
183
std::make_pair (++iter, resolver_iterator ()),
182
184
placeholders::error)));
183
185
} else {
0 commit comments