r_socks 0.2.7 → 0.2.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2499018b47dd3233d537be32107df8e398150a21b4b3aef5eca8a960123b52a7
4
- data.tar.gz: f0c479c2e0de2be8e1bc1851b9755225a35d4eb36a9344aa7f946ebe8576e5d7
3
+ metadata.gz: f9f3daabf6b654e432702a1f8ec25cb8a31360cbd199badd407d3f8b0beb4a75
4
+ data.tar.gz: 20a333f1b28ffd89094362e27b7dccd4c0b7053bd8f5e83154fd29c2485a11ab
5
5
  SHA512:
6
- metadata.gz: 025e9d38508b50bc500fc2484874c4f70610365932d9f974609d5f4d2bc0c626a9588296373cbc2fcb18fffab96536b8b2f20cddf061da890d3f43ad6c2a0bc5
7
- data.tar.gz: cd82808668a124bd4d601cd31f2f85a45c08b7212c27fa020627cadbe968710084ac23f823ff2b06cdb81c18d64e50e64ffbe6755578e6c91ac70661905e8f83
6
+ metadata.gz: 9cbb6b31615e0448dab30fb0eb6a6b39485415d091d8f559b01d4a60a1982496c998c45b0870971ee002b3ac4d9e0eba078b5efce546baa5909170600b525624
7
+ data.tar.gz: 991c43cbb67f8f52c2ffce971bfd0e7cecdaad8a02565e0489494ac6893036e2464e5404053887f8b5cbaeca840927c698a1a41b9023afc34f41698d9c1d3fbc
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- r_socks (0.2.7)
4
+ r_socks (0.2.8)
5
5
  eventmachine (~> 1.2, >= 1.2.7)
6
6
 
7
7
  GEM
@@ -94,5 +94,29 @@ module RSocks
94
94
  def unbind_handler
95
95
  @store[:unbind_handler]
96
96
  end
97
+
98
+ def forward_server?
99
+ @store[:forward_server] || false
100
+ end
101
+
102
+ def forward_server=(value)
103
+ @store[:forward_server] = value
104
+ end
105
+
106
+ def forward_port
107
+ @store[:forward_port]
108
+ end
109
+
110
+ def forward_addr
111
+ @store[:forward_addr]
112
+ end
113
+
114
+ def forward_port=(value)
115
+ @store[:forward_port] = value.to_i
116
+ end
117
+
118
+ def forward_addr=(value)
119
+ @store[:forward_addr] = value.to_s
120
+ end
97
121
  end
98
122
  end
@@ -53,6 +53,16 @@ module RSocks
53
53
 
54
54
  return unless @state_machine.start?
55
55
 
56
+ if @config.forward_server? && @config.proxy_type == :http
57
+ @target = EventMachine.connect(@config.forward_addr,
58
+ @config.forward_port,
59
+ RSocks::TargetConnectionHandler,
60
+ self,
61
+ @config,
62
+ data)
63
+ @target.assign_user_and_password(@username, @password)
64
+ end
65
+
56
66
  @username = @parser.username
57
67
  @password = @parser.password
58
68
  if @target.nil?
@@ -81,6 +91,11 @@ module RSocks
81
91
 
82
92
  private
83
93
 
94
+ def forward_request
95
+ @port = @config.forward_port
96
+ @addr = @config.forward_addr
97
+ end
98
+
84
99
  def create_proxy_parser
85
100
  if @config.proxy_type == :http
86
101
  return RSocks::HttpProxyParser.new(@state_machine, @config)
@@ -4,9 +4,12 @@ require 'r_socks/http_proxy_response_codes'
4
4
  module RSocks
5
5
  class TargetConnectionHandler < EM::Connection
6
6
 
7
- def initialize(client, config)
7
+ def initialize(client, config, connect_data = nil)
8
8
  @client = client
9
9
  @config = config
10
+ @connect_data = connect_data
11
+ @forward_connection = !@connect_data.nil?
12
+ @forward_success = false
10
13
  end
11
14
 
12
15
  def assign_user_and_password(username, password)
@@ -15,15 +18,20 @@ module RSocks
15
18
  end
16
19
 
17
20
  def connection_completed
18
- if @config.proxy_type == :http
19
- @client.send_data(RSocks::HttpProxyResponseCodes::SUCCESS)
21
+ if @connect_data
22
+ send_data(@connect_data)
23
+ else
24
+ response_proxy_connect_ready
20
25
  end
21
- @client.proxy_incoming_to(self, @config.proxy_buffer_size)
22
- proxy_incoming_to(@client, @config.proxy_buffer_size)
23
26
  end
24
27
 
25
28
  def receive_data(data)
26
- @client.send_data(data)
29
+ if @forward_connection && !@forward_success
30
+ if data == RSocks::HttpProxyResponseCodes::SUCCESS
31
+ @forward_success = true
32
+ response_proxy_connect_ready
33
+ end
34
+ end
27
35
  end
28
36
 
29
37
  def proxy_target_unbound
@@ -36,5 +44,15 @@ module RSocks
36
44
  @config.unbind_handler.call(get_proxied_bytes, @username, @password)
37
45
  end
38
46
  end
47
+
48
+ private
49
+
50
+ def response_proxy_connect_ready
51
+ if @config.proxy_type == :http
52
+ @client.send_data(RSocks::HttpProxyResponseCodes::SUCCESS)
53
+ end
54
+ @client.proxy_incoming_to(self, @config.proxy_buffer_size)
55
+ proxy_incoming_to(@client, @config.proxy_buffer_size)
56
+ end
39
57
  end
40
58
  end
@@ -1,3 +1,3 @@
1
1
  module RSocks
2
- VERSION = "0.2.7"
2
+ VERSION = "0.2.8"
3
3
  end
data/r_socks.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.licenses = ['Apache-2.0']
9
9
 
10
10
  spec.summary = %q{socks5 proxy server}
11
- spec.description = %q{ruby proxy socks5 shadowsocks}
11
+ spec.description = %q{ruby socks5 and http proxy}
12
12
  spec.homepage = "https://github.com/nickoan/r_socks"
13
13
  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
14
14
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r_socks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick An
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-05 00:00:00.000000000 Z
11
+ date: 2020-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -30,7 +30,7 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.2.7
33
- description: ruby proxy socks5 shadowsocks
33
+ description: ruby socks5 and http proxy
34
34
  email:
35
35
  - anning0322@gmail.com
36
36
  executables: []