bayserver-docker-fcgi 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/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
|