bayserver-core 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 (149) hide show
  1. checksums.yaml +7 -0
  2. data/lib/baykit/bayserver/agent/accept_handler.rb +97 -0
  3. data/lib/baykit/bayserver/agent/channel_listener.rb +35 -0
  4. data/lib/baykit/bayserver/agent/command_receiver.rb +75 -0
  5. data/lib/baykit/bayserver/agent/grand_agent.rb +319 -0
  6. data/lib/baykit/bayserver/agent/grand_agent_monitor.rb +217 -0
  7. data/lib/baykit/bayserver/agent/next_socket_action.rb +14 -0
  8. data/lib/baykit/bayserver/agent/non_blocking_handler.rb +433 -0
  9. data/lib/baykit/bayserver/agent/package.rb +3 -0
  10. data/lib/baykit/bayserver/agent/signal/signal_agent.rb +165 -0
  11. data/lib/baykit/bayserver/agent/signal/signal_proxy.rb +18 -0
  12. data/lib/baykit/bayserver/agent/signal/signal_sender.rb +99 -0
  13. data/lib/baykit/bayserver/agent/spin_handler.rb +140 -0
  14. data/lib/baykit/bayserver/agent/transporter/data_listener.rb +38 -0
  15. data/lib/baykit/bayserver/agent/transporter/package.rb +3 -0
  16. data/lib/baykit/bayserver/agent/transporter/plain_transporter.rb +55 -0
  17. data/lib/baykit/bayserver/agent/transporter/secure_transporter.rb +81 -0
  18. data/lib/baykit/bayserver/agent/transporter/spin_read_transporter.rb +111 -0
  19. data/lib/baykit/bayserver/agent/transporter/spin_write_transporter.rb +125 -0
  20. data/lib/baykit/bayserver/agent/transporter/transporter.rb +466 -0
  21. data/lib/baykit/bayserver/agent/upgrade_exception.rb +11 -0
  22. data/lib/baykit/bayserver/bay_dockers.rb +60 -0
  23. data/lib/baykit/bayserver/bay_exception.rb +12 -0
  24. data/lib/baykit/bayserver/bay_log.rb +148 -0
  25. data/lib/baykit/bayserver/bay_message.rb +20 -0
  26. data/lib/baykit/bayserver/bayserver.rb +529 -0
  27. data/lib/baykit/bayserver/bcf/bcf_document.rb +44 -0
  28. data/lib/baykit/bayserver/bcf/bcf_element.rb +30 -0
  29. data/lib/baykit/bayserver/bcf/bcf_key_val.rb +19 -0
  30. data/lib/baykit/bayserver/bcf/bcf_object.rb +15 -0
  31. data/lib/baykit/bayserver/bcf/bcf_parser.rb +180 -0
  32. data/lib/baykit/bayserver/bcf/package.rb +6 -0
  33. data/lib/baykit/bayserver/bcf/parse_exception.rb +15 -0
  34. data/lib/baykit/bayserver/config_exception.rb +25 -0
  35. data/lib/baykit/bayserver/constants.rb +8 -0
  36. data/lib/baykit/bayserver/docker/base/club_base.rb +117 -0
  37. data/lib/baykit/bayserver/docker/base/docker_base.rb +66 -0
  38. data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +89 -0
  39. data/lib/baykit/bayserver/docker/base/inbound_handler.rb +42 -0
  40. data/lib/baykit/bayserver/docker/base/inbound_ship.rb +341 -0
  41. data/lib/baykit/bayserver/docker/base/inbound_ship_store.rb +65 -0
  42. data/lib/baykit/bayserver/docker/base/port_base.rb +228 -0
  43. data/lib/baykit/bayserver/docker/base/reroute_base.rb +28 -0
  44. data/lib/baykit/bayserver/docker/built_in/built_in_city_docker.rb +303 -0
  45. data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +226 -0
  46. data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +302 -0
  47. data/lib/baykit/bayserver/docker/built_in/built_in_permission_docker.rb +242 -0
  48. data/lib/baykit/bayserver/docker/built_in/built_in_secure_docker.rb +157 -0
  49. data/lib/baykit/bayserver/docker/built_in/built_in_town_docker.rb +117 -0
  50. data/lib/baykit/bayserver/docker/built_in/built_in_trouble_docker.rb +57 -0
  51. data/lib/baykit/bayserver/docker/built_in/log_boat.rb +71 -0
  52. data/lib/baykit/bayserver/docker/built_in/log_item.rb +18 -0
  53. data/lib/baykit/bayserver/docker/built_in/log_item_factory.rb +18 -0
  54. data/lib/baykit/bayserver/docker/built_in/log_items.rb +287 -0
  55. data/lib/baykit/bayserver/docker/built_in/write_file_taxi.rb +101 -0
  56. data/lib/baykit/bayserver/docker/city.rb +22 -0
  57. data/lib/baykit/bayserver/docker/club.rb +45 -0
  58. data/lib/baykit/bayserver/docker/docker.rb +8 -0
  59. data/lib/baykit/bayserver/docker/harbor.rb +34 -0
  60. data/lib/baykit/bayserver/docker/log.rb +17 -0
  61. data/lib/baykit/bayserver/docker/package.rb +12 -0
  62. data/lib/baykit/bayserver/docker/permission.rb +18 -0
  63. data/lib/baykit/bayserver/docker/port.rb +39 -0
  64. data/lib/baykit/bayserver/docker/reroute.rb +17 -0
  65. data/lib/baykit/bayserver/docker/secure.rb +22 -0
  66. data/lib/baykit/bayserver/docker/send_file/directory_train.rb +123 -0
  67. data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +43 -0
  68. data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +71 -0
  69. data/lib/baykit/bayserver/docker/town.rb +30 -0
  70. data/lib/baykit/bayserver/docker/trouble.rb +17 -0
  71. data/lib/baykit/bayserver/docker/warp/package.rb +4 -0
  72. data/lib/baykit/bayserver/docker/warp/warp_data.rb +84 -0
  73. data/lib/baykit/bayserver/docker/warp/warp_data_listener.rb +112 -0
  74. data/lib/baykit/bayserver/docker/warp/warp_docker.rb +273 -0
  75. data/lib/baykit/bayserver/docker/warp/warp_handler.rb +38 -0
  76. data/lib/baykit/bayserver/docker/warp/warp_ship.rb +166 -0
  77. data/lib/baykit/bayserver/docker/warp/warp_ship_store.rb +111 -0
  78. data/lib/baykit/bayserver/http_exception.rb +33 -0
  79. data/lib/baykit/bayserver/mem_usage.rb +104 -0
  80. data/lib/baykit/bayserver/protocol/command.rb +21 -0
  81. data/lib/baykit/bayserver/protocol/command_handler.rb +9 -0
  82. data/lib/baykit/bayserver/protocol/command_packer.rb +49 -0
  83. data/lib/baykit/bayserver/protocol/command_unpacker.rb +13 -0
  84. data/lib/baykit/bayserver/protocol/package.rb +15 -0
  85. data/lib/baykit/bayserver/protocol/packet.rb +63 -0
  86. data/lib/baykit/bayserver/protocol/packet_factory.rb +13 -0
  87. data/lib/baykit/bayserver/protocol/packet_packer.rb +30 -0
  88. data/lib/baykit/bayserver/protocol/packet_part_accessor.rb +122 -0
  89. data/lib/baykit/bayserver/protocol/packet_store.rb +139 -0
  90. data/lib/baykit/bayserver/protocol/packet_unpacker.rb +17 -0
  91. data/lib/baykit/bayserver/protocol/protocol_exception.rb +17 -0
  92. data/lib/baykit/bayserver/protocol/protocol_handler.rb +64 -0
  93. data/lib/baykit/bayserver/protocol/protocol_handler_factory.rb +14 -0
  94. data/lib/baykit/bayserver/protocol/protocol_handler_store.rb +109 -0
  95. data/lib/baykit/bayserver/sink.rb +22 -0
  96. data/lib/baykit/bayserver/taxi/taxi.rb +38 -0
  97. data/lib/baykit/bayserver/taxi/taxi_runner.rb +31 -0
  98. data/lib/baykit/bayserver/tours/content_consume_listener.rb +20 -0
  99. data/lib/baykit/bayserver/tours/package.rb +4 -0
  100. data/lib/baykit/bayserver/tours/read_file_taxi.rb +102 -0
  101. data/lib/baykit/bayserver/tours/req_content_handler.rb +37 -0
  102. data/lib/baykit/bayserver/tours/send_file_train.rb +65 -0
  103. data/lib/baykit/bayserver/tours/send_file_yacht.rb +93 -0
  104. data/lib/baykit/bayserver/tours/tour.rb +195 -0
  105. data/lib/baykit/bayserver/tours/tour_req.rb +251 -0
  106. data/lib/baykit/bayserver/tours/tour_res.rb +400 -0
  107. data/lib/baykit/bayserver/tours/tour_store.rb +121 -0
  108. data/lib/baykit/bayserver/train/train.rb +54 -0
  109. data/lib/baykit/bayserver/train/train_runner.rb +32 -0
  110. data/lib/baykit/bayserver/util/byte_array.rb +54 -0
  111. data/lib/baykit/bayserver/util/byte_buffer.rb +13 -0
  112. data/lib/baykit/bayserver/util/cgi_util.rb +165 -0
  113. data/lib/baykit/bayserver/util/char_util.rb +22 -0
  114. data/lib/baykit/bayserver/util/cities.rb +45 -0
  115. data/lib/baykit/bayserver/util/class_util.rb +17 -0
  116. data/lib/baykit/bayserver/util/counter.rb +23 -0
  117. data/lib/baykit/bayserver/util/data_consume_listener.rb +13 -0
  118. data/lib/baykit/bayserver/util/executor_service.rb +81 -0
  119. data/lib/baykit/bayserver/util/groups.rb +110 -0
  120. data/lib/baykit/bayserver/util/gzip_compressor.rb +55 -0
  121. data/lib/baykit/bayserver/util/headers.rb +194 -0
  122. data/lib/baykit/bayserver/util/host_matcher.rb +48 -0
  123. data/lib/baykit/bayserver/util/http_status.rb +60 -0
  124. data/lib/baykit/bayserver/util/http_util.rb +157 -0
  125. data/lib/baykit/bayserver/util/io_util.rb +32 -0
  126. data/lib/baykit/bayserver/util/ip_matcher.rb +67 -0
  127. data/lib/baykit/bayserver/util/key_val.rb +15 -0
  128. data/lib/baykit/bayserver/util/key_val_list_parser.rb +53 -0
  129. data/lib/baykit/bayserver/util/locale.rb +30 -0
  130. data/lib/baykit/bayserver/util/md5_password.rb +24 -0
  131. data/lib/baykit/bayserver/util/message.rb +56 -0
  132. data/lib/baykit/bayserver/util/mimes.rb +27 -0
  133. data/lib/baykit/bayserver/util/object_factory.rb +13 -0
  134. data/lib/baykit/bayserver/util/object_store.rb +74 -0
  135. data/lib/baykit/bayserver/util/postman.rb +35 -0
  136. data/lib/baykit/bayserver/util/reusable.rb +13 -0
  137. data/lib/baykit/bayserver/util/selector.rb +141 -0
  138. data/lib/baykit/bayserver/util/simple_buffer.rb +53 -0
  139. data/lib/baykit/bayserver/util/simple_inspect.rb +12 -0
  140. data/lib/baykit/bayserver/util/string_util.rb +73 -0
  141. data/lib/baykit/bayserver/util/sys_util.rb +138 -0
  142. data/lib/baykit/bayserver/util/url_decoder.rb +42 -0
  143. data/lib/baykit/bayserver/util/url_encoder.rb +19 -0
  144. data/lib/baykit/bayserver/util/valve.rb +15 -0
  145. data/lib/baykit/bayserver/version.rb +7 -0
  146. data/lib/baykit/bayserver/watercraft/boat.rb +43 -0
  147. data/lib/baykit/bayserver/watercraft/ship.rb +104 -0
  148. data/lib/baykit/bayserver/watercraft/yacht.rb +42 -0
  149. metadata +189 -0
