arachni-reactor 0.1.0 → 0.1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +21 -0
- data/LICENSE.md +1 -1
- data/README.md +2 -2
- data/lib/arachni/reactor/connection/error.rb +2 -2
- data/lib/arachni/reactor/connection/tls.rb +2 -0
- data/lib/arachni/reactor/connection.rb +14 -8
- data/lib/arachni/reactor/version.rb +1 -1
- data/lib/arachni/reactor.rb +47 -63
- data/spec/arachni/reactor/connection/tls_spec.rb +5 -2
- data/spec/arachni/reactor/iterator_spec.rb +1 -1
- data/spec/arachni/reactor/tasks/delayed_spec.rb +3 -1
- data/spec/arachni/reactor/tasks/periodic_spec.rb +3 -1
- data/spec/arachni/reactor/tasks_spec.rb +4 -4
- data/spec/support/helpers/utilities.rb +1 -1
- data/spec/support/lib/servers.rb +1 -1
- data/spec/support/servers/echo_tls.rb +1 -1
- data/spec/support/servers/echo_unix.rb +1 -1
- data/spec/support/servers/echo_unix_tls.rb +1 -1
- data/spec/support/shared/connection.rb +9 -9
- data/spec/support/shared/reactor.rb +4 -1
- metadata +31 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 23df66d0761a0b54c27d51dfe84838cc2fbc60a2d4a47c704fb33227b18d8462
|
4
|
+
data.tar.gz: 9ef72238e3136ee46997180acb53c51fb4b13fe4b3d3ef13671164ef459de108
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34cdc887196285a4a2f816293212881152db61dcb2a69af178f116c707b1a8d97231abc441a1a176e5a4dbdf7e1d1fb43ff2068e97564de8c841f29f1ed9f72c
|
7
|
+
data.tar.gz: 1a7e0cd82407b0d30b080f31c85026d1e62ef0d9bab06ca0b772d18f6deab6d0ff76836822698392464e2f567aa06258a0cba4a0ea3cdd06094f6c66d01dc5ea
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# ChangeLog
|
2
2
|
|
3
|
+
## Version 0.1.3.1
|
4
|
+
|
5
|
+
- Fixed strange `private method` error on Ruby 2.6.9.
|
6
|
+
|
7
|
+
## Version 0.1.3
|
8
|
+
|
9
|
+
- `Reactor` -- Reduced object allocations.
|
10
|
+
- `Connection::TLS#_read` -- Handle `OpenSSL::SSL::SSLErrorWaitReadable`.
|
11
|
+
|
12
|
+
## Version 0.1.2
|
13
|
+
|
14
|
+
- `Reactor` -- Reduced object allocations.
|
15
|
+
- `Connection::Error.translate` -- Handle `Errno::ENOTSOCK` errors.
|
16
|
+
|
17
|
+
## Version 0.1.1
|
18
|
+
|
19
|
+
- `Connection`
|
20
|
+
- `#_write` -- Use `String#byteslice` instead of `String#slice` and
|
21
|
+
`String#bytesize` instead of `String#size`.
|
22
|
+
- `Error.translate` -- Translate `Errno::ECONNABORTED` as `Error::Reset`.
|
23
|
+
|
3
24
|
## Version 0.1.0
|
4
25
|
|
5
26
|
- Cleaned up connection handling structure for JRuby support.
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
<table>
|
4
4
|
<tr>
|
5
5
|
<th>Version</th>
|
6
|
-
<td>0.1.
|
6
|
+
<td>0.1.2</td>
|
7
7
|
</tr>
|
8
8
|
<tr>
|
9
9
|
<th>Github page</th>
|
@@ -23,7 +23,7 @@
|
|
23
23
|
</tr>
|
24
24
|
<tr>
|
25
25
|
<th>Copyright</th>
|
26
|
-
<td>2014</td>
|
26
|
+
<td>2014-2017 <a href="http://www.sarosys.com">Sarosys LLC</a></td>
|
27
27
|
</tr>
|
28
28
|
<tr>
|
29
29
|
<th>License</th>
|
@@ -24,7 +24,7 @@ class Error < Arachni::Reactor::Error
|
|
24
24
|
# @param [Block] block Block to run.
|
25
25
|
def translate( &block )
|
26
26
|
block.call
|
27
|
-
rescue IOError, Errno::ENOTCONN => e
|
27
|
+
rescue IOError, Errno::ENOTCONN, Errno::ENOTSOCK => e
|
28
28
|
raise_with_proper_backtrace( e, Closed )
|
29
29
|
rescue SocketError, Errno::ENOENT => e
|
30
30
|
raise_with_proper_backtrace( e, HostNotFound )
|
@@ -35,7 +35,7 @@ class Error < Arachni::Reactor::Error
|
|
35
35
|
# non-existent server.
|
36
36
|
Errno::EADDRINUSE => e
|
37
37
|
raise_with_proper_backtrace( e, Refused )
|
38
|
-
rescue Errno::ECONNRESET => e
|
38
|
+
rescue Errno::ECONNRESET, Errno::ECONNABORTED => e
|
39
39
|
raise_with_proper_backtrace( e, Reset )
|
40
40
|
rescue Errno::EACCES => e
|
41
41
|
raise_with_proper_backtrace( e, Permission )
|
@@ -113,6 +113,7 @@ module TLS
|
|
113
113
|
return ssl_accept if accept?
|
114
114
|
|
115
115
|
super
|
116
|
+
rescue OpenSSL::SSL::SSLErrorWaitReadable
|
116
117
|
end
|
117
118
|
|
118
119
|
private
|
@@ -150,6 +151,7 @@ module TLS
|
|
150
151
|
@ssl_context
|
151
152
|
)
|
152
153
|
ssl_socket.sync_close = true
|
154
|
+
ssl.accept if @start_immediately
|
153
155
|
ssl_socket
|
154
156
|
end
|
155
157
|
rescue IO::WaitReadable, IO::WaitWritable
|
@@ -41,17 +41,21 @@ class Connection
|
|
41
41
|
# `true` when using a UNIX-domain socket, `nil` if no {#socket} is
|
42
42
|
# available, `false` otherwise.
|
43
43
|
def unix?
|
44
|
+
return @is_unix if !@is_unix.nil?
|
44
45
|
return if !to_io
|
45
46
|
return false if !Arachni::Reactor.supports_unix_sockets?
|
46
|
-
|
47
|
+
|
48
|
+
@is_unix = to_io.is_a?( UNIXServer ) || to_io.is_a?( UNIXSocket )
|
47
49
|
end
|
48
50
|
|
49
51
|
# @return [Bool]
|
50
52
|
# `true` when using an Internet socket, `nil` if no {#socket} is
|
51
53
|
# available, `false` otherwise.
|
52
54
|
def inet?
|
55
|
+
return @is_inet if !@is_inet.nil?
|
53
56
|
return if !to_io
|
54
|
-
|
57
|
+
|
58
|
+
@is_inet = to_io.is_a?( TCPServer ) || to_io.is_a?( TCPSocket ) || to_io.is_a?( Socket )
|
55
59
|
end
|
56
60
|
|
57
61
|
# @return [IO, nil]
|
@@ -64,8 +68,10 @@ class Connection
|
|
64
68
|
# @return [Bool]
|
65
69
|
# `true` if the connection is a server listener.
|
66
70
|
def listener?
|
71
|
+
return @is_listener if !@is_listener.nil?
|
67
72
|
return if !to_io
|
68
|
-
|
73
|
+
|
74
|
+
@is_listener = to_io.is_a?( TCPServer ) || (unix? && to_io.is_a?( UNIXServer ))
|
69
75
|
end
|
70
76
|
|
71
77
|
# @note The data will be buffered and sent in future {Reactor} ticks.
|
@@ -228,7 +234,7 @@ class Connection
|
|
228
234
|
socket.connect_nonblock( Socket.sockaddr_in( @port, @host ) )
|
229
235
|
end
|
230
236
|
# Already connected. :)
|
231
|
-
rescue Errno::EISCONN
|
237
|
+
rescue Errno::EISCONN, Errno::EALREADY
|
232
238
|
end
|
233
239
|
|
234
240
|
@connected = true
|
@@ -277,7 +283,7 @@ class Connection
|
|
277
283
|
def _write
|
278
284
|
return _connect if !connected?
|
279
285
|
|
280
|
-
chunk = write_buffer.
|
286
|
+
chunk = write_buffer.byteslice( 0, BLOCK_SIZE )
|
281
287
|
total_written = 0
|
282
288
|
|
283
289
|
begin
|
@@ -285,13 +291,13 @@ class Connection
|
|
285
291
|
# Send out the chunk, **all** of it, or at least try to.
|
286
292
|
loop do
|
287
293
|
total_written += written = @socket.write_nonblock( chunk )
|
288
|
-
write_buffer.
|
294
|
+
@write_buffer = @write_buffer.byteslice( written..-1 )
|
289
295
|
|
290
296
|
# Call #on_write every time any of the buffer is consumed.
|
291
297
|
on_write
|
292
298
|
|
293
|
-
break if written == chunk.
|
294
|
-
chunk.
|
299
|
+
break if written == chunk.bytesize
|
300
|
+
chunk = chunk.byteslice( written..-1 )
|
295
301
|
end
|
296
302
|
end
|
297
303
|
|
data/lib/arachni/reactor.rb
CHANGED
@@ -414,7 +414,7 @@ class Reactor
|
|
414
414
|
def schedule( &block )
|
415
415
|
fail_if_not_running
|
416
416
|
|
417
|
-
if
|
417
|
+
if in_same_thread?
|
418
418
|
block.call
|
419
419
|
else
|
420
420
|
next_tick(&block)
|
@@ -551,32 +551,8 @@ class Reactor
|
|
551
551
|
'The host OS does not support UNIX-domain sockets.'
|
552
552
|
end
|
553
553
|
|
554
|
-
def process_connections
|
555
|
-
if @connections.empty?
|
556
|
-
sleep @max_tick_interval
|
557
|
-
return
|
558
|
-
end
|
559
|
-
|
560
|
-
# Required for OSX as it connects immediately and then #select returns
|
561
|
-
# nothing as there's no activity, given that, OpenSSL doesn't get a chance
|
562
|
-
# to do its handshake so explicitly connect pending sockets, bypassing #select.
|
563
|
-
@connections.each do |_, connection|
|
564
|
-
connection._connect if !connection.connected?
|
565
|
-
end
|
566
|
-
|
567
|
-
# Get connections with available events - :read, :write, :error.
|
568
|
-
selected = select_connections
|
569
|
-
|
570
|
-
# Close connections that have errors.
|
571
|
-
[selected.delete(:error)].flatten.compact.each(&:close)
|
572
|
-
|
573
|
-
# Call the corresponding event on the connections.
|
574
|
-
selected.each { |event, connections| connections.each(&"_#{event}".to_sym) }
|
575
|
-
end
|
576
|
-
|
577
554
|
def determine_connection_options( *args )
|
578
555
|
options = {}
|
579
|
-
host = port = unix_socket = nil
|
580
556
|
|
581
557
|
if args[1].is_a? Integer
|
582
558
|
options[:host], options[:port], options[:handler], *handler_options = *args
|
@@ -634,6 +610,22 @@ class Reactor
|
|
634
610
|
@connections.values.each(&:close)
|
635
611
|
end
|
636
612
|
|
613
|
+
def process_connections
|
614
|
+
if @connections.empty?
|
615
|
+
sleep @max_tick_interval
|
616
|
+
return
|
617
|
+
end
|
618
|
+
|
619
|
+
# Get connections with available events - :read, :write, :error.
|
620
|
+
selected = select_connections
|
621
|
+
|
622
|
+
# Close connections that have errors.
|
623
|
+
selected.delete(:error)&.each(&:close)
|
624
|
+
|
625
|
+
# Call the corresponding event on the connections.
|
626
|
+
selected.each { |event, connections| connections.each(&"_#{event}".to_sym) }
|
627
|
+
end
|
628
|
+
|
637
629
|
# @return [Hash]
|
638
630
|
#
|
639
631
|
# Connections grouped by their available events:
|
@@ -643,17 +635,34 @@ class Reactor
|
|
643
635
|
# {Connection#has_outgoing_data? outgoing buffer).
|
644
636
|
# * `:error`
|
645
637
|
def select_connections
|
646
|
-
|
638
|
+
r = []
|
639
|
+
w = []
|
640
|
+
e = []
|
641
|
+
|
642
|
+
@connections.values.each do |connection|
|
643
|
+
|
644
|
+
# Required for OSX as it connects immediately and then #select returns
|
645
|
+
# nothing as there's no activity, given that, OpenSSL doesn't get a chance
|
646
|
+
# to do its handshake so explicitly connect pending sockets, bypassing #select.
|
647
|
+
connection._connect if !connection.connected?
|
648
|
+
|
649
|
+
socket = connection.socket
|
650
|
+
|
651
|
+
e << socket
|
652
|
+
|
653
|
+
if connection.listener? || connection.connected?
|
654
|
+
r << socket
|
655
|
+
end
|
656
|
+
|
657
|
+
if connection.connected? && connection.has_outgoing_data?
|
658
|
+
w << socket
|
659
|
+
end
|
660
|
+
end
|
647
661
|
|
648
662
|
selected_sockets =
|
649
663
|
begin
|
650
664
|
Connection::Error.translate do
|
651
|
-
select(
|
652
|
-
readables,
|
653
|
-
write_sockets,
|
654
|
-
all_sockets,
|
655
|
-
@select_timeout
|
656
|
-
)
|
665
|
+
select( r, w, e, @select_timeout )
|
657
666
|
end
|
658
667
|
rescue Connection::Error => e
|
659
668
|
nil
|
@@ -668,9 +677,11 @@ class Reactor
|
|
668
677
|
# So force a read for SSL sockets to cover all our bases.
|
669
678
|
#
|
670
679
|
# This is apparent especially on JRuby.
|
671
|
-
|
672
|
-
|
673
|
-
|
680
|
+
if r.size != selected_sockets[0].size
|
681
|
+
(r - selected_sockets[0]).each do |socket|
|
682
|
+
next if !socket.is_a?( OpenSSL::SSL::SSLSocket )
|
683
|
+
selected_sockets[0] << socket
|
684
|
+
end
|
674
685
|
end
|
675
686
|
|
676
687
|
if selected_sockets[0].empty? && selected_sockets[1].empty? &&
|
@@ -687,35 +698,8 @@ class Reactor
|
|
687
698
|
}
|
688
699
|
end
|
689
700
|
|
690
|
-
# @return [Array<Socket>]
|
691
|
-
# Sockets of all connections, we want to be ready to read at any time.
|
692
|
-
def read_sockets
|
693
|
-
@connections.map do |_, connection|
|
694
|
-
next if !connection.listener? && !connection.connected?
|
695
|
-
connection.socket
|
696
|
-
end.compact
|
697
|
-
end
|
698
|
-
|
699
|
-
def all_sockets
|
700
|
-
@connections.values.map(&:socket)
|
701
|
-
end
|
702
|
-
|
703
|
-
# @return [Array<Socket>]
|
704
|
-
# Sockets of connections with
|
705
|
-
# {Connection#has_outgoing_data? outgoing data}.
|
706
|
-
def write_sockets
|
707
|
-
@connections.map do |_, connection|
|
708
|
-
next if connection.connected? && !connection.has_outgoing_data?
|
709
|
-
connection.socket
|
710
|
-
end.compact
|
711
|
-
end
|
712
|
-
|
713
701
|
def connections_from_sockets( sockets )
|
714
|
-
sockets.map { |s|
|
715
|
-
end
|
716
|
-
|
717
|
-
def connection_from_socket( socket )
|
718
|
-
@connections[socket.to_io]
|
702
|
+
sockets.map { |s| @connections[s.to_io] }
|
719
703
|
end
|
720
704
|
|
721
705
|
end
|
@@ -129,10 +129,12 @@ describe Arachni::Reactor::Connection::TLS do
|
|
129
129
|
reactor.listen( host, port, TLSHandler, options )
|
130
130
|
|
131
131
|
client.write data
|
132
|
+
sleep 1
|
133
|
+
|
132
134
|
reactor.stop
|
133
135
|
reactor.wait rescue Arachni::Reactor::Error::NotRunning
|
134
136
|
|
135
|
-
received_data.
|
137
|
+
expect(received_data).to eq data
|
136
138
|
end
|
137
139
|
end
|
138
140
|
|
@@ -324,7 +326,8 @@ describe Arachni::Reactor::Connection::TLS do
|
|
324
326
|
connection.write data
|
325
327
|
end
|
326
328
|
|
327
|
-
|
329
|
+
sleep 1
|
330
|
+
expect(received).to eq data
|
328
331
|
end
|
329
332
|
end
|
330
333
|
|
@@ -35,7 +35,9 @@ describe Arachni::Reactor::Tasks::Delayed do
|
|
35
35
|
time = Time.now
|
36
36
|
task.call while called < 1
|
37
37
|
|
38
|
-
(Time.now - time).round(2)
|
38
|
+
elapsed = (Time.now - time).round(2)
|
39
|
+
elapsed.should >= 0.25
|
40
|
+
elapsed.should < 0.30
|
39
41
|
end
|
40
42
|
|
41
43
|
it 'calls #done' do
|
@@ -25,14 +25,14 @@ describe Arachni::Reactor::Tasks do
|
|
25
25
|
context 'when it includes the given task' do
|
26
26
|
it 'returns true' do
|
27
27
|
subject << task
|
28
|
-
subject.
|
28
|
+
expect(subject.include?( task )).to be_truthy
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
context 'when it does not includes the given task' do
|
33
33
|
it 'returns false' do
|
34
34
|
subject << task
|
35
|
-
subject.
|
35
|
+
expect(subject.include?( another_task )).to be_falsey
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -125,8 +125,8 @@ describe Arachni::Reactor::Tasks do
|
|
125
125
|
|
126
126
|
subject.call
|
127
127
|
|
128
|
-
called_one.should
|
129
|
-
called_two.should
|
128
|
+
called_one.should be_truthy
|
129
|
+
called_two.should be_truthy
|
130
130
|
end
|
131
131
|
|
132
132
|
it 'returns self' do
|
@@ -114,7 +114,7 @@ def convert_server_to_ssl( server, options = {} )
|
|
114
114
|
context.cert.version = 2
|
115
115
|
context.cert.serial = 1
|
116
116
|
|
117
|
-
context.cert.sign( context.key, OpenSSL::Digest::
|
117
|
+
context.cert.sign( context.key, OpenSSL::Digest::SHA256.new )
|
118
118
|
end
|
119
119
|
|
120
120
|
OpenSSL::SSL::SSLServer.new( server, context )
|
data/spec/support/lib/servers.rb
CHANGED
@@ -77,7 +77,7 @@ class Servers
|
|
77
77
|
return if !server_info[:pid]
|
78
78
|
|
79
79
|
begin
|
80
|
-
Process.kill(
|
80
|
+
Process.kill( 'KILL', server_info[:pid] ) while sleep 0.1
|
81
81
|
rescue Errno::ESRCH
|
82
82
|
server_info.delete(:pid)
|
83
83
|
|
@@ -290,10 +290,10 @@ shared_examples_for 'Arachni::Reactor::Connection' do
|
|
290
290
|
|
291
291
|
reactor.run_in_thread
|
292
292
|
|
293
|
-
connection.attach( reactor ).should
|
293
|
+
connection.attach( reactor ).should be_truthy
|
294
294
|
sleep 1
|
295
295
|
|
296
|
-
reactor.attached?( configured ).should
|
296
|
+
reactor.attached?( configured ).should be_truthy
|
297
297
|
end
|
298
298
|
|
299
299
|
it 'calls #on_attach' do
|
@@ -319,7 +319,7 @@ shared_examples_for 'Arachni::Reactor::Connection' do
|
|
319
319
|
connection.attach reactor
|
320
320
|
sleep 0.1 while connection.detached?
|
321
321
|
|
322
|
-
connection.attach( reactor ).should
|
322
|
+
connection.attach( reactor ).should be_falsey
|
323
323
|
end
|
324
324
|
end
|
325
325
|
|
@@ -337,11 +337,11 @@ shared_examples_for 'Arachni::Reactor::Connection' do
|
|
337
337
|
r.run_in_thread
|
338
338
|
|
339
339
|
configured.should receive(:on_detach)
|
340
|
-
connection.attach( r ).should
|
340
|
+
connection.attach( r ).should be_truthy
|
341
341
|
|
342
342
|
sleep 2
|
343
343
|
|
344
|
-
r.attached?( configured ).should
|
344
|
+
r.attached?( configured ).should be_truthy
|
345
345
|
end
|
346
346
|
end
|
347
347
|
end
|
@@ -363,7 +363,7 @@ shared_examples_for 'Arachni::Reactor::Connection' do
|
|
363
363
|
connection.detach
|
364
364
|
sleep 0.1 while connection.attached?
|
365
365
|
|
366
|
-
reactor.attached?( configured ).should
|
366
|
+
reactor.attached?( configured ).should be_falsey
|
367
367
|
end
|
368
368
|
|
369
369
|
it 'calls #on_detach' do
|
@@ -582,7 +582,7 @@ shared_examples_for 'Arachni::Reactor::Connection' do
|
|
582
582
|
end
|
583
583
|
end
|
584
584
|
|
585
|
-
configured.called_on_flush.should
|
585
|
+
configured.called_on_flush.should be_truthy
|
586
586
|
end
|
587
587
|
end
|
588
588
|
end
|
@@ -601,13 +601,13 @@ shared_examples_for 'Arachni::Reactor::Connection' do
|
|
601
601
|
configured.write 'test'
|
602
602
|
sleep 0.1 while !configured.has_outgoing_data?
|
603
603
|
|
604
|
-
configured.has_outgoing_data?.should
|
604
|
+
configured.has_outgoing_data?.should be_truthy
|
605
605
|
end
|
606
606
|
end
|
607
607
|
|
608
608
|
context 'when the send-buffer is empty' do
|
609
609
|
it 'returns false' do
|
610
|
-
configured.has_outgoing_data?.should
|
610
|
+
configured.has_outgoing_data?.should be_falsey
|
611
611
|
end
|
612
612
|
end
|
613
613
|
end
|
@@ -158,7 +158,7 @@ shared_examples_for 'Arachni::Reactor' do
|
|
158
158
|
end
|
159
159
|
|
160
160
|
subject.should_not be_running
|
161
|
-
running.should
|
161
|
+
running.should be_truthy
|
162
162
|
end
|
163
163
|
|
164
164
|
context 'when no block is given' do
|
@@ -816,6 +816,9 @@ shared_examples_for 'Arachni::Reactor' do
|
|
816
816
|
subject.listen( host, port, echo_server_handler, *options )
|
817
817
|
|
818
818
|
@socket = tcp_writer.call( host, port, data )
|
819
|
+
|
820
|
+
sleep 5
|
821
|
+
|
819
822
|
subject.connections.values.first.initialization_args.should == options
|
820
823
|
end
|
821
824
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arachni-reactor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tasos Laskos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |2
|
14
14
|
Arachni::Reactor is a simple, lightweight, pure-Ruby implementation of the Reactor
|
@@ -97,45 +97,44 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: '0'
|
99
99
|
requirements: []
|
100
|
-
|
101
|
-
rubygems_version: 2.4.5
|
100
|
+
rubygems_version: 3.3.0.dev
|
102
101
|
signing_key:
|
103
102
|
specification_version: 4
|
104
103
|
summary: A pure-Ruby implementation of the Reactor pattern.
|
105
104
|
test_files:
|
106
|
-
- spec/
|
107
|
-
- spec/
|
105
|
+
- spec/arachni/reactor/connection/tls_spec.rb
|
106
|
+
- spec/arachni/reactor/connection_spec.rb
|
107
|
+
- spec/arachni/reactor/iterator_spec.rb
|
108
|
+
- spec/arachni/reactor/queue_spec.rb
|
109
|
+
- spec/arachni/reactor/tasks/base.rb
|
110
|
+
- spec/arachni/reactor/tasks/delayed_spec.rb
|
111
|
+
- spec/arachni/reactor/tasks/one_off_spec.rb
|
112
|
+
- spec/arachni/reactor/tasks/periodic_spec.rb
|
113
|
+
- spec/arachni/reactor/tasks/persistent_spec.rb
|
114
|
+
- spec/arachni/reactor/tasks_spec.rb
|
115
|
+
- spec/arachni/reactor_spec.rb
|
116
|
+
- spec/arachni/reactor_tls_spec.rb
|
117
|
+
- spec/spec_helper.rb
|
118
|
+
- spec/support/fixtures/handlers/echo_client.rb
|
119
|
+
- spec/support/fixtures/handlers/echo_client_tls.rb
|
120
|
+
- spec/support/fixtures/handlers/echo_server.rb
|
121
|
+
- spec/support/fixtures/handlers/echo_server_tls.rb
|
108
122
|
- spec/support/fixtures/pems/cacert.pem
|
109
|
-
- spec/support/fixtures/pems/client/foo-key.pem
|
110
123
|
- spec/support/fixtures/pems/client/cert.pem
|
111
124
|
- spec/support/fixtures/pems/client/foo-cert.pem
|
125
|
+
- spec/support/fixtures/pems/client/foo-key.pem
|
112
126
|
- spec/support/fixtures/pems/client/key.pem
|
113
|
-
- spec/support/fixtures/
|
114
|
-
- spec/support/fixtures/
|
115
|
-
- spec/support/fixtures/handlers/echo_client_tls.rb
|
116
|
-
- spec/support/fixtures/handlers/echo_server_tls.rb
|
117
|
-
- spec/support/servers/echo_unix.rb
|
118
|
-
- spec/support/servers/echo_tls.rb
|
119
|
-
- spec/support/servers/echo.rb
|
120
|
-
- spec/support/servers/echo_unix_tls.rb
|
121
|
-
- spec/support/helpers/utilities.rb
|
127
|
+
- spec/support/fixtures/pems/server/cert.pem
|
128
|
+
- spec/support/fixtures/pems/server/key.pem
|
122
129
|
- spec/support/helpers/paths.rb
|
123
|
-
- spec/support/
|
124
|
-
- spec/support/lib/servers/runner.rb
|
130
|
+
- spec/support/helpers/utilities.rb
|
125
131
|
- spec/support/lib/server_option_parser.rb
|
126
|
-
- spec/support/
|
132
|
+
- spec/support/lib/servers/runner.rb
|
133
|
+
- spec/support/lib/servers.rb
|
134
|
+
- spec/support/servers/echo.rb
|
135
|
+
- spec/support/servers/echo_tls.rb
|
136
|
+
- spec/support/servers/echo_unix.rb
|
137
|
+
- spec/support/servers/echo_unix_tls.rb
|
127
138
|
- spec/support/shared/connection.rb
|
139
|
+
- spec/support/shared/reactor.rb
|
128
140
|
- spec/support/shared/task.rb
|
129
|
-
- spec/spec_helper.rb
|
130
|
-
- spec/arachni/reactor_tls_spec.rb
|
131
|
-
- spec/arachni/reactor_spec.rb
|
132
|
-
- spec/arachni/reactor/queue_spec.rb
|
133
|
-
- spec/arachni/reactor/tasks_spec.rb
|
134
|
-
- spec/arachni/reactor/connection_spec.rb
|
135
|
-
- spec/arachni/reactor/iterator_spec.rb
|
136
|
-
- spec/arachni/reactor/connection/tls_spec.rb
|
137
|
-
- spec/arachni/reactor/tasks/base.rb
|
138
|
-
- spec/arachni/reactor/tasks/persistent_spec.rb
|
139
|
-
- spec/arachni/reactor/tasks/delayed_spec.rb
|
140
|
-
- spec/arachni/reactor/tasks/one_off_spec.rb
|
141
|
-
- spec/arachni/reactor/tasks/periodic_spec.rb
|