bayserver-core 2.3.2 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|