bayserver-core 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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