bayserver-docker-ajp 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 (24) hide show
  1. checksums.yaml +7 -0
  2. data/lib/baykit/bayserver/docker/ajp/ajp_command.rb +55 -0
  3. data/lib/baykit/bayserver/docker/ajp/ajp_command_handler.rb +26 -0
  4. data/lib/baykit/bayserver/docker/ajp/ajp_command_unpacker.rb +66 -0
  5. data/lib/baykit/bayserver/docker/ajp/ajp_docker.rb +15 -0
  6. data/lib/baykit/bayserver/docker/ajp/ajp_inbound_handler.rb +292 -0
  7. data/lib/baykit/bayserver/docker/ajp/ajp_packet.rb +112 -0
  8. data/lib/baykit/bayserver/docker/ajp/ajp_packet_factory.rb +18 -0
  9. data/lib/baykit/bayserver/docker/ajp/ajp_packet_unpacker.rb +150 -0
  10. data/lib/baykit/bayserver/docker/ajp/ajp_port_docker.rb +52 -0
  11. data/lib/baykit/bayserver/docker/ajp/ajp_protocol_handler.rb +55 -0
  12. data/lib/baykit/bayserver/docker/ajp/ajp_type.rb +22 -0
  13. data/lib/baykit/bayserver/docker/ajp/ajp_warp_docker.rb +54 -0
  14. data/lib/baykit/bayserver/docker/ajp/ajp_warp_handler.rb +258 -0
  15. data/lib/baykit/bayserver/docker/ajp/command/cmd_data.rb +59 -0
  16. data/lib/baykit/bayserver/docker/ajp/command/cmd_end_response.rb +48 -0
  17. data/lib/baykit/bayserver/docker/ajp/command/cmd_forward_request.rb +288 -0
  18. data/lib/baykit/bayserver/docker/ajp/command/cmd_get_body_chunk.rb +44 -0
  19. data/lib/baykit/bayserver/docker/ajp/command/cmd_send_body_chunk.rb +71 -0
  20. data/lib/baykit/bayserver/docker/ajp/command/cmd_send_headers.rb +153 -0
  21. data/lib/baykit/bayserver/docker/ajp/command/cmd_shutdown.rb +37 -0
  22. data/lib/baykit/bayserver/docker/ajp/command/package.rb +7 -0
  23. data/lib/baykit/bayserver/docker/ajp/package.rb +12 -0
  24. metadata +78 -0
