- diff --git a/src/http/client/client.cr b/src/http/client/client.cr
- index 605dc66..608ee81 100644
- --- a/src/http/client/client.cr
- +++ b/src/http/client/client.cr
- @@ -34,12 +34,12 @@ class HTTP::Client
- end
-
- {% for method in %w(get post put head delete patch) %}
- - def {{method.id}}(path, headers = nil, body = nil)
- - exec {{method.upcase}}, path, headers, body
- + def {{method.id}}(path, headers = nil, body = nil, src = nil, dst = nil
- + exec {{method.upcase}}, path, headers, body, src, dst
- end
-
- - def self.{{method.id}}(url, headers = nil, body = nil)
- - exec {{method.upcase}}, url, headers, body
- + def self.{{method.id}}(url, headers = nil, body = nil, src = nil, dst = nil
- + exec {{method.upcase}}, url, headers, body, src, dst
- end
- {% end %}
-
- @@ -64,8 +64,8 @@ class HTTP::Client
- HTTP::Response.from_io(socket)
- end
-
- - def exec(method : String, path, headers = nil, body = nil)
- - exec new_request method, path, headers, body
- + def exec(method : String, path, headers = nil, body = nil, src = nil, dst = nil
- + exec new_request method, path, headers, body, src, dst
- end
-
- def close
- @@ -76,10 +76,10 @@ class HTTP::Client
- @socket = nil
- end
-
- - private def new_request(method, path, headers, body)
- + private def new_request(method, path, headers, body, src, dst)
- headers ||= HTTP::Headers.new
- headers["Host"] ||= host_header
- - request = HTTP::Request.new method, path, headers, body
- + request = HTTP::Request.new method, path, headers, body, src, dst
- @before_request.try &.call(request)
- request
- end
- @@ -107,9 +107,9 @@ class HTTP::Client
- end
- end
-
- - def self.exec(method, url, headers = nil, body = nil)
- + def self.exec(method, url, headers = nil, body = nil, src = nil, dst = nil
- exec(url) do |client, path|
- - client.exec method, path, headers, body
- + client.exec method, path, headers, body, src, dst
- end
- end
-
- diff --git a/src/http/request.cr b/src/http/request.cr
- index 2fb7a04..0a25c43 100644
- --- a/src/http/request.cr
- +++ b/src/http/request.cr
- @@ -7,8 +7,11 @@ class HTTP::Request
- getter headers
- getter body
- getter version
- + getter src
- + getter dst
-
- - def initialize(@method : String, @path, @headers = Headers.new : Headers, @body = nil, @version = "HTTP/1.1")
- + def initialize(@method : String, @path, @headers = Headers.new : Headers, @body = nil, @version = "HTTP/1.1",
- + @src = nil, @dst = nil)
- if body = @body
- @headers["Content-Length"] = body.bytesize.to_s
- elsif @method == "POST" || @method == "PUT"
- @@ -42,12 +45,14 @@ class HTTP::Request
- end
-
- def self.from_io(io)
- + src = io.peeraddr
- + dst = io.addr
- request_line = io.gets.not_nil!
- request_line =~ /\A(\w+)\s([^\s]+)\s(HTTP\/\d\.\d)\r?\n\Z/
- method, path, http_version = $1, $2, $3
-
- HTTP.parse_headers_and_body(io) do |headers, body|
- - return new method, path, headers, body, http_version
- + return new method, path, headers, body, http_version, src, dst
- end
-
- raise "unexpected end of http request"