riser 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/example/halo.rb +1 -0
- data/example/simple_tls.rb +1 -1
- data/lib/riser/daemon.rb +13 -9
- data/lib/riser/sockaddr.rb +60 -27
- data/lib/riser/version.rb +1 -1
- data/lib/riser.rb +11 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b5efba40ee7b569c9ed5f5e85f523b6bff9c2fe575d90d975925bcc91db5099
|
4
|
+
data.tar.gz: 612736390678ea1722e1626d20ad745221a3adfaa3a6461d69da701537ebcc65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 690c6451ebbe725aecfdb21af32da37928ba56c238c72a4c7829624b0a606b7c4600a9a3184e4a6e79eaca6351b945af1f24336a7b504a2b12576dbbb1a8e377
|
7
|
+
data.tar.gz: 3587661269e1a3eb634c2f5f53d0fb360d7688370165aa3df05d836343d12ee7cd07ce76d05730bca615f40f62fd9c04fa30547c206612b5476de55d294f56f5
|
data/README.md
CHANGED
@@ -291,7 +291,7 @@ and
|
|
291
291
|
### TLS Server
|
292
292
|
|
293
293
|
With OpenSSL, the riser is able to provide a TLS server. To provide a
|
294
|
-
TLS server you need a certificate and private key. An example of a
|
294
|
+
TLS server you need a certificate and a private key. An example of a
|
295
295
|
simple TLS server is as follows.
|
296
296
|
|
297
297
|
```ruby
|
@@ -308,7 +308,7 @@ Riser::Daemon.start_daemon(daemonize: false,
|
|
308
308
|
|
309
309
|
ssl_context = OpenSSL::SSL::SSLContext.new
|
310
310
|
ssl_context.cert = OpenSSL::X509::Certificate.new(File.read(cert_path))
|
311
|
-
ssl_context.key = OpenSSL::PKey
|
311
|
+
ssl_context.key = OpenSSL::PKey.read(File.read(pkey_path))
|
312
312
|
|
313
313
|
server.dispatch{|socket|
|
314
314
|
ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
|
data/example/halo.rb
CHANGED
data/example/simple_tls.rb
CHANGED
@@ -14,7 +14,7 @@ Riser::Daemon.start_daemon(daemonize: false,
|
|
14
14
|
|
15
15
|
ssl_context = OpenSSL::SSL::SSLContext.new
|
16
16
|
ssl_context.cert = OpenSSL::X509::Certificate.new(File.read(cert_path))
|
17
|
-
ssl_context.key = OpenSSL::PKey
|
17
|
+
ssl_context.key = OpenSSL::PKey.read(File.read(pkey_path))
|
18
18
|
|
19
19
|
server.dispatch{|socket|
|
20
20
|
ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
|
data/lib/riser/daemon.rb
CHANGED
@@ -53,10 +53,14 @@ module Riser
|
|
53
53
|
return
|
54
54
|
end
|
55
55
|
|
56
|
-
|
57
|
-
|
58
|
-
|
56
|
+
begin
|
57
|
+
server_address = SocketAddress.parse(address_config)
|
58
|
+
rescue
|
59
|
+
@logger.error("failed to parse server address: #{address_config.inspect} [#{$!} (#{$!.class})]")
|
60
|
+
@logger.debug($!) if @logger.debug?
|
61
|
+
return
|
59
62
|
end
|
63
|
+
|
60
64
|
server_address
|
61
65
|
end
|
62
66
|
|
@@ -70,7 +74,7 @@ module Riser
|
|
70
74
|
end
|
71
75
|
end
|
72
76
|
|
73
|
-
def
|
77
|
+
def get_sockaddr(server_socket)
|
74
78
|
begin
|
75
79
|
server_socket.local_address.inspect_sockaddr
|
76
80
|
rescue
|
@@ -319,7 +323,7 @@ module Riser
|
|
319
323
|
|
320
324
|
def server_socket_close(server_socket, server_address)
|
321
325
|
# get local_address before close(2)
|
322
|
-
server_socket_address = @sysop.
|
326
|
+
server_socket_address = @sysop.get_sockaddr(server_socket) || server_address
|
323
327
|
|
324
328
|
if (@sysop.close(server_socket)) then
|
325
329
|
@logger.info("close server socket: #{server_socket_address}")
|
@@ -425,7 +429,7 @@ module Riser
|
|
425
429
|
@logger.fatal('failed to start daemon.')
|
426
430
|
return 1
|
427
431
|
end
|
428
|
-
@logger.info("open server socket: #{@sysop.
|
432
|
+
@logger.info("open server socket: #{@sysop.get_sockaddr(server_socket) || server_address}")
|
429
433
|
|
430
434
|
begin
|
431
435
|
server_socket_option(server_socket, server_address)
|
@@ -466,16 +470,16 @@ module Riser
|
|
466
470
|
end
|
467
471
|
else
|
468
472
|
if (next_server_socket = @sysop.get_server_socket(next_server_address)) then
|
469
|
-
@logger.info("open server socket: #{@sysop.
|
473
|
+
@logger.info("open server socket: #{@sysop.get_sockaddr(next_server_socket) || next_server_address}")
|
470
474
|
server_socket_close(server_socket, server_address)
|
471
475
|
server_socket = next_server_socket
|
472
476
|
server_address = next_server_address
|
473
477
|
else
|
474
|
-
@logger.warn("server socket continue: #{@sysop.
|
478
|
+
@logger.warn("server socket continue: #{@sysop.get_sockaddr(server_socket) || server_address}")
|
475
479
|
end
|
476
480
|
end
|
477
481
|
else
|
478
|
-
@logger.warn("server socket continue: #{@sysop.
|
482
|
+
@logger.warn("server socket continue: #{@sysop.get_sockaddr(server_socket) || server_address}")
|
479
483
|
end
|
480
484
|
server_socket_option(server_socket, server_address)
|
481
485
|
|
data/lib/riser/sockaddr.rb
CHANGED
@@ -46,14 +46,14 @@ module Riser
|
|
46
46
|
case (config)
|
47
47
|
when /\A tcp:/x
|
48
48
|
uri = URI(config)
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
uri.host or raise ArgumentError, 'need for a tcp socket uri host.'
|
50
|
+
uri.port or raise ArgumentError, 'need for a tcp socket uri port.'
|
51
|
+
return TCPSocketAddress.new(unsquare.call(uri.host), uri.port)
|
52
52
|
when /\A unix:/x
|
53
53
|
uri = URI(config)
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
uri.path or raise ArgumentError, 'need for a unix socket uri path.'
|
55
|
+
uri.path.empty? and raise ArgumentError, 'empty unix socket uri path.'
|
56
|
+
return UNIXSocketAddress.new(uri.path)
|
57
57
|
when %r"\A [A-Za-z]+:/"x
|
58
58
|
# unknown URI scheme
|
59
59
|
when /\A (\S+):(\d+) \z/x
|
@@ -65,34 +65,67 @@ module Riser
|
|
65
65
|
if (type = config[:type] || config['type']) then
|
66
66
|
case (type.to_s)
|
67
67
|
when 'tcp'
|
68
|
-
host
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
68
|
+
host = config[:host] || config['host'] or raise ArgumentError, 'need for a tcp socket host.'
|
69
|
+
(host.is_a? String) or raise TypeError, 'not a string tcp scoket host.'
|
70
|
+
host.empty? and raise ArgumentError, 'empty tcp socket host.'
|
71
|
+
|
72
|
+
port = config[:port] || config['port'] or raise ArgumentError, 'need for a tcp socket port.'
|
73
|
+
case (port)
|
74
|
+
when Integer
|
75
|
+
# OK
|
76
|
+
when String
|
77
|
+
service_name = port
|
78
|
+
port = Socket.getservbyname(service_name, 'tcp')
|
79
|
+
else
|
80
|
+
raise TypeError, 'port number is neither an integer nor a service name.'
|
81
|
+
end
|
82
|
+
|
83
|
+
if (backlog = config[:backlog] || config['backlog']) then
|
84
|
+
(backlog.is_a? Integer) or raise TypeError, 'not a integer tcp socket backlog.'
|
76
85
|
end
|
86
|
+
|
87
|
+
return TCPSocketAddress.new(unsquare.call(host), port, backlog)
|
77
88
|
when 'unix'
|
78
|
-
path
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
(backlog.nil? || (backlog.is_a? Integer)) &&
|
85
|
-
(mode.nil? || (mode.is_a? Integer)) &&
|
86
|
-
(owner.nil? || (owner.is_a? Integer) || ((owner.is_a? String) && ! owner.empty?)) &&
|
87
|
-
(group.nil? || (group.is_a? Integer) || ((group.is_a? String) && ! group.empty?)))
|
88
|
-
then
|
89
|
-
return UNIXSocketAddress.new(path, backlog, mode, owner, group)
|
89
|
+
path = config[:path] || config['path'] or raise ArgumentError, 'need for a unix socket path.'
|
90
|
+
(path.is_a? String) or raise TypeError, 'not a string unix socket path.'
|
91
|
+
path.empty? and raise ArgumentError, 'empty unix socket path.'
|
92
|
+
|
93
|
+
if (backlog = config[:backlog] || config['backlog']) then
|
94
|
+
(backlog.is_a? Integer) or raise TypeError, 'not a integer unix socket backlog.'
|
90
95
|
end
|
96
|
+
|
97
|
+
if (mode = config[:mode] || config['mode']) then
|
98
|
+
(mode.is_a? Integer) or raise TypeError, 'not a integer socket mode.'
|
99
|
+
end
|
100
|
+
|
101
|
+
if (owner = config[:owner] || config['owner']) then
|
102
|
+
case (owner)
|
103
|
+
when Integer
|
104
|
+
# OK
|
105
|
+
when String
|
106
|
+
owner.empty? and raise ArgumentError, 'empty unix socket owner.'
|
107
|
+
else
|
108
|
+
raise TypeError, 'unix socket owner is neither an integer nor a string.'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
if (group = config[:group] || config['group']) then
|
113
|
+
case (group)
|
114
|
+
when Integer
|
115
|
+
# OK
|
116
|
+
when String
|
117
|
+
group.empty? and raise ArgumentError, 'empty unix socket group.'
|
118
|
+
else
|
119
|
+
raise TypeError, 'unix socket group is neither an integer nor a string.'
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
return UNIXSocketAddress.new(path, backlog, mode, owner, group)
|
91
124
|
end
|
92
125
|
end
|
93
126
|
end
|
94
127
|
|
95
|
-
|
128
|
+
raise ArgumentError, 'invalid socket address.'
|
96
129
|
end
|
97
130
|
end
|
98
131
|
|
data/lib/riser/version.rb
CHANGED
data/lib/riser.rb
CHANGED
@@ -21,6 +21,17 @@ module Riser
|
|
21
21
|
autoload :TemporaryPath, 'riser/temppath'
|
22
22
|
autoload :TimeoutSizedQueue, 'riser/server'
|
23
23
|
autoload :WriteBufferStream, 'riser/stream'
|
24
|
+
|
25
|
+
def preload(namespace=Riser)
|
26
|
+
for name in namespace.constants
|
27
|
+
if (namespace.autoload? name) then
|
28
|
+
namespace.const_get(name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
module_function :preload
|
24
35
|
end
|
25
36
|
|
26
37
|
# Local Variables:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TOKI Yoshinori
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: '0'
|
127
127
|
requirements: []
|
128
|
-
rubygems_version: 3.0.
|
128
|
+
rubygems_version: 3.0.3
|
129
129
|
signing_key:
|
130
130
|
specification_version: 4
|
131
131
|
summary: Riser is a library of Ruby Infrastructure for cooperative multi-thread/multi-process
|