@@ -0,0 +1,288 @@
1
+ require 'baykit/bayserver/docker/ajp/ajp_command'
2
+ require 'baykit/bayserver/docker/ajp/ajp_type'
3
+ require 'baykit/bayserver/protocol/protocol_exception'
4
+ require 'baykit/bayserver/util/headers'
5
+
6
+ #
7
+ # AJP protocol
8
+ # https://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html
9
+ #
10
+ # AJP13_FORWARD_REQUEST :=
11
+ # prefix_code (byte) 0x02 = JK_AJP13_FORWARD_REQUEST
12
+ # method (byte)
13
+ # protocol (string)
14
+ # req_uri (string)
15
+ # remote_addr (string)
16
+ # remote_host (string)
17
+ # server_name (string)
18
+ # server_port (integer)
19
+ # is_ssl (boolean)
20
+ # num_headers (integer)
21
+ # request_headers(req_header_name req_header_value)
22
+ # attributes (attribut_name attribute_value)
23
+ # request_terminator (byte) OxFF
24
+ #
25
+ module Baykit
26
+ module BayServer
27
+ module Docker
28
+ module Ajp
29
+ module Command
30
+ class CmdForwardRequest < Baykit::BayServer::Docker::Ajp::AjpCommand
31
+ include Baykit::BayServer::Protocol
32
+ include Baykit::BayServer::Util
33
+
34
+ class << self
35
+ attr :method_map
36
+ attr :well_known_header_map
37
+ attr :attribute_name_map
38
+ end
39
+
40
+ @method_map = {
41
+ 1 => "OPTIONS",
42
+ 2 => "GET",
43
+ 3 => "HEAD",
44
+ 4 => "POST",
45
+ 5 => "PUT",
46
+ 6 => "DELETE",
47
+ 7 => "TRACE",
48
+ 8 => "PROPFIND",
49
+ 9 => "PROPPATCH",
50
+ 10 => "MKCOL",
51
+ 11 => "COPY",
52
+ 12 => "MOVE",
53
+ 13 => "LOCK",
54
+ 14 => "UNLOCK",
55
+ 15 => "ACL",
56
+ 16 => "REPORT",
57
+ 17 => "VERSION_CONTROL",
58
+ 18 => "CHECKIN",
59
+ 19 => "CHECKOUT",
60
+ 20 => "UNCHECKOUT",
61
+ 21 => "SEARCH",
62
+ 22 => "MKWORKSPACE",
63
+ 23 => "UPDATE",
64
+ 24 => "LABEL",
65
+ 25 => "MERGE",
66
+ 26 => "BASELINE_CONTROL",
67
+ 27 => "MKACTIVITY",
68
+ }
69
+
70
+ def self.get_method_code(method)
71
+ @method_map.keys.each do |key|
72
+ if @method_map[key].casecmp? method
73
+ return key
74
+ end
75
+ end
76
+ return -1
77
+ end
78
+
79
+
80
+ @well_known_header_map = {
81
+ 0xA001 => "Accept",
82
+ 0xA002 => "Accept-Charset",
83
+ 0xA003 => "Accept-Encoding",
84
+ 0xA004 => "Accept-Language",
85
+ 0xA005 => "Authorization",
86
+ 0xA006 => "Connection",
87
+ 0xA007 => "Content-Type",
88
+ 0xA008 => "Content-Length",
89
+ 0xA009 => "Cookie",
90
+ 0xA00A => "Cookie2",
91
+ 0xA00B => "Host",
92
+ 0xA00C => "Pragma",
93
+ 0xA00D => "Referer",
94
+ 0xA00E => "User-Agent",
95
+ }
96
+
97
+ def self.get_well_known_header_code(name)
98
+ @well_known_header_map.keys.each do |key|
99
+ if @well_known_header_map[key].casecmp? name
100
+ return key
101
+ end
102
+ end
103
+ return -1
104
+ end
105
+
106
+
107
+ @attribute_name_map = {
108
+ 0x01 => "?context",
109
+ 0x02 => "?servlet_path",
110
+ 0x03 => "?remote_user",
111
+ 0x04 => "?auth_type",
112
+ 0x05 => "?query_string",
113
+ 0x06 => "?route",
114
+ 0x07 => "?ssl_cert",
115
+ 0x08 => "?ssl_cipher",
116
+ 0x09 => "?ssl_session",
117
+ 0x0A => "?req_attribute",
118
+ 0x0B => "?ssl_key_size",
119
+ 0x0C => "?secret",
120
+ 0x0D => "?stored_method",
121
+ }
122
+
123
+ def self.get_attribute_code(atr)
124
+ @attribute_name_map.keys.each do |key|
125
+ if @attribute_name_map[key].casecmp?(atr)
126
+ return key
127
+ end
128
+ end
129
+ return -1
130
+ end
131
+
132
+ attr_accessor :method
133
+ attr_accessor :protocol
134
+ attr_accessor :req_uri
135
+ attr_accessor :remote_addr
136
+ attr_accessor :remote_host
137
+ attr_accessor :server_name
138
+ attr_accessor :server_port
139
+ attr_accessor :is_ssl
140
+ attr_accessor :headers
141
+ attr :attributes
142
+
143
+ def initialize
144
+ super(AjpType::FORWARD_REQUEST, true)
145
+ @headers = Headers.new()
146
+ @attributes = {}
147
+ end
148
+
149
+ def to_s()
150
+ return "ForwardRequest(m=#{self.method} p=#{self.protocol} u=#{self.req_uri} ra=#{self.remote_addr} rh=#{self.remote_host} sn=#{self.server_name} sp=#{self.server_port} ss=#{self.is_ssl} h=#{self.headers}"
151
+ end
152
+
153
+ def pack(pkt)
154
+ #BayLog.info("%s", self)
155
+ acc = pkt.new_ajp_data_accessor()
156
+ acc.put_byte(@type) # prefix code
157
+ acc.put_byte(CmdForwardRequest.get_method_code(@method))
158
+ acc.put_string(@protocol)
159
+ acc.put_string(@req_uri)
160
+ acc.put_string(@remote_addr)
161
+ acc.put_string(@remote_host)
162
+ acc.put_string(@server_name)
163
+ acc.put_short(@server_port)
164
+ acc.put_byte(@is_ssl ? 1 : 0)
165
+ write_request_headers(acc)
166
+ write_attributes(acc)
167
+
168
+ # must be called from last line
169
+ super
170
+ end
171
+
172
+ def unpack(pkt)
173
+ super
174
+ acc = pkt.new_ajp_data_accessor()
175
+ acc.get_byte() # prefix code
176
+ @method = CmdForwardRequest.method_map[acc.get_byte]
177
+ @protocol = acc.get_string
178
+ @req_uri = acc.get_string
179
+ @remote_addr = acc.get_string
180
+ @remote_host = acc.get_string
181
+ @server_name = acc.get_string
182
+ @server_port = acc.get_short
183
+ @is_ssl = acc.get_byte == 1
184
+
185
+ read_request_headers(acc)
186
+ read_attributes(acc)
187
+ end
188
+
189
+ def handle(handler)
190
+ return handler.handle_forward_request(self)
191
+ end
192
+
193
+
194
+ private
195
+ def read_request_headers(acc)
196
+ count = acc.get_short
197
+ count.times do |i|
198
+ code = acc.get_short
199
+
200
+ if code >= 0xA000
201
+ name = CmdForwardRequest.well_known_header_map[code]
202
+
203
+ if name == nil
204
+ raise ProtocolException.new("Invalid header")
205
+ end
206
+ else
207
+ # code is length of header name
208
+ name = acc.get_string_by_len(code)
209
+ end
210
+
211
+ value = acc.get_string
212
+ @headers.add(name, value)
213
+ #BayLog.trace "ForwardRequest header: #{name}=#{value}"
214
+ end
215
+ end
216
+
217
+ def read_attributes(acc)
218
+ while true
219
+ code = acc.get_byte()
220
+
221
+ if code == 0xFF
222
+ break
223
+ elsif code == 0x0A
224
+ name = acc.get_string()
225
+ else
226
+ name = CmdForwardRequest.attribute_name_map[code]
227
+ if name == nil
228
+ raise ProtocolException.new "Invalid attribute: code=#{code}"
229
+ end
230
+ end
231
+
232
+ if code == 0x0B # "?ssl_key_size"
233
+ value = acc.get_short()
234
+ @attributes[name] = value.to_s
235
+ else
236
+ value = acc.get_string
237
+ @attributes[name] = value
238
+ end
239
+
240
+ #BayLog.trace "ForwardRequest readAttributes:#{name}=#{value}"
241
+ end
242
+ end
243
+
244
+ def write_request_headers(acc)
245
+ h_list = []
246
+ @headers.names.each do |name|
247
+ @headers.values(name).each do |value|
248
+ h_list << [name, value]
249
+ end
250
+ end
251
+
252
+ acc.put_short(h_list.length)
253
+ h_list.each do |item|
254
+ code = CmdForwardRequest.get_well_known_header_code(item[0])
255
+ if code != -1
256
+ acc.put_short(code)
257
+ else
258
+ acc.put_string(item[0])
259
+ end
260
+
261
+ acc.put_string(item[1])
262
+ end
263
+
264
+ end
265
+
266
+ def write_attributes(acc)
267
+ @attributes.keys.each do |name|
268
+ value = @attributes[name]
269
+ code = CmdForwardRequest.get_attribute_code(name)
270
+ if code != -1
271
+ acc.put_byte(code)
272
+ else
273
+ acc.put_string(name)
274
+ end
275
+
276
+ acc.put_string(value)
277
+ end
278
+
279
+ acc.put_byte(0xFF) # terminator code
280
+ end
281
+ end
282
+
283
+ end
284
+ end
285
+ end
286
+ end
287
+ end
288
+
@@ -0,0 +1,44 @@
1
+ require 'baykit/bayserver/docker/ajp/ajp_command'
2
+ require 'baykit/bayserver/docker/ajp/ajp_type'
3
+ require 'baykit/bayserver/docker/ajp/ajp_packet'
4
+
5
+ #
6
+ # Get Body Chunk format
7
+ #
8
+ # AJP13_GET_BODY_CHUNK :=
9
+ # prefix_code 6
10
+ # requested_length (integer)
11
+ #
12
+ module Baykit
13
+ module BayServer
14
+ module Docker
15
+ module Ajp
16
+ module Command
17
+ class CmdGetBodyChunk < Baykit::BayServer::Docker::Ajp::AjpCommand
18
+ attr_accessor :req_len
19
+
20
+ def initialize()
21
+ super AjpType::GET_BODY_CHUNK, false
22
+ end
23
+
24
+ def pack(pkt)
25
+ acc = pkt.new_ajp_data_accessor()
26
+ acc.put_byte(@type)
27
+ acc.put_short(@req_len)
28
+
29
+ # must be called from last line
30
+ super
31
+ end
32
+
33
+ def handle(handler)
34
+ return handler.handle_get_body_chunk(self)
35
+ end
36
+
37
+
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+
@@ -0,0 +1,71 @@
1
+ require 'baykit/bayserver/docker/ajp/ajp_command'
2
+ require 'baykit/bayserver/docker/ajp/ajp_type'
3
+ require 'baykit/bayserver/docker/ajp/ajp_packet'
4
+ require 'baykit/bayserver/util/string_util'
5
+ #
6
+ # Send body chunk format
7
+ #
8
+ # AJP13_SEND_BODY_CHUNK :=
9
+ # prefix_code (byte) 0x03
10
+ # chunk_length (integer)
11
+ # chunk *(byte)
12
+ #
13
+ module Baykit
14
+ module BayServer
15
+ module Docker
16
+ module Ajp
17
+ module Command
18
+ class CmdSendBodyChunk < Baykit::BayServer::Docker::Ajp::AjpCommand
19
+ include Baykit::BayServer::Docker::Ajp
20
+ include Baykit::BayServer::Util
21
+
22
+ attr :chunk
23
+ attr :offset
24
+ attr :length
25
+
26
+ MAX_CHUNKLEN = AjpPacket::MAX_DATA_LEN - 4
27
+
28
+ def initialize(buf, ofs, len)
29
+ super(AjpType::SEND_BODY_CHUNK, false)
30
+ @chunk = buf
31
+ @offset = ofs
32
+ @length = len
33
+ end
34
+
35
+ def pack(pkt)
36
+ if @length > MAX_CHUNKLEN
37
+ raise RuntimeError.new("IllegalArgument")
38
+ end
39
+
40
+ acc = pkt.new_ajp_data_accessor
41
+ acc.put_byte(@type)
42
+ acc.put_short(@length)
43
+ acc.put_bytes(@chunk, @offset, @length)
44
+ acc.put_byte(0) # maybe document bug
45
+
46
+ # must be called from last line
47
+ super
48
+ end
49
+
50
+ def unpack(pkt)
51
+ acc = pkt.new_ajp_data_accessor
52
+ acc.get_byte # code
53
+ @length = acc.get_short
54
+ if @chunk == nil || @length > @chunk.length
55
+ @chunk = StringUtil.alloc(@length)
56
+ end
57
+
58
+ acc.get_bytes(@chunk, 0, @length)
59
+ end
60
+
61
+ def handle(handler)
62
+ return handler.handle_send_body_chunk(self)
63
+ end
64
+
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+
@@ -0,0 +1,153 @@
1
+ require 'baykit/bayserver/docker/ajp/ajp_command'
2
+ require 'baykit/bayserver/docker/ajp/ajp_type'
3
+ require 'baykit/bayserver/util/http_status'
4
+
5
+ #
6
+ # Send headers format
7
+ #
8
+ # AJP13_SEND_HEADERS :=
9
+ # prefix_code 4
10
+ # http_status_code (integer)
11
+ # http_status_msg (string)
12
+ # num_headers (integer)
13
+ # response_headers *(res_header_name header_value)
14
+ #
15
+ # res_header_name :=
16
+ # sc_res_header_name | (string) [see below for how this is parsed]
17
+ #
18
+ # sc_res_header_name := 0xA0 (byte)
19
+ #
20
+ # header_value := (string)
21
+ #
22
+ module Baykit
23
+ module BayServer
24
+ module Docker
25
+ module Ajp
26
+ module Command
27
+ class CmdSendHeaders < Baykit::BayServer::Docker::Ajp::AjpCommand
28
+ include Baykit::BayServer::Util
29
+
30
+ class << self
31
+ attr :well_known_header_map
32
+ end
33
+
34
+ @well_known_header_map = {
35
+ "content-type" => 0xA001,
36
+ "content-language" => 0xA002,
37
+ "content-length" => 0xA003,
38
+ "date" => 0xA004,
39
+ "last-modified" => 0xA005,
40
+ "location" => 0xA006,
41
+ "set-cookie" => 0xA007,
42
+ "set-cookie2" => 0xA008,
43
+ "servlet-engine" => 0xA009,
44
+ "status" => 0xA00A,
45
+ "www-authenticate" => 0xA00B,
46
+ }
47
+
48
+ def self.get_well_known_header_name(code)
49
+ @well_known_header_map.keys.each do |name|
50
+ if @well_known_header_map[name] == code
51
+ return name
52
+ end
53
+ end
54
+ return nil
55
+ end
56
+
57
+ attr :headers
58
+ attr_accessor :status
59
+ attr :desc
60
+
61
+ def initialize
62
+ super(AjpType::SEND_HEADERS, false)
63
+ @headers = {}
64
+ @status = HttpStatus::OK
65
+ @desc = nil
66
+ end
67
+
68
+ def to_s()
69
+ return "SendHeaders(s=#{@status} d=#{@desc} h=#{@headers}"
70
+ end
71
+
72
+ def pack(pkt)
73
+ acc = pkt.new_ajp_data_accessor
74
+ acc.put_byte(@type)
75
+ acc.put_short(@status)
76
+ acc.put_string(HttpStatus.description(@status))
77
+
78
+ count = 0
79
+ @headers.keys.each do |key|
80
+ count += @headers[key].length
81
+ end
82
+ acc.put_short(count)
83
+
84
+ @headers.keys.each do |name|
85
+ code = CmdSendHeaders.well_known_header_map[name]
86
+
87
+ @headers[name].each do |value|
88
+ if code != nil
89
+ acc.put_short(code)
90
+ else
91
+ acc.put_string(name)
92
+ end
93
+ acc.put_string(value)
94
+ end
95
+ end
96
+
97
+ # must be called from last line
98
+ super
99
+ end
100
+
101
+ def unpack(pkt)
102
+ acc = pkt.new_ajp_data_accessor
103
+ prefix_code = acc.get_byte
104
+ if prefix_code != AjpType::SEND_HEADERS
105
+ raise ProtocolException.new "Expected SEND_HEADERS"
106
+ end
107
+
108
+ @status = acc.get_short
109
+ @desc = acc.get_string
110
+ count = acc.get_short
111
+ count.times do |i|
112
+ code = acc.get_short
113
+ name = CmdSendHeaders.get_well_known_header_name(code)
114
+ if name == nil
115
+ name = acc.get_string_by_len(code)
116
+ end
117
+
118
+ value = acc.get_string
119
+ add_header(name, value)
120
+ end
121
+ #BayLog.info("%s", self)
122
+ end
123
+
124
+ def handle(handler)
125
+ return handler.handle_send_headers(self)
126
+ end
127
+
128
+
129
+ def get_header(name)
130
+ values = @headers[name.downcase]
131
+ if values == nil || values.empty?
132
+ nil
133
+ else
134
+ values[0]
135
+ end
136
+ end
137
+
138
+ def add_header(name, value)
139
+ values = @headers[name]
140
+ if values == nil
141
+ values = []
142
+ @headers[name] = values
143
+ end
144
+ values.append(value)
145
+ end
146
+
147
+ end
148
+ end
149
+ end
150
+ end
151
+ end
152
+ end
153
+
@@ -0,0 +1,37 @@
1
+ require 'baykit/bayserver/docker/ajp/ajp_command'
2
+ require 'baykit/bayserver/docker/ajp/ajp_type'
3
+
4
+ #
5
+ # Shutdown command format
6
+ #
7
+ # none
8
+ #
9
+ module Baykit
10
+ module BayServer
11
+ module Docker
12
+ module Ajp
13
+ module Command
14
+ class CmdShutdown < Baykit::BayServer::Docker::Ajp::AjpCommand
15
+
16
+ def initialize
17
+ super(AjpType::SHUTDOWN, true)
18
+ end
19
+
20
+ def unpack(pkt)
21
+ super
22
+ end
23
+
24
+ def pack(pkt)
25
+ super
26
+ end
27
+
28
+ def handle(handler)
29
+ return handler.handle_shutdown(self)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+
@@ -0,0 +1,7 @@
1
+ require 'baykit/bayserver/docker/ajp/command/cmd_data'
2
+ require 'baykit/bayserver/docker/ajp/command/cmd_end_response'
3
+ require 'baykit/bayserver/docker/ajp/command/cmd_forward_request'
4
+ require 'baykit/bayserver/docker/ajp/command/cmd_get_body_chunk'
5
+ require 'baykit/bayserver/docker/ajp/command/cmd_send_body_chunk'
6
+ require 'baykit/bayserver/docker/ajp/command/cmd_send_headers'
7
+ require 'baykit/bayserver/docker/ajp/command/cmd_shutdown'
@@ -0,0 +1,12 @@
1
+ require 'baykit/bayserver/docker/ajp/ajp_command'
2
+ require 'baykit/bayserver/docker/ajp/ajp_command_handler'
3
+ require 'baykit/bayserver/docker/ajp/ajp_command_unpacker'
4
+ require 'baykit/bayserver/docker/ajp/ajp_inbound_handler'
5
+ require 'baykit/bayserver/docker/ajp/ajp_docker'
6
+ require 'baykit/bayserver/docker/ajp/ajp_packet'
7
+ require 'baykit/bayserver/docker/ajp/ajp_packet_factory'
8
+ require 'baykit/bayserver/docker/ajp/ajp_packet_unpacker'
9
+ require 'baykit/bayserver/docker/ajp/ajp_port_docker'
10
+ require 'baykit/bayserver/docker/ajp/ajp_protocol_handler'
11
+ require 'baykit/bayserver/docker/ajp/ajp_type'
12
+ require 'baykit/bayserver/docker/ajp/ajp_warp_handler'
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bayserver-docker-ajp
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/ajp/ajp_command.rb
34
+ - lib/baykit/bayserver/docker/ajp/ajp_command_handler.rb
35
+ - lib/baykit/bayserver/docker/ajp/ajp_command_unpacker.rb
36
+ - lib/baykit/bayserver/docker/ajp/ajp_docker.rb
37
+ - lib/baykit/bayserver/docker/ajp/ajp_inbound_handler.rb
38
+ - lib/baykit/bayserver/docker/ajp/ajp_packet.rb
39
+ - lib/baykit/bayserver/docker/ajp/ajp_packet_factory.rb
40
+ - lib/baykit/bayserver/docker/ajp/ajp_packet_unpacker.rb
41
+ - lib/baykit/bayserver/docker/ajp/ajp_port_docker.rb
42
+ - lib/baykit/bayserver/docker/ajp/ajp_protocol_handler.rb
43
+ - lib/baykit/bayserver/docker/ajp/ajp_type.rb
44
+ - lib/baykit/bayserver/docker/ajp/ajp_warp_docker.rb
45
+ - lib/baykit/bayserver/docker/ajp/ajp_warp_handler.rb
46
+ - lib/baykit/bayserver/docker/ajp/command/cmd_data.rb
47
+ - lib/baykit/bayserver/docker/ajp/command/cmd_end_response.rb
48
+ - lib/baykit/bayserver/docker/ajp/command/cmd_forward_request.rb
49
+ - lib/baykit/bayserver/docker/ajp/command/cmd_get_body_chunk.rb
50
+ - lib/baykit/bayserver/docker/ajp/command/cmd_send_body_chunk.rb
51
+ - lib/baykit/bayserver/docker/ajp/command/cmd_send_headers.rb
52
+ - lib/baykit/bayserver/docker/ajp/command/cmd_shutdown.rb
53
+ - lib/baykit/bayserver/docker/ajp/command/package.rb
54
+ - lib/baykit/bayserver/docker/ajp/package.rb
55
+ homepage: https://baykit.yokohama
56
+ licenses:
57
+ - MIT
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubygems_version: 3.1.6
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: AJP docker of BayServer
78
+ test_files: []