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.
- checksums.yaml +7 -0
- data/lib/baykit/bayserver/docker/fcgi/command/cmd_begin_request.rb +66 -0
- data/lib/baykit/bayserver/docker/fcgi/command/cmd_end_request.rb +66 -0
- data/lib/baykit/bayserver/docker/fcgi/command/cmd_params.rb +160 -0
- data/lib/baykit/bayserver/docker/fcgi/command/cmd_stderr.rb +31 -0
- data/lib/baykit/bayserver/docker/fcgi/command/cmd_stdin.rb +33 -0
- data/lib/baykit/bayserver/docker/fcgi/command/cmd_stdout.rb +31 -0
- data/lib/baykit/bayserver/docker/fcgi/command/in_out_command_base.rb +57 -0
- data/lib/baykit/bayserver/docker/fcgi/command/package.rb +6 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_command.rb +40 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_command_handler.rb +24 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_command_unpacker.rb +56 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_docker.rb +14 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_inbound_handler.rb +354 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_packet.rb +56 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_packet_factory.rb +17 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_packet_unpacker.rb +201 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_params.rb +46 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_port_docker.rb +52 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_protocol_handler.rb +54 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_type.rb +23 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_warp_docker.rb +81 -0
- data/lib/baykit/bayserver/docker/fcgi/fcg_warp_handler.rb +324 -0
- data/lib/baykit/bayserver/docker/fcgi/package.rb +12 -0
- metadata +79 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2de0757edf90f4c3fe022303174264eb4a8a1cdf78d963bbc8f846bdd0b095ad
|
4
|
+
data.tar.gz: 1d587131837ea5a05db127671f4896e96c0784a9b23eeba7a4d03216faa6e2b0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5e3daecd02c65f999f1c853858a7b21dbe8898ec9800e462f6faaecc0fc868b4304a2636882b9e8a75d116525bb50e01a6b99c1c3510bd7e0251e50bee505256
|
7
|
+
data.tar.gz: 61fca56ffe15d0b9cc3d623157a36ed88a48d3d0d8a084440f8bd581139bb5f5e4756fd8d0e0b4b60364c71e8c9d81dec8f8b4b5c554eb280864a7fe1356806f
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'baykit/bayserver/docker/fcgi/fcg_command'
|
2
|
+
require 'baykit/bayserver/docker/fcgi/fcg_type'
|
3
|
+
|
4
|
+
#
|
5
|
+
# FCGI spec
|
6
|
+
# http://www.mit.edu/~yandros/doc/specs/fcgi-spec.html
|
7
|
+
#
|
8
|
+
# Begin request command format
|
9
|
+
# typedef struct {
|
10
|
+
# unsigned char roleB1;
|
11
|
+
# unsigned char roleB0;
|
12
|
+
# unsigned char flags;
|
13
|
+
# unsigned char reserved[5];
|
14
|
+
# } FCGI_BeginRequestBody;
|
15
|
+
#
|
16
|
+
module Baykit
|
17
|
+
module BayServer
|
18
|
+
module Docker
|
19
|
+
module Fcgi
|
20
|
+
module Command
|
21
|
+
class CmdBeginRequest < Baykit::BayServer::Docker::Fcgi::FcgCommand
|
22
|
+
include Baykit::BayServer::Docker::Fcgi
|
23
|
+
|
24
|
+
FCGI_KEEP_CONN = 1
|
25
|
+
FCGI_RESPONDER = 1
|
26
|
+
FCGI_AUTHORIZER = 2
|
27
|
+
FCGI_FILTER = 3
|
28
|
+
|
29
|
+
attr_accessor :role
|
30
|
+
attr_accessor :keep_conn
|
31
|
+
|
32
|
+
def initialize(req_id)
|
33
|
+
super(FcgType::BEGIN_REQUEST, req_id)
|
34
|
+
end
|
35
|
+
|
36
|
+
def unpack(pkt)
|
37
|
+
super
|
38
|
+
|
39
|
+
acc = pkt.new_data_accessor
|
40
|
+
@role = acc.get_short
|
41
|
+
flags = acc.get_byte
|
42
|
+
@keep_conn = (flags & FCGI_KEEP_CONN) != 0
|
43
|
+
end
|
44
|
+
|
45
|
+
def pack(pkt)
|
46
|
+
acc = pkt.new_data_accessor
|
47
|
+
acc.put_short(@role)
|
48
|
+
acc.put_byte(@keep_conn ? 1 : 0)
|
49
|
+
reserved = " " * 5
|
50
|
+
acc.put_bytes(reserved)
|
51
|
+
|
52
|
+
# must be called from last line
|
53
|
+
super
|
54
|
+
end
|
55
|
+
|
56
|
+
def handle(cmd_handler)
|
57
|
+
return cmd_handler.handle_begin_request(self)
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'baykit/bayserver/docker/fcgi/fcg_command'
|
2
|
+
require 'baykit/bayserver/docker/fcgi/fcg_type'
|
3
|
+
|
4
|
+
#
|
5
|
+
# FCGI spec
|
6
|
+
# http://www.mit.edu/~yandros/doc/specs/fcgi-spec.html
|
7
|
+
#
|
8
|
+
# Endrequest command format
|
9
|
+
# typedef struct {
|
10
|
+
# unsigned char appStatusB3;
|
11
|
+
# unsigned char appStatusB2;
|
12
|
+
# unsigned char appStatusB1;
|
13
|
+
# unsigned char appStatusB0;
|
14
|
+
# unsigned char protocolStatus;
|
15
|
+
# unsigned char reserved[3];
|
16
|
+
# } FCGI_EndRequestBody;
|
17
|
+
#
|
18
|
+
module Baykit
|
19
|
+
module BayServer
|
20
|
+
module Docker
|
21
|
+
module Fcgi
|
22
|
+
module Command
|
23
|
+
class CmdEndRequest < Baykit::BayServer::Docker::Fcgi::FcgCommand
|
24
|
+
|
25
|
+
FCGI_REQUEST_COMPLETE = 0
|
26
|
+
FCGI_CANT_MPX_CONN = 1
|
27
|
+
FCGI_OVERLOADED = 2
|
28
|
+
FCGI_UNKNOWN_ROLE = 3
|
29
|
+
|
30
|
+
attr :app_status
|
31
|
+
attr :protocol_status
|
32
|
+
|
33
|
+
def initialize(req_id)
|
34
|
+
super(FcgType::END_REQUEST, req_id)
|
35
|
+
@app_status = 0
|
36
|
+
@protocol_status = FCGI_REQUEST_COMPLETE
|
37
|
+
end
|
38
|
+
|
39
|
+
def unpack(pkt)
|
40
|
+
super
|
41
|
+
acc = pkt.new_data_accessor
|
42
|
+
@app_status = acc.get_int
|
43
|
+
@protocol_status = acc.get_byte
|
44
|
+
end
|
45
|
+
|
46
|
+
def pack(pkt)
|
47
|
+
acc = pkt.new_data_accessor
|
48
|
+
acc.put_int(@app_status)
|
49
|
+
acc.put_byte(@protocol_status)
|
50
|
+
reserved = " " * 3
|
51
|
+
acc.put_bytes(reserved)
|
52
|
+
|
53
|
+
# must be called from last line
|
54
|
+
super
|
55
|
+
end
|
56
|
+
|
57
|
+
def handle(cmd_handler)
|
58
|
+
return cmd_handler.handle_end_request(self)
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,160 @@
|
|
1
|
+
require 'baykit/bayserver/docker/fcgi/fcg_command'
|
2
|
+
require 'baykit/bayserver/docker/fcgi/fcg_type'
|
3
|
+
require 'baykit/bayserver/util/string_util'
|
4
|
+
|
5
|
+
#
|
6
|
+
# FCGI spec
|
7
|
+
# http://www.mit.edu/~yandros/doc/specs/fcgi-spec.html
|
8
|
+
#
|
9
|
+
#
|
10
|
+
# Params command format (Name-Value list)
|
11
|
+
#
|
12
|
+
# typedef struct {
|
13
|
+
# unsigned char nameLengthB0; // nameLengthB0 >> 7 == 0
|
14
|
+
# unsigned char valueLengthB0; // valueLengthB0 >> 7 == 0
|
15
|
+
# unsigned char nameData[nameLength];
|
16
|
+
# unsigned char valueData[valueLength];
|
17
|
+
# } FCGI_NameValuePair11;
|
18
|
+
#
|
19
|
+
# typedef struct {
|
20
|
+
# unsigned char nameLengthB0; // nameLengthB0 >> 7 == 0
|
21
|
+
# unsigned char valueLengthB3; // valueLengthB3 >> 7 == 1
|
22
|
+
# unsigned char valueLengthB2;
|
23
|
+
# unsigned char valueLengthB1;
|
24
|
+
# unsigned char valueLengthB0;
|
25
|
+
# unsigned char nameData[nameLength];
|
26
|
+
# unsigned char valueData[valueLength
|
27
|
+
# ((B3 & 0x7f) << 24) + (B2 << 16) + (B1 << 8) + B0];
|
28
|
+
# } FCGI_NameValuePair14;
|
29
|
+
#
|
30
|
+
# typedef struct {
|
31
|
+
# unsigned char nameLengthB3; // nameLengthB3 >> 7 == 1
|
32
|
+
# unsigned char nameLengthB2;
|
33
|
+
# unsigned char nameLengthB1;
|
34
|
+
# unsigned char nameLengthB0;
|
35
|
+
# unsigned char valueLengthB0; // valueLengthB0 >> 7 == 0
|
36
|
+
# unsigned char nameData[nameLength
|
37
|
+
# ((B3 & 0x7f) << 24) + (B2 << 16) + (B1 << 8) + B0];
|
38
|
+
# unsigned char valueData[valueLength];
|
39
|
+
# } FCGI_NameValuePair41;
|
40
|
+
#
|
41
|
+
# typedef struct {
|
42
|
+
# unsigned char nameLengthB3; // nameLengthB3 >> 7 == 1
|
43
|
+
# unsigned char nameLengthB2;
|
44
|
+
# unsigned char nameLengthB1;
|
45
|
+
# unsigned char nameLengthB0;
|
46
|
+
# unsigned char valueLengthB3; // valueLengthB3 >> 7 == 1
|
47
|
+
# unsigned char valueLengthB2;
|
48
|
+
# unsigned char valueLengthB1;
|
49
|
+
# unsigned char valueLengthB0;
|
50
|
+
# unsigned char nameData[nameLength
|
51
|
+
# ((B3 & 0x7f) << 24) + (B2 << 16) + (B1 << 8) + B0];
|
52
|
+
# unsigned char valueData[valueLength
|
53
|
+
# ((B3 & 0x7f) << 24) + (B2 << 16) + (B1 << 8) + B0];
|
54
|
+
# } FCGI_NameValuePair44;
|
55
|
+
#
|
56
|
+
|
57
|
+
module Baykit
|
58
|
+
module BayServer
|
59
|
+
module Docker
|
60
|
+
module Fcgi
|
61
|
+
module Command
|
62
|
+
class CmdParams < Baykit::BayServer::Docker::Fcgi::FcgCommand
|
63
|
+
include Baykit::BayServer::Util
|
64
|
+
|
65
|
+
attr :params
|
66
|
+
|
67
|
+
def initialize(req_id)
|
68
|
+
super(FcgType::PARAMS, req_id)
|
69
|
+
@params = []
|
70
|
+
end
|
71
|
+
|
72
|
+
def unpack(pkt)
|
73
|
+
super
|
74
|
+
acc = pkt.new_data_accessor
|
75
|
+
while acc.pos < pkt.data_len
|
76
|
+
name_len = read_length(acc)
|
77
|
+
value_len = read_length(acc)
|
78
|
+
|
79
|
+
name = StringUtil.alloc(name_len)
|
80
|
+
acc.get_bytes(name, 0, name_len)
|
81
|
+
|
82
|
+
value = StringUtil.alloc(value_len)
|
83
|
+
acc.get_bytes(value, 0, value_len)
|
84
|
+
|
85
|
+
BayLog.trace("Params: %s=%s", name, value)
|
86
|
+
add_param(name, value)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def pack(pkt)
|
91
|
+
acc = pkt.new_data_accessor
|
92
|
+
@params.each do |nv|
|
93
|
+
name = nv[0]
|
94
|
+
value = nv[1]
|
95
|
+
name_len = name.length
|
96
|
+
value_len = value.length
|
97
|
+
|
98
|
+
write_length(name_len, acc)
|
99
|
+
write_length(value_len, acc)
|
100
|
+
|
101
|
+
acc.put_string(name)
|
102
|
+
acc.put_string(value)
|
103
|
+
end
|
104
|
+
|
105
|
+
# must be called from last line
|
106
|
+
super
|
107
|
+
end
|
108
|
+
|
109
|
+
def handle(cmd_handler)
|
110
|
+
return cmd_handler.handle_params(self)
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
def read_length(acc)
|
115
|
+
len = acc.get_byte
|
116
|
+
if len >> 7 == 0
|
117
|
+
return len
|
118
|
+
else
|
119
|
+
len2 = acc.get_byte
|
120
|
+
len3 = acc.get_byte
|
121
|
+
len4 = acc.get_byte
|
122
|
+
return ((len & 0x7f) << 24) | (len2 << 16) | (len3 << 8) | len4
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def write_length(len, acc)
|
127
|
+
if len >> 7 == 0
|
128
|
+
acc.put_byte(len)
|
129
|
+
else
|
130
|
+
len1 = (len >> 24 & 0xFF) | 0x80
|
131
|
+
len2 = len >> 16 & 0xFF
|
132
|
+
len3 = len >> 8 & 0xFF
|
133
|
+
len4 = len & 0xFF
|
134
|
+
buf = StringUtil.alloc(4)
|
135
|
+
buf << len1 << len2 << len3 << len4
|
136
|
+
acc.put_bytes(buf)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def add_param(name, value)
|
141
|
+
if name == nil
|
142
|
+
raise RuntimeError.new("nil argument")
|
143
|
+
end
|
144
|
+
|
145
|
+
if value == nil
|
146
|
+
value = ""
|
147
|
+
end
|
148
|
+
|
149
|
+
@params.append([name, value])
|
150
|
+
end
|
151
|
+
|
152
|
+
def to_s()
|
153
|
+
"FcgCmdParams#{@params}"
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'baykit/bayserver/docker/fcgi/fcg_type'
|
2
|
+
|
3
|
+
#
|
4
|
+
# FCGI spec
|
5
|
+
# http://www.mit.edu/~yandros/doc/specs/fcgi-spec.html
|
6
|
+
#
|
7
|
+
# StdErr command format
|
8
|
+
# raw data
|
9
|
+
#
|
10
|
+
|
11
|
+
module Baykit
|
12
|
+
module BayServer
|
13
|
+
module Docker
|
14
|
+
module Fcgi
|
15
|
+
module Command
|
16
|
+
class CmdStdErr < InOutCommandBase
|
17
|
+
|
18
|
+
def initialize(req_id)
|
19
|
+
super(FcgType::STDERR, req_id)
|
20
|
+
end
|
21
|
+
|
22
|
+
def handle(cmd_handler)
|
23
|
+
return cmd_handler.handle_stderr(self)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'baykit/bayserver/docker/fcgi/fcg_type'
|
2
|
+
require 'baykit/bayserver/docker/fcgi/command/in_out_command_base'
|
3
|
+
|
4
|
+
|
5
|
+
#
|
6
|
+
# FCGI spec
|
7
|
+
# http://www.mit.edu/~yandros/doc/specs/fcgi-spec.html
|
8
|
+
#
|
9
|
+
# StdIn command format
|
10
|
+
# raw data
|
11
|
+
#
|
12
|
+
module Baykit
|
13
|
+
module BayServer
|
14
|
+
module Docker
|
15
|
+
module Fcgi
|
16
|
+
module Command
|
17
|
+
class CmdStdIn < Baykit::BayServer::Docker::Fcgi::Command::InOutCommandBase
|
18
|
+
|
19
|
+
def initialize(req_id, data=nil, start=0, len=0)
|
20
|
+
super(FcgType::STDIN, req_id, data, start, len)
|
21
|
+
end
|
22
|
+
|
23
|
+
def handle(cmd_handler)
|
24
|
+
return cmd_handler.handle_stdin(self)
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'baykit/bayserver/docker/fcgi/fcg_type'
|
2
|
+
|
3
|
+
#
|
4
|
+
# FCGI spec
|
5
|
+
# http://www.mit.edu/~yandros/doc/specs/fcgi-spec.html
|
6
|
+
#
|
7
|
+
# StdOut command format
|
8
|
+
# raw data
|
9
|
+
#
|
10
|
+
|
11
|
+
module Baykit
|
12
|
+
module BayServer
|
13
|
+
module Docker
|
14
|
+
module Fcgi
|
15
|
+
module Command
|
16
|
+
class CmdStdOut < InOutCommandBase
|
17
|
+
|
18
|
+
def initialize(req_id, data = nil, start = nil, len = nil)
|
19
|
+
super(FcgType::STDOUT, req_id, data, start, len)
|
20
|
+
end
|
21
|
+
|
22
|
+
def handle(cmd_handler)
|
23
|
+
return cmd_handler.handle_stdout(self)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'baykit/bayserver/docker/fcgi/fcg_command'
|
2
|
+
require 'baykit/bayserver/docker/fcgi/fcg_type'
|
3
|
+
require 'baykit/bayserver/docker/fcgi/fcg_packet'
|
4
|
+
|
5
|
+
#
|
6
|
+
# FCGI spec
|
7
|
+
# http://www.mit.edu/~yandros/doc/specs/fcgi-spec.html
|
8
|
+
#
|
9
|
+
# StdIn/StdOut/StdErr command format
|
10
|
+
# raw data
|
11
|
+
#
|
12
|
+
module Baykit
|
13
|
+
module BayServer
|
14
|
+
module Docker
|
15
|
+
module Fcgi
|
16
|
+
module Command
|
17
|
+
class InOutCommandBase < Baykit::BayServer::Docker::Fcgi::FcgCommand
|
18
|
+
|
19
|
+
MAX_DATA_LEN = FcgPacket::MAXLEN - FcgPacket::PREAMBLE_SIZE
|
20
|
+
|
21
|
+
#
|
22
|
+
# This class refers external byte array, so this IS NOT mutable
|
23
|
+
#
|
24
|
+
attr :start
|
25
|
+
attr :length
|
26
|
+
attr :data
|
27
|
+
|
28
|
+
def initialize(type, req_id, data=nil, start=0, len=0)
|
29
|
+
super(type, req_id)
|
30
|
+
@data = data
|
31
|
+
@start = start
|
32
|
+
@length = len
|
33
|
+
end
|
34
|
+
|
35
|
+
def unpack(pkt)
|
36
|
+
super
|
37
|
+
@start = pkt.header_len
|
38
|
+
@length = pkt.data_len
|
39
|
+
@data = pkt.buf
|
40
|
+
end
|
41
|
+
|
42
|
+
def pack(pkt)
|
43
|
+
if @data != nil && @length > 0
|
44
|
+
acc = pkt.new_data_accessor()
|
45
|
+
acc.put_bytes(@data, @start, @length)
|
46
|
+
end
|
47
|
+
|
48
|
+
# must be called from last line
|
49
|
+
super
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
require 'baykit/bayserver/docker/fcgi/command/cmd_begin_request'
|
2
|
+
require 'baykit/bayserver/docker/fcgi/command/cmd_end_request'
|
3
|
+
require 'baykit/bayserver/docker/fcgi/command/cmd_params'
|
4
|
+
require 'baykit/bayserver/docker/fcgi/command/cmd_stdin'
|
5
|
+
require 'baykit/bayserver/docker/fcgi/command/cmd_stdout'
|
6
|
+
require 'baykit/bayserver/docker/fcgi/command/cmd_stderr'
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Baykit
|
2
|
+
module BayServer
|
3
|
+
module Docker
|
4
|
+
module Fcgi
|
5
|
+
class FcgCommand < Baykit::BayServer::Protocol::Command
|
6
|
+
|
7
|
+
attr :req_id
|
8
|
+
|
9
|
+
def initialize(type, req_id)
|
10
|
+
super(type)
|
11
|
+
@req_id = req_id
|
12
|
+
end
|
13
|
+
|
14
|
+
def unpack(pkt)
|
15
|
+
@req_id = pkt.req_id
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
# Super class method must be called from last line of override method
|
20
|
+
# since header cannot be packed before data is constructed
|
21
|
+
#
|
22
|
+
def pack(pkt)
|
23
|
+
pkt.req_id = @req_id
|
24
|
+
pack_header(pkt)
|
25
|
+
end
|
26
|
+
|
27
|
+
def pack_header(pkt)
|
28
|
+
acc = pkt.new_header_accessor()
|
29
|
+
acc.put_byte(pkt.version)
|
30
|
+
acc.put_byte(pkt.type)
|
31
|
+
acc.put_short(pkt.req_id)
|
32
|
+
acc.put_short(pkt.data_len)
|
33
|
+
acc.put_byte(0) # paddinglen
|
34
|
+
acc.put_byte(0) # reserved
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Baykit
|
2
|
+
module BayServer
|
3
|
+
module Docker
|
4
|
+
module Fcgi
|
5
|
+
module FcgCommandHandler
|
6
|
+
include Baykit::BayServer::Protocol::CommandHandler # implements
|
7
|
+
|
8
|
+
#
|
9
|
+
# abstract methods
|
10
|
+
#
|
11
|
+
# public abstract NextSocketAction handleBeginRequest(CmdBeginRequest cmd) throws IOException;
|
12
|
+
# public abstract NextSocketAction handleEndRequest(CmdEndRequest cmd) throws IOException;
|
13
|
+
# public abstract NextSocketAction handleParams(CmdParams cmd) throws IOException;
|
14
|
+
# public abstract NextSocketAction handleStdErr(CmdStdErr cmd) throws IOException;
|
15
|
+
# public abstract NextSocketAction handleStdIn(CmdStdIn cmd) throws IOException;
|
16
|
+
# public abstract NextSocketAction handleStdOut(CmdStdOut cmd) throws IOException;
|
17
|
+
#
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'baykit/bayserver/protocol/command_unpacker'
|
2
|
+
require 'baykit/bayserver/docker/fcgi/command/package'
|
3
|
+
|
4
|
+
module Baykit
|
5
|
+
module BayServer
|
6
|
+
module Docker
|
7
|
+
module Fcgi
|
8
|
+
class FcgCommandUnPacker < Baykit::BayServer::Protocol::CommandUnPacker
|
9
|
+
|
10
|
+
include Baykit::BayServer::Docker::Fcgi::Command
|
11
|
+
|
12
|
+
attr :handler
|
13
|
+
|
14
|
+
def initialize(handler)
|
15
|
+
@handler = handler
|
16
|
+
reset()
|
17
|
+
end
|
18
|
+
|
19
|
+
def reset()
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def packet_received(pkt)
|
24
|
+
|
25
|
+
case(pkt.type)
|
26
|
+
when FcgType::BEGIN_REQUEST
|
27
|
+
cmd = CmdBeginRequest.new(pkt.req_id)
|
28
|
+
|
29
|
+
when FcgType::END_REQUEST
|
30
|
+
cmd = CmdEndRequest.new(pkt.req_id)
|
31
|
+
|
32
|
+
when FcgType::PARAMS
|
33
|
+
cmd = CmdParams.new(pkt.req_id)
|
34
|
+
|
35
|
+
when FcgType::STDIN
|
36
|
+
cmd = CmdStdIn.new(pkt.req_id)
|
37
|
+
|
38
|
+
when FcgType::STDOUT
|
39
|
+
cmd = CmdStdOut.new(pkt.req_id)
|
40
|
+
|
41
|
+
when FcgType::STDERR
|
42
|
+
cmd = CmdStdErr.new(pkt.req_id)
|
43
|
+
|
44
|
+
else
|
45
|
+
raise RuntimeError.new("IllegalState")
|
46
|
+
|
47
|
+
end
|
48
|
+
cmd.unpack(pkt)
|
49
|
+
cmd.handle(handler)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|