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