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,195 @@
1
+ require 'baykit/bayserver/bay_log'
2
+ require 'baykit/bayserver/http_exception'
3
+
4
+ require 'baykit/bayserver/watercraft/ship'
5
+ require 'baykit/bayserver/util/counter'
6
+
7
+
8
+ module Baykit
9
+ module BayServer
10
+ module Tours
11
+ class Tour
12
+ include Baykit::BayServer
13
+ include Baykit::BayServer::WaterCraft
14
+ include Baykit::BayServer::Util
15
+ include Baykit::BayServer::Util::Reusable # implements
16
+
17
+ class TourState
18
+ UNINITIALIZED = 0
19
+ PREPARING = 1
20
+ RUNNING = 2
21
+ ABORTED = 3
22
+ ENDED = 4
23
+ ZOMBIE = 5
24
+ end
25
+
26
+ # class variables
27
+ class << self
28
+ attr :oid_counter
29
+ attr :tour_id_counter
30
+ end
31
+ @oid_counter = Counter.new
32
+ @tour_id_counter = Counter.new
33
+
34
+ TOUR_ID_NOCHECK = -1
35
+ INVALID_TOUR_ID = 0
36
+
37
+ attr :ship
38
+ attr :ship_id
39
+ attr :obj_id #object id
40
+
41
+ attr :tour_id
42
+ attr :error_handling
43
+ attr_accessor :town
44
+ attr_accessor :city
45
+ attr_accessor :club
46
+
47
+ attr :req
48
+ attr :res
49
+
50
+ attr :lock
51
+
52
+ attr_accessor :interval
53
+ attr_accessor :is_secure
54
+ attr_accessor :state
55
+
56
+ attr_accessor :error
57
+
58
+
59
+ def initialize()
60
+ @obj_id = Tour.oid_counter.next
61
+ @req = TourReq.new(self)
62
+ @res = TourRes.new(self)
63
+ @lock = Mutex.new
64
+ reset()
65
+ end
66
+
67
+ def to_s()
68
+ return "#{@ship} tours##{@tour_id}/#{@obj_id}[key=#{@req.key}]"
69
+ end
70
+
71
+ ######################################################
72
+ # implements Reusable
73
+ ######################################################
74
+ def reset()
75
+ @city = nil
76
+ @town = nil
77
+ @club = nil
78
+ @error_handling = false
79
+
80
+ @tour_id = INVALID_TOUR_ID
81
+ @interval = 0
82
+ @is_secure = false
83
+ change_state(TOUR_ID_NOCHECK, TourState::UNINITIALIZED)
84
+ @error = nil
85
+
86
+ @req.reset()
87
+ @res.reset()
88
+ end
89
+
90
+ def id()
91
+ @tour_id
92
+ end
93
+
94
+ def init(key, sip)
95
+ if initialized?
96
+ raise Sink.new("#{@ship} Tour already initialized: #{self}")
97
+ end
98
+
99
+ @ship = sip
100
+ @ship_id = sip.ship_id
101
+ if @ship_id == Ship::INVALID_SHIP_ID
102
+ raise Sink.new()
103
+ end
104
+ @tour_id = Tour.tour_id_counter.next
105
+ change_state(TOUR_ID_NOCHECK, TourState::PREPARING)
106
+
107
+ @req.init(key)
108
+ @res.init()
109
+ BayLog.debug("%s initialized", self)
110
+ end
111
+
112
+ def go
113
+ change_state(TOUR_ID_NOCHECK, TourState::RUNNING)
114
+
115
+ city = @ship.port_docker.find_city(@req.req_host)
116
+ if city == nil
117
+ city = BayServer.find_city(@req.req_host)
118
+ end
119
+ BayLog.debug("%s GO TOUR! ...( ^_^)/: city=%s url=%s", self, @req.req_host, @req.uri);
120
+
121
+ if city == nil
122
+ raise HttpException.new HttpStatus::NOT_FOUND, @req.uri
123
+ else
124
+ begin
125
+ city.enter(self)
126
+ rescue Sink => e
127
+ raise e
128
+ rescue HttpException => e
129
+ BayLog.error_e(e)
130
+ raise e
131
+ rescue => e
132
+ BayLog.error_e(e)
133
+ raise HttpException.new(HttpStatus::INTERNAL_SERVER_ERROR, e.message)
134
+ end
135
+ end
136
+ end
137
+
138
+ def valid?()
139
+ return @state == TourState::PREPARING || @state == TourState::RUNNING
140
+ end
141
+
142
+ def preparing?()
143
+ return @state == TourState::PREPARING
144
+ end
145
+
146
+ def running?()
147
+ return @state == TourState::RUNNING
148
+ end
149
+
150
+ def zombie?()
151
+ return @state == TourState::ZOMBIE
152
+ end
153
+
154
+ def aborted?()
155
+ return @state == TourState::ABORTED
156
+ end
157
+
158
+ def initialized?()
159
+ return state != TourState::UNINITIALIZED
160
+ end
161
+
162
+ def change_state(chk_id, new_state)
163
+ BayLog.debug("%s change state: %s", self, new_state)
164
+ check_tour_id(chk_id)
165
+ @state = new_state
166
+ end
167
+
168
+
169
+
170
+ def secure?
171
+ @is_secure
172
+ end
173
+
174
+ def inspect
175
+ return to_s
176
+ end
177
+
178
+ def check_tour_id(chk_id)
179
+ if chk_id == TOUR_ID_NOCHECK
180
+ return
181
+ end
182
+
183
+ if !initialized?
184
+ raise Sink.new("%s Tour not initialized", self)
185
+ end
186
+ if chk_id != @tour_id
187
+ raise Sink.new("%s Invalid tours id: %s", self, chk_id== nil ? "" : chk_id)
188
+ end
189
+ end
190
+
191
+
192
+ end
193
+ end
194
+ end
195
+ end
@@ -0,0 +1,251 @@
1
+ require 'baykit/bayserver/http_exception'
2
+ require 'baykit/bayserver/protocol/protocol_exception'
3
+ require 'baykit/bayserver/util/headers'
4
+
5
+ module Baykit
6
+ module BayServer
7
+ module Tours
8
+ class TourReq
9
+ include Baykit::BayServer::Util::Reusable # implements
10
+
11
+ include Baykit::BayServer::Protocol
12
+ include Baykit::BayServer::Util
13
+
14
+ ###########################
15
+ # Request Header info
16
+ ###########################
17
+ attr :tour # parent object
18
+ attr :key # request id in FCGI or stream id in HTTP/2
19
+
20
+ attr_accessor :uri
21
+ attr_accessor :protocol
22
+ attr_accessor :method
23
+
24
+ attr :headers
25
+
26
+ attr_accessor :rewritten_uri # set if URI is rewritten
27
+ attr_accessor :query_string
28
+ attr_accessor :path_info
29
+ attr_accessor :script_name
30
+ attr_accessor :req_host # from Host header
31
+ attr_accessor :req_port # from Host header
32
+
33
+ attr_accessor :remote_user
34
+ attr_accessor :remote_pass
35
+
36
+ attr_accessor :remote_address
37
+ attr_accessor :remote_port
38
+ attr_accessor :remote_host_func # function
39
+ attr_accessor :server_address
40
+ attr_accessor :server_port
41
+ attr_accessor :server_name
42
+ attr_accessor :charset
43
+
44
+ attr :content_handler
45
+
46
+ ###########################
47
+ # Request content info
48
+ ###########################
49
+ # Handling request contents
50
+ attr :bytes_posted
51
+ attr :bytes_consumed
52
+ attr :bytes_limit
53
+
54
+ attr :consume_listener
55
+ attr :available
56
+ attr :ended
57
+
58
+ def initialize(tur)
59
+ @headers = Headers.new()
60
+ @tour = tur
61
+ end
62
+
63
+ def init(key)
64
+ @key = key
65
+ end
66
+
67
+ ######################################################
68
+ # Implements Reusable
69
+ ######################################################
70
+ def reset()
71
+ @headers.clear
72
+
73
+ @uri = nil
74
+ @method = nil
75
+ @protocol = nil
76
+ @bytes_posted = 0
77
+ @bytes_consumed = 0
78
+ @bytes_limit = 0
79
+
80
+ @key = 0
81
+
82
+ @rewritten_uri = nil
83
+ @query_string = nil
84
+ @path_info = nil
85
+ @script_name = nil
86
+ @req_host = nil
87
+ @req_port = 0
88
+ @remote_user = nil
89
+ @remote_pass = nil
90
+
91
+ @remote_address = nil
92
+ @remote_port = 0
93
+ @remote_host_func = nil
94
+ @server_address = nil
95
+ @server_port = 0
96
+ @server_name = nil
97
+
98
+ @charset = nil
99
+ @available = false
100
+ @content_handler = nil
101
+ @consume_listener = nil
102
+ @ended = false
103
+
104
+ end
105
+
106
+ ######################################################
107
+ # other methods
108
+ ######################################################
109
+
110
+ def remote_host()
111
+ return @remote_host_func.call()
112
+ end
113
+
114
+ def set_consume_listener(limit, &listener)
115
+ if limit < 0
116
+ raise Sink.new("invalid limit")
117
+ end
118
+ @bytes_limit = limit
119
+ @consume_listener = listener
120
+ @bytes_posted = 0
121
+ @bytes_consumed = 0
122
+ @available = true
123
+ end
124
+
125
+ def post_content(check_id, data, start, len)
126
+ @tour.check_tour_id(check_id)
127
+
128
+ if !@tour.running?
129
+ BayLog.debug("%s tour is not running.", @tour)
130
+ return true
131
+ end
132
+
133
+ if @content_handler == nil
134
+ BayLog.warn("%s content read, but no content handler", tour)
135
+ return true
136
+ end
137
+
138
+ if @consume_listener == nil
139
+ raise Sink.new("Request consume listener is null")
140
+ end
141
+
142
+ if @bytes_posted + len > @bytes_limit
143
+ raise ProtocolException.new("Read data exceed content-length: %d/%d", @bytes_posted + len, @bytes_limit)
144
+ end
145
+
146
+ # If has error, only read content. (Do not call content handler)
147
+ if @tour.error == nil
148
+ @content_handler.on_read_content(@tour, data, start, len)
149
+ end
150
+ @bytes_posted += len
151
+
152
+ BayLog.debug("%s read content: len=%d posted=%d limit=%d consumed=%d",
153
+ @tour, len, @bytes_posted, @bytes_limit, @bytes_consumed)
154
+
155
+ if @tour.error == nil
156
+ return true
157
+ end
158
+
159
+ old_available = @available
160
+ if !buffer_available()
161
+ @available = false
162
+ end
163
+
164
+ if old_available && !@available
165
+ BayLog.debug("%s request unavailable (_ _): posted=%d consumed=%d", self, @bytes_posted, @bytes_consumed);
166
+ end
167
+
168
+ return @available
169
+ end
170
+
171
+ def end_content(check_id)
172
+ @tour.check_tour_id(check_id)
173
+ if @ended
174
+ raise Sink.new("#{@tour} Request content is already ended")
175
+ end
176
+
177
+ if @bytes_limit >= 0 && @bytes_posted != @bytes_limit
178
+ raise ProtocolException.new("Read data exceed content-length: #{@bytes_posted}/#{@bytes_limit}")
179
+ end
180
+
181
+ if @content_handler != nil
182
+ @content_handler.on_end_content(@tour)
183
+ end
184
+ @ended = true
185
+ end
186
+
187
+ def consumed(chk_id, length)
188
+ @tour.check_tour_id(chk_id)
189
+ BayLog.debug("%s content_consumed: len=%d posted=%d", @tour, length, @bytes_posted)
190
+ if @consume_listener == nil
191
+ raise Sink.new("Request consume listener is null")
192
+ end
193
+
194
+ @bytes_consumed += length
195
+ BayLog.debug("%s reqConsumed: len=%d posted=%d limit=%d consumed=%d",
196
+ @tour, length, @bytes_posted, @bytes_limit, @bytes_consumed)
197
+
198
+ resume = false
199
+ old_available = @available
200
+ if buffer_available()
201
+ @available = true
202
+ end
203
+
204
+ if !old_available && @available
205
+ BayLog.debug("%s request available (^o^): posted=%d consumed=%d", self, @bytes_posted, @bytes_consumed);
206
+ resume = true
207
+ end
208
+ @consume_listener.call(length, resume)
209
+ end
210
+
211
+ def abort()
212
+ if !@tour.preparing?
213
+ BayLog.debug("%s cannot abort non-preparing tour", @tour)
214
+ return false
215
+ end
216
+
217
+ BayLog.debug("%s abort", @tour)
218
+ if @tour.aborted?
219
+ raise Sink.new("tour has already aborted")
220
+ end
221
+
222
+ aborted = true
223
+ if @tour.running? && @content_handler != nil
224
+ aborted = @content_handler.on_abort(@tour)
225
+ end
226
+
227
+ if aborted
228
+ @tour.change_state(Tour::TOUR_ID_NOCHECK, Tour::TourState::ABORTED)
229
+ end
230
+
231
+ return aborted
232
+ end
233
+
234
+ def set_content_handler(hnd)
235
+ if hnd == nil
236
+ raise Sink.new("nil")
237
+ end
238
+ if @content_handler != nil
239
+ raise Sink.new("content handler already set")
240
+ end
241
+
242
+ @content_handler = hnd
243
+ end
244
+
245
+ def buffer_available()
246
+ return @bytes_posted - @bytes_consumed < BayServer.harbor.tour_buffer_size
247
+ end
248
+ end
249
+ end
250
+ end
251
+ end