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.
- checksums.yaml +7 -0
- data/lib/baykit/bayserver/agent/accept_handler.rb +97 -0
- data/lib/baykit/bayserver/agent/channel_listener.rb +35 -0
- data/lib/baykit/bayserver/agent/command_receiver.rb +75 -0
- data/lib/baykit/bayserver/agent/grand_agent.rb +319 -0
- data/lib/baykit/bayserver/agent/grand_agent_monitor.rb +217 -0
- data/lib/baykit/bayserver/agent/next_socket_action.rb +14 -0
- data/lib/baykit/bayserver/agent/non_blocking_handler.rb +433 -0
- data/lib/baykit/bayserver/agent/package.rb +3 -0
- data/lib/baykit/bayserver/agent/signal/signal_agent.rb +165 -0
- data/lib/baykit/bayserver/agent/signal/signal_proxy.rb +18 -0
- data/lib/baykit/bayserver/agent/signal/signal_sender.rb +99 -0
- data/lib/baykit/bayserver/agent/spin_handler.rb +140 -0
- data/lib/baykit/bayserver/agent/transporter/data_listener.rb +38 -0
- data/lib/baykit/bayserver/agent/transporter/package.rb +3 -0
- data/lib/baykit/bayserver/agent/transporter/plain_transporter.rb +55 -0
- data/lib/baykit/bayserver/agent/transporter/secure_transporter.rb +81 -0
- data/lib/baykit/bayserver/agent/transporter/spin_read_transporter.rb +111 -0
- data/lib/baykit/bayserver/agent/transporter/spin_write_transporter.rb +125 -0
- data/lib/baykit/bayserver/agent/transporter/transporter.rb +466 -0
- data/lib/baykit/bayserver/agent/upgrade_exception.rb +11 -0
- data/lib/baykit/bayserver/bay_dockers.rb +60 -0
- data/lib/baykit/bayserver/bay_exception.rb +12 -0
- data/lib/baykit/bayserver/bay_log.rb +148 -0
- data/lib/baykit/bayserver/bay_message.rb +20 -0
- data/lib/baykit/bayserver/bayserver.rb +529 -0
- data/lib/baykit/bayserver/bcf/bcf_document.rb +44 -0
- data/lib/baykit/bayserver/bcf/bcf_element.rb +30 -0
- data/lib/baykit/bayserver/bcf/bcf_key_val.rb +19 -0
- data/lib/baykit/bayserver/bcf/bcf_object.rb +15 -0
- data/lib/baykit/bayserver/bcf/bcf_parser.rb +180 -0
- data/lib/baykit/bayserver/bcf/package.rb +6 -0
- data/lib/baykit/bayserver/bcf/parse_exception.rb +15 -0
- data/lib/baykit/bayserver/config_exception.rb +25 -0
- data/lib/baykit/bayserver/constants.rb +8 -0
- data/lib/baykit/bayserver/docker/base/club_base.rb +117 -0
- data/lib/baykit/bayserver/docker/base/docker_base.rb +66 -0
- data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +89 -0
- data/lib/baykit/bayserver/docker/base/inbound_handler.rb +42 -0
- data/lib/baykit/bayserver/docker/base/inbound_ship.rb +341 -0
- data/lib/baykit/bayserver/docker/base/inbound_ship_store.rb +65 -0
- data/lib/baykit/bayserver/docker/base/port_base.rb +228 -0
- data/lib/baykit/bayserver/docker/base/reroute_base.rb +28 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_city_docker.rb +303 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +226 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +302 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_permission_docker.rb +242 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_secure_docker.rb +157 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_town_docker.rb +117 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_trouble_docker.rb +57 -0
- data/lib/baykit/bayserver/docker/built_in/log_boat.rb +71 -0
- data/lib/baykit/bayserver/docker/built_in/log_item.rb +18 -0
- data/lib/baykit/bayserver/docker/built_in/log_item_factory.rb +18 -0
- data/lib/baykit/bayserver/docker/built_in/log_items.rb +287 -0
- data/lib/baykit/bayserver/docker/built_in/write_file_taxi.rb +101 -0
- data/lib/baykit/bayserver/docker/city.rb +22 -0
- data/lib/baykit/bayserver/docker/club.rb +45 -0
- data/lib/baykit/bayserver/docker/docker.rb +8 -0
- data/lib/baykit/bayserver/docker/harbor.rb +34 -0
- data/lib/baykit/bayserver/docker/log.rb +17 -0
- data/lib/baykit/bayserver/docker/package.rb +12 -0
- data/lib/baykit/bayserver/docker/permission.rb +18 -0
- data/lib/baykit/bayserver/docker/port.rb +39 -0
- data/lib/baykit/bayserver/docker/reroute.rb +17 -0
- data/lib/baykit/bayserver/docker/secure.rb +22 -0
- data/lib/baykit/bayserver/docker/send_file/directory_train.rb +123 -0
- data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +43 -0
- data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +71 -0
- data/lib/baykit/bayserver/docker/town.rb +30 -0
- data/lib/baykit/bayserver/docker/trouble.rb +17 -0
- data/lib/baykit/bayserver/docker/warp/package.rb +4 -0
- data/lib/baykit/bayserver/docker/warp/warp_data.rb +84 -0
- data/lib/baykit/bayserver/docker/warp/warp_data_listener.rb +112 -0
- data/lib/baykit/bayserver/docker/warp/warp_docker.rb +273 -0
- data/lib/baykit/bayserver/docker/warp/warp_handler.rb +38 -0
- data/lib/baykit/bayserver/docker/warp/warp_ship.rb +166 -0
- data/lib/baykit/bayserver/docker/warp/warp_ship_store.rb +111 -0
- data/lib/baykit/bayserver/http_exception.rb +33 -0
- data/lib/baykit/bayserver/mem_usage.rb +104 -0
- data/lib/baykit/bayserver/protocol/command.rb +21 -0
- data/lib/baykit/bayserver/protocol/command_handler.rb +9 -0
- data/lib/baykit/bayserver/protocol/command_packer.rb +49 -0
- data/lib/baykit/bayserver/protocol/command_unpacker.rb +13 -0
- data/lib/baykit/bayserver/protocol/package.rb +15 -0
- data/lib/baykit/bayserver/protocol/packet.rb +63 -0
- data/lib/baykit/bayserver/protocol/packet_factory.rb +13 -0
- data/lib/baykit/bayserver/protocol/packet_packer.rb +30 -0
- data/lib/baykit/bayserver/protocol/packet_part_accessor.rb +122 -0
- data/lib/baykit/bayserver/protocol/packet_store.rb +139 -0
- data/lib/baykit/bayserver/protocol/packet_unpacker.rb +17 -0
- data/lib/baykit/bayserver/protocol/protocol_exception.rb +17 -0
- data/lib/baykit/bayserver/protocol/protocol_handler.rb +64 -0
- data/lib/baykit/bayserver/protocol/protocol_handler_factory.rb +14 -0
- data/lib/baykit/bayserver/protocol/protocol_handler_store.rb +109 -0
- data/lib/baykit/bayserver/sink.rb +22 -0
- data/lib/baykit/bayserver/taxi/taxi.rb +38 -0
- data/lib/baykit/bayserver/taxi/taxi_runner.rb +31 -0
- data/lib/baykit/bayserver/tours/content_consume_listener.rb +20 -0
- data/lib/baykit/bayserver/tours/package.rb +4 -0
- data/lib/baykit/bayserver/tours/read_file_taxi.rb +102 -0
- data/lib/baykit/bayserver/tours/req_content_handler.rb +37 -0
- data/lib/baykit/bayserver/tours/send_file_train.rb +65 -0
- data/lib/baykit/bayserver/tours/send_file_yacht.rb +93 -0
- data/lib/baykit/bayserver/tours/tour.rb +195 -0
- data/lib/baykit/bayserver/tours/tour_req.rb +251 -0
- data/lib/baykit/bayserver/tours/tour_res.rb +400 -0
- data/lib/baykit/bayserver/tours/tour_store.rb +121 -0
- data/lib/baykit/bayserver/train/train.rb +54 -0
- data/lib/baykit/bayserver/train/train_runner.rb +32 -0
- data/lib/baykit/bayserver/util/byte_array.rb +54 -0
- data/lib/baykit/bayserver/util/byte_buffer.rb +13 -0
- data/lib/baykit/bayserver/util/cgi_util.rb +165 -0
- data/lib/baykit/bayserver/util/char_util.rb +22 -0
- data/lib/baykit/bayserver/util/cities.rb +45 -0
- data/lib/baykit/bayserver/util/class_util.rb +17 -0
- data/lib/baykit/bayserver/util/counter.rb +23 -0
- data/lib/baykit/bayserver/util/data_consume_listener.rb +13 -0
- data/lib/baykit/bayserver/util/executor_service.rb +81 -0
- data/lib/baykit/bayserver/util/groups.rb +110 -0
- data/lib/baykit/bayserver/util/gzip_compressor.rb +55 -0
- data/lib/baykit/bayserver/util/headers.rb +194 -0
- data/lib/baykit/bayserver/util/host_matcher.rb +48 -0
- data/lib/baykit/bayserver/util/http_status.rb +60 -0
- data/lib/baykit/bayserver/util/http_util.rb +157 -0
- data/lib/baykit/bayserver/util/io_util.rb +32 -0
- data/lib/baykit/bayserver/util/ip_matcher.rb +67 -0
- data/lib/baykit/bayserver/util/key_val.rb +15 -0
- data/lib/baykit/bayserver/util/key_val_list_parser.rb +53 -0
- data/lib/baykit/bayserver/util/locale.rb +30 -0
- data/lib/baykit/bayserver/util/md5_password.rb +24 -0
- data/lib/baykit/bayserver/util/message.rb +56 -0
- data/lib/baykit/bayserver/util/mimes.rb +27 -0
- data/lib/baykit/bayserver/util/object_factory.rb +13 -0
- data/lib/baykit/bayserver/util/object_store.rb +74 -0
- data/lib/baykit/bayserver/util/postman.rb +35 -0
- data/lib/baykit/bayserver/util/reusable.rb +13 -0
- data/lib/baykit/bayserver/util/selector.rb +141 -0
- data/lib/baykit/bayserver/util/simple_buffer.rb +53 -0
- data/lib/baykit/bayserver/util/simple_inspect.rb +12 -0
- data/lib/baykit/bayserver/util/string_util.rb +73 -0
- data/lib/baykit/bayserver/util/sys_util.rb +138 -0
- data/lib/baykit/bayserver/util/url_decoder.rb +42 -0
- data/lib/baykit/bayserver/util/url_encoder.rb +19 -0
- data/lib/baykit/bayserver/util/valve.rb +15 -0
- data/lib/baykit/bayserver/version.rb +7 -0
- data/lib/baykit/bayserver/watercraft/boat.rb +43 -0
- data/lib/baykit/bayserver/watercraft/ship.rb +104 -0
- data/lib/baykit/bayserver/watercraft/yacht.rb +42 -0
- metadata +189 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'baykit/bayserver/util/string_util'
|
|
2
|
+
require 'baykit/bayserver/bcf/package'
|
|
3
|
+
require 'baykit/bayserver/bay_log'
|
|
4
|
+
|
|
5
|
+
module Baykit
|
|
6
|
+
module BayServer
|
|
7
|
+
|
|
8
|
+
module Util
|
|
9
|
+
class Message
|
|
10
|
+
include Bcf
|
|
11
|
+
|
|
12
|
+
attr_reader :messages
|
|
13
|
+
|
|
14
|
+
def initialize
|
|
15
|
+
@messages = {}
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def init(file_prefix, locale)
|
|
19
|
+
lang = locale.language
|
|
20
|
+
file = file_prefix + ".bcf"
|
|
21
|
+
if(StringUtil.set?(lang) && lang != "en")
|
|
22
|
+
file = file_prefix + "_" + lang + ".bcf"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
if(!File.exist?(file))
|
|
26
|
+
BayLog.warn("Cannot find message send_file: %s", file)
|
|
27
|
+
return
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
p = BcfParser.new()
|
|
31
|
+
doc = p.parse(file)
|
|
32
|
+
|
|
33
|
+
doc.content_list.each do |o|
|
|
34
|
+
if(o.instance_of? BcfKeyVal)
|
|
35
|
+
messages[o.key.to_sym] = o.value
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# key : symbol
|
|
42
|
+
#
|
|
43
|
+
def get(key, *args)
|
|
44
|
+
if !key.instance_of? Symbol
|
|
45
|
+
raise RuntimeError "Key must be symbol"
|
|
46
|
+
end
|
|
47
|
+
msg = messages[key]
|
|
48
|
+
if msg == nil
|
|
49
|
+
msg = key.to_s
|
|
50
|
+
end
|
|
51
|
+
sprintf(msg, *args)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'baykit/bayserver/bcf/package'
|
|
2
|
+
|
|
3
|
+
module Baykit
|
|
4
|
+
module BayServer
|
|
5
|
+
module Util
|
|
6
|
+
class Mimes
|
|
7
|
+
include Baykit::BayServer::Bcf
|
|
8
|
+
|
|
9
|
+
@@mime_map = {}
|
|
10
|
+
|
|
11
|
+
def self.init(bcf_file)
|
|
12
|
+
p = BcfParser.new()
|
|
13
|
+
doc = p.parse(bcf_file)
|
|
14
|
+
doc.content_list.each do |kv|
|
|
15
|
+
if kv.instance_of? BcfKeyVal
|
|
16
|
+
@@mime_map[kv.key] = kv.value
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.type(ext)
|
|
22
|
+
@@mime_map[ext.downcase]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'baykit/bayserver/util/reusable'
|
|
2
|
+
module Baykit
|
|
3
|
+
module BayServer
|
|
4
|
+
module Util
|
|
5
|
+
class ObjectStore
|
|
6
|
+
include Baykit::BayServer::Util::Reusable # implements
|
|
7
|
+
|
|
8
|
+
attr :free_list
|
|
9
|
+
attr :active_list
|
|
10
|
+
attr :factory
|
|
11
|
+
|
|
12
|
+
def initialize(factory=nil)
|
|
13
|
+
@free_list = []
|
|
14
|
+
@active_list = []
|
|
15
|
+
@factory = factory
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def reset()
|
|
19
|
+
if @active_list.length > 0
|
|
20
|
+
BayLog.error("BUG?: There are %d active objects: %s", @active_list.length, @active_list)
|
|
21
|
+
|
|
22
|
+
# for security
|
|
23
|
+
@free_list.clear()
|
|
24
|
+
@active_list.clear()
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def rent()
|
|
29
|
+
if @free_list.empty?
|
|
30
|
+
if @factory.instance_of? ObjectFactory
|
|
31
|
+
obj = @factory.create_object()
|
|
32
|
+
else
|
|
33
|
+
# lambda
|
|
34
|
+
obj = @factory.call()
|
|
35
|
+
end
|
|
36
|
+
else
|
|
37
|
+
obj = @free_list.delete_at(@free_list.length - 1)
|
|
38
|
+
end
|
|
39
|
+
if obj == nil
|
|
40
|
+
raise Sink.new()
|
|
41
|
+
end
|
|
42
|
+
@active_list.append(obj)
|
|
43
|
+
return obj
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def Return(obj, reuse=true)
|
|
47
|
+
if @free_list.include?(obj)
|
|
48
|
+
raise Sink.new("This object already returned: " + obj.to_s)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
if !@active_list.include?(obj)
|
|
52
|
+
raise Sink.new("This object is not active: " + obj)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
@active_list.delete(obj)
|
|
56
|
+
if reuse
|
|
57
|
+
@free_list.append(obj)
|
|
58
|
+
obj.reset()
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def print_usage(indent)
|
|
63
|
+
BayLog.info("%sfree list: %d", StringUtil.indent(indent), @free_list.length)
|
|
64
|
+
BayLog.info("%sactive list: %d", StringUtil.indent(indent), @active_list.length)
|
|
65
|
+
if BayLog.debug_mode?
|
|
66
|
+
@active_list.each do |obj|
|
|
67
|
+
BayLog.debug("%s%s", StringUtil.indent(indent+1), obj)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
|
|
2
|
+
module Baykit
|
|
3
|
+
module BayServer
|
|
4
|
+
module Util
|
|
5
|
+
module Postman # interface
|
|
6
|
+
|
|
7
|
+
def post(buf, adr, tag, lis)
|
|
8
|
+
raise NotImplementedError.new()
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def flush()
|
|
12
|
+
raise NotImplementedError.new()
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def post_end()
|
|
16
|
+
raise NotImplementedError.new()
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def is_zombie()
|
|
20
|
+
raise NotImplementedError.new()
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def abort()
|
|
24
|
+
raise NotImplementedError.new()
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def open_valve()
|
|
28
|
+
raise NotImplementedError.new()
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
module Baykit
|
|
2
|
+
module BayServer
|
|
3
|
+
module Util
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
# Like Selector class of Python
|
|
7
|
+
#
|
|
8
|
+
class Selector
|
|
9
|
+
OP_READ = 1
|
|
10
|
+
OP_WRITE = 2
|
|
11
|
+
|
|
12
|
+
attr :channels
|
|
13
|
+
attr :lock
|
|
14
|
+
|
|
15
|
+
def initialize
|
|
16
|
+
@channels = {}
|
|
17
|
+
@lock = Mutex.new()
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def register(ch, op)
|
|
21
|
+
if op & OP_READ != 0
|
|
22
|
+
register_read(ch, @channels)
|
|
23
|
+
end
|
|
24
|
+
if op & OP_WRITE != 0
|
|
25
|
+
register_write(ch, @channels)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def unregister(ch)
|
|
30
|
+
unregister_read(ch, @channels)
|
|
31
|
+
unregister_write(ch, @channels)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def modify(ch, op)
|
|
35
|
+
if op & OP_READ != 0
|
|
36
|
+
register_read(ch, @channels)
|
|
37
|
+
else
|
|
38
|
+
unregister_read(ch, @channels)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
if op & OP_WRITE != 0
|
|
42
|
+
register_write(ch, @channels)
|
|
43
|
+
else
|
|
44
|
+
unregister_write(ch, @channels)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def get_op(ch)
|
|
49
|
+
return @channels[ch]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def select(timeout = 0)
|
|
53
|
+
except_list = []
|
|
54
|
+
|
|
55
|
+
read_list = []
|
|
56
|
+
write_list = []
|
|
57
|
+
@lock.synchronize do
|
|
58
|
+
@channels.keys().each do |ch|
|
|
59
|
+
if (@channels[ch] & OP_READ) != 0
|
|
60
|
+
read_list << ch
|
|
61
|
+
end
|
|
62
|
+
if (@channels[ch] & OP_WRITE) != 0
|
|
63
|
+
write_list << ch
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
selected_read_list, selected_write_list = Kernel.select(read_list, write_list, except_list, timeout)
|
|
68
|
+
|
|
69
|
+
result = {}
|
|
70
|
+
if selected_read_list
|
|
71
|
+
selected_read_list.each do |ch|
|
|
72
|
+
register_read(ch, result)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
if selected_write_list
|
|
77
|
+
selected_write_list.each do |ch|
|
|
78
|
+
register_write(ch, result)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
return result
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def count()
|
|
86
|
+
@lock.synchronize do
|
|
87
|
+
return @channels.length
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
private
|
|
92
|
+
|
|
93
|
+
def register_read(ch, ch_list)
|
|
94
|
+
@lock.synchronize do
|
|
95
|
+
if ch_list.include?(ch)
|
|
96
|
+
ch_list[ch] = (ch_list[ch] | OP_READ)
|
|
97
|
+
else
|
|
98
|
+
ch_list[ch] = OP_READ
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def register_write(ch, ch_list)
|
|
104
|
+
@lock.synchronize do
|
|
105
|
+
if ch_list.include?(ch)
|
|
106
|
+
ch_list[ch] = (ch_list[ch] | OP_WRITE)
|
|
107
|
+
else
|
|
108
|
+
ch_list[ch] = OP_WRITE
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def unregister_read(ch, ch_list)
|
|
114
|
+
@lock.synchronize do
|
|
115
|
+
if ch_list.include?(ch)
|
|
116
|
+
if ch_list[ch] == OP_READ
|
|
117
|
+
ch_list.delete(ch)
|
|
118
|
+
else
|
|
119
|
+
ch_list[ch] = OP_WRITE
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def unregister_write(ch, ch_list)
|
|
127
|
+
@lock.synchronize do
|
|
128
|
+
if ch_list.include?(ch)
|
|
129
|
+
if ch_list[ch] == OP_WRITE
|
|
130
|
+
ch_list.delete(ch)
|
|
131
|
+
else
|
|
132
|
+
ch_list[ch] = OP_READ
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'baykit/bayserver/util/string_util'
|
|
2
|
+
require 'baykit/bayserver/util/reusable'
|
|
3
|
+
|
|
4
|
+
module Baykit
|
|
5
|
+
module BayServer
|
|
6
|
+
module Util
|
|
7
|
+
class SimpleBuffer
|
|
8
|
+
include Baykit::BayServer::Util::Reusable # implements
|
|
9
|
+
INITIAL_BUFFER_SIZE = 32768
|
|
10
|
+
|
|
11
|
+
attr :buf
|
|
12
|
+
attr :length
|
|
13
|
+
attr :capacity
|
|
14
|
+
|
|
15
|
+
def initialize(init=INITIAL_BUFFER_SIZE)
|
|
16
|
+
@capacity = init
|
|
17
|
+
@buf = StringUtil.alloc(@capacity)
|
|
18
|
+
@length = 0
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def bytes()
|
|
22
|
+
return buf
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def reset()
|
|
26
|
+
# clear for security reason
|
|
27
|
+
@buf.clear()
|
|
28
|
+
@length = 0
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def put_byte(b)
|
|
32
|
+
put([b], 0, 1);
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def put(bytes, pos=0, len=bytes.length)
|
|
36
|
+
while @length + len > capacity
|
|
37
|
+
extend_buf
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
len.times do |i|
|
|
41
|
+
@buf[@length + i] = bytes[pos + i]
|
|
42
|
+
end
|
|
43
|
+
@length += len
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def extend_buf()
|
|
47
|
+
@capacity *= 2
|
|
48
|
+
@buf = StringUtil.realloc(@buf, @capacity)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module Baykit
|
|
2
|
+
module BayServer
|
|
3
|
+
module Util
|
|
4
|
+
class StringUtil
|
|
5
|
+
class << self
|
|
6
|
+
attr :falses
|
|
7
|
+
attr :trues
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
@falses = ["no", "false", "0", "off"]
|
|
11
|
+
@trues = ["yes", "true", "1", "on"]
|
|
12
|
+
|
|
13
|
+
def StringUtil.set?(str)
|
|
14
|
+
str != nil && str.length > 0
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def StringUtil.empty?(str)
|
|
18
|
+
!set?(str)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def StringUtil.alloc(len)
|
|
22
|
+
String.new("", encoding: Encoding::ASCII_8BIT, capacity: len)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def StringUtil.realloc(buf, len)
|
|
26
|
+
String.new(buf, encoding: Encoding::ASCII_8BIT, capacity: len)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def StringUtil.to_bytes(buf)
|
|
30
|
+
buf.encode(encoding: Encoding::ASCII_8BIT)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def StringUtil.repeat(str, times)
|
|
34
|
+
return Array.new(times, str).join("")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def StringUtil.indent(count)
|
|
38
|
+
return repeat(" ", count);
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def StringUtil.parse_bool(val)
|
|
42
|
+
val = val.downcase()
|
|
43
|
+
if @trues.include?(val)
|
|
44
|
+
return true
|
|
45
|
+
elsif @falses.include?(val)
|
|
46
|
+
return false
|
|
47
|
+
else
|
|
48
|
+
BayLog.warn("Invalid boolean value: %s", val)
|
|
49
|
+
return false
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def StringUtil.parse_size(val)
|
|
54
|
+
val = val.downcase
|
|
55
|
+
rate = 1
|
|
56
|
+
if val.end_with?("b")
|
|
57
|
+
val = val[0, val.length - 1]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
if val.end_with?("k")
|
|
61
|
+
val = val[0, val.length - 1]
|
|
62
|
+
rate = 1024
|
|
63
|
+
elsif val.end_with?("m")
|
|
64
|
+
val = val[0, val.length - 1]
|
|
65
|
+
rate = 1024 * 1024
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
Integer(val) * rate
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
require 'etc'
|
|
2
|
+
require 'pathname'
|
|
3
|
+
require 'tmpdir'
|
|
4
|
+
|
|
5
|
+
require 'baykit/bayserver/bay_log'
|
|
6
|
+
require 'baykit/bayserver/bayserver'
|
|
7
|
+
|
|
8
|
+
module Baykit
|
|
9
|
+
module BayServer
|
|
10
|
+
module Util
|
|
11
|
+
class SysUtil
|
|
12
|
+
|
|
13
|
+
def SysUtil.run_on_windows()
|
|
14
|
+
return RUBY_PLATFORM.downcase =~ /mswin(?!ce)|mingw|cygwin|bccwin/
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
#
|
|
18
|
+
# We set environment variable "RUBYMINE" to 1 for debugging
|
|
19
|
+
#
|
|
20
|
+
def SysUtil.run_on_rubymine()
|
|
21
|
+
return ENV["RUBYMINE"] == "1"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def SysUtil.support_fork()
|
|
25
|
+
begin
|
|
26
|
+
pid = fork()
|
|
27
|
+
if pid == nil
|
|
28
|
+
exit(0)
|
|
29
|
+
end
|
|
30
|
+
Process.waitpid(pid)
|
|
31
|
+
return true
|
|
32
|
+
rescue NotImplementedError => e
|
|
33
|
+
if BayLog.debug_mode?
|
|
34
|
+
BayLog.warn("fork() failed: %s ", e)
|
|
35
|
+
#BayLog.warn_e(e)
|
|
36
|
+
end
|
|
37
|
+
return false
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def SysUtil.support_select_file()
|
|
43
|
+
File.open(BayServer.bserv_plan) do |f|
|
|
44
|
+
begin
|
|
45
|
+
n = select([f], [], [], 10)
|
|
46
|
+
return true
|
|
47
|
+
rescue IOError => e
|
|
48
|
+
if BayLog.debug_mode?
|
|
49
|
+
BayLog.warn("select() failed: %s", e)
|
|
50
|
+
#BayLog.warn_e(e)
|
|
51
|
+
end
|
|
52
|
+
return false
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def SysUtil.support_nonblock_file_read()
|
|
59
|
+
File.open(BayServer.bserv_plan) do |f|
|
|
60
|
+
begin
|
|
61
|
+
f.read_nonblock(1)
|
|
62
|
+
return true
|
|
63
|
+
rescue SystemCallError => e
|
|
64
|
+
if BayLog.debug_mode?
|
|
65
|
+
BayLog.warn("read_nonblock() failed: %s", e)
|
|
66
|
+
#BayLog.warn_e(e)
|
|
67
|
+
end
|
|
68
|
+
return false
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def SysUtil.support_nonblock_file_write()
|
|
74
|
+
Dir.mktmpdir() do |dir|
|
|
75
|
+
File.open(Pathname(dir) + "test_file", "wb") do |f|
|
|
76
|
+
begin
|
|
77
|
+
f.write_nonblock(1)
|
|
78
|
+
return true
|
|
79
|
+
rescue SystemCallError => e
|
|
80
|
+
if BayLog.debug_mode?
|
|
81
|
+
BayLog.warn("write_nonblock() failed: %s", e)
|
|
82
|
+
#BayLog.warn_e(e)
|
|
83
|
+
end
|
|
84
|
+
return false
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def SysUtil.support_select_pipe()
|
|
92
|
+
IO.pipe() do |r, w|
|
|
93
|
+
begin
|
|
94
|
+
n = select([r], [w], [], 10)
|
|
95
|
+
return true
|
|
96
|
+
rescue IOError => e
|
|
97
|
+
if BayLog.debug_mode?
|
|
98
|
+
BayLog.warn("select() failed: %s", e)
|
|
99
|
+
#BayLog.warn_e(e)
|
|
100
|
+
end
|
|
101
|
+
return false
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def SysUtil.support_nonblock_pipe_read()
|
|
108
|
+
IO.pipe() do |r, w|
|
|
109
|
+
w.write("abcd")
|
|
110
|
+
begin
|
|
111
|
+
r.read_nonblock(1)
|
|
112
|
+
return true
|
|
113
|
+
rescue SystemCallError => e
|
|
114
|
+
if BayLog.debug_mode?
|
|
115
|
+
BayLog.warn("read_nonblock() failed: %s", e)
|
|
116
|
+
#BayLog.warn_e(e)
|
|
117
|
+
end
|
|
118
|
+
return false
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def SysUtil.pid()
|
|
124
|
+
return $$
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def SysUtil.processor_count()
|
|
128
|
+
return Etc.nprocessors
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def SysUtil.support_unix_domain_socket_address()
|
|
132
|
+
return !SysUtil.run_on_windows()
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Baykit
|
|
2
|
+
module BayServer
|
|
3
|
+
module Util
|
|
4
|
+
class URLDecoder
|
|
5
|
+
|
|
6
|
+
def self.decode(str, enc)
|
|
7
|
+
parse_special(str, enc)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.parse_special(str, enc)
|
|
11
|
+
arr = ByteArray.new
|
|
12
|
+
index = 0
|
|
13
|
+
|
|
14
|
+
while(index < str.length)
|
|
15
|
+
c = str[index]
|
|
16
|
+
case c
|
|
17
|
+
when '+'
|
|
18
|
+
arr.put_bytes(c)
|
|
19
|
+
index = index + 1
|
|
20
|
+
|
|
21
|
+
when '%'
|
|
22
|
+
hex_str = str[index + 1 .. index + 2]
|
|
23
|
+
ch = hex_str.hex
|
|
24
|
+
arr.put_bytes([ch])
|
|
25
|
+
index += 3
|
|
26
|
+
|
|
27
|
+
else
|
|
28
|
+
arr.put_bytes(c)
|
|
29
|
+
index += 1
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
if(StringUtil.empty?(enc))
|
|
34
|
+
return arr.buf
|
|
35
|
+
else
|
|
36
|
+
return arr.buf.encode(enc)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Baykit
|
|
2
|
+
module BayServer
|
|
3
|
+
module Util
|
|
4
|
+
class URLEncoder
|
|
5
|
+
def URLEncoder.encode_tilde(url)
|
|
6
|
+
buf = ""
|
|
7
|
+
url.each_char do |c|
|
|
8
|
+
if(c == "~")
|
|
9
|
+
buf.concat("%7E")
|
|
10
|
+
else
|
|
11
|
+
buf.concat(c)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
return buf
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|