bayserver-docker-fcgi 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/docker/fcgi/fcg_handler.rb +14 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_inbound_handler.rb +84 -60
- data/lib/baykit/bayserver/docker/fcgi/fcg_protocol_handler.rb +2 -9
- data/lib/baykit/bayserver/docker/fcgi/fcg_warp_docker.rb +16 -7
- data/lib/baykit/bayserver/docker/fcgi/fcg_warp_handler.rb +63 -36
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac6e10f22238925d53d4b263e48e07563a08b4d353b452f5364c1d6dd817c67c
|
4
|
+
data.tar.gz: 24b6c04656d85b3eeb0884179c7598a9b32a877e50850157650b5a0ac86a22c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4bb7bbcbc6041bf6528228520d36b698fd1964e9317fe1691db84a852aaff8f05832c3a58816b53948c7ee25f086c542d11ab0885e31143ba4745f007875bd8
|
7
|
+
data.tar.gz: fb9d03f73913be62b8ea301ca66dea5f16819e602b7dfc5c674cd822cb2dbf09022a8c8e4a7b2214084a779d79a48654feef8c94e7fabfff8387ab00f4037018
|
@@ -1,47 +1,65 @@
|
|
1
1
|
require 'baykit/bayserver/protocol/protocol_exception'
|
2
|
-
require 'baykit/bayserver/
|
2
|
+
require 'baykit/bayserver/common/inbound_handler'
|
3
3
|
require 'baykit/bayserver/tours/req_content_handler'
|
4
4
|
require 'baykit/bayserver/util/cgi_util'
|
5
5
|
|
6
6
|
require 'baykit/bayserver/docker/fcgi/fcg_protocol_handler'
|
7
|
+
require 'baykit/bayserver/docker/fcgi/fcg_handler'
|
7
8
|
|
8
9
|
module Baykit
|
9
10
|
module BayServer
|
10
11
|
module Docker
|
11
12
|
module Fcgi
|
12
|
-
class FcgInboundHandler
|
13
|
+
class FcgInboundHandler
|
13
14
|
|
14
15
|
class InboundProtocolHandlerFactory
|
15
16
|
include Baykit::BayServer::Protocol::ProtocolHandlerFactory # implements
|
16
17
|
|
18
|
+
include Baykit::BayServer::Protocol
|
19
|
+
|
17
20
|
def create_protocol_handler(pkt_store)
|
18
|
-
|
21
|
+
ib_handler = FcgInboundHandler.new
|
22
|
+
cmd_unpacker = FcgCommandUnPacker.new(ib_handler)
|
23
|
+
pkt_unpacker = FcgPacketUnPacker.new(pkt_store, cmd_unpacker)
|
24
|
+
pkt_packer = PacketPacker.new()
|
25
|
+
cmd_packer = CommandPacker.new(pkt_packer, pkt_store)
|
26
|
+
|
27
|
+
proto_handler = FcgProtocolHandler.new(ib_handler, pkt_unpacker, pkt_packer, cmd_unpacker, cmd_packer, true)
|
28
|
+
ib_handler.init(proto_handler)
|
29
|
+
return proto_handler
|
19
30
|
end
|
20
31
|
end
|
21
32
|
|
22
|
-
include Baykit::BayServer::
|
33
|
+
include Baykit::BayServer::Common::InboundHandler # implements
|
34
|
+
include FcgHandler # implements
|
35
|
+
|
23
36
|
include Baykit::BayServer::Agent
|
24
37
|
include Baykit::BayServer::Tours
|
25
38
|
include Baykit::BayServer::Protocol
|
26
39
|
include Baykit::BayServer::Util
|
40
|
+
include Baykit::BayServer::Docker::Fcgi::Command
|
27
41
|
|
28
42
|
STATE_BEGIN_REQUEST = 1
|
29
43
|
STATE_READ_PARAMS = 2
|
30
44
|
STATE_READ_STDIN = 3
|
31
45
|
|
32
46
|
attr :state
|
47
|
+
attr :protocol_handler
|
33
48
|
attr :cont_len
|
34
49
|
|
35
50
|
attr :env
|
36
51
|
attr :req_id
|
37
52
|
attr :req_keep_alive
|
38
53
|
|
39
|
-
def initialize
|
40
|
-
super(pkt_store, true)
|
54
|
+
def initialize
|
41
55
|
@env = {}
|
42
|
-
|
56
|
+
reset()
|
43
57
|
end
|
44
58
|
|
59
|
+
def init(proto_handler)
|
60
|
+
@protocol_handler = proto_handler
|
61
|
+
end
|
62
|
+
|
45
63
|
def to_s()
|
46
64
|
return ClassUtil.get_local_name(self.class)
|
47
65
|
end
|
@@ -50,23 +68,22 @@ module Baykit
|
|
50
68
|
# implements Reusable
|
51
69
|
######################################################
|
52
70
|
def reset
|
53
|
-
super
|
54
71
|
@env.clear()
|
55
72
|
reset_state()
|
56
73
|
end
|
57
74
|
|
58
75
|
######################################################
|
59
|
-
# implements
|
76
|
+
# implements TourHandler
|
60
77
|
######################################################
|
61
78
|
|
62
79
|
def send_res_headers(tur)
|
63
|
-
BayLog.debug("%s PH:sendHeaders: tur=%s",
|
80
|
+
BayLog.debug("%s PH:sendHeaders: tur=%s", ship, tur)
|
64
81
|
|
65
82
|
scode = tur.res.headers.status
|
66
83
|
status = "#{scode} #{HttpStatus.description(scode)}"
|
67
84
|
tur.res.headers.set(Headers::STATUS, status)
|
68
85
|
|
69
|
-
if BayServer.harbor.trace_header
|
86
|
+
if BayServer.harbor.trace_header
|
70
87
|
BayLog.info("%s resStatus:%d", tur, tur.res.headers.status)
|
71
88
|
tur.res.headers.names().each do |name|
|
72
89
|
tur.res.headers.values(name) do |value|
|
@@ -79,32 +96,32 @@ module Baykit
|
|
79
96
|
HttpUtil.send_mime_headers(tur.res.headers, buf)
|
80
97
|
HttpUtil.send_new_line(buf)
|
81
98
|
cmd = CmdStdOut.new(tur.req.key, buf.buf, 0, buf.length)
|
82
|
-
@
|
99
|
+
@protocol_handler.post(cmd)
|
83
100
|
end
|
84
101
|
|
85
102
|
def send_res_content(tur, bytes, ofs, len, &callback)
|
86
103
|
cmd = CmdStdOut.new(tur.req.key, bytes, ofs, len);
|
87
|
-
@
|
104
|
+
@protocol_handler.post(cmd, &callback)
|
88
105
|
end
|
89
106
|
|
90
107
|
def send_end_tour(tur, keep_alive, &callback)
|
91
|
-
BayLog.debug("%s PH:endTour: tur=%s keep=%s",
|
108
|
+
BayLog.debug("%s PH:endTour: tur=%s keep=%s", ship, tur, keep_alive)
|
92
109
|
|
93
110
|
# Send empty stdout command
|
94
111
|
cmd = CmdStdOut.new(tur.req.key)
|
95
|
-
@
|
112
|
+
@protocol_handler.post(cmd)
|
96
113
|
|
97
114
|
# Send end request command
|
98
115
|
cmd = CmdEndRequest.new(tur.req.key)
|
99
116
|
|
100
117
|
ensure_func = lambda do
|
101
118
|
if !keep_alive
|
102
|
-
|
119
|
+
ship.post_close
|
103
120
|
end
|
104
121
|
end
|
105
122
|
|
106
123
|
begin
|
107
|
-
@
|
124
|
+
@protocol_handler.post(cmd) do
|
108
125
|
BayLog.debug("%s call back in sendEndTour: tur=%s keep=%s", self, tur, keep_alive)
|
109
126
|
ensure_func.call()
|
110
127
|
callback.call()
|
@@ -116,8 +133,8 @@ module Baykit
|
|
116
133
|
end
|
117
134
|
end
|
118
135
|
|
119
|
-
def
|
120
|
-
tur =
|
136
|
+
def on_protocol_error(err)
|
137
|
+
tur = ship.get_error_tour()
|
121
138
|
tur.res.send_error(Tour::TOUR_ID_NOCHECK, HttpStatus::BAD_REQUEST, err.message, err)
|
122
139
|
true
|
123
140
|
end
|
@@ -155,7 +172,7 @@ module Baykit
|
|
155
172
|
end
|
156
173
|
|
157
174
|
def handle_params(cmd)
|
158
|
-
BayLog.debug("%s handle_params req_id=%d",
|
175
|
+
BayLog.debug("%s handle_params req_id=%d", ship, cmd.req_id)
|
159
176
|
|
160
177
|
if state != STATE_READ_PARAMS
|
161
178
|
raise ProtocolException.new("Invalid FCGI command: %d state=%d", cmd.type, @state)
|
@@ -163,8 +180,8 @@ module Baykit
|
|
163
180
|
|
164
181
|
check_req_id(cmd.req_id)
|
165
182
|
|
166
|
-
BayLog.debug("%s handle_param get_tour req_id=%d",
|
167
|
-
tur =
|
183
|
+
BayLog.debug("%s handle_param get_tour req_id=%d", ship, cmd.req_id)
|
184
|
+
tur = ship.get_tour(cmd.req_id)
|
168
185
|
|
169
186
|
if cmd.params.empty?
|
170
187
|
# Header completed
|
@@ -182,28 +199,23 @@ module Baykit
|
|
182
199
|
req_cont_len = tur.req.headers.content_length()
|
183
200
|
|
184
201
|
BayLog.debug("%s read header method=%s protocol=%s uri=%s contlen=%d",
|
185
|
-
|
202
|
+
ship, tur.req.method, tur.req.protocol, tur.req.uri, @cont_len)
|
186
203
|
|
187
|
-
if BayServer.harbor.trace_header
|
204
|
+
if BayServer.harbor.trace_header
|
188
205
|
cmd.params.each do |nv|
|
189
206
|
BayLog.info("%s reqHeader: %s=%s", tur, nv[0], nv[1])
|
190
207
|
end
|
191
208
|
end
|
192
209
|
|
193
210
|
if req_cont_len > 0
|
194
|
-
tur.req.
|
195
|
-
sid = @ship.ship_id
|
196
|
-
if resume
|
197
|
-
@ship.resume(sid)
|
198
|
-
end
|
199
|
-
end
|
211
|
+
tur.req.set_limit(req_cont_len)
|
200
212
|
end
|
201
213
|
|
202
214
|
change_state(STATE_READ_STDIN)
|
203
215
|
begin
|
204
216
|
start_tour(tur)
|
205
217
|
rescue HttpException => e
|
206
|
-
BayLog.debug("%s Http error occurred: %s",
|
218
|
+
BayLog.debug("%s Http error occurred: %s", ship, e)
|
207
219
|
|
208
220
|
if req_cont_len <= 0
|
209
221
|
# no post data
|
@@ -220,14 +232,14 @@ module Baykit
|
|
220
232
|
end
|
221
233
|
|
222
234
|
else
|
223
|
-
if BayServer.harbor.trace_header
|
235
|
+
if BayServer.harbor.trace_header
|
224
236
|
BayLog.info("%s Read FcgiParam", tur)
|
225
237
|
end
|
226
238
|
|
227
239
|
cmd.params.each do |nv|
|
228
240
|
name = nv[0]
|
229
241
|
value = nv[1]
|
230
|
-
if BayServer.harbor.trace_header
|
242
|
+
if BayServer.harbor.trace_header
|
231
243
|
BayLog.info("%s param: %s=%s", tur, name, value);
|
232
244
|
end
|
233
245
|
@env[name] = value
|
@@ -257,41 +269,48 @@ module Baykit
|
|
257
269
|
end
|
258
270
|
|
259
271
|
def handle_stdin(cmd)
|
260
|
-
BayLog.debug("%s handle_stdin req_id=%d len=%d",
|
272
|
+
BayLog.debug("%s handle_stdin req_id=%d len=%d", ship, cmd.req_id, cmd.length)
|
261
273
|
|
262
274
|
if @state != STATE_READ_STDIN
|
263
275
|
raise ProtocolException.new("Invalid FCGI command: %d state=%d", cmd.type, @state)
|
264
276
|
end
|
265
277
|
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
278
|
+
begin
|
279
|
+
check_req_id(cmd.req_id)
|
280
|
+
|
281
|
+
tur = ship.get_tour(cmd.req_id)
|
282
|
+
if cmd.length == 0
|
283
|
+
# request content completed
|
284
|
+
if tur.error != nil
|
285
|
+
# Error has occurred on header completed
|
286
|
+
BayLog.debug("%s Delay send error", tur)
|
287
|
+
raise tur.error
|
288
|
+
else
|
289
|
+
begin
|
290
|
+
end_req_content(Tour::TOUR_ID_NOCHECK, tur)
|
291
|
+
return NextSocketAction::CONTINUE
|
292
|
+
end
|
274
293
|
end
|
275
|
-
tur.res.send_http_exception(Tour::TOUR_ID_NOCHECK, tur.error)
|
276
|
-
reset_state()
|
277
|
-
return NextSocketAction::WRITE
|
278
294
|
else
|
279
|
-
|
280
|
-
|
295
|
+
sid = ship.ship_id
|
296
|
+
success = tur.req.post_req_content(Tour::TOUR_ID_NOCHECK, cmd.data, cmd.start, cmd.length) do |len, resume|
|
297
|
+
if resume
|
298
|
+
ship.resume_read(sid)
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
if !success
|
303
|
+
return NextSocketAction::SUSPEND
|
304
|
+
else
|
281
305
|
return NextSocketAction::CONTINUE
|
282
|
-
rescue HttpException => e
|
283
|
-
tur.res.send_http_exception(Tour::TOUR_ID_NOCHECK, e)
|
284
|
-
return NextSocketAction::WRITE
|
285
306
|
end
|
286
307
|
end
|
287
|
-
else
|
288
|
-
success = tur.req.post_content(Tour::TOUR_ID_NOCHECK, cmd.data, cmd.start, cmd.length)
|
289
308
|
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
309
|
+
rescue HttpException => e
|
310
|
+
tur.res.send_http_exception(Tour::TOUR_ID_NOCHECK, tur.error)
|
311
|
+
tur.res.send_http_exception(Tour::TOUR_ID_NOCHECK, e)
|
312
|
+
reset_state()
|
313
|
+
return NextSocketAction::WRITE
|
295
314
|
end
|
296
315
|
end
|
297
316
|
|
@@ -300,6 +319,11 @@ module Baykit
|
|
300
319
|
end
|
301
320
|
|
302
321
|
private
|
322
|
+
|
323
|
+
def ship
|
324
|
+
return @protocol_handler.ship
|
325
|
+
end
|
326
|
+
|
303
327
|
def check_req_id(received_id)
|
304
328
|
if received_id == FcgPacket::FCGI_NULL_REQUEST_ID
|
305
329
|
raise ProtocolException.new("Invalid request id: %d", received_id)
|
@@ -310,7 +334,7 @@ module Baykit
|
|
310
334
|
end
|
311
335
|
|
312
336
|
if @req_id != received_id
|
313
|
-
BayLog.error("%s invalid request id: received=%d reqId=%d",
|
337
|
+
BayLog.error("%s invalid request id: received=%d reqId=%d", sip, received_id, req_id)
|
314
338
|
raise ProtocolException.new("Invalid request id: %d", received_id)
|
315
339
|
end
|
316
340
|
end
|
@@ -326,7 +350,7 @@ module Baykit
|
|
326
350
|
end
|
327
351
|
|
328
352
|
def end_req_content(check_id, tur)
|
329
|
-
tur.req.
|
353
|
+
tur.req.end_req_content(check_id)
|
330
354
|
reset_state()
|
331
355
|
end
|
332
356
|
|
@@ -336,7 +360,7 @@ module Baykit
|
|
336
360
|
|
337
361
|
tur.req.remote_port = @env[CgiUtil::REMOTE_PORT].to_i
|
338
362
|
tur.req.remote_address = @env[CgiUtil::REMOTE_ADDR]
|
339
|
-
tur.req.remote_host_func = lambda {
|
363
|
+
tur.req.remote_host_func = lambda { tur.req.remote_address }
|
340
364
|
|
341
365
|
tur.req.server_name = @env[CgiUtil::SERVER_NAME]
|
342
366
|
tur.req.server_address = @env[CgiUtil::SERVER_ADDR]
|
@@ -20,17 +20,10 @@ module Baykit
|
|
20
20
|
include Baykit::BayServer::Protocol
|
21
21
|
include Baykit::BayServer::Docker::Fcgi::Command
|
22
22
|
|
23
|
-
def initialize(
|
24
|
-
|
25
|
-
@packet_unpacker = FcgPacketUnPacker.new(pkt_store, @command_unpacker)
|
26
|
-
@packet_packer = PacketPacker.new()
|
27
|
-
@command_packer = CommandPacker.new(@packet_packer, pkt_store)
|
28
|
-
@server_mode = svr_mode
|
23
|
+
def initialize(fcg_handler, pkt_unpacker, pkt_packer, cmd_unpacker, cmd_packer, svr_mode)
|
24
|
+
super(pkt_unpacker, pkt_packer, cmd_unpacker, cmd_packer, fcg_handler, svr_mode)
|
29
25
|
end
|
30
26
|
|
31
|
-
def inspect()
|
32
|
-
return "PH[#{@ship}]"
|
33
|
-
end
|
34
27
|
|
35
28
|
######################################################
|
36
29
|
# Implements ProtocolHandler
|
@@ -1,18 +1,20 @@
|
|
1
1
|
require 'baykit/bayserver/bcf/package'
|
2
|
-
require 'baykit/bayserver/docker/
|
3
|
-
require 'baykit/bayserver/agent/
|
2
|
+
require 'baykit/bayserver/docker/base/warp_base'
|
3
|
+
require 'baykit/bayserver/agent/multiplexer/plain_transporter'
|
4
4
|
require 'baykit/bayserver/docker/fcgi/package'
|
5
|
+
require 'baykit/bayserver/util/io_util'
|
5
6
|
|
6
7
|
module Baykit
|
7
8
|
module BayServer
|
8
9
|
module Docker
|
9
10
|
module Fcgi
|
10
|
-
class FcgWarpDocker < Baykit::BayServer::Docker::
|
11
|
+
class FcgWarpDocker < Baykit::BayServer::Docker::Base::WarpBase
|
11
12
|
include Baykit::BayServer::Docker::Fcgi::FcgDocker # implements
|
12
13
|
|
13
14
|
include Baykit::BayServer::Bcf
|
14
15
|
include Baykit::BayServer::Protocol
|
15
|
-
include Baykit::BayServer::
|
16
|
+
include Baykit::BayServer::Util
|
17
|
+
include Baykit::BayServer::Agent::Multiplexer
|
16
18
|
|
17
19
|
attr :script_base
|
18
20
|
attr :doc_root
|
@@ -34,7 +36,7 @@ module Baykit
|
|
34
36
|
|
35
37
|
def init_key_val(kv)
|
36
38
|
case kv.key.downcase
|
37
|
-
when "
|
39
|
+
when "scriptbase"
|
38
40
|
@script_base = kv.value
|
39
41
|
when "docroot"
|
40
42
|
@doc_root = kv.value
|
@@ -58,8 +60,15 @@ module Baykit
|
|
58
60
|
return PROTO_NAME
|
59
61
|
end
|
60
62
|
|
61
|
-
def new_transporter(agt,
|
62
|
-
PlainTransporter.new(
|
63
|
+
def new_transporter(agt, rd, sip)
|
64
|
+
tp = PlainTransporter.new(
|
65
|
+
agt.net_multiplexer,
|
66
|
+
sip,
|
67
|
+
false,
|
68
|
+
IOUtil.get_sock_recv_buf_size(rd.io),
|
69
|
+
false
|
70
|
+
)
|
71
|
+
return tp
|
63
72
|
end
|
64
73
|
|
65
74
|
######################################################
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'baykit/bayserver/sink'
|
2
|
+
|
1
3
|
require 'baykit/bayserver/protocol/protocol_exception'
|
2
4
|
require 'baykit/bayserver/tours/package'
|
3
5
|
require 'baykit/bayserver/agent/next_socket_action'
|
@@ -6,7 +8,7 @@ require 'baykit/bayserver/util/string_util'
|
|
6
8
|
require 'baykit/bayserver/util/simple_buffer'
|
7
9
|
require 'baykit/bayserver/util/cgi_util'
|
8
10
|
|
9
|
-
require 'baykit/bayserver/
|
11
|
+
require 'baykit/bayserver/common/warp_data'
|
10
12
|
require 'baykit/bayserver/docker/fcgi/fcg_protocol_handler'
|
11
13
|
require 'baykit/bayserver/docker/fcgi/command/package'
|
12
14
|
require 'baykit/bayserver/docker/fcgi/fcg_params'
|
@@ -15,14 +17,24 @@ module Baykit
|
|
15
17
|
module BayServer
|
16
18
|
module Docker
|
17
19
|
module Fcgi
|
18
|
-
class FcgWarpHandler
|
19
|
-
include Baykit::BayServer::
|
20
|
+
class FcgWarpHandler
|
21
|
+
include Baykit::BayServer::Common::WarpHandler # implements
|
22
|
+
include FcgHandler
|
20
23
|
|
21
24
|
class WarpProtocolHandlerFactory
|
22
25
|
include Baykit::BayServer::Protocol::ProtocolHandlerFactory # implements
|
26
|
+
include Baykit::BayServer::Protocol
|
23
27
|
|
24
28
|
def create_protocol_handler(pkt_store)
|
25
|
-
|
29
|
+
warp_handler = FcgWarpHandler.new
|
30
|
+
cmd_unpacker = FcgCommandUnPacker.new(warp_handler)
|
31
|
+
pkt_unpacker = FcgPacketUnPacker.new(pkt_store, cmd_unpacker)
|
32
|
+
pkt_packer = PacketPacker.new()
|
33
|
+
cmd_packer = CommandPacker.new(pkt_packer, pkt_store)
|
34
|
+
|
35
|
+
proto_handler = FcgProtocolHandler.new(warp_handler, pkt_unpacker, pkt_packer, cmd_unpacker, cmd_packer, false)
|
36
|
+
warp_handler.init(proto_handler)
|
37
|
+
return proto_handler
|
26
38
|
end
|
27
39
|
end
|
28
40
|
|
@@ -30,13 +42,14 @@ module Baykit
|
|
30
42
|
include Baykit::BayServer::Protocol
|
31
43
|
include Baykit::BayServer::Tours
|
32
44
|
include Baykit::BayServer::Util
|
33
|
-
include Baykit::BayServer::
|
45
|
+
include Baykit::BayServer::Common
|
34
46
|
include Baykit::BayServer::Docker::Fcgi::Command
|
35
47
|
|
36
48
|
|
37
49
|
STATE_READ_HEADER = 1
|
38
50
|
STATE_READ_CONTENT = 2
|
39
51
|
|
52
|
+
attr :protocol_handler
|
40
53
|
attr :cur_warp_id
|
41
54
|
attr :state
|
42
55
|
attr :line_buf
|
@@ -45,15 +58,17 @@ module Baykit
|
|
45
58
|
attr :last
|
46
59
|
attr :data
|
47
60
|
|
48
|
-
def initialize
|
49
|
-
super(pkt_store, false)
|
61
|
+
def initialize
|
50
62
|
@cur_warp_id = 0
|
51
63
|
@line_buf = SimpleBuffer.new
|
52
64
|
reset()
|
53
65
|
end
|
54
66
|
|
67
|
+
def init(proto_handler)
|
68
|
+
@protocol_handler = proto_handler
|
69
|
+
end
|
70
|
+
|
55
71
|
def reset
|
56
|
-
super
|
57
72
|
reset_state
|
58
73
|
@line_buf.reset
|
59
74
|
@pos = 0
|
@@ -71,28 +86,33 @@ module Baykit
|
|
71
86
|
end
|
72
87
|
|
73
88
|
def new_warp_data(warp_id)
|
74
|
-
return WarpData.new(
|
89
|
+
return WarpData.new(ship, warp_id)
|
75
90
|
end
|
76
91
|
|
77
|
-
|
92
|
+
######################################################
|
93
|
+
# Implements TourHandler
|
94
|
+
######################################################
|
95
|
+
|
96
|
+
def send_res_headers(tur)
|
78
97
|
send_begin_req(tur)
|
79
98
|
send_params(tur)
|
80
99
|
end
|
81
100
|
|
82
|
-
def
|
101
|
+
def send_res_content(tur, buf, start, len, &callback)
|
83
102
|
send_stdin(tur, buf, start, len, &callback)
|
84
103
|
end
|
85
104
|
|
86
|
-
def
|
87
|
-
callback = lambda do
|
88
|
-
@ship.agent.non_blocking_handler.ask_to_read(@ship.socket)
|
89
|
-
end
|
105
|
+
def send_end_tour(tur, keep_alive, &callback)
|
90
106
|
send_stdin(tur, nil, 0, 0, &callback)
|
91
107
|
end
|
92
108
|
|
93
109
|
def verify_protocol(proto)
|
94
110
|
end
|
95
111
|
|
112
|
+
def on_protocol_error(e)
|
113
|
+
raise Sink.new
|
114
|
+
end
|
115
|
+
|
96
116
|
|
97
117
|
######################################################
|
98
118
|
# Implements FcgCommandHandler
|
@@ -103,7 +123,7 @@ module Baykit
|
|
103
123
|
end
|
104
124
|
|
105
125
|
def handle_end_request(cmd)
|
106
|
-
tur =
|
126
|
+
tur = ship.get_tour(cmd.req_id)
|
107
127
|
end_req_content(tur)
|
108
128
|
NextSocketAction::CONTINUE
|
109
129
|
end
|
@@ -123,10 +143,10 @@ module Baykit
|
|
123
143
|
end
|
124
144
|
|
125
145
|
def handle_stdout(cmd)
|
126
|
-
BayLog.debug("%s handle_stdout req_id=%d len=%d",
|
146
|
+
BayLog.debug("%s handle_stdout req_id=%d len=%d", ship, cmd.req_id, cmd.length)
|
127
147
|
#BayLog.debug "#{self} handle_stdout data=#{cmd.data}"
|
128
148
|
|
129
|
-
tur =
|
149
|
+
tur = ship.get_tour(cmd.req_id)
|
130
150
|
if tur == nil
|
131
151
|
raise Sink.new("Tour not found")
|
132
152
|
end
|
@@ -146,9 +166,9 @@ module Baykit
|
|
146
166
|
end
|
147
167
|
|
148
168
|
if @pos < @last
|
149
|
-
BayLog.debug("%s fcgi: pos=%d last=%d len=%d",
|
169
|
+
BayLog.debug("%s fcgi: pos=%d last=%d len=%d", ship, @pos, @last, @last - @pos)
|
150
170
|
if @state == STATE_READ_CONTENT
|
151
|
-
available = tur.res.
|
171
|
+
available = tur.res.send_res_content(Tour::TOUR_ID_NOCHECK, @data, @pos, @last - @pos)
|
152
172
|
if !available
|
153
173
|
return NextSocketAction::SUSPEND
|
154
174
|
end
|
@@ -158,6 +178,10 @@ module Baykit
|
|
158
178
|
NextSocketAction::CONTINUE
|
159
179
|
end
|
160
180
|
|
181
|
+
######################################################
|
182
|
+
# Implements FcgCommandHandler
|
183
|
+
######################################################
|
184
|
+
|
161
185
|
######################################################
|
162
186
|
# Custom methods
|
163
187
|
######################################################
|
@@ -179,11 +203,11 @@ module Baykit
|
|
179
203
|
tur.res.headers.remove(Headers::STATUS)
|
180
204
|
end
|
181
205
|
|
182
|
-
BayLog.debug("%s fcgi: read header status=%d contlen=%d",
|
183
|
-
sid =
|
206
|
+
BayLog.debug("%s fcgi: read header status=%d contlen=%d", ship, tur.res.headers.status, wdat.res_headers.content_length())
|
207
|
+
sid = ship.ship_id
|
184
208
|
tur.res.set_consume_listener do |len, resume|
|
185
209
|
if resume
|
186
|
-
|
210
|
+
ship.resume_read(sid)
|
187
211
|
end
|
188
212
|
end
|
189
213
|
|
@@ -229,8 +253,8 @@ module Baykit
|
|
229
253
|
end
|
230
254
|
|
231
255
|
headers.add(name, value)
|
232
|
-
if BayServer.harbor.trace_header
|
233
|
-
BayLog.info("%s fcgi_warp: resHeader: %s=%s",
|
256
|
+
if BayServer.harbor.trace_header
|
257
|
+
BayLog.info("%s fcgi_warp: resHeader: %s=%s", ship, name, value)
|
234
258
|
end
|
235
259
|
end
|
236
260
|
@line_buf.reset()
|
@@ -242,8 +266,8 @@ module Baykit
|
|
242
266
|
end
|
243
267
|
|
244
268
|
def end_req_content(tur)
|
245
|
-
|
246
|
-
tur.res.
|
269
|
+
ship.end_warp_tour(tur)
|
270
|
+
tur.res.end_res_content(Tour::TOUR_ID_NOCHECK)
|
247
271
|
reset_state()
|
248
272
|
end
|
249
273
|
|
@@ -258,18 +282,18 @@ module Baykit
|
|
258
282
|
|
259
283
|
def send_stdin(tur, data, ofs, len, &callback)
|
260
284
|
cmd = CmdStdIn.new(WarpData.get(tur).warp_id, data, ofs, len)
|
261
|
-
|
285
|
+
ship.post(cmd, &callback)
|
262
286
|
end
|
263
287
|
|
264
288
|
def send_begin_req(tur)
|
265
289
|
cmd = CmdBeginRequest.new(WarpData.get(tur).warp_id)
|
266
290
|
cmd.role = CmdBeginRequest::FCGI_RESPONDER
|
267
291
|
cmd.keep_conn = true
|
268
|
-
|
292
|
+
ship.post(cmd)
|
269
293
|
end
|
270
294
|
|
271
295
|
def send_params(tur)
|
272
|
-
script_base =
|
296
|
+
script_base = ship.docker.script_base
|
273
297
|
if script_base == nil
|
274
298
|
script_base = tur.town.location
|
275
299
|
end
|
@@ -278,7 +302,7 @@ module Baykit
|
|
278
302
|
raise StandardError.new("#{tur.town} Could not create SCRIPT_FILENAME. Location of town not specified.")
|
279
303
|
end
|
280
304
|
|
281
|
-
doc_root =
|
305
|
+
doc_root = ship.docker.doc_root
|
282
306
|
if doc_root == nil
|
283
307
|
doc_root = tur.town.location
|
284
308
|
end
|
@@ -298,7 +322,7 @@ module Baykit
|
|
298
322
|
end
|
299
323
|
end
|
300
324
|
|
301
|
-
script_fname = "proxy:fcgi://#{
|
325
|
+
script_fname = "proxy:fcgi://#{ship.docker.host}:#{ship.docker.port}#{script_fname}"
|
302
326
|
cmd.add_param(CgiUtil::SCRIPT_FILENAME, script_fname)
|
303
327
|
|
304
328
|
# Add FCGI params
|
@@ -308,18 +332,21 @@ module Baykit
|
|
308
332
|
#cmd.add_param(FcgParams::X_FORWARDED_PROTO, tur.is_secure ? "https" : "http")
|
309
333
|
#cmd.add_param(FcgParams::X_FORWARDED_PORT, tur.req.req_port.to_s)
|
310
334
|
|
311
|
-
if BayServer.harbor.trace_header
|
335
|
+
if BayServer.harbor.trace_header
|
312
336
|
cmd.params.each do |kv|
|
313
|
-
BayLog.info("%s fcgi_warp: env: %s=%s",
|
337
|
+
BayLog.info("%s fcgi_warp: env: %s=%s", ship, kv[0], kv[1])
|
314
338
|
end
|
315
339
|
end
|
316
340
|
|
317
|
-
|
341
|
+
ship.post(cmd)
|
318
342
|
|
319
343
|
cmd_params_end = CmdParams.new(WarpData.get(tur).warp_id)
|
320
|
-
|
344
|
+
ship.post(cmd_params_end)
|
321
345
|
end
|
322
346
|
|
347
|
+
def ship
|
348
|
+
return @protocol_handler.ship
|
349
|
+
end
|
323
350
|
end
|
324
351
|
end
|
325
352
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bayserver-docker-fcgi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michisuke-P
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bayserver-core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 3.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 3.0.0
|
27
27
|
description: BayServer is one of the high-speed web servers. It operates as a single-threaded,
|
28
28
|
asynchronous server, which makes it exceptionally fast. It also supports multi-core
|
29
29
|
processors, harnessing the full potential of the CPU's capabilities.
|
@@ -46,6 +46,7 @@ files:
|
|
46
46
|
- lib/baykit/bayserver/docker/fcgi/fcg_command_handler.rb
|
47
47
|
- lib/baykit/bayserver/docker/fcgi/fcg_command_unpacker.rb
|
48
48
|
- lib/baykit/bayserver/docker/fcgi/fcg_docker.rb
|
49
|
+
- lib/baykit/bayserver/docker/fcgi/fcg_handler.rb
|
49
50
|
- lib/baykit/bayserver/docker/fcgi/fcg_inbound_handler.rb
|
50
51
|
- lib/baykit/bayserver/docker/fcgi/fcg_packet.rb
|
51
52
|
- lib/baykit/bayserver/docker/fcgi/fcg_packet_factory.rb
|