forward-proxy 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +2 -1
- data/exe/forward-proxy +1 -1
- data/lib/forward_proxy/server.rb +9 -6
- data/lib/forward_proxy/thread_pool.rb +9 -4
- data/lib/forward_proxy/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4251c1e0cac2b15b884b54ee293a1822ee955347f3c488b558c0f82cf50ddfe
|
4
|
+
data.tar.gz: 51a472149c1c0f04ad12edc90b0084760417e03b8d17889b27ee11ceb66ebc0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f930317afad701fd29d5db2a720ce8d1ed7d9039116baa81c667f873ba709d252fe2c2286920258d522597279f9997c8fd284100640f966e14599f3d7b2df563
|
7
|
+
data.tar.gz: c5ca8e7c0c5238c5a0d09d9fc17a8eb920b014598e42a5aace0780663e19d52a8c850eab28be1cf8fa2a2449521a425d0b3b33e5546e7d6db1a14ea9610721ac
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -38,7 +38,8 @@ forward-proxy
|
|
38
38
|
Usage: forward-proxy [options]
|
39
39
|
-p, --port=PORT Bind to specified port. Default: 9292
|
40
40
|
-b, --binding=BINDING Bind to the specified ip. Default: 127.0.0.1
|
41
|
-
-t, --
|
41
|
+
-t, --timeout=TIMEOUT Specify the connection timeout in seconds. Default: 300
|
42
|
+
-c, --threads=THREADS Specify the number of client threads. Default: 128
|
42
43
|
-h, --help Prints this help.
|
43
44
|
```
|
44
45
|
|
data/exe/forward-proxy
CHANGED
@@ -16,7 +16,7 @@ OptionParser.new do |parser|
|
|
16
16
|
end
|
17
17
|
|
18
18
|
parser.on("-tTIMEOUT", "--timeout=TIMEOUT", Integer,
|
19
|
-
"Specify the connection
|
19
|
+
"Specify the connection timeout in seconds. Default: 300") do |threads|
|
20
20
|
options[:timeout] = threads
|
21
21
|
end
|
22
22
|
|
data/lib/forward_proxy/server.rb
CHANGED
@@ -12,7 +12,7 @@ module ForwardProxy
|
|
12
12
|
class Server
|
13
13
|
attr_reader :bind_address, :bind_port, :logger, :timeout
|
14
14
|
|
15
|
-
def initialize(bind_address: "127.0.0.1", bind_port: 9292, threads:
|
15
|
+
def initialize(bind_address: "127.0.0.1", bind_port: 9292, threads: 128, timeout: 300, logger: default_logger)
|
16
16
|
@bind_address = bind_address
|
17
17
|
@bind_port = bind_port
|
18
18
|
@logger = logger
|
@@ -37,7 +37,7 @@ module ForwardProxy
|
|
37
37
|
|
38
38
|
case req.request_method
|
39
39
|
when METHOD_CONNECT then handle_tunnel(client_conn, req)
|
40
|
-
when METHOD_GET, METHOD_POST then handle(client_conn, req)
|
40
|
+
when METHOD_GET, METHOD_HEAD, METHOD_POST then handle(client_conn, req)
|
41
41
|
else
|
42
42
|
raise Errors::HTTPMethodNotImplemented
|
43
43
|
end
|
@@ -67,14 +67,15 @@ module ForwardProxy
|
|
67
67
|
|
68
68
|
attr_reader :socket, :thread_pool
|
69
69
|
|
70
|
-
# The following comments are from the IETF document
|
71
|
-
# "Hypertext Transfer Protocol -- HTTP/1.1: Basic Rules"
|
72
|
-
# https://datatracker.ietf.org/doc/html/rfc2616#section-2.2
|
73
|
-
|
74
70
|
METHOD_CONNECT = "CONNECT"
|
75
71
|
METHOD_GET = "GET"
|
72
|
+
METHOD_HEAD = "HEAD"
|
76
73
|
METHOD_POST = "POST"
|
77
74
|
|
75
|
+
# The following comments are from the IETF document
|
76
|
+
# "Hypertext Transfer Protocol -- HTTP/1.1: Basic Rules"
|
77
|
+
# https://datatracker.ietf.org/doc/html/rfc2616#section-2.2
|
78
|
+
|
78
79
|
# HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all
|
79
80
|
# protocol elements except the entity-body.
|
80
81
|
HEADER_EOP = "\r\n"
|
@@ -173,6 +174,7 @@ module ForwardProxy
|
|
173
174
|
def handle_error(client_conn, err)
|
174
175
|
status_code = case err
|
175
176
|
when Errors::ConnectionTimeoutError then 504
|
177
|
+
when Errors::HTTPMethodNotImplemented then 501
|
176
178
|
else
|
177
179
|
502
|
178
180
|
end
|
@@ -196,6 +198,7 @@ module ForwardProxy
|
|
196
198
|
|
197
199
|
klass = case req.request_method
|
198
200
|
when METHOD_GET then Net::HTTP::Get
|
201
|
+
when METHOD_HEAD then Net::HTTP::Head
|
199
202
|
when METHOD_POST then Net::HTTP::Post
|
200
203
|
else
|
201
204
|
raise Errors::HTTPMethodNotImplemented
|
@@ -1,24 +1,29 @@
|
|
1
1
|
module ForwardProxy
|
2
2
|
class ThreadPool
|
3
|
-
attr_reader :queue, :size
|
3
|
+
attr_reader :queue, :size, :threads
|
4
4
|
|
5
5
|
def initialize(size)
|
6
|
-
@
|
7
|
-
@
|
6
|
+
@queue = Queue.new
|
7
|
+
@size = size
|
8
|
+
@threads = []
|
8
9
|
end
|
9
10
|
|
10
11
|
def start
|
11
12
|
size.times do
|
12
|
-
Thread.new do
|
13
|
+
thread = Thread.new do
|
13
14
|
loop do
|
14
15
|
job, args = queue.pop
|
15
16
|
job.call(*args)
|
16
17
|
end
|
17
18
|
end
|
19
|
+
|
20
|
+
threads.push(thread)
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
21
24
|
def schedule(*args, &block)
|
25
|
+
raise Exception, "no threads" unless threads.any?(&:alive?)
|
26
|
+
|
22
27
|
queue.push([block, args])
|
23
28
|
end
|
24
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: forward-proxy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Moriarty
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Forward proxy using just Ruby standard libraries.
|
14
14
|
email:
|