bayserver-docker-http 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 (52) hide show
  1. checksums.yaml +7 -0
  2. data/lib/baykit/bayserver/docker/http/h1/command/cmd_content.rb +46 -0
  3. data/lib/baykit/bayserver/docker/http/h1/command/cmd_end_content.rb +37 -0
  4. data/lib/baykit/bayserver/docker/http/h1/command/cmd_header.rb +306 -0
  5. data/lib/baykit/bayserver/docker/http/h1/command/package.rb +3 -0
  6. data/lib/baykit/bayserver/docker/http/h1/h1_command.rb +19 -0
  7. data/lib/baykit/bayserver/docker/http/h1/h1_command_handler.rb +31 -0
  8. data/lib/baykit/bayserver/docker/http/h1/h1_command_unpacker.rb +58 -0
  9. data/lib/baykit/bayserver/docker/http/h1/h1_inbound_handler.rb +371 -0
  10. data/lib/baykit/bayserver/docker/http/h1/h1_packet.rb +28 -0
  11. data/lib/baykit/bayserver/docker/http/h1/h1_packet_factory.rb +21 -0
  12. data/lib/baykit/bayserver/docker/http/h1/h1_packet_unpacker.rb +180 -0
  13. data/lib/baykit/bayserver/docker/http/h1/h1_protocol_handler.rb +66 -0
  14. data/lib/baykit/bayserver/docker/http/h1/h1_type.rb +18 -0
  15. data/lib/baykit/bayserver/docker/http/h1/h1_warp_handler.rb +228 -0
  16. data/lib/baykit/bayserver/docker/http/h1/package.rb +11 -0
  17. data/lib/baykit/bayserver/docker/http/h2/command/cmd_data.rb +65 -0
  18. data/lib/baykit/bayserver/docker/http/h2/command/cmd_go_away.rb +67 -0
  19. data/lib/baykit/bayserver/docker/http/h2/command/cmd_headers.rb +108 -0
  20. data/lib/baykit/bayserver/docker/http/h2/command/cmd_ping.rb +50 -0
  21. data/lib/baykit/bayserver/docker/http/h2/command/cmd_preface.rb +51 -0
  22. data/lib/baykit/bayserver/docker/http/h2/command/cmd_priority.rb +59 -0
  23. data/lib/baykit/bayserver/docker/http/h2/command/cmd_rst_stream.rb +50 -0
  24. data/lib/baykit/bayserver/docker/http/h2/command/cmd_settings.rb +98 -0
  25. data/lib/baykit/bayserver/docker/http/h2/command/cmd_window_update.rb +53 -0
  26. data/lib/baykit/bayserver/docker/http/h2/command/package.rb +9 -0
  27. data/lib/baykit/bayserver/docker/http/h2/h2_command.rb +42 -0
  28. data/lib/baykit/bayserver/docker/http/h2/h2_command_handler.rb +29 -0
  29. data/lib/baykit/bayserver/docker/http/h2/h2_command_unpacker.rb +73 -0
  30. data/lib/baykit/bayserver/docker/http/h2/h2_error_code.rb +53 -0
  31. data/lib/baykit/bayserver/docker/http/h2/h2_flags.rb +82 -0
  32. data/lib/baykit/bayserver/docker/http/h2/h2_inbound_handler.rb +417 -0
  33. data/lib/baykit/bayserver/docker/http/h2/h2_packet.rb +204 -0
  34. data/lib/baykit/bayserver/docker/http/h2/h2_packet_factory.rb +21 -0
  35. data/lib/baykit/bayserver/docker/http/h2/h2_packet_unpacker.rb +224 -0
  36. data/lib/baykit/bayserver/docker/http/h2/h2_protocol_handler.rb +58 -0
  37. data/lib/baykit/bayserver/docker/http/h2/h2_settings.rb +42 -0
  38. data/lib/baykit/bayserver/docker/http/h2/h2_type.rb +26 -0
  39. data/lib/baykit/bayserver/docker/http/h2/h2_warp_handler.rb +142 -0
  40. data/lib/baykit/bayserver/docker/http/h2/header_block.rb +191 -0
  41. data/lib/baykit/bayserver/docker/http/h2/header_block_analyzer.rb +88 -0
  42. data/lib/baykit/bayserver/docker/http/h2/header_block_builder.rb +68 -0
  43. data/lib/baykit/bayserver/docker/http/h2/header_table.rb +167 -0
  44. data/lib/baykit/bayserver/docker/http/h2/huffman/hnode.rb +28 -0
  45. data/lib/baykit/bayserver/docker/http/h2/huffman/htree.rb +339 -0
  46. data/lib/baykit/bayserver/docker/http/h2/package.rb +17 -0
  47. data/lib/baykit/bayserver/docker/http/htp_docker.rb +23 -0
  48. data/lib/baykit/bayserver/docker/http/htp_port_docker.rb +107 -0
  49. data/lib/baykit/bayserver/docker/http/htp_warp_docker.rb +125 -0
  50. data/lib/baykit/bayserver/docker/http/htp_warp_ship_helper.rb +19 -0
  51. data/lib/baykit/bayserver/docker/http/package.rb +6 -0
  52. metadata +106 -0
