bayserver-docker-fcgi 2.2.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.
Files changed (25) hide show
  1. checksums.yaml +7 -0
  2. data/lib/baykit/bayserver/docker/fcgi/command/cmd_begin_request.rb +66 -0
  3. data/lib/baykit/bayserver/docker/fcgi/command/cmd_end_request.rb +66 -0
  4. data/lib/baykit/bayserver/docker/fcgi/command/cmd_params.rb +160 -0
  5. data/lib/baykit/bayserver/docker/fcgi/command/cmd_stderr.rb +31 -0
  6. data/lib/baykit/bayserver/docker/fcgi/command/cmd_stdin.rb +33 -0
  7. data/lib/baykit/bayserver/docker/fcgi/command/cmd_stdout.rb +31 -0
  8. data/lib/baykit/bayserver/docker/fcgi/command/in_out_command_base.rb +57 -0
  9. data/lib/baykit/bayserver/docker/fcgi/command/package.rb +6 -0
  10. data/lib/baykit/bayserver/docker/fcgi/fcg_command.rb +40 -0
  11. data/lib/baykit/bayserver/docker/fcgi/fcg_command_handler.rb +24 -0
  12. data/lib/baykit/bayserver/docker/fcgi/fcg_command_unpacker.rb +56 -0
  13. data/lib/baykit/bayserver/docker/fcgi/fcg_docker.rb +14 -0
  14. data/lib/baykit/bayserver/docker/fcgi/fcg_inbound_handler.rb +354 -0
  15. data/lib/baykit/bayserver/docker/fcgi/fcg_packet.rb +56 -0
  16. data/lib/baykit/bayserver/docker/fcgi/fcg_packet_factory.rb +17 -0
  17. data/lib/baykit/bayserver/docker/fcgi/fcg_packet_unpacker.rb +201 -0
  18. data/lib/baykit/bayserver/docker/fcgi/fcg_params.rb +46 -0
  19. data/lib/baykit/bayserver/docker/fcgi/fcg_port_docker.rb +52 -0
  20. data/lib/baykit/bayserver/docker/fcgi/fcg_protocol_handler.rb +54 -0
  21. data/lib/baykit/bayserver/docker/fcgi/fcg_type.rb +23 -0
  22. data/lib/baykit/bayserver/docker/fcgi/fcg_warp_docker.rb +81 -0
  23. data/lib/baykit/bayserver/docker/fcgi/fcg_warp_handler.rb +324 -0
  24. data/lib/baykit/bayserver/docker/fcgi/package.rb +12 -0
  25. metadata +79 -0
