bayserver-core 2.3.2 → 3.0.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/lib/baykit/bayserver/agent/accept_handler.rb +0 -26
- data/lib/baykit/bayserver/agent/channel_listener.rb +6 -6
- data/lib/baykit/bayserver/agent/command_receiver.rb +97 -38
- data/lib/baykit/bayserver/agent/grand_agent.rb +444 -134
- data/lib/baykit/bayserver/agent/letter.rb +30 -0
- data/lib/baykit/bayserver/agent/lifecycle_listener.rb +9 -7
- data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +298 -0
- data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +257 -0
- data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +52 -0
- data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +150 -0
- data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +129 -0
- data/lib/baykit/bayserver/agent/multiplexer/rudder_state.rb +81 -0
- data/lib/baykit/bayserver/agent/multiplexer/secure_transporter.rb +50 -0
- data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +561 -0
- data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +311 -0
- data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +194 -0
- data/lib/baykit/bayserver/agent/multiplexer/transporter.rb +61 -0
- data/lib/baykit/bayserver/agent/multiplexer/write_unit.rb +30 -0
- data/lib/baykit/bayserver/agent/non_blocking_handler.rb +0 -319
- data/lib/baykit/bayserver/agent/signal/signal_agent.rb +2 -1
- data/lib/baykit/bayserver/agent/timer_handler.rb +1 -1
- data/lib/baykit/bayserver/agent/transporter/data_listener.rb +7 -7
- data/lib/baykit/bayserver/agent/transporter/package.rb +0 -3
- data/lib/baykit/bayserver/agent/transporter/transporter.rb +5 -139
- data/lib/baykit/bayserver/bay_log.rb +1 -0
- data/lib/baykit/bayserver/bayserver.rb +32 -28
- data/lib/baykit/bayserver/{util → common}/groups.rb +1 -1
- data/lib/baykit/bayserver/common/inbound_handler.rb +12 -0
- data/lib/baykit/bayserver/{docker/base → common}/inbound_ship.rb +94 -19
- data/lib/baykit/bayserver/{docker/base → common}/inbound_ship_store.rb +7 -9
- data/lib/baykit/bayserver/common/multiplexer.rb +98 -0
- data/lib/baykit/bayserver/common/postpone.rb +15 -0
- data/lib/baykit/bayserver/common/read_only_ship.rb +42 -0
- data/lib/baykit/bayserver/common/recipient.rb +24 -0
- data/lib/baykit/bayserver/common/vehicle.rb +24 -0
- data/lib/baykit/bayserver/common/vehicle_runner.rb +127 -0
- data/lib/baykit/bayserver/{docker/warp → common}/warp_data.rb +18 -10
- data/lib/baykit/bayserver/common/warp_handler.rb +27 -0
- data/lib/baykit/bayserver/{docker/warp → common}/warp_ship.rb +107 -27
- data/lib/baykit/bayserver/{docker/warp → common}/warp_ship_store.rb +3 -8
- data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +2 -2
- data/lib/baykit/bayserver/docker/base/port_base.rb +59 -27
- data/lib/baykit/bayserver/docker/{warp/warp_docker.rb → base/warp_base.rb} +43 -50
- data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +118 -31
- data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +60 -63
- data/lib/baykit/bayserver/docker/built_in/built_in_permission_docker.rb +11 -10
- data/lib/baykit/bayserver/docker/built_in/built_in_secure_docker.rb +13 -4
- data/lib/baykit/bayserver/docker/city.rb +27 -13
- data/lib/baykit/bayserver/docker/club.rb +8 -8
- data/lib/baykit/bayserver/docker/docker.rb +9 -1
- data/lib/baykit/bayserver/docker/harbor.rb +184 -22
- data/lib/baykit/bayserver/docker/permission.rb +7 -6
- data/lib/baykit/bayserver/docker/port.rb +39 -11
- data/lib/baykit/bayserver/docker/secure.rb +11 -9
- data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +99 -4
- data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +6 -2
- data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +92 -0
- data/lib/baykit/bayserver/docker/town.rb +31 -15
- data/lib/baykit/bayserver/docker/trouble.rb +17 -5
- data/lib/baykit/bayserver/docker/warp.rb +34 -0
- data/lib/baykit/bayserver/mem_usage.rb +9 -9
- data/lib/baykit/bayserver/protocol/command_packer.rb +1 -8
- data/lib/baykit/bayserver/protocol/packet_packer.rb +7 -11
- data/lib/baykit/bayserver/protocol/packet_store.rb +4 -4
- data/lib/baykit/bayserver/protocol/protocol_handler.rb +26 -8
- data/lib/baykit/bayserver/protocol/protocol_handler_store.rb +5 -5
- data/lib/baykit/bayserver/rudders/io_rudder.rb +62 -0
- data/lib/baykit/bayserver/rudders/rudder.rb +29 -0
- data/lib/baykit/bayserver/{watercraft → ships}/ship.rb +65 -41
- data/lib/baykit/bayserver/taxi/taxi.rb +15 -10
- data/lib/baykit/bayserver/taxi/taxi_runner.rb +9 -94
- data/lib/baykit/bayserver/tours/read_file_taxi.rb +2 -2
- data/lib/baykit/bayserver/tours/req_content_handler.rb +16 -13
- data/lib/baykit/bayserver/tours/tour.rb +2 -2
- data/lib/baykit/bayserver/tours/tour_handler.rb +36 -0
- data/lib/baykit/bayserver/tours/tour_req.rb +14 -24
- data/lib/baykit/bayserver/tours/tour_res.rb +5 -89
- data/lib/baykit/bayserver/tours/tour_store.rb +5 -5
- data/lib/baykit/bayserver/train/train_runner.rb +17 -13
- data/lib/baykit/bayserver/util/data_consume_listener.rb +1 -1
- data/lib/baykit/bayserver/util/executor_service.rb +11 -7
- data/lib/baykit/bayserver/util/ip_matcher.rb +9 -39
- data/lib/baykit/bayserver/util/locale.rb +1 -1
- data/lib/baykit/bayserver/util/selector.rb +24 -5
- data/lib/baykit/bayserver/util/sys_util.rb +6 -6
- data/lib/baykit/bayserver/version.rb +1 -1
- metadata +37 -18
- data/lib/baykit/bayserver/agent/grand_agent_monitor.rb +0 -231
- data/lib/baykit/bayserver/agent/transporter/plain_transporter.rb +0 -55
- data/lib/baykit/bayserver/agent/transporter/secure_transporter.rb +0 -81
- data/lib/baykit/bayserver/docker/base/inbound_handler.rb +0 -42
- data/lib/baykit/bayserver/docker/warp/package.rb +0 -4
- data/lib/baykit/bayserver/docker/warp/warp_data_listener.rb +0 -112
- data/lib/baykit/bayserver/docker/warp/warp_handler.rb +0 -38
- /data/lib/baykit/bayserver/{util → common}/cities.rb +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
require 'openssl'
|
|
2
2
|
|
|
3
3
|
require 'baykit/bayserver/bcf/package'
|
|
4
|
-
require 'baykit/bayserver/agent/
|
|
4
|
+
require 'baykit/bayserver/agent/grand_agent'
|
|
5
|
+
require 'baykit/bayserver/agent/multiplexer/secure_transporter'
|
|
5
6
|
|
|
6
7
|
require 'baykit/bayserver/docker/secure'
|
|
7
8
|
require 'baykit/bayserver/util/string_util'
|
|
@@ -14,7 +15,8 @@ module Baykit
|
|
|
14
15
|
include Baykit::BayServer::Docker::Secure # implements
|
|
15
16
|
|
|
16
17
|
include Baykit::BayServer::Bcf
|
|
17
|
-
include Baykit::BayServer::Agent
|
|
18
|
+
include Baykit::BayServer::Agent
|
|
19
|
+
include Baykit::BayServer::Agent::Multiplexer
|
|
18
20
|
include Baykit::BayServer::Util
|
|
19
21
|
include OpenSSL
|
|
20
22
|
|
|
@@ -109,8 +111,15 @@ module Baykit
|
|
|
109
111
|
end
|
|
110
112
|
end
|
|
111
113
|
|
|
112
|
-
def
|
|
113
|
-
|
|
114
|
+
def new_transporter(agt_id, sip, buf_size)
|
|
115
|
+
agt = GrandAgent.get(agt_id)
|
|
116
|
+
return SecureTransporter.new(
|
|
117
|
+
agt.net_multiplexer,
|
|
118
|
+
sip,
|
|
119
|
+
true,
|
|
120
|
+
buf_size,
|
|
121
|
+
@trace_ssl,
|
|
122
|
+
@sslctx)
|
|
114
123
|
end
|
|
115
124
|
|
|
116
125
|
def reload_cert()
|
|
@@ -3,19 +3,33 @@ require 'baykit/bayserver/docker/docker'
|
|
|
3
3
|
module Baykit
|
|
4
4
|
module BayServer
|
|
5
5
|
module Docker
|
|
6
|
-
module City
|
|
7
|
-
include Baykit::BayServer::Docker::Docker
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
module City # interface
|
|
7
|
+
include Baykit::BayServer::Docker::Docker # implements
|
|
8
|
+
|
|
9
|
+
def name
|
|
10
|
+
raise NotImplementedError.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def clubs
|
|
14
|
+
raise NotImplementedError.new
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def towns
|
|
18
|
+
raise NotImplementedError.new
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def enter(tur)
|
|
22
|
+
raise NotImplementedError.new
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def get_trouble
|
|
26
|
+
raise NotImplementedError.new
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def log(tur)
|
|
30
|
+
raise NotImplementedError.new
|
|
31
|
+
end
|
|
32
|
+
|
|
19
33
|
end
|
|
20
34
|
end
|
|
21
35
|
end
|
|
@@ -11,32 +11,32 @@ module Baykit
|
|
|
11
11
|
|
|
12
12
|
# Get the file name part of club
|
|
13
13
|
def file_name()
|
|
14
|
-
raise NotImplementedError.new
|
|
14
|
+
raise NotImplementedError.new
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
# Get the ext (file extension part) of club
|
|
18
18
|
def extension()
|
|
19
|
-
raise NotImplementedError.new
|
|
19
|
+
raise NotImplementedError.new
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
# Check if file name matches this club
|
|
23
23
|
def matches(fname)
|
|
24
|
-
raise NotImplementedError.new
|
|
24
|
+
raise NotImplementedError.new
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
# Get charset of club
|
|
28
|
-
def charset
|
|
29
|
-
raise NotImplementedError.new
|
|
28
|
+
def charset
|
|
29
|
+
raise NotImplementedError.new
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# Check if this club decodes PATH_INFO
|
|
33
|
-
def decode_path_info
|
|
34
|
-
raise NotImplementedError.new
|
|
33
|
+
def decode_path_info
|
|
34
|
+
raise NotImplementedError.new
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
# Arrive
|
|
38
38
|
def arrive(tur)
|
|
39
|
-
raise NotImplementedError.new
|
|
39
|
+
raise NotImplementedError.new
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
end
|
|
@@ -6,28 +6,190 @@ module Baykit
|
|
|
6
6
|
module Harbor
|
|
7
7
|
include Docker
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
#
|
|
30
|
-
|
|
9
|
+
MULTIPLEXER_TYPE_SPIDER = 1
|
|
10
|
+
MULTIPLEXER_TYPE_SPIN = 2
|
|
11
|
+
MULTIPLEXER_TYPE_PIGEON = 3
|
|
12
|
+
MULTIPLEXER_TYPE_JOB = 4
|
|
13
|
+
MULTIPLEXER_TYPE_TAXI = 5
|
|
14
|
+
MULTIPLEXER_TYPE_TRAIN = 6
|
|
15
|
+
|
|
16
|
+
RECIPIENT_TYPE_SPIDER = 1
|
|
17
|
+
RECIPIENT_TYPE_PIPE = 2
|
|
18
|
+
|
|
19
|
+
# Default charset
|
|
20
|
+
def charset
|
|
21
|
+
raise NotImplementedError.new
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Default locale
|
|
25
|
+
def locale
|
|
26
|
+
raise NotImplementedError.new
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Number of grand agents
|
|
30
|
+
def grand_agents
|
|
31
|
+
raise NotImplementedError.new
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Number of train runners
|
|
35
|
+
def train_runners
|
|
36
|
+
raise NotImplementedError.new
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Number of taxi runners
|
|
40
|
+
def taxi_runners
|
|
41
|
+
raise NotImplementedError.new
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Max count of ships
|
|
45
|
+
def max_ships
|
|
46
|
+
raise NotImplementedError.new
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Trouble docker
|
|
50
|
+
def trouble
|
|
51
|
+
raise NotImplementedError.new
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Socket timeout in seconds
|
|
55
|
+
def socket_timeout_sec
|
|
56
|
+
raise NotImplementedError.new
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Keep-Alive timeout in seconds
|
|
60
|
+
def keep_timeout_sec
|
|
61
|
+
raise NotImplementedError.new
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Trace req/res header flag
|
|
65
|
+
def trace_header
|
|
66
|
+
raise NotImplementedError.new
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Internal buffer size of Tour
|
|
70
|
+
def tour_buffer_size
|
|
71
|
+
raise NotImplementedError.new
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# File name to redirect stdout/stderr
|
|
75
|
+
def redirect_file
|
|
76
|
+
raise NotImplementedError.new
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Port number of signal agent
|
|
80
|
+
def control_port
|
|
81
|
+
raise NotImplementedError.new
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Gzip compression flag
|
|
85
|
+
def gzip_comp
|
|
86
|
+
raise NotImplementedError.new
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Multiplexer of Network I/O
|
|
90
|
+
def net_multiplexer
|
|
91
|
+
raise NotImplementedError.new
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Multiplexer of File I/O
|
|
95
|
+
def file_multiplexer
|
|
96
|
+
raise NotImplementedError.new
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Multiplexer of Log output
|
|
100
|
+
def log_multiplexer
|
|
101
|
+
raise NotImplementedError.new
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Multiplexer of CGI input
|
|
105
|
+
def cgi_multiplexer
|
|
106
|
+
raise NotImplementedError.new
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Recipient
|
|
110
|
+
def recipient
|
|
111
|
+
raise NotImplementedError
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# PID file name
|
|
115
|
+
def pid_file
|
|
116
|
+
raise NotImplementedError
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Multi core flag
|
|
120
|
+
def multi_core
|
|
121
|
+
raise NotImplementedError
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def self.get_multiplexer_type_name(type)
|
|
126
|
+
case type
|
|
127
|
+
when MULTIPLEXER_TYPE_SPIDER
|
|
128
|
+
return "spider"
|
|
129
|
+
when MULTIPLEXER_TYPE_SPIN
|
|
130
|
+
return "spin"
|
|
131
|
+
when MULTIPLEXER_TYPE_PIGEON
|
|
132
|
+
return "pigeon"
|
|
133
|
+
when MULTIPLEXER_TYPE_JOB
|
|
134
|
+
return "job"
|
|
135
|
+
when MULTIPLEXER_TYPE_TAXI
|
|
136
|
+
return "taxi"
|
|
137
|
+
when MULTIPLEXER_TYPE_TRAIN
|
|
138
|
+
return "train"
|
|
139
|
+
else
|
|
140
|
+
return nil
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def self.get_multiplexer_type(type)
|
|
145
|
+
if type != nil
|
|
146
|
+
type = type.downcase
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
case type
|
|
150
|
+
when "spider"
|
|
151
|
+
return MULTIPLEXER_TYPE_SPIDER
|
|
152
|
+
when "spin"
|
|
153
|
+
return MULTIPLEXER_TYPE_SPIN
|
|
154
|
+
when "pigeon"
|
|
155
|
+
return MULTIPLEXER_TYPE_PIGEON
|
|
156
|
+
when "job"
|
|
157
|
+
return MULTIPLEXER_TYPE_JOB
|
|
158
|
+
when "taxi"
|
|
159
|
+
return MULTIPLEXER_TYPE_TAXI
|
|
160
|
+
when "train"
|
|
161
|
+
return MULTIPLEXER_TYPE_TRAIN
|
|
162
|
+
else
|
|
163
|
+
raise ArgumentError
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def self.get_recipient_type_name(type)
|
|
168
|
+
case type
|
|
169
|
+
when RECIPIENT_TYPE_SPIDER
|
|
170
|
+
return "spider"
|
|
171
|
+
when RECIPIENT_TYPE_PIPE
|
|
172
|
+
return "pipe"
|
|
173
|
+
else
|
|
174
|
+
return nil
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def self.get_recipient_type(type)
|
|
179
|
+
if type != nil
|
|
180
|
+
type = type.downcase
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
case type
|
|
184
|
+
when "spider"
|
|
185
|
+
return RECIPIENT_TYPE_SPIDER
|
|
186
|
+
when "pipe"
|
|
187
|
+
return RECIPIENT_TYPE_PIPE
|
|
188
|
+
else
|
|
189
|
+
raise ArgumentError
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
31
193
|
end
|
|
32
194
|
end
|
|
33
195
|
end
|
|
@@ -6,12 +6,13 @@ module Baykit
|
|
|
6
6
|
module Permission
|
|
7
7
|
include Docker # implements
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
def socket_admitterd(rd)
|
|
10
|
+
raise NotImplementedError.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def tour_admitted(tour)
|
|
14
|
+
raise NotImplementedError.new
|
|
15
|
+
end
|
|
15
16
|
end
|
|
16
17
|
end
|
|
17
18
|
end
|
|
@@ -6,32 +6,60 @@ module Baykit
|
|
|
6
6
|
module Port
|
|
7
7
|
include Docker # implements
|
|
8
8
|
|
|
9
|
+
def protocol
|
|
10
|
+
raise NotImplementedError.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def host
|
|
14
|
+
raise NotImplementedError.new
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def port
|
|
18
|
+
raise NotImplementedError.new
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def socket_path
|
|
22
|
+
raise NotImplementedError.new
|
|
23
|
+
end
|
|
24
|
+
|
|
9
25
|
def address()
|
|
10
|
-
raise NotImplementedError
|
|
26
|
+
raise NotImplementedError.new
|
|
11
27
|
end
|
|
12
28
|
|
|
13
|
-
def
|
|
14
|
-
raise NotImplementedError
|
|
29
|
+
def anchored
|
|
30
|
+
raise NotImplementedError.new
|
|
15
31
|
end
|
|
16
32
|
|
|
17
|
-
def
|
|
18
|
-
raise NotImplementedError
|
|
33
|
+
def secure
|
|
34
|
+
raise NotImplementedError.new
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def timeout_sec
|
|
38
|
+
raise NotImplementedError.new
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def additional_headers
|
|
42
|
+
raise NotImplementedError.new
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def cities
|
|
46
|
+
raise NotImplementedError.new
|
|
19
47
|
end
|
|
20
48
|
|
|
21
|
-
def
|
|
22
|
-
raise NotImplementedError
|
|
49
|
+
def find_city(name)
|
|
50
|
+
raise NotImplementedError.new
|
|
23
51
|
end
|
|
24
52
|
|
|
25
|
-
def
|
|
26
|
-
raise NotImplementedError
|
|
53
|
+
def on_connected(agent_id, rd)
|
|
54
|
+
raise NotImplementedError.new
|
|
27
55
|
end
|
|
28
56
|
|
|
29
57
|
def return_protocol_handler(agt, proto_hnd)
|
|
30
|
-
raise NotImplementedError
|
|
58
|
+
raise NotImplementedError.new
|
|
31
59
|
end
|
|
32
60
|
|
|
33
61
|
def return_ship(sip)
|
|
34
|
-
raise NotImplementedError
|
|
62
|
+
raise NotImplementedError.new
|
|
35
63
|
end
|
|
36
64
|
end
|
|
37
65
|
end
|
|
@@ -6,15 +6,17 @@ module Baykit
|
|
|
6
6
|
module Secure
|
|
7
7
|
include Docker # implements
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
def set_app_protocols(protocols)
|
|
10
|
+
raise NotImplementedError.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def reload_cert
|
|
14
|
+
raise NotImplementedError.new
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def new_transporter(agt_id, sip)
|
|
18
|
+
raise NotImplementedError
|
|
19
|
+
end
|
|
18
20
|
end
|
|
19
21
|
end
|
|
20
22
|
end
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
require 'baykit/bayserver/tours/req_content_handler'
|
|
2
2
|
require 'baykit/bayserver/tours/tour'
|
|
3
|
+
require 'baykit/bayserver/rudders/io_rudder'
|
|
4
|
+
require 'baykit/bayserver/agent/multiplexer/plain_transporter'
|
|
5
|
+
require 'baykit/bayserver/util/mimes'
|
|
6
|
+
require 'baykit/bayserver/docker/send_file/send_file_ship'
|
|
3
7
|
|
|
4
8
|
module Baykit
|
|
5
9
|
module BayServer
|
|
@@ -7,7 +11,11 @@ module Baykit
|
|
|
7
11
|
module SendFile
|
|
8
12
|
class FileContentHandler
|
|
9
13
|
include Baykit::BayServer::Tours::ReqContentHandler # implements
|
|
14
|
+
include Baykit::BayServer::Agent
|
|
15
|
+
include Baykit::BayServer::Agent::Multiplexer
|
|
10
16
|
include Baykit::BayServer::Tours
|
|
17
|
+
include Baykit::BayServer::Rudders
|
|
18
|
+
include Baykit::BayServer::Util
|
|
11
19
|
|
|
12
20
|
attr :path
|
|
13
21
|
attr :abortable
|
|
@@ -21,21 +29,108 @@ module Baykit
|
|
|
21
29
|
# Implements ReqContentHandler
|
|
22
30
|
######################################################
|
|
23
31
|
|
|
24
|
-
def
|
|
32
|
+
def on_read_req_content(tur, buf, start, len, &lis)
|
|
25
33
|
BayLog.debug("%s onReadReqContent(Ignore) len=%d", tur, len)
|
|
34
|
+
tur.req.consumed(tur.tour_id, len, &lis)
|
|
26
35
|
end
|
|
27
36
|
|
|
28
|
-
def
|
|
37
|
+
def on_end_req_content(tur)
|
|
29
38
|
BayLog.debug("%s endReqContent", tur)
|
|
30
|
-
tur
|
|
39
|
+
send_file_async(tur, path, tur.res.charset)
|
|
31
40
|
@abortable = false
|
|
32
41
|
end
|
|
33
42
|
|
|
34
|
-
def
|
|
43
|
+
def on_abort_req(tur)
|
|
35
44
|
BayLog.debug("%s onAbortReq aborted=%s", tur, abortable)
|
|
36
45
|
return abortable
|
|
37
46
|
end
|
|
38
47
|
|
|
48
|
+
######################################################
|
|
49
|
+
# Sending file methods
|
|
50
|
+
######################################################
|
|
51
|
+
|
|
52
|
+
def send_file_async(tur, file, charset)
|
|
53
|
+
|
|
54
|
+
if File.directory?(file)
|
|
55
|
+
raise HttpException.new HttpStatus::FORBIDDEN, file
|
|
56
|
+
elsif !File.exist?(file)
|
|
57
|
+
raise HttpException.new HttpStatus::NOT_FOUND, file
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
mime_type = nil
|
|
61
|
+
|
|
62
|
+
rname = File.basename(file)
|
|
63
|
+
pos = rname.rindex('.')
|
|
64
|
+
if pos
|
|
65
|
+
ext = rname[pos + 1 .. -1].downcase
|
|
66
|
+
mime_type = Mimes.type(ext)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
if !mime_type
|
|
70
|
+
mime_type = "application/octet-stream"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
if mime_type.start_with?("text/") && charset != nil
|
|
74
|
+
mime_type = mime_type + "; charset=" + charset
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
file_len = ::File.size(file)
|
|
78
|
+
|
|
79
|
+
tur.res.headers.set_content_type(mime_type)
|
|
80
|
+
tur.res.headers.set_content_length(file_len)
|
|
81
|
+
|
|
82
|
+
begin
|
|
83
|
+
tur.res.send_headers(Tour::TOUR_ID_NOCHECK)
|
|
84
|
+
|
|
85
|
+
bufsize = tur.ship.protocol_handler.max_res_packet_data_size
|
|
86
|
+
agt = GrandAgent.get(tur.ship.agent_id)
|
|
87
|
+
|
|
88
|
+
f = File.open(file, "rb")
|
|
89
|
+
rd = IORudder.new(f)
|
|
90
|
+
|
|
91
|
+
case(BayServer.harbor.file_multiplexer)
|
|
92
|
+
|
|
93
|
+
when Harbor::MULTIPLEXER_TYPE_SPIDER
|
|
94
|
+
mpx = agt.spider_multiplexer
|
|
95
|
+
|
|
96
|
+
when Harbor::MULTIPLEXER_TYPE_SPIN
|
|
97
|
+
mpx = agt.spin_multiplexer
|
|
98
|
+
|
|
99
|
+
when Harbor::MULTIPLEXER_TYPE_TAXI
|
|
100
|
+
mpx = agt.taxi_multiplexer
|
|
101
|
+
|
|
102
|
+
else
|
|
103
|
+
raise Sink.new
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
send_file_ship = SendFileShip.new
|
|
107
|
+
tp = PlainTransporter.new(
|
|
108
|
+
mpx,
|
|
109
|
+
send_file_ship,
|
|
110
|
+
true,
|
|
111
|
+
8195,
|
|
112
|
+
false)
|
|
113
|
+
|
|
114
|
+
send_file_ship.init(rd, tp, tur)
|
|
115
|
+
sid = send_file_ship.ship_id
|
|
116
|
+
|
|
117
|
+
tur.res.set_consume_listener do |len, resume|
|
|
118
|
+
if resume
|
|
119
|
+
send_file_ship.resume_read(sid)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
mpx.add_rudder_state(rd, RudderState.new(rd, tp))
|
|
124
|
+
mpx.req_read(rd)
|
|
125
|
+
|
|
126
|
+
rescue IOError => e
|
|
127
|
+
BayLog.error_e(e)
|
|
128
|
+
raise HttpException.new(HttpStatus::INTERNAL_SERVER_ERROR, file)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
|
|
39
134
|
end
|
|
40
135
|
end
|
|
41
136
|
end
|
|
@@ -46,11 +46,15 @@ module Baykit
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
begin
|
|
49
|
-
rel_path =
|
|
50
|
-
rescue Encoding::
|
|
49
|
+
rel_path = CGI.unescape(rel_path)
|
|
50
|
+
rescue Encoding::CompatibilityError => e
|
|
51
51
|
BayLog.warn("%s Cannot decode request path: %s (encoding=%s)", tur, rel_path, tur.req.charset)
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
+
if StringUtil.set?(tur.req.charset) && tur.req.charset != "UTF-8"
|
|
55
|
+
rel_path = rel_path.force_encoding(tur.req.charset).encode("UTF-8")
|
|
56
|
+
end
|
|
57
|
+
|
|
54
58
|
real = "#{tur.town.location}/#{rel_path}"
|
|
55
59
|
|
|
56
60
|
if File.directory?(real) && @list_files
|