@@ -0,0 +1,98 @@
1
+ require 'baykit/bayserver/protocol/protocol_exception'
2
+
3
+ require 'baykit/bayserver/docker/http/h2/package'
4
+
5
+ #
6
+ # HTTP/2 Setting payload format
7
+ #
8
+ # +-------------------------------+
9
+ # | Identifier (16) |
10
+ # +-------------------------------+-------------------------------+
11
+ # | Value (32) |
12
+ # +---------------------------------------------------------------+
13
+ #
14
+ #
15
+ module Baykit
16
+ module BayServer
17
+ module Docker
18
+ module Http
19
+ module H2
20
+ module Command
21
+
22
+ class CmdSettings < Baykit::BayServer::Docker::Http::H2::H2Command
23
+ include Baykit::BayServer::Protocol
24
+ include Baykit::BayServer::Docker::Http::H2
25
+
26
+ class Item
27
+ attr :id
28
+ attr :value
29
+
30
+ def initialize(id, value)
31
+ @id = id
32
+ @value = value
33
+ end
34
+ end
35
+
36
+ HEADER_TABLE_SIZE = 0x1
37
+ ENABLE_PUSH = 0x2
38
+ MAX_CONCURRENT_STREAMS = 0x3
39
+ INITIAL_WINDOW_SIZE = 0x4
40
+ MAX_FRAME_SIZE = 0x5
41
+ MAX_HEADER_LIST_SIZE = 0x6
42
+
43
+ INIT_HEADER_TABLE_SIZE = 4096
44
+ INIT_ENABLE_PUSH = 1
45
+ INIT_MAX_CONCURRENT_STREAMS = -1
46
+ INIT_INITIAL_WINDOW_SIZE = 65535
47
+ INIT_MAX_FRAME_SIZE = 16384
48
+ INIT_MAX_HEADER_LIST_SIZE = -1
49
+
50
+ attr :items
51
+
52
+ def initialize(stream_id, flags=nil)
53
+ super(H2Type::SETTINGS, stream_id, flags)
54
+ @items = []
55
+ end
56
+
57
+ def unpack(pkt)
58
+ super
59
+ if @flags.ack?
60
+ return
61
+ end
62
+
63
+ acc = pkt.new_data_accessor()
64
+ pos = 0
65
+ while pos < pkt.data_len()
66
+ id = acc.get_short()
67
+ value = acc.get_int()
68
+ @items.append(Item.new(id, value))
69
+ pos += 6
70
+ end
71
+ end
72
+
73
+ def pack(pkt)
74
+ if @flags.ack?
75
+ # do not pack payload
76
+ else
77
+ acc = pkt.new_data_accessor()
78
+ @items.each do |item|
79
+ acc.put_short(item.id)
80
+ acc.put_int(item.value)
81
+ end
82
+ end
83
+ super
84
+ end
85
+
86
+ def handle(cmd_handler)
87
+ return cmd_handler.handle_settings(self)
88
+ end
89
+
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+
98
+
@@ -0,0 +1,53 @@
1
+ require 'baykit/bayserver/docker/http/h2/package'
2
+
3
+ #
4
+ # HTTP/2 Window Update payload format
5
+ #
6
+ # +-+-------------------------------------------------------------+
7
+ # |R| Window Size Increment (31) |
8
+ # +-+-------------------------------------------------------------+
9
+ #
10
+
11
+ module Baykit
12
+ module BayServer
13
+ module Docker
14
+ module Http
15
+ module H2
16
+ module Command
17
+
18
+ class CmdWindowUpdate < Baykit::BayServer::Docker::Http::H2::H2Command
19
+ include Baykit::BayServer::Docker::Http::H2
20
+
21
+ attr_accessor :window_size_increment
22
+
23
+ def initialize(stream_id, flags=nil)
24
+ super(H2Type::WINDOW_UPDATE, stream_id, flags)
25
+ @items = []
26
+ end
27
+
28
+ def unpack(pkt)
29
+ super
30
+ acc = pkt.new_data_accessor()
31
+ val = acc.get_int()
32
+ @window_size_increment = H2Packet.extract_int31(val)
33
+ end
34
+
35
+ def pack(pkt)
36
+ acc = pkt.new_data_accessor()
37
+ acc.put_int(H2Packet.consolidate_flag_and_int32(0, @window_size_increment))
38
+ BayLog.trace("h2: Pack windowUpdate size=#{@window_size_increment}")
39
+ super
40
+ end
41
+
42
+ def handle(cmd_handler)
43
+ return cmd_handler.handle_window_update(self)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+
@@ -0,0 +1,9 @@
1
+ require 'baykit/bayserver/docker/http/h2/command/cmd_data'
2
+ require 'baykit/bayserver/docker/http/h2/command/cmd_go_away'
3
+ require 'baykit/bayserver/docker/http/h2/command/cmd_headers'
4
+ require 'baykit/bayserver/docker/http/h2/command/cmd_ping'
5
+ require 'baykit/bayserver/docker/http/h2/command/cmd_preface'
6
+ require 'baykit/bayserver/docker/http/h2/command/cmd_priority'
7
+ require 'baykit/bayserver/docker/http/h2/command/cmd_rst_stream'
8
+ require 'baykit/bayserver/docker/http/h2/command/cmd_settings'
9
+ require 'baykit/bayserver/docker/http/h2/command/cmd_window_update'
@@ -0,0 +1,42 @@
1
+ require 'baykit/bayserver/docker/http/h2/h2_flags'
2
+
3
+ module Baykit
4
+ module BayServer
5
+ module Docker
6
+ module Http
7
+ module H2
8
+ class H2Command < Baykit::BayServer::Protocol::Command
9
+ include Baykit::BayServer::Docker::Http
10
+ include Baykit::BayServer::Docker::Http::H2
11
+
12
+ attr :flags
13
+ attr_accessor :stream_id
14
+
15
+ def initialize(type, stream_id, flags=nil)
16
+ super type
17
+ @stream_id = stream_id
18
+ if flags == nil
19
+ @flags = H2Flags.new
20
+ else
21
+ @flags = flags
22
+ end
23
+ end
24
+
25
+ def unpack(pkt)
26
+ @stream_id = pkt.stream_id
27
+ @flags = pkt.flags
28
+ end
29
+
30
+ def pack(pkt)
31
+ pkt.stream_id = @stream_id
32
+ pkt.flags = @flags
33
+ pkt.pack_header
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+
@@ -0,0 +1,29 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Docker
4
+ module Http
5
+ module H2
6
+ module H2CommandHandler
7
+ include Baykit::BayServer::Protocol::CommandHandler # implements
8
+
9
+ #
10
+ # abstract methods
11
+ #
12
+ # handle_preface(cmd)
13
+ # handle_data(cmd)
14
+ # handle_headers(cmd)
15
+ # handle_priority(cmd)
16
+ # handle_settings(cmd)
17
+ # handle_window_update(cmd)
18
+ # handle_go_away(cmd)
19
+ # handle_ping(cmd)
20
+ # handle_rst_stream(cmd)
21
+ #
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+
@@ -0,0 +1,73 @@
1
+ require 'baykit/bayserver/protocol/package'
2
+ require 'baykit/bayserver/agent/next_socket_action'
3
+ require 'baykit/bayserver/docker/http/h2/h2_type'
4
+ require 'baykit/bayserver/docker/http/h2/command/package'
5
+
6
+ module Baykit
7
+ module BayServer
8
+ module Docker
9
+ module Http
10
+ module H2
11
+ class H2CommandUnPacker < Baykit::BayServer::Protocol::CommandUnPacker
12
+
13
+ include Baykit::BayServer::Agent
14
+ include Baykit::BayServer::Docker::Http::H2::Command
15
+
16
+ attr :cmd_handler
17
+
18
+ def initialize(cmd_handler)
19
+ @cmd_handler = cmd_handler
20
+ end
21
+
22
+ def reset
23
+
24
+ end
25
+
26
+ def packet_received(pkt)
27
+ BayLog.debug("h2: read packet type=%d strmid=%d len=%d flgs=%s", pkt.type, pkt.stream_id, pkt.data_len(), pkt.flags)
28
+
29
+ case pkt.type
30
+ when H2Type::PREFACE
31
+ cmd = CmdPreface.new(pkt.stream_id, pkt.flags)
32
+
33
+ when H2Type::HEADERS
34
+ cmd = CmdHeaders.new(pkt.stream_id, pkt.flags)
35
+
36
+ when H2Type::PRIORITY
37
+ cmd = CmdPriority.new(pkt.stream_id, pkt.flags)
38
+
39
+ when H2Type::SETTINGS
40
+ cmd = CmdSettings.new(pkt.stream_id, pkt.flags)
41
+
42
+ when H2Type::WINDOW_UPDATE
43
+ cmd = CmdWindowUpdate.new(pkt.stream_id, pkt.flags)
44
+
45
+ when H2Type::DATA
46
+ cmd = CmdData.new(pkt.stream_id, pkt.flags)
47
+
48
+ when H2Type::GOAWAY
49
+ cmd = CmdGoAway.new(pkt.stream_id, pkt.flags)
50
+
51
+ when H2Type::PING
52
+ cmd = CmdPing.new(pkt.stream_id, pkt.flags)
53
+
54
+ when H2Type::RST_STREAM
55
+ cmd = CmdRstStream.new(pkt.stream_id, pkt.flags)
56
+
57
+ else
58
+ reset()
59
+ raise RuntimeError.new("Invalid Packet: #{pkt}")
60
+ end
61
+
62
+ cmd.unpack pkt
63
+ return cmd.handle(@cmd_handler)
64
+ end
65
+
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+
@@ -0,0 +1,53 @@
1
+ require 'baykit/bayserver/util/message'
2
+ require 'baykit/bayserver/util/locale'
3
+
4
+ module Baykit
5
+ module BayServer
6
+ module Docker
7
+ module Http
8
+ module H2
9
+ class H2ErrorCode < Baykit::BayServer::Util::Message
10
+ include Baykit::BayServer::Util
11
+
12
+ NO_ERROR = 0x0
13
+ PROTOCOL_ERROR = 0x1
14
+ INTERNAL_ERROR = 0x2
15
+ FLOW_CONTROL_ERROR = 0x3
16
+ SETTINGS_TIMEOUT = 0x4
17
+ STREAM_CLOSED = 0x5
18
+ FRAME_SIZE_ERROR = 0x6
19
+ REFUSED_STREAM = 0x7
20
+ CANCEL = 0x8
21
+ COMPRESSION_ERROR = 0x9
22
+ CONNECT_ERROR = 0xa
23
+ ENHANCE_YOUR_CALM = 0xb
24
+ INADEQUATE_SECURITY = 0xc
25
+ HTTP_1_1_REQUIRED = 0xd
26
+
27
+ class << self
28
+ attr :desc
29
+ attr :msg
30
+ end
31
+
32
+ def self.initialized
33
+ @desc = {}
34
+ @msg = nil
35
+ end
36
+
37
+ def self.init
38
+ if(@msg != nil)
39
+ return
40
+ end
41
+
42
+ prefix = BayServer.bserv_lib + "/conf/h2_messages"
43
+ @msg = H2ErrorCode.new()
44
+ @msg.init(prefix, Locale.new('ja', 'JP'))
45
+ end
46
+
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
@@ -0,0 +1,82 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Docker
4
+ module Http
5
+ module H2
6
+ class H2Flags
7
+ FLAGS_NONE = 0x0
8
+ FLAGS_ACK = 0x1
9
+ FLAGS_END_STREAM = 0x1
10
+ FLAGS_END_HEADERS = 0x4
11
+ FLAGS_PADDED = 0x8
12
+ FLAGS_PRIORITY = 0x20
13
+
14
+ attr :flags
15
+
16
+ def initialize(flags=FLAGS_NONE)
17
+ @flags = flags
18
+ end
19
+
20
+ def flag?(flag)
21
+ (flags & flag) != 0
22
+ end
23
+
24
+ def set_flag(flag, val)
25
+ if val
26
+ @flags |= flag
27
+ else
28
+ @flags &= ~flag
29
+ end
30
+ end
31
+
32
+ def ack?()
33
+ flag?(FLAGS_ACK)
34
+ end
35
+
36
+ def set_ack(val)
37
+ set_flag(FLAGS_ACK, val)
38
+ end
39
+
40
+ def end_stream?
41
+ flag?(FLAGS_END_STREAM)
42
+ end
43
+
44
+ def set_end_stream(val)
45
+ set_flag(FLAGS_END_STREAM, val)
46
+ end
47
+
48
+ def end_headers?
49
+ flag?(FLAGS_END_HEADERS)
50
+ end
51
+
52
+ def set_end_headers(val)
53
+ set_flag(FLAGS_END_HEADERS, val)
54
+ end
55
+
56
+ def padded?
57
+ flag?(FLAGS_PADDED)
58
+ end
59
+
60
+ def set_padded(val)
61
+ set_flag(FLAGS_PADDED, val)
62
+ end
63
+
64
+ def priority?
65
+ flag?(FLAGS_PRIORITY)
66
+ end
67
+
68
+ def set_priority(val)
69
+ set_flag(FLAGS_PRIORITY, val)
70
+ end
71
+
72
+ def to_s()
73
+ @flags.to_s()
74
+ end
75
+
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+