@@ -0,0 +1,52 @@
1
+ require 'baykit/bayserver/docker/base/port_base'
2
+ require 'baykit/bayserver/protocol/packet_store'
3
+ require 'baykit/bayserver/docker/fcgi/package'
4
+
5
+
6
+ module Baykit
7
+ module BayServer
8
+ module Docker
9
+ module Fcgi
10
+ class FcgPortDocker < Baykit::BayServer::Docker::Base::PortBase
11
+ include Baykit::BayServer::Docker::Fcgi::FcgDocker # implements
12
+
13
+ include Baykit::BayServer::Protocol
14
+ include Baykit::BayServer::WaterCraft
15
+ include Baykit::BayServer::Docker::Base
16
+
17
+ ######################################################
18
+ # Implements Port
19
+ ######################################################
20
+ def protocol()
21
+ return PROTO_NAME
22
+ end
23
+
24
+ ######################################################
25
+ # Implements PortBase
26
+ ######################################################
27
+ def support_anchored()
28
+ return true
29
+ end
30
+
31
+ def support_unanchored()
32
+ return false
33
+ end
34
+
35
+ ######################################################
36
+ # Class initializer
37
+ ######################################################
38
+ begin
39
+ PacketStore.register_protocol(
40
+ PROTO_NAME,
41
+ FcgPacketFactory.new())
42
+ ProtocolHandlerStore.register_protocol(
43
+ PROTO_NAME,
44
+ true,
45
+ FcgInboundHandler::InboundProtocolHandlerFactory.new())
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
@@ -0,0 +1,54 @@
1
+ require 'baykit/bayserver/protocol/package'
2
+ require 'baykit/bayserver/tours/package'
3
+
4
+ require 'baykit/bayserver/util/http_util'
5
+ require 'baykit/bayserver/util/simple_buffer'
6
+
7
+ require 'baykit/bayserver/docker/fcgi/command/package'
8
+ require 'baykit/bayserver/docker/fcgi/package'
9
+
10
+
11
+ module Baykit
12
+ module BayServer
13
+ module Docker
14
+ module Fcgi
15
+ class FcgProtocolHandler < Baykit::BayServer::Protocol::ProtocolHandler
16
+ include Baykit::BayServer::Docker::Fcgi::FcgCommandHandler # implements
17
+
18
+ include Baykit::BayServer::Util
19
+ include Baykit::BayServer::Agent
20
+ include Baykit::BayServer::Protocol
21
+ include Baykit::BayServer::Docker::Fcgi::Command
22
+
23
+ def initialize(pkt_store, svr_mode)
24
+ @command_unpacker = FcgCommandUnPacker.new(self)
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
29
+ end
30
+
31
+ def inspect()
32
+ return "PH[#{@ship}]"
33
+ end
34
+
35
+ ######################################################
36
+ # Implements ProtocolHandler
37
+ ######################################################
38
+ def protocol()
39
+ return FcgDocker::PROTO_NAME
40
+ end
41
+
42
+ def max_req_packet_data_size
43
+ FcgPacket::MAXLEN
44
+ end
45
+
46
+ def max_res_packet_data_size
47
+ FcgPacket::MAXLEN
48
+ end
49
+
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,23 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Docker
4
+ module Fcgi
5
+ class FcgType
6
+
7
+ BEGIN_REQUEST = 1
8
+ ABORT_REQUEST = 2
9
+ END_REQUEST = 3
10
+ PARAMS = 4
11
+ STDIN = 5
12
+ STDOUT = 6
13
+ STDERR = 7
14
+ DATA = 8
15
+ GET_VALUES = 9
16
+ GET_VALUES_RESULT = 10
17
+ UNKNOWN_TYPE = 11
18
+
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,81 @@
1
+ require 'baykit/bayserver/bcf/package'
2
+ require 'baykit/bayserver/docker/warp/warp_docker'
3
+ require 'baykit/bayserver/agent/transporter/plain_transporter'
4
+ require 'baykit/bayserver/docker/fcgi/package'
5
+
6
+ module Baykit
7
+ module BayServer
8
+ module Docker
9
+ module Fcgi
10
+ class FcgWarpDocker < Baykit::BayServer::Docker::Warp::WarpDocker
11
+ include Baykit::BayServer::Docker::Fcgi::FcgDocker # implements
12
+
13
+ include Baykit::BayServer::Bcf
14
+ include Baykit::BayServer::Protocol
15
+ include Baykit::BayServer::Agent::Transporter
16
+
17
+ attr :script_base
18
+ attr :doc_root
19
+
20
+ ######################################################
21
+ # Implements Docker
22
+ ######################################################
23
+ def init(elm, parent)
24
+ super
25
+
26
+ if @script_base == nil
27
+ BayLog.warn "FCGI: docRoot is not specified"
28
+ end
29
+ end
30
+
31
+ ######################################################
32
+ # Implements DockerBase
33
+ ######################################################
34
+
35
+ def init_key_val(kv)
36
+ case kv.key.downcase
37
+ when "scritbase"
38
+ @script_base = kv.value
39
+ when "docroot"
40
+ @doc_root = kv.value
41
+ else
42
+ return super
43
+ end
44
+ true
45
+ end
46
+
47
+ ######################################################
48
+ # Implements WarpDocker
49
+ ######################################################
50
+ def secure()
51
+ return false
52
+ end
53
+
54
+ ######################################################
55
+ # Implements WarpDockerBase
56
+ ######################################################
57
+ def protocol()
58
+ return PROTO_NAME
59
+ end
60
+
61
+ def new_transporter(agt, skt)
62
+ PlainTransporter.new(false, IOUtil.get_sock_recv_buf_size(skt))
63
+ end
64
+
65
+ ######################################################
66
+ # Class initializer
67
+ ######################################################
68
+ begin
69
+ PacketStore.register_protocol(
70
+ PROTO_NAME,
71
+ FcgPacketFactory.new())
72
+ ProtocolHandlerStore.register_protocol(
73
+ PROTO_NAME,
74
+ false,
75
+ FcgWarpHandler::WarpProtocolHandlerFactory.new())
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,324 @@
1
+ require 'baykit/bayserver/protocol/protocol_exception'
2
+ require 'baykit/bayserver/tours/package'
3
+ require 'baykit/bayserver/agent/next_socket_action'
4
+
5
+ require 'baykit/bayserver/util/string_util'
6
+ require 'baykit/bayserver/util/simple_buffer'
7
+ require 'baykit/bayserver/util/cgi_util'
8
+
9
+ require 'baykit/bayserver/docker/warp/warp_data'
10
+ require 'baykit/bayserver/docker/fcgi/fcg_protocol_handler'
11
+ require 'baykit/bayserver/docker/fcgi/command/package'
12
+ require 'baykit/bayserver/docker/fcgi/fcg_params'
13
+
14
+ module Baykit
15
+ module BayServer
16
+ module Docker
17
+ module Fcgi
18
+ class FcgWarpHandler < Baykit::BayServer::Docker::Fcgi::FcgProtocolHandler
19
+ include Baykit::BayServer::Docker::Warp::WarpHandler # implements
20
+
21
+ class WarpProtocolHandlerFactory
22
+ include Baykit::BayServer::Protocol::ProtocolHandlerFactory # implements
23
+
24
+ def create_protocol_handler(pkt_store)
25
+ return FcgWarpHandler.new(pkt_store)
26
+ end
27
+ end
28
+
29
+ include Baykit::BayServer::Agent
30
+ include Baykit::BayServer::Protocol
31
+ include Baykit::BayServer::Tours
32
+ include Baykit::BayServer::Util
33
+ include Baykit::BayServer::Docker::Warp
34
+ include Baykit::BayServer::Docker::Fcgi::Command
35
+
36
+
37
+ STATE_READ_HEADER = 1
38
+ STATE_READ_CONTENT = 2
39
+
40
+ attr :cur_warp_id
41
+ attr :state
42
+ attr :line_buf
43
+
44
+ attr :pos
45
+ attr :last
46
+ attr :data
47
+
48
+ def initialize(pkt_store)
49
+ super(pkt_store, false)
50
+ @cur_warp_id = 0
51
+ @line_buf = SimpleBuffer.new
52
+ reset()
53
+ end
54
+
55
+ def reset
56
+ super
57
+ reset_state
58
+ @line_buf.reset
59
+ @pos = 0
60
+ @last = 0
61
+ @data = nil
62
+ end
63
+
64
+
65
+ ######################################################
66
+ # Implements WarpHandler
67
+ ######################################################
68
+ def next_warp_id
69
+ @cur_warp_id += 1
70
+ return @cur_warp_id
71
+ end
72
+
73
+ def new_warp_data(warp_id)
74
+ return WarpData.new(@ship, warp_id)
75
+ end
76
+
77
+ def post_warp_headers(tur)
78
+ send_begin_req(tur)
79
+ send_params(tur)
80
+ end
81
+
82
+ def post_warp_contents(tur, buf, start, len, &callback)
83
+ send_stdin(tur, buf, start, len, &callback)
84
+ end
85
+
86
+ def post_warp_end(tur)
87
+ send_stdin(tur, nil, 0, 0)
88
+ end
89
+
90
+ def verify_protocol(proto)
91
+ end
92
+
93
+
94
+ ######################################################
95
+ # Implements FcgCommandHandler
96
+ ######################################################
97
+
98
+ def handle_begin_request(cmd)
99
+ raise ProtocolException.new("Invalid FCGI command: %d", cmd.type)
100
+ end
101
+
102
+ def handle_end_request(cmd)
103
+ tur = @ship.get_tour(cmd.req_id)
104
+ end_req_content(tur)
105
+ NextSocketAction::CONTINUE
106
+ end
107
+
108
+ def handle_params(cmd)
109
+ raise ProtocolException.new("Invalid FCGI command: %d", cmd.type)
110
+ end
111
+
112
+ def handle_stderr(cmd)
113
+ msg = cmd.data[cmd.start .. cmd.start + cmd.length + 1]
114
+ BayLog.error("%s server error: %s", self, msg)
115
+ NextSocketAction::CONTINUE
116
+ end
117
+
118
+ def handle_stdin(cmd)
119
+ raise ProtocolException.new("Invalid FCGI command: %d", cmd.type)
120
+ end
121
+
122
+ def handle_stdout(cmd)
123
+ BayLog.debug("%s handle_stdout req_id=%d len=%d", @ship, cmd.req_id, cmd.length)
124
+ #BayLog.debug "#{self} handle_stdout data=#{cmd.data}"
125
+
126
+ tur = @ship.get_tour(cmd.req_id)
127
+ if tur == nil
128
+ raise Sink.new("Tour not found")
129
+ end
130
+
131
+ if cmd.length == 0
132
+ # stdout end
133
+ reset_state
134
+ return NextSocketAction::CONTINUE
135
+ end
136
+
137
+ @data = cmd.data
138
+ @pos = cmd.start
139
+ @last = cmd.start + cmd.length
140
+
141
+ if @state == STATE_READ_HEADER
142
+ read_header(tur)
143
+ end
144
+
145
+ if @pos < @last
146
+ BayLog.debug("%s fcgi: pos=%d last=%d len=%d", @ship, @pos, @last, @last - @pos)
147
+ if @state == STATE_READ_CONTENT
148
+ available = tur.res.send_content(Tour::TOUR_ID_NOCHECK, @data, @pos, @last - @pos)
149
+ if !available
150
+ return NextSocketAction::SUSPEND
151
+ end
152
+ end
153
+ end
154
+
155
+ NextSocketAction::CONTINUE
156
+ end
157
+
158
+ ######################################################
159
+ # Custom methods
160
+ ######################################################
161
+ def read_header(tur)
162
+ wdat = WarpData.get(tur)
163
+
164
+ header_finished = parse_header(wdat.res_headers)
165
+ if header_finished
166
+ wdat.res_headers.copy_to(tur.res.headers)
167
+
168
+ # Check HTTP Status from headers
169
+ status = wdat.res_headers.get(Headers::STATUS)
170
+ #BayLog.debug "#{self} fcgi: status=#{wdat.res_headers.headers}"
171
+ #BayLog.debug "#{self} fcgi: status=#{status}"
172
+ if StringUtil.set?(status)
173
+ stlist = status.split(" ")
174
+ #BayLog.debug("#{self} fcgi: status list=#{stlist}")
175
+ tur.res.headers.status = stlist[0].to_i
176
+ tur.res.headers.remove(Headers::STATUS)
177
+ end
178
+
179
+ BayLog.debug("%s fcgi: read header status=%d contlen=%d", @ship, tur.res.headers.status, wdat.res_headers.content_length())
180
+ sid = @ship.ship_id
181
+ tur.res.set_consume_listener do |len, resume|
182
+ if resume
183
+ @ship.resume(sid)
184
+ end
185
+ end
186
+
187
+ tur.res.send_headers(Tour::TOUR_ID_NOCHECK)
188
+ change_state(STATE_READ_CONTENT)
189
+ end
190
+
191
+ end
192
+
193
+ def read_content(tur)
194
+ tur.res.send_content(Tour::TOUR_ID_NOCHECK, @data, @pos, @last - @pos)
195
+ end
196
+
197
+ def parse_header(headers)
198
+
199
+ while true
200
+ if @pos == @last
201
+ # no byte data
202
+ break
203
+ end
204
+
205
+ c = @data[@pos]
206
+ @pos += 1
207
+
208
+ if c == CharUtil::CR
209
+ next
210
+ elsif c == CharUtil::LF
211
+ line = @line_buf.buf
212
+
213
+ if line.length == 0
214
+ return true
215
+ end
216
+
217
+ colon_pos = line.index(':')
218
+ if colon_pos == nil
219
+ raise ProtocolException.new("fcgi: Header line of server is invalid: %s", line)
220
+ else
221
+ name = line[0 .. colon_pos - 1].strip
222
+ value = line[colon_pos + 1 .. -1].strip
223
+
224
+ if StringUtil.empty?(name) || StringUtil.empty?(value)
225
+ raise ProtocolException("fcgi: Header line of server is invalid: %s", line)
226
+ end
227
+
228
+ headers.add(name, value)
229
+ if BayServer.harbor.trace_header?
230
+ BayLog.info("%s fcgi_warp: resHeader: %s=%s", @ship, name, value)
231
+ end
232
+ end
233
+ @line_buf.reset()
234
+ else
235
+ @line_buf.put(c)
236
+ end
237
+ end
238
+ false
239
+ end
240
+
241
+ def end_req_content(tur)
242
+ @ship.end_warp_tour(tur)
243
+ tur.res.end_content(Tour::TOUR_ID_NOCHECK)
244
+ reset_state()
245
+ end
246
+
247
+ def change_state(new_state)
248
+ @state = new_state
249
+ end
250
+
251
+ def reset_state()
252
+ change_state(STATE_READ_HEADER)
253
+ end
254
+
255
+
256
+ def send_stdin(tur, data, ofs, len, &callback)
257
+ cmd = CmdStdIn.new(WarpData.get(tur).warp_id, data, ofs, len)
258
+ @command_packer.post(@ship, cmd, &callback)
259
+ end
260
+
261
+ def send_begin_req(tur)
262
+ cmd = CmdBeginRequest.new(WarpData.get(tur).warp_id)
263
+ cmd.role = CmdBeginRequest::FCGI_RESPONDER
264
+ cmd.keep_conn = true
265
+ @command_packer.post(@ship, cmd)
266
+ end
267
+
268
+ def send_params(tur)
269
+ script_base = @ship.docker.script_base
270
+ if script_base == nil
271
+ script_base = tur.town.location
272
+ end
273
+
274
+ if StringUtil.empty?(script_base)
275
+ raise StandardError.new("#{tur.town} Could not create SCRIPT_FILENAME. Location of town not specified.")
276
+ end
277
+
278
+ doc_root = @ship.docker.doc_root
279
+ if doc_root == nil
280
+ doc_root = tur.town.location
281
+ end
282
+
283
+ if StringUtil.empty?(doc_root)
284
+ raise StandardError.new("#{tur.town} docRoot of fcgi docker or location of town is not specified.")
285
+ end
286
+
287
+ warp_id = WarpData.get(tur).warp_id
288
+ cmd = CmdParams.new(warp_id)
289
+ script_fname = nil
290
+ CgiUtil.get_env(tur.town.name, doc_root, script_base, tur) do |name, value|
291
+ if name == CgiUtil::SCRIPT_FILENAME
292
+ script_fname = value
293
+ else
294
+ cmd.add_param(name, value)
295
+ end
296
+ end
297
+
298
+ script_fname = "proxy:fcgi://#{@ship.docker.host}:#{@ship.docker.port}#{script_fname}"
299
+ cmd.add_param(CgiUtil::SCRIPT_FILENAME, script_fname)
300
+
301
+ # Add FCGI params
302
+ cmd.add_param(FcgParams::CONTEXT_PREFIX, "")
303
+ cmd.add_param(FcgParams::UNIQUE_ID, DateTime.now.to_s)
304
+ #cmd.add_param(FcgParams::X_FORWARDED_FOR, tur.req.remote_address)
305
+ #cmd.add_param(FcgParams::X_FORWARDED_PROTO, tur.is_secure ? "https" : "http")
306
+ #cmd.add_param(FcgParams::X_FORWARDED_PORT, tur.req.req_port.to_s)
307
+
308
+ if BayServer.harbor.trace_header?
309
+ cmd.params.each do |kv|
310
+ BayLog.info("%s fcgi_warp: env: %s=%s", @ship, kv[0], kv[1])
311
+ end
312
+ end
313
+
314
+ @command_packer.post(@ship, cmd)
315
+
316
+ cmd_params_end = CmdParams.new(WarpData.get(tur).warp_id)
317
+ @command_packer.post(@ship, cmd_params_end)
318
+ end
319
+
320
+ end
321
+ end
322
+ end
323
+ end
324
+ end
@@ -0,0 +1,12 @@
1
+ require 'baykit/bayserver/docker/fcgi/fcg_command'
2
+ require 'baykit/bayserver/docker/fcgi/fcg_command_handler'
3
+ require 'baykit/bayserver/docker/fcgi/fcg_command_unpacker'
4
+ require 'baykit/bayserver/docker/fcgi/fcg_inbound_handler'
5
+ require 'baykit/bayserver/docker/fcgi/fcg_docker'
6
+ require 'baykit/bayserver/docker/fcgi/fcg_packet'
7
+ require 'baykit/bayserver/docker/fcgi/fcg_packet_factory'
8
+ require 'baykit/bayserver/docker/fcgi/fcg_packet_unpacker'
9
+ require 'baykit/bayserver/docker/fcgi/fcg_port_docker'
10
+ require 'baykit/bayserver/docker/fcgi/fcg_protocol_handler'
11
+ require 'baykit/bayserver/docker/fcgi/fcg_type'
12
+ require 'baykit/bayserver/docker/fcgi/fcg_warp_handler'
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bayserver-docker-fcgi
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Michisuke-P
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-08-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bayserver-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 2.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 2.2.0
27
+ description: AJP docker of BayServer
28
+ email: michisukep@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/baykit/bayserver/docker/fcgi/command/cmd_begin_request.rb
34
+ - lib/baykit/bayserver/docker/fcgi/command/cmd_end_request.rb
35
+ - lib/baykit/bayserver/docker/fcgi/command/cmd_params.rb
36
+ - lib/baykit/bayserver/docker/fcgi/command/cmd_stderr.rb
37
+ - lib/baykit/bayserver/docker/fcgi/command/cmd_stdin.rb
38
+ - lib/baykit/bayserver/docker/fcgi/command/cmd_stdout.rb
39
+ - lib/baykit/bayserver/docker/fcgi/command/in_out_command_base.rb
40
+ - lib/baykit/bayserver/docker/fcgi/command/package.rb
41
+ - lib/baykit/bayserver/docker/fcgi/fcg_command.rb
42
+ - lib/baykit/bayserver/docker/fcgi/fcg_command_handler.rb
43
+ - lib/baykit/bayserver/docker/fcgi/fcg_command_unpacker.rb
44
+ - lib/baykit/bayserver/docker/fcgi/fcg_docker.rb
45
+ - lib/baykit/bayserver/docker/fcgi/fcg_inbound_handler.rb
46
+ - lib/baykit/bayserver/docker/fcgi/fcg_packet.rb
47
+ - lib/baykit/bayserver/docker/fcgi/fcg_packet_factory.rb
48
+ - lib/baykit/bayserver/docker/fcgi/fcg_packet_unpacker.rb
49
+ - lib/baykit/bayserver/docker/fcgi/fcg_params.rb
50
+ - lib/baykit/bayserver/docker/fcgi/fcg_port_docker.rb
51
+ - lib/baykit/bayserver/docker/fcgi/fcg_protocol_handler.rb
52
+ - lib/baykit/bayserver/docker/fcgi/fcg_type.rb
53
+ - lib/baykit/bayserver/docker/fcgi/fcg_warp_docker.rb
54
+ - lib/baykit/bayserver/docker/fcgi/fcg_warp_handler.rb
55
+ - lib/baykit/bayserver/docker/fcgi/package.rb
56
+ homepage: https://baykit.yokohama
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubygems_version: 3.1.6
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: AJP docker of BayServer
79
+ test_files: []