@@ -0,0 +1,180 @@
1
+ require 'baykit/bayserver/bcf/package'
2
+ require 'baykit/bayserver/bay_message'
3
+
4
+ module Baykit
5
+ module BayServer
6
+ module Bcf
7
+
8
+ class BcfParser
9
+
10
+ attr :file_name
11
+ attr :line_no
12
+ attr :input
13
+ attr :prev_line_info
14
+ attr :indent_map
15
+
16
+ class LineInfo
17
+ attr :line_obj
18
+ attr :indent
19
+
20
+ def initialize(line_obj, indent)
21
+ if indent == nil
22
+ raise RuntimeError.new("indent is nil")
23
+ end
24
+ @line_obj = line_obj
25
+ @indent = indent
26
+ end
27
+ end
28
+
29
+ def initialize
30
+ @indent_map = []
31
+ end
32
+
33
+ def parse(file)
34
+ doc = BcfDocument.new
35
+
36
+ @file_name = file
37
+ @line_no = 0
38
+ @input = File.open(file)
39
+ parse_same_level(doc.content_list, 0)
40
+ @input.close
41
+ return doc
42
+ end
43
+
44
+ protected
45
+
46
+ def push_indent(sp_count)
47
+ @indent_map << sp_count
48
+ end
49
+
50
+ def pop_indent
51
+ @indent_map.delete_at(@indent_map.length - 1)
52
+ end
53
+
54
+ def get_indent(sp_count)
55
+ if @indent_map.empty?
56
+ push_indent sp_count
57
+ elsif sp_count > @indent_map[indent_map.length - 1]
58
+ push_indent sp_count
59
+ end
60
+
61
+ indent = @indent_map.index(sp_count)
62
+
63
+ if indent == nil
64
+ raise ParseException.new(@file_name, @line_no, BayMessage.get(:PAS_INVALID_INDENT))
65
+ end
66
+
67
+ return indent
68
+ end
69
+
70
+
71
+ def parse_same_level(cur_list, indent)
72
+ object_exists_in_same_level = false
73
+ while true
74
+ if @prev_line_info != nil
75
+ line_info = @prev_line_info
76
+ @prev_line_info = nil
77
+ else
78
+ line = @input.gets
79
+ @line_no += 1
80
+
81
+ if line == nil
82
+ break
83
+ end
84
+
85
+ if line.strip.start_with?("#") || line.strip == ""
86
+ next
87
+ end
88
+
89
+ line_info = parse_line(@line_no, line)
90
+ end
91
+
92
+ if line_info == nil
93
+ # Comment or empty
94
+ next
95
+
96
+ elsif line_info.indent > indent
97
+ # lower level
98
+ raise ParseException.new(@file_name, @line_no, BayMessage.get(:PAS_INVALID_INDENT))
99
+
100
+ elsif line_info.indent < indent
101
+ # upper level
102
+ @prev_line_info = line_info
103
+ if object_exists_in_same_level
104
+ pop_indent
105
+ end
106
+ return line_info
107
+
108
+ else
109
+ object_exists_in_same_level = true
110
+
111
+ # samel level
112
+ if line_info.line_obj.instance_of? BcfElement
113
+ # BcfElement
114
+ cur_list << line_info.line_obj
115
+
116
+ last_line_info = parse_same_level(line_info.line_obj.content_list, line_info.indent + 1)
117
+ if last_line_info == nil
118
+ # EOF
119
+ pop_indent
120
+ return nil
121
+ else
122
+ # Same level
123
+ next
124
+ end
125
+ else
126
+ # IniKeyVal
127
+ cur_list << line_info.line_obj
128
+ end
129
+ end
130
+ end
131
+ pop_indent
132
+ return nil
133
+ end
134
+
135
+ def parse_line (line_no, line)
136
+
137
+ sp_count = 0
138
+ for sp_count in line.length.times
139
+ c = line[sp_count]
140
+ if c.strip != ''
141
+ # c is not awhitespace
142
+ break
143
+ end
144
+
145
+ if c != ' '
146
+ raise ParseException.new(@file_name, @line_no, BayMessage.get(:PAS_INVALID_WHITESPACE))
147
+ end
148
+ end
149
+
150
+ indent = get_indent(sp_count)
151
+ line = line.slice(sp_count .. -1)
152
+ line.strip!
153
+
154
+ if line.start_with?("[")
155
+ close_pos = line.index("]");
156
+ if close_pos == -1
157
+ raise ParseException.new(@file_name, @line_no, :PAS_BRACE_NOT_CLOSED)
158
+ end
159
+
160
+ if !line.end_with?("]")
161
+ raise ParseException.new(@file_name, @line_no, :PAS_INVALID_LINE)
162
+ end
163
+
164
+ key_val = parse_key_val(line.slice(1, close_pos - 1), line_no);
165
+ return LineInfo.new(BcfElement.new(key_val.key, key_val.value, @file_name, line_no), indent)
166
+ else
167
+ return LineInfo.new(parse_key_val(line, line_no), indent)
168
+ end
169
+ end
170
+
171
+ def parse_key_val(line, line_no)
172
+ sp_pos = line.index(' ')
173
+ key = sp_pos == nil ? line : line[0, sp_pos]
174
+ val = sp_pos == nil ? "" : line[sp_pos .. -1].strip
175
+ return BcfKeyVal.new(key, val, @file_name, line_no);
176
+ end
177
+ end
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,6 @@
1
+ require 'baykit/bayserver/bcf/bcf_object'
2
+ require 'baykit/bayserver/bcf/bcf_key_val'
3
+ require 'baykit/bayserver/bcf/bcf_element'
4
+ require 'baykit/bayserver/bcf/bcf_document'
5
+ require 'baykit/bayserver/bcf/bcf_parser'
6
+ require 'baykit/bayserver/bcf/parse_exception'
@@ -0,0 +1,15 @@
1
+ require 'baykit/bayserver/config_exception'
2
+ require 'baykit/bayserver/bcf/package'
3
+
4
+ module Baykit
5
+ module BayServer
6
+ module Bcf
7
+ class ParseException < ConfigException
8
+
9
+ def initialize(file_name, line_no, msg)
10
+ super
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ require 'baykit/bayserver/bay_exception'
2
+
3
+ module Baykit
4
+ module BayServer
5
+
6
+ class ConfigException < BayException
7
+ attr_reader :file_name
8
+ attr_reader :line_no
9
+
10
+ def initialize(file_name, line_no, fmt, *args)
11
+ super(fmt, *args)
12
+ @file_name = file_name
13
+ @line_no = line_no
14
+ end
15
+
16
+ def message()
17
+ return ConfigException::create_message(super, @file_name, @line_no)
18
+ end
19
+
20
+ def self::create_message(msg, fname, line)
21
+ return "#{msg == nil ? "" : msg} #{fname}:#{line}"
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,8 @@
1
+
2
+ module Baykit
3
+ module BayServer
4
+ module Constants
5
+
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,117 @@
1
+ require 'baykit/bayserver/docker/club'
2
+ require 'baykit/bayserver/docker/base/docker_base'
3
+ require 'baykit/bayserver/bcf/package'
4
+ require 'baykit/bayserver/util/class_util'
5
+
6
+ module Baykit
7
+ module BayServer
8
+ module Docker
9
+ module Base
10
+ class ClubBase < Baykit::BayServer::Docker::Base::DockerBase
11
+ include Baykit::BayServer::Docker::Club # implements
12
+
13
+ include Baykit::BayServer::Bcf
14
+ include Baykit::BayServer::Util
15
+
16
+ attr :file_name
17
+ attr :extension
18
+ attr :charset
19
+ attr :locale
20
+ attr :decode_path_info
21
+
22
+ def initialize
23
+ @file_name = nil
24
+ @extension = nil
25
+ @charset = nil
26
+ @locale = nil
27
+ @decode_path_info = true
28
+ end
29
+
30
+ def to_s()
31
+ return ClassUtil.get_local_name(self.class)
32
+ end
33
+
34
+ ######################################################
35
+ # Implements Docker
36
+ ######################################################
37
+
38
+ def init(elm, parent)
39
+ super
40
+ p = elm.arg.rindex('.');
41
+ if(p == nil)
42
+ @file_name = elm.arg
43
+ @extension = nil
44
+ else
45
+ @file_name = elm.arg[0, p]
46
+ @extension = elm.arg[p+1 .. -1]
47
+ end
48
+
49
+ end
50
+
51
+ ######################################################
52
+ # Implements DockerBase
53
+ ######################################################
54
+
55
+ def init_key_val(kv)
56
+ case kv.key.downcase
57
+ when "decodepathinfo"
58
+ @decode_path_info = StringUtil.parse_bool(kv.value)
59
+ when "charset"
60
+ @charset = kv.value
61
+ else
62
+ return super
63
+ end
64
+ return true
65
+ end
66
+
67
+ ######################################################
68
+ # Implements Club
69
+ ######################################################
70
+
71
+ def matches(fname)
72
+ # check club
73
+ pos = fname.index(".")
74
+ if(pos == nil)
75
+ # fname has no extension
76
+ if(@extension != nil)
77
+ return false
78
+ end
79
+
80
+ if(@file_name == "*")
81
+ return true
82
+ end
83
+
84
+ return fname == @file_name
85
+ else
86
+ # fname has extension
87
+ if(@extension == nil)
88
+ return false
89
+ end
90
+
91
+ nm = fname[0, pos]
92
+ ext = fname[pos + 1 .. -1]
93
+
94
+ if(@extension != "*" && ext != @extension)
95
+ return false
96
+ end
97
+
98
+ if(@file_name == "*")
99
+ return true
100
+ else
101
+ return nm == @file_name
102
+ end
103
+ end
104
+ end
105
+
106
+ def to_s
107
+ self.class.name
108
+ end
109
+
110
+ def inspect
111
+ self.class.name
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,66 @@
1
+ require 'baykit/bayserver/util/class_util'
2
+
3
+ module Baykit
4
+ module BayServer
5
+ module Docker
6
+ module Base
7
+ class DockerBase
8
+ include Baykit::BayServer::Docker::Docker # implements
9
+ include Baykit::BayServer::Bcf
10
+
11
+ include Baykit::BayServer::Util
12
+
13
+ attr :type
14
+
15
+ def to_s()
16
+ return ClassUtil.get_local_name(self.class)
17
+ end
18
+
19
+ def init(elm, parent)
20
+ @type = elm.name
21
+ elm.content_list.each do |o|
22
+ if o.kind_of? BcfKeyVal
23
+ begin
24
+ if !init_key_val(o)
25
+ raise ConfigException.new o.file_name, o.line_no, BayMessage.get(:CFG_INVALID_PARAMETER, o.key)
26
+ end
27
+ rescue ConfigException => e
28
+ raise e
29
+ rescue => e
30
+ BayLog.error_e(e)
31
+ raise ConfigException.new o.file_name, o.line_no, BayMessage.get(:CFG_INVALID_PARAMETER_VALUE, o.key)
32
+ end
33
+ else
34
+ begin
35
+ dkr = BayServer.dockers.create_docker(o, self)
36
+ rescue ConfigException => e
37
+ raise e
38
+ rescue => e
39
+ BayLog.error_e e
40
+ raise ConfigException.new(o.file_name, o.line_no, BayMessage.get(:CFG_INVALID_DOCKER, o.name))
41
+ end
42
+
43
+ if(!init_docker(dkr))
44
+ raise ConfigException.new(o.file_name, o.line_no, BayMessage.get(:CFG_INVALID_DOCKER, o.name))
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ def init_docker(dkr)
51
+ return false;
52
+ end
53
+
54
+ def init_key_val(kv)
55
+ case kv.key.downcase
56
+ when "docker"
57
+ return true
58
+ else
59
+ return false
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,89 @@
1
+ require 'baykit/bayserver/agent/next_socket_action'
2
+ require 'baykit/bayserver/agent/transporter/data_listener'
3
+ require 'baykit/bayserver/watercraft/ship'
4
+ require 'baykit/bayserver/tours/package'
5
+
6
+ module Baykit
7
+ module BayServer
8
+ module Docker
9
+ module Base
10
+ class InboundDataListener
11
+
12
+ include Baykit::BayServer::Agent::Transporter::DataListener # implements
13
+ include Baykit::BayServer::Agent
14
+
15
+ attr :ship
16
+
17
+ def initialize(sip)
18
+ @ship = sip
19
+ end
20
+
21
+ def to_s
22
+ return @ship.to_s
23
+ end
24
+
25
+ ######################################################
26
+ # Implements DataListener
27
+ ######################################################
28
+
29
+ def notify_connect()
30
+ raise Sink.new()
31
+ end
32
+
33
+ def notify_handshake_done(protocol)
34
+ BayLog.trace("%s notify_handshake_done: proto=%s", self, protocol)
35
+ return NextSocketAction::CONTINUE
36
+ end
37
+
38
+ def notify_read(buf, adr)
39
+ BayLog.trace("%s notify_read", self)
40
+ return @ship.protocol_handler.bytes_received(buf)
41
+ end
42
+
43
+ def notify_eof()
44
+ BayLog.trace("%s notify_eof", self)
45
+ return NextSocketAction::CLOSE
46
+ end
47
+
48
+ def notify_protocol_error(err)
49
+ BayLog.trace("%s notify_protocol_error", self)
50
+ if BayLog.debug_mode?
51
+ BayLog.error_e(err)
52
+ end
53
+ return @ship.protocol_handler.send_req_protocol_error(err)
54
+ end
55
+
56
+ def notify_close
57
+ BayLog.debug("%s notify_close", self)
58
+
59
+ @ship.abort_tours()
60
+
61
+ if !@ship.active_tours.empty?
62
+ # cannot close because there are some running tours
63
+ BayLog.debug("%s cannot end ship because there are some running tours (ignore)", self)
64
+ @ship.need_end = true
65
+ else
66
+ @ship.end_ship()
67
+ end
68
+
69
+ end
70
+
71
+ def check_timeout(duration_sec)
72
+ if @ship.socket_timeout_sec <= 0
73
+ timeout = false;
74
+ elsif @ship.keeping
75
+ timeout = duration_sec >= BayServer.harbor.keep_timeout_sec
76
+ else
77
+ timeout = duration_sec >= @ship.socket_timeout_sec
78
+ end
79
+ BayLog.debug("%s Check timeout: dur=%d timeout=%s, keeping=%s, limit=%d",
80
+ self, duration_sec, timeout, @ship.keeping, @ship.socket_timeout_sec)
81
+ return timeout
82
+ end
83
+
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+
@@ -0,0 +1,42 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Docker
4
+ module Base
5
+ module InboundHandler # interface
6
+
7
+ #
8
+ # Send protocol error
9
+ # return true if connection must be closed
10
+ #
11
+ def send_req_protocol_error(protocol_ex)
12
+ raise NotImplementedError()
13
+ end
14
+
15
+ #
16
+ # Send HTTP headers to client
17
+ #
18
+ def send_res_headers(tur)
19
+ raise NotImplementedError()
20
+ end
21
+
22
+ #
23
+ # Send Contents to client
24
+ #
25
+ def send_res_content(tur, bytes, ofs, len, &callback)
26
+ raise NotImplementedError()
27
+ end
28
+
29
+ #
30
+ # Send end of contents to client.
31
+ # sendEnd cannot refer Tour instance because it is discarded before call.
32
+ #
33
+ def send_end_tour(tur, keep_alive, &callback)
34
+ raise NotImplementedError()
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+