remailer 0.4.21 → 0.5.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.
- data/README.rdoc +25 -19
- data/VERSION +1 -1
- data/lib/remailer.rb +7 -1
- data/lib/remailer/{connection.rb → abstract_connection.rb} +63 -167
- data/lib/remailer/constants.rb +10 -0
- data/lib/remailer/email_address.rb +41 -0
- data/lib/remailer/imap.rb +6 -0
- data/lib/remailer/imap/client.rb +228 -0
- data/lib/remailer/imap/client/interpreter.rb +101 -0
- data/lib/remailer/imap/server.rb +15 -0
- data/lib/remailer/imap/server/interpreter.rb +2 -0
- data/lib/remailer/interpreter.rb +7 -6
- data/lib/remailer/interpreter/state_proxy.rb +20 -2
- data/lib/remailer/smtp.rb +6 -0
- data/lib/remailer/smtp/client.rb +329 -0
- data/lib/remailer/{connection/smtp_interpreter.rb → smtp/client/interpreter.rb} +4 -4
- data/lib/remailer/smtp/server.rb +130 -0
- data/lib/remailer/smtp/server/interpreter.rb +237 -0
- data/lib/remailer/smtp/server/transaction.rb +29 -0
- data/lib/remailer/socks5.rb +5 -0
- data/lib/remailer/socks5/client.rb +5 -0
- data/lib/remailer/{connection/socks5_interpreter.rb → socks5/client/interpreter.rb} +3 -2
- data/lib/remailer/support.rb +5 -0
- data/remailer.gemspec +27 -9
- data/test/unit/remailer_imap_client_interpreter_test.rb +14 -0
- data/test/unit/remailer_imap_client_test.rb +125 -0
- data/test/unit/{remailer_connection_smtp_interpreter_test.rb → remailer_smtp_client_interpreter_test.rb} +33 -33
- data/test/unit/{remailer_connection_test.rb → remailer_smtp_client_test.rb} +11 -11
- data/test/unit/remailer_smtp_server_test.rb +83 -0
- data/test/unit/{remailer_connection_socks5_interpreter_test.rb → remailer_socks5_client_interpreter_test.rb} +25 -17
- metadata +29 -11
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.join(*%w[ .. helper ]), File.dirname(__FILE__))
|
2
2
|
|
3
|
-
class
|
3
|
+
class SMTPDelegate
|
4
4
|
attr_accessor :options, :protocol, :active_message
|
5
5
|
attr_accessor :tls_support
|
6
6
|
|
@@ -62,7 +62,7 @@ class SmtpDelegate
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
class
|
65
|
+
class RemailerSMTPClientInterpreterTest < Test::Unit::TestCase
|
66
66
|
def test_split_reply
|
67
67
|
assert_mapping(
|
68
68
|
'250 OK' => [ 250, 'OK' ],
|
@@ -70,12 +70,12 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
70
70
|
'OK' => nil,
|
71
71
|
'100-Example' => [ 100, 'Example', :continued ]
|
72
72
|
) do |reply|
|
73
|
-
Remailer::
|
73
|
+
Remailer::SMTP::Client::Interpreter.split_reply(reply)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
77
|
def test_parser
|
78
|
-
interpreter = Remailer::
|
78
|
+
interpreter = Remailer::SMTP::Client::Interpreter.new
|
79
79
|
|
80
80
|
assert_mapping(
|
81
81
|
"250 OK\r\n" => [ 250, 'OK' ],
|
@@ -91,7 +91,7 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
91
91
|
def test_encode_data
|
92
92
|
sample_data = "Line 1\r\nLine 2\r\n.\r\nLine 3\r\n.Line 4\r\n"
|
93
93
|
|
94
|
-
assert_equal "Line 1\r\nLine 2\r\n..\r\nLine 3\r\n..Line 4\r\n", Remailer::
|
94
|
+
assert_equal "Line 1\r\nLine 2\r\n..\r\nLine 3\r\n..Line 4\r\n", Remailer::SMTP::Client::Interpreter.encode_data(sample_data)
|
95
95
|
end
|
96
96
|
|
97
97
|
def test_base64
|
@@ -100,7 +100,7 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
100
100
|
"\x7F" => "\x7F",
|
101
101
|
nil => ''
|
102
102
|
) do |example|
|
103
|
-
Remailer::
|
103
|
+
Remailer::SMTP::Client::Interpreter.base64(example).unpack('m')[0]
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
@@ -108,18 +108,18 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
108
108
|
assert_mapping(
|
109
109
|
%w[ tester tester ] => 'AHRlc3RlcgB0ZXN0ZXI='
|
110
110
|
) do |username, password|
|
111
|
-
Remailer::
|
111
|
+
Remailer::SMTP::Client::Interpreter.encode_authentication(username, password)
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
115
115
|
def test_defaults
|
116
|
-
interpreter = Remailer::
|
116
|
+
interpreter = Remailer::SMTP::Client::Interpreter.new
|
117
117
|
|
118
118
|
assert_equal :initialized, interpreter.state
|
119
119
|
end
|
120
120
|
|
121
121
|
def test_delegate_default_state
|
122
|
-
delegate =
|
122
|
+
delegate = SMTPDelegate.new
|
123
123
|
|
124
124
|
assert_equal false, delegate.closed?
|
125
125
|
assert_equal nil, delegate.read
|
@@ -127,20 +127,20 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
127
127
|
end
|
128
128
|
|
129
129
|
def test_delegate_options
|
130
|
-
delegate =
|
130
|
+
delegate = SMTPDelegate.new(:use_tls => true)
|
131
131
|
|
132
132
|
assert_equal true, delegate.use_tls?
|
133
133
|
assert_equal false, delegate.requires_authentication?
|
134
134
|
|
135
|
-
delegate =
|
135
|
+
delegate = SMTPDelegate.new(:username => 'test@example.com', :password => 'tester')
|
136
136
|
|
137
137
|
assert_equal false, delegate.use_tls?
|
138
138
|
assert_equal true, delegate.requires_authentication?
|
139
139
|
end
|
140
140
|
|
141
141
|
def test_standard_smtp_connection
|
142
|
-
delegate =
|
143
|
-
interpreter = Remailer::
|
142
|
+
delegate = SMTPDelegate.new
|
143
|
+
interpreter = Remailer::SMTP::Client::Interpreter.new(:delegate => delegate)
|
144
144
|
|
145
145
|
assert_equal :initialized, interpreter.state
|
146
146
|
|
@@ -162,8 +162,8 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
162
162
|
end
|
163
163
|
|
164
164
|
def test_standard_smtp_connection_send_email
|
165
|
-
delegate =
|
166
|
-
interpreter = Remailer::
|
165
|
+
delegate = SMTPDelegate.new
|
166
|
+
interpreter = Remailer::SMTP::Client::Interpreter.new(:delegate => delegate)
|
167
167
|
|
168
168
|
assert_equal :initialized, interpreter.state
|
169
169
|
|
@@ -217,8 +217,8 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
217
217
|
end
|
218
218
|
|
219
219
|
def test_standard_esmtp_connection
|
220
|
-
delegate =
|
221
|
-
interpreter = Remailer::
|
220
|
+
delegate = SMTPDelegate.new
|
221
|
+
interpreter = Remailer::SMTP::Client::Interpreter.new(:delegate => delegate)
|
222
222
|
|
223
223
|
assert_equal :initialized, interpreter.state
|
224
224
|
|
@@ -254,8 +254,8 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
254
254
|
end
|
255
255
|
|
256
256
|
def test_multi_line_hello_response
|
257
|
-
delegate =
|
258
|
-
interpreter = Remailer::
|
257
|
+
delegate = SMTPDelegate.new(:use_tls => true)
|
258
|
+
interpreter = Remailer::SMTP::Client::Interpreter.new(:delegate => delegate)
|
259
259
|
|
260
260
|
assert_equal :initialized, interpreter.state
|
261
261
|
assert_equal :smtp, delegate.protocol
|
@@ -276,8 +276,8 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
276
276
|
end
|
277
277
|
|
278
278
|
def test_tls_connection_with_support
|
279
|
-
delegate =
|
280
|
-
interpreter = Remailer::
|
279
|
+
delegate = SMTPDelegate.new(:use_tls => true)
|
280
|
+
interpreter = Remailer::SMTP::Client::Interpreter.new(:delegate => delegate)
|
281
281
|
|
282
282
|
assert_equal true, delegate.use_tls?
|
283
283
|
assert_equal :initialized, interpreter.state
|
@@ -303,12 +303,12 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
303
303
|
interpreter.process("220 TLS go ahead\r\n")
|
304
304
|
assert_equal true, delegate.started_tls?
|
305
305
|
|
306
|
-
assert_equal :
|
306
|
+
assert_equal :ehlo, interpreter.state
|
307
307
|
end
|
308
308
|
|
309
309
|
def test_tls_connection_without_support
|
310
|
-
delegate =
|
311
|
-
interpreter = Remailer::
|
310
|
+
delegate = SMTPDelegate.new(:use_tls => true)
|
311
|
+
interpreter = Remailer::SMTP::Client::Interpreter.new(:delegate => delegate)
|
312
312
|
|
313
313
|
interpreter.process("220 mail.example.com ESMTP Exim 4.63\r\n")
|
314
314
|
assert_equal 'EHLO localhost.local', delegate.read
|
@@ -322,8 +322,8 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
322
322
|
end
|
323
323
|
|
324
324
|
def test_basic_smtp_plaintext_auth_accepted
|
325
|
-
delegate =
|
326
|
-
interpreter = Remailer::
|
325
|
+
delegate = SMTPDelegate.new(:username => 'tester@example.com', :password => 'tester')
|
326
|
+
interpreter = Remailer::SMTP::Client::Interpreter.new(:delegate => delegate)
|
327
327
|
|
328
328
|
assert delegate.requires_authentication?
|
329
329
|
|
@@ -348,8 +348,8 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
348
348
|
end
|
349
349
|
|
350
350
|
def test_basic_esmtp_plaintext_auth_accepted
|
351
|
-
delegate =
|
352
|
-
interpreter = Remailer::
|
351
|
+
delegate = SMTPDelegate.new(:username => 'tester@example.com', :password => 'tester')
|
352
|
+
interpreter = Remailer::SMTP::Client::Interpreter.new(:delegate => delegate)
|
353
353
|
|
354
354
|
interpreter.process("220 mail.example.com ESMTP Exim 4.63\r\n")
|
355
355
|
assert_equal 'EHLO localhost.local', delegate.read
|
@@ -368,8 +368,8 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
368
368
|
end
|
369
369
|
|
370
370
|
def test_basic_esmtp_plaintext_auth_rejected
|
371
|
-
delegate =
|
372
|
-
interpreter = Remailer::
|
371
|
+
delegate = SMTPDelegate.new(:username => 'tester@example.com', :password => 'tester')
|
372
|
+
interpreter = Remailer::SMTP::Client::Interpreter.new(:delegate => delegate)
|
373
373
|
|
374
374
|
interpreter.process("220 mx.google.com ESMTP\r\n")
|
375
375
|
assert_equal 'EHLO localhost.local', delegate.read
|
@@ -385,7 +385,7 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
385
385
|
interpreter.process("535-5.7.1 Username and Password not accepted. Learn more at\r\n")
|
386
386
|
interpreter.process("535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257\r\n")
|
387
387
|
|
388
|
-
assert_equal '5.7.1 Username and Password not accepted. Learn more at
|
388
|
+
assert_equal '5.7.1 Username and Password not accepted. Learn more at http://mail.google.com/support/bin/answer.py?answer=14257', interpreter.error
|
389
389
|
|
390
390
|
assert_equal :quit, interpreter.state
|
391
391
|
|
@@ -396,8 +396,8 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
|
|
396
396
|
end
|
397
397
|
|
398
398
|
def test_unexpected_response
|
399
|
-
delegate =
|
400
|
-
interpreter = Remailer::
|
399
|
+
delegate = SMTPDelegate.new(:username => 'tester@example.com', :password => 'tester')
|
400
|
+
interpreter = Remailer::SMTP::Client::Interpreter.new(:delegate => delegate)
|
401
401
|
|
402
402
|
interpreter.process("530 Go away\r\n")
|
403
403
|
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require File.expand_path(File.join(*%w[ .. helper ]), File.dirname(__FILE__))
|
2
2
|
|
3
|
-
class
|
3
|
+
class RemailerSMTPClientTest < Test::Unit::TestCase
|
4
4
|
def test_connect
|
5
5
|
engine do
|
6
6
|
debug = { }
|
7
7
|
connected_host = nil
|
8
8
|
|
9
|
-
connection = Remailer::
|
9
|
+
connection = Remailer::SMTP::Client.open(
|
10
10
|
TestConfig.smtp_server[:host],
|
11
11
|
:debug => STDERR,
|
12
12
|
:connect => lambda { |success, host| connected_host = host }
|
@@ -43,7 +43,7 @@ class RemailerConnectionTest < Test::Unit::TestCase
|
|
43
43
|
on_error = false
|
44
44
|
on_connect = false
|
45
45
|
|
46
|
-
connection = Remailer::
|
46
|
+
connection = Remailer::SMTP::Client.open(
|
47
47
|
'example.com',
|
48
48
|
:debug => STDERR,
|
49
49
|
:error => lambda { |code, message|
|
@@ -70,7 +70,7 @@ class RemailerConnectionTest < Test::Unit::TestCase
|
|
70
70
|
engine do
|
71
71
|
error_received = nil
|
72
72
|
|
73
|
-
connection = Remailer::
|
73
|
+
connection = Remailer::SMTP::Client.open(
|
74
74
|
'invalid-example-domain--x.com',
|
75
75
|
:debug => STDERR,
|
76
76
|
:error => lambda { |code, message|
|
@@ -91,9 +91,9 @@ class RemailerConnectionTest < Test::Unit::TestCase
|
|
91
91
|
engine do
|
92
92
|
debug = { }
|
93
93
|
|
94
|
-
connection = Remailer::
|
94
|
+
connection = Remailer::SMTP::Client.open(
|
95
95
|
TestConfig.public_smtp_server[:host],
|
96
|
-
:port => TestConfig.public_smtp_server[:port] || Remailer::
|
96
|
+
:port => TestConfig.public_smtp_server[:port] || Remailer::SMTP::Client::SMTP_PORT,
|
97
97
|
:debug => STDERR,
|
98
98
|
:username => TestConfig.public_smtp_server[:username],
|
99
99
|
:password => TestConfig.public_smtp_server[:password]
|
@@ -127,7 +127,7 @@ class RemailerConnectionTest < Test::Unit::TestCase
|
|
127
127
|
engine do
|
128
128
|
debug = { }
|
129
129
|
|
130
|
-
connection = Remailer::
|
130
|
+
connection = Remailer::SMTP::Client.open(
|
131
131
|
TestConfig.smtp_server[:host],
|
132
132
|
:debug => STDERR,
|
133
133
|
:proxy => {
|
@@ -162,7 +162,7 @@ class RemailerConnectionTest < Test::Unit::TestCase
|
|
162
162
|
|
163
163
|
def test_connect_and_send_after_start
|
164
164
|
engine do
|
165
|
-
connection = Remailer::
|
165
|
+
connection = Remailer::SMTP::Client.open(
|
166
166
|
TestConfig.smtp_server[:host],
|
167
167
|
:debug => STDERR
|
168
168
|
)
|
@@ -195,7 +195,7 @@ class RemailerConnectionTest < Test::Unit::TestCase
|
|
195
195
|
|
196
196
|
def test_connect_and_send_dotted_message
|
197
197
|
engine do
|
198
|
-
connection = Remailer::
|
198
|
+
connection = Remailer::SMTP::Client.open(
|
199
199
|
TestConfig.smtp_server[:host],
|
200
200
|
:debug => STDERR
|
201
201
|
)
|
@@ -220,7 +220,7 @@ class RemailerConnectionTest < Test::Unit::TestCase
|
|
220
220
|
|
221
221
|
def test_connect_and_send_multiple
|
222
222
|
engine do
|
223
|
-
connection = Remailer::
|
223
|
+
connection = Remailer::SMTP::Client.open(
|
224
224
|
TestConfig.smtp_server[:host],
|
225
225
|
:debug => STDERR
|
226
226
|
)
|
@@ -248,7 +248,7 @@ class RemailerConnectionTest < Test::Unit::TestCase
|
|
248
248
|
|
249
249
|
def test_connect_and_long_send
|
250
250
|
engine do
|
251
|
-
connection = Remailer::
|
251
|
+
connection = Remailer::SMTP::Client.open(
|
252
252
|
TestConfig.smtp_server[:host],
|
253
253
|
:debug => STDERR
|
254
254
|
)
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require File.expand_path(File.join(*%w[ .. helper ]), File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class RemailerSMTPServerTest < Test::Unit::TestCase
|
4
|
+
def test_bind
|
5
|
+
engine do
|
6
|
+
server_port = 8025
|
7
|
+
|
8
|
+
server = Remailer::SMTP::Server.bind(nil, server_port)
|
9
|
+
|
10
|
+
assert server
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_connect
|
15
|
+
engine do
|
16
|
+
server_port = 8025
|
17
|
+
|
18
|
+
remote_ip = nil
|
19
|
+
|
20
|
+
server = Remailer::SMTP::Server.bind(
|
21
|
+
nil,
|
22
|
+
server_port,
|
23
|
+
:on_connect => lambda { |_remote_ip| remote_ip = _remote_ip }
|
24
|
+
)
|
25
|
+
|
26
|
+
assert server
|
27
|
+
|
28
|
+
connected_host = nil
|
29
|
+
|
30
|
+
client = Remailer::SMTP::Client.open(
|
31
|
+
'localhost',
|
32
|
+
:port => server_port,
|
33
|
+
:debug => STDERR,
|
34
|
+
:connect => lambda { |success, host| connected_host = host }
|
35
|
+
)
|
36
|
+
|
37
|
+
assert_eventually(30) do
|
38
|
+
connected_host
|
39
|
+
end
|
40
|
+
|
41
|
+
assert_equal '127.0.0.1', connected_host
|
42
|
+
assert_equal '127.0.0.1', remote_ip
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_transaction
|
47
|
+
engine do
|
48
|
+
server_port = 8025
|
49
|
+
|
50
|
+
transaction = nil
|
51
|
+
|
52
|
+
server = Remailer::SMTP::Server.bind(
|
53
|
+
nil,
|
54
|
+
server_port,
|
55
|
+
:on_transaction => lambda { |_transaction| transaction = _transaction }
|
56
|
+
)
|
57
|
+
|
58
|
+
assert server
|
59
|
+
|
60
|
+
connected_host = nil
|
61
|
+
|
62
|
+
client = Remailer::SMTP::Client.open(
|
63
|
+
'localhost',
|
64
|
+
:port => server_port,
|
65
|
+
:debug => STDERR
|
66
|
+
)
|
67
|
+
|
68
|
+
sender = 'sender@example.com'.freeze
|
69
|
+
recipient = 'recipient@example.net'.freeze
|
70
|
+
data = "Subject: Re: Test Message\r\n\r\nTest message.\r\n\r\n.test\r\n.\r\n".freeze
|
71
|
+
|
72
|
+
client.send_email(sender, recipient, data)
|
73
|
+
|
74
|
+
assert_eventually(30) do
|
75
|
+
transaction
|
76
|
+
end
|
77
|
+
|
78
|
+
assert_equal sender, transaction.sender
|
79
|
+
assert_equal [ recipient ], transaction.recipients
|
80
|
+
assert_equal data, transaction.data
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.join(*%w[ .. helper ]), File.dirname(__FILE__))
|
2
2
|
|
3
|
-
class
|
3
|
+
class SOCKS5Delegate
|
4
4
|
attr_reader :options
|
5
5
|
|
6
6
|
def initialize(options = nil)
|
@@ -11,7 +11,13 @@ class Socks5Delegate
|
|
11
11
|
def resolve_hostname(hostname)
|
12
12
|
record = Socket.gethostbyname(hostname)
|
13
13
|
|
14
|
-
record and record.last
|
14
|
+
resolved = (record and record.last)
|
15
|
+
|
16
|
+
if (block_given?)
|
17
|
+
yield(resolved)
|
18
|
+
end
|
19
|
+
|
20
|
+
resolved
|
15
21
|
end
|
16
22
|
|
17
23
|
def hostname
|
@@ -46,41 +52,42 @@ class Socks5Delegate
|
|
46
52
|
end
|
47
53
|
end
|
48
54
|
|
49
|
-
class
|
55
|
+
class RemailerSOCKS5ClientInterpreterTest < Test::Unit::TestCase
|
50
56
|
def test_defaults
|
51
|
-
delegate =
|
57
|
+
delegate = SOCKS5Delegate.new(
|
52
58
|
:proxy => {
|
53
59
|
:host => 'example.net'
|
54
60
|
}
|
55
61
|
)
|
56
|
-
|
62
|
+
|
63
|
+
interpreter = Remailer::SOCKS5::Client::Interpreter.new(:delegate => delegate)
|
57
64
|
|
58
|
-
assert_equal :
|
65
|
+
assert_equal :initialized, interpreter.state
|
59
66
|
assert_equal false, delegate.closed?
|
60
67
|
end
|
61
68
|
|
62
69
|
def test_simple_connection
|
63
|
-
delegate =
|
70
|
+
delegate = SOCKS5Delegate.new(
|
64
71
|
:host => '1.2.3.4',
|
65
72
|
:port => 4321,
|
66
73
|
:proxy => {
|
67
74
|
:host => 'example.net'
|
68
75
|
}
|
69
76
|
)
|
70
|
-
interpreter = Remailer::
|
77
|
+
interpreter = Remailer::SOCKS5::Client::Interpreter.new(:delegate => delegate)
|
71
78
|
|
72
|
-
assert_equal :
|
79
|
+
assert_equal :initialized, interpreter.state
|
73
80
|
assert_equal false, delegate.closed?
|
74
81
|
|
75
82
|
sent = delegate.read
|
76
83
|
|
77
84
|
assert_equal 2, sent.length
|
78
85
|
|
79
|
-
assert_equal [ Remailer::
|
86
|
+
assert_equal [ Remailer::SOCKS5::Client::Interpreter::SOCKS5_VERSION, 0 ], sent.unpack('CC')
|
80
87
|
|
81
88
|
reply = [
|
82
|
-
Remailer::
|
83
|
-
Remailer::
|
89
|
+
Remailer::SOCKS5::Client::Interpreter::SOCKS5_VERSION,
|
90
|
+
Remailer::SOCKS5::Client::Interpreter::SOCKS5_METHOD[:no_auth]
|
84
91
|
].pack('CC')
|
85
92
|
|
86
93
|
interpreter.process(reply)
|
@@ -91,22 +98,23 @@ class RemailerConnectionSocks5InterpreterTest < Test::Unit::TestCase
|
|
91
98
|
|
92
99
|
sent = delegate.read
|
93
100
|
|
101
|
+
assert sent, "No data received"
|
94
102
|
assert_equal 10, sent.length
|
95
103
|
|
96
104
|
assert_equal [
|
97
|
-
Remailer::
|
98
|
-
Remailer::
|
105
|
+
Remailer::SOCKS5::Client::Interpreter::SOCKS5_VERSION,
|
106
|
+
Remailer::SOCKS5::Client::Interpreter::SOCKS5_COMMAND[:connect],
|
99
107
|
0,
|
100
|
-
Remailer::
|
108
|
+
Remailer::SOCKS5::Client::Interpreter::SOCKS5_ADDRESS_TYPE[:ipv4],
|
101
109
|
[ 1, 2, 3, 4 ].pack('CCCC'),
|
102
110
|
4321
|
103
111
|
], sent.unpack('CCCCA4n')
|
104
112
|
|
105
113
|
interpreter.process([
|
106
|
-
Remailer::
|
114
|
+
Remailer::SOCKS5::Client::Interpreter::SOCKS5_VERSION,
|
107
115
|
0, # No error
|
108
116
|
0,
|
109
|
-
Remailer::
|
117
|
+
Remailer::SOCKS5::Client::Interpreter::SOCKS5_ADDRESS_TYPE[:ipv4],
|
110
118
|
[ 1, 2, 3, 4 ].pack('CCCC'),
|
111
119
|
4321
|
112
120
|
].pack('CCCCA4n'))
|