Skip to content

Instantly share code, notes, and snippets.

@benlangfeld
Created October 27, 2011 19:52
Show Gist options
  • Save benlangfeld/1320674 to your computer and use it in GitHub Desktop.
Save benlangfeld/1320674 to your computer and use it in GitHub Desktop.
# line 1 "lib/ruby_ami/lexer.rl.rb"
module RubyAMI
class Lexer
BUFFER_SIZE = 128.kilobytes unless defined? BUFFER_SIZE
##
# IMPORTANT! See method documentation for adjust_pointers!
#
# @see adjust_pointers
#
POINTERS = [
:@current_pointer,
:@token_start,
:@token_end,
:@version_start,
:@event_name_start,
:@current_key_position,
:@current_value_position,
:@last_seen_value_end,
:@error_reason_start,
:@follows_text_start,
:@current_syntax_error_start,
:@immediate_response_start
]
# line 67 "lib/ruby_ami/lexer.rl.rb"
##
attr_accessor :ami_version
def initialize(delegate = nil)
@delegate = delegate
@data = ""
@current_pointer = 0
@ragel_stack = []
@ami_version = 0.0
# line 43 "lib/ruby_ami/lexer.rb"
class << self
attr_accessor :_ami_protocol_parser_actions
private :_ami_protocol_parser_actions, :_ami_protocol_parser_actions=
end
self._ami_protocol_parser_actions = [
0, 1, 0, 1, 2, 1, 5, 1,
6, 1, 7, 1, 8, 1, 9, 1,
10, 1, 13, 1, 17, 1, 18, 1,
19, 1, 20, 1, 28, 1, 30, 1,
31, 1, 35, 1, 36, 1, 37, 1,
38, 1, 39, 1, 40, 1, 41, 1,
46, 1, 47, 1, 48, 1, 49, 1,
50, 1, 53, 1, 54, 1, 55, 1,
56, 1, 57, 2, 1, 24, 2, 3,
26, 2, 4, 45, 2, 7, 17, 2,
9, 10, 2, 11, 9, 2, 12, 10,
2, 14, 34, 2, 15, 13, 2, 19,
20, 2, 21, 42, 2, 22, 43, 2,
23, 44, 2, 28, 29, 2, 31, 51,
3, 16, 25, 33, 3, 31, 27, 52,
4, 11, 12, 9, 10, 4, 16, 25,
33, 14, 4, 31, 16, 25, 32
]
class << self
attr_accessor :_ami_protocol_parser_key_offsets
private :_ami_protocol_parser_key_offsets, :_ami_protocol_parser_key_offsets=
end
self._ami_protocol_parser_key_offsets = [
0, 0, 1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 22, 25,
27, 30, 31, 34, 37, 40, 43, 44,
46, 49, 50, 53, 54, 55, 56, 57,
58, 59, 60, 61, 62, 63, 64, 65,
66, 67, 68, 69, 70, 71, 72, 73,
75, 78, 80, 83, 84, 87, 90, 92,
94, 96, 97, 99, 100, 102, 104, 106,
108, 110, 112, 114, 116, 117, 126, 135,
137, 139, 141, 143, 144, 145, 161, 176,
191, 206, 208, 209, 211, 228, 229, 244,
259, 274, 276, 277, 279, 296, 311, 328,
345, 362, 379, 396, 413, 428, 430, 431,
433, 450, 452, 454, 456, 471, 488, 505,
522, 539, 556, 573, 588, 590, 591, 593,
610, 612, 614, 616, 618, 620, 622, 624,
625, 626, 627, 628, 630, 632, 634, 635,
636, 638, 640, 642, 644, 646, 648, 649,
650, 665, 666, 681, 696, 711, 713, 714,
716, 731, 746, 748, 750, 753, 755, 758,
761, 764, 767, 770, 773, 776, 779, 782,
785, 788, 791, 794, 797, 798, 799, 801,
818, 835, 852, 855, 857, 860, 862, 879,
896, 913, 916, 918, 921, 923, 941, 959,
977, 995, 1013, 1031, 1049, 1067, 1085, 1103,
1121, 1139, 1157, 1175, 1191, 1206, 1221, 1223,
1224, 1226, 1241, 1256, 1258, 1275, 1278, 1281,
1284, 1287, 1290, 1293, 1296, 1299, 1302, 1305,
1308, 1311, 1314, 1317, 1318, 1320, 1323, 1326,
1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350,
1353, 1356, 1359, 1362, 1365, 1366, 1367, 1369,
1371, 1374, 1391, 1392, 1393, 1396, 1397, 1403,
1404, 1405, 1407, 1409, 1409, 1425, 1428, 1445,
1462, 1476, 1490, 1504
]
class << self
attr_accessor :_ami_protocol_parser_trans_keys
private :_ami_protocol_parser_trans_keys, :_ami_protocol_parser_trans_keys=
end
self._ami_protocol_parser_trans_keys = [
116, 101, 114, 105, 115, 107, 32, 67,
97, 108, 108, 32, 77, 97, 110, 97,
103, 101, 114, 47, 48, 57, 46, 48,
57, 48, 57, 13, 48, 57, 10, 13,
48, 57, 46, 48, 57, 10, 13, 58,
10, 13, 58, 13, 10, 13, 10, 13,
58, 13, 10, 13, 58, 116, 101, 114,
105, 115, 107, 32, 67, 97, 108, 108,
32, 77, 97, 110, 97, 103, 101, 114,
47, 48, 57, 46, 48, 57, 48, 57,
13, 48, 57, 10, 13, 48, 57, 46,
48, 57, 69, 101, 78, 110, 84, 116,
58, 13, 32, 13, 10, 13, 13, 32,
83, 115, 80, 112, 79, 111, 78, 110,
83, 115, 69, 101, 58, 32, 69, 70,
80, 83, 101, 102, 112, 115, 32, 69,
70, 80, 83, 101, 102, 112, 115, 82,
114, 82, 114, 79, 111, 82, 114, 13,
10, 77, 109, 32, 47, 48, 57, 59,
64, 65, 90, 91, 96, 97, 122, 123,
126, 58, 32, 47, 48, 57, 59, 64,
65, 90, 91, 96, 97, 122, 123, 126,
58, 32, 47, 48, 57, 59, 64, 65,
90, 91, 96, 97, 122, 123, 126, 58,
32, 47, 48, 57, 59, 64, 65, 90,
91, 96, 97, 122, 123, 126, 13, 32,
13, 10, 13, 13, 77, 109, 32, 47,
48, 57, 59, 64, 65, 90, 91, 96,
97, 122, 123, 126, 10, 58, 32, 47,
48, 57, 59, 64, 65, 90, 91, 96,
97, 122, 123, 126, 58, 32, 47, 48,
57, 59, 64, 65, 90, 91, 96, 97,
122, 123, 126, 58, 32, 47, 48, 57,
59, 64, 65, 90, 91, 96, 97, 122,
123, 126, 13, 32, 13, 10, 13, 13,
77, 109, 32, 47, 48, 57, 59, 64,
65, 90, 91, 96, 97, 122, 123, 126,
58, 32, 47, 48, 57, 59, 64, 65,
90, 91, 96, 97, 122, 123, 126, 58,
69, 101, 32, 47, 48, 57, 59, 64,
65, 90, 91, 96, 97, 122, 123, 126,
58, 83, 115, 32, 47, 48, 57, 59,
64, 65, 90, 91, 96, 97, 122, 123,
126, 58, 83, 115, 32, 47, 48, 57,
59, 64, 65, 90, 91, 96, 97, 122,
123, 126, 58, 65, 97, 32, 47, 48,
57, 59, 64, 66, 90, 91, 96, 98,
122, 123, 126, 58, 71, 103, 32, 47,
48, 57, 59, 64, 65, 90, 91, 96,
97, 122, 123, 126, 58, 69, 101, 32,
47, 48, 57, 59, 64, 65, 90, 91,
96, 97, 122, 123, 126, 58, 32, 47,
48, 57, 59, 64, 65, 90, 91, 96,
97, 122, 123, 126, 13, 32, 13, 10,
13, 13, 77, 109, 32, 47, 48, 57,
59, 64, 65, 90, 91, 96, 97, 122,
123, 126, 13, 32, 13, 32, 13, 32,
58, 32, 47, 48, 57, 59, 64, 65,
90, 91, 96, 97, 122, 123, 126, 58,
69, 101, 32, 47, 48, 57, 59, 64,
65, 90, 91, 96, 97, 122, 123, 126,
58, 83, 115, 32, 47, 48, 57, 59,
64, 65, 90, 91, 96, 97, 122, 123,
126, 58, 83, 115, 32, 47, 48, 57,
59, 64, 65, 90, 91, 96, 97, 122,
123, 126, 58, 65, 97, 32, 47, 48,
57, 59, 64, 66, 90, 91, 96, 98,
122, 123, 126, 58, 71, 103, 32, 47,
48, 57, 59, 64, 65, 90, 91, 96,
97, 122, 123, 126, 58, 69, 101, 32,
47, 48, 57, 59, 64, 65, 90, 91,
96, 97, 122, 123, 126, 58, 32, 47,
48, 57, 59, 64, 65, 90, 91, 96,
97, 122, 123, 126, 13, 32, 13, 10,
13, 13, 77, 109, 32, 47, 48, 57,
59, 64, 65, 90, 91, 96, 97, 122,
123, 126, 13, 32, 79, 111, 76, 108,
76, 108, 79, 111, 87, 119, 83, 115,
13, 10, 13, 10, 79, 111, 78, 110,
71, 103, 13, 10, 85, 117, 67, 99,
67, 99, 69, 101, 83, 115, 83, 115,
13, 10, 13, 32, 47, 48, 57, 59,
64, 65, 90, 91, 96, 97, 122, 123,
126, 10, 58, 32, 47, 48, 57, 59,
64, 65, 90, 91, 96, 97, 122, 123,
126, 58, 32, 47, 48, 57, 59, 64,
65, 90, 91, 96, 97, 122, 123, 126,
58, 32, 47, 48, 57, 59, 64, 65,
90, 91, 96, 97, 122, 123, 126, 13,
32, 13, 10, 13, 13, 32, 47, 48,
57, 59, 64, 65, 90, 91, 96, 97,
122, 123, 126, 58, 32, 47, 48, 57,
59, 64, 65, 90, 91, 96, 97, 122,
123, 126, 13, 32, 10, 13, 10, 13,
45, 10, 13, 10, 13, 45, 10, 13,
69, 10, 13, 78, 10, 13, 68, 10,
13, 32, 10, 13, 67, 10, 13, 79,
10, 13, 77, 10, 13, 77, 10, 13,
65, 10, 13, 78, 10, 13, 68, 10,
13, 45, 10, 13, 45, 13, 10, 10,
13, 10, 13, 58, 32, 47, 48, 57,
59, 64, 65, 90, 91, 96, 97, 122,
123, 126, 10, 13, 58, 32, 47, 48,
57, 59, 64, 65, 90, 91, 96, 97,
122, 123, 126, 10, 13, 58, 32, 47,
48, 57, 59, 64, 65, 90, 91, 96,
97, 122, 123, 126, 10, 13, 32, 10,
13, 10, 13, 45, 10, 13, 10, 13,
58, 32, 47, 48, 57, 59, 64, 65,
90, 91, 96, 97, 122, 123, 126, 10,
13, 58, 32, 47, 48, 57, 59, 64,
65, 90, 91, 96, 97, 122, 123, 126,
10, 13, 58, 32, 47, 48, 57, 59,
64, 65, 90, 91, 96, 97, 122, 123,
126, 10, 13, 32, 10, 13, 10, 13,
45, 10, 13, 10, 13, 45, 58, 32,
47, 48, 57, 59, 64, 65, 90, 91,
96, 97, 122, 123, 126, 10, 13, 58,
69, 32, 47, 48, 57, 59, 64, 65,
90, 91, 96, 97, 122, 123, 126, 10,
13, 58, 78, 32, 47, 48, 57, 59,
64, 65, 90, 91, 96, 97, 122, 123,
126, 10, 13, 58, 68, 32, 47, 48,
57, 59, 64, 65, 90, 91, 96, 97,
122, 123, 126, 10, 13, 32, 58, 33,
47, 48, 57, 59, 64, 65, 90, 91,
96, 97, 122, 123, 126, 10, 13, 58,
67, 32, 47, 48, 57, 59, 64, 65,
90, 91, 96, 97, 122, 123, 126, 10,
13, 58, 79, 32, 47, 48, 57, 59,
64, 65, 90, 91, 96, 97, 122, 123,
126, 10, 13, 58, 77, 32, 47, 48,
57, 59, 64, 65, 90, 91, 96, 97,
122, 123, 126, 10, 13, 58, 77, 32,
47, 48, 57, 59, 64, 65, 90, 91,
96, 97, 122, 123, 126, 10, 13, 58,
65, 32, 47, 48, 57, 59, 64, 66,
90, 91, 96, 97, 122, 123, 126, 10,
13, 58, 78, 32, 47, 48, 57, 59,
64, 65, 90, 91, 96, 97, 122, 123,
126, 10, 13, 58, 68, 32, 47, 48,
57, 59, 64, 65, 90, 91, 96, 97,
122, 123, 126, 10, 13, 45, 58, 32,
47, 48, 57, 59, 64, 65, 90, 91,
96, 97, 122, 123, 126, 10, 13, 45,
58, 32, 47, 48, 57, 59, 64, 65,
90, 91, 96, 97, 122, 123, 126, 13,
58, 32, 47, 48, 57, 59, 64, 65,
90, 91, 96, 97, 122, 123, 126, 58,
32, 47, 48, 57, 59, 64, 65, 90,
91, 96, 97, 122, 123, 126, 58, 32,
47, 48, 57, 59, 64, 65, 90, 91,
96, 97, 122, 123, 126, 13, 32, 13,
10, 13, 58, 32, 47, 48, 57, 59,
64, 65, 90, 91, 96, 97, 122, 123,
126, 58, 32, 47, 48, 57, 59, 64,
65, 90, 91, 96, 97, 122, 123, 126,
13, 32, 10, 13, 58, 32, 47, 48,
57, 59, 64, 65, 90, 91, 96, 97,
122, 123, 126, 10, 13, 45, 10, 13,
69, 10, 13, 78, 10, 13, 68, 10,
13, 32, 10, 13, 67, 10, 13, 79,
10, 13, 77, 10, 13, 77, 10, 13,
65, 10, 13, 78, 10, 13, 68, 10,
13, 45, 10, 13, 45, 13, 10, 13,
10, 13, 32, 10, 13, 45, 10, 13,
69, 10, 13, 78, 10, 13, 68, 10,
13, 32, 10, 13, 67, 10, 13, 79,
10, 13, 77, 10, 13, 77, 10, 13,
65, 10, 13, 78, 10, 13, 68, 10,
13, 45, 10, 13, 45, 13, 13, 10,
13, 10, 13, 10, 13, 32, 10, 13,
58, 32, 47, 48, 57, 59, 64, 65,
90, 91, 96, 97, 122, 123, 126, 65,
115, 10, 13, 58, 13, 13, 65, 69,
82, 101, 114, 10, 115, 86, 118, 69,
101, 10, 13, 32, 47, 48, 57, 59,
64, 65, 90, 91, 96, 97, 122, 123,
126, 10, 13, 45, 10, 13, 45, 32,
47, 48, 57, 59, 64, 65, 90, 91,
96, 97, 122, 123, 126, 10, 13, 45,
32, 47, 48, 57, 59, 64, 65, 90,
91, 96, 97, 122, 123, 126, 32, 47,
48, 57, 59, 64, 65, 90, 91, 96,
97, 122, 123, 126, 32, 47, 48, 57,
59, 64, 65, 90, 91, 96, 97, 122,
123, 126, 32, 47, 48, 57, 59, 64,
65, 90, 91, 96, 97, 122, 123, 126,
32, 47, 48, 57, 59, 64, 65, 90,
91, 96, 97, 122, 123, 126, 0
]
class << self
attr_accessor :_ami_protocol_parser_single_lengths
private :_ami_protocol_parser_single_lengths, :_ami_protocol_parser_single_lengths=
end
self._ami_protocol_parser_single_lengths = [
0, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 0, 1, 0,
1, 1, 1, 1, 3, 3, 1, 2,
3, 1, 3, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 0,
1, 0, 1, 1, 1, 1, 2, 2,
2, 1, 2, 1, 2, 2, 2, 2,
2, 2, 2, 2, 1, 9, 9, 2,
2, 2, 2, 1, 1, 2, 1, 1,
1, 2, 1, 2, 3, 1, 1, 1,
1, 2, 1, 2, 3, 1, 3, 3,
3, 3, 3, 3, 1, 2, 1, 2,
3, 2, 2, 2, 1, 3, 3, 3,
3, 3, 3, 1, 2, 1, 2, 3,
2, 2, 2, 2, 2, 2, 2, 1,
1, 1, 1, 2, 2, 2, 1, 1,
2, 2, 2, 2, 2, 2, 1, 1,
1, 1, 1, 1, 1, 2, 1, 2,
1, 1, 2, 2, 3, 2, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 1, 1, 2, 3,
3, 3, 3, 2, 3, 2, 3, 3,
3, 3, 2, 3, 2, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 2, 1, 1, 2, 1,
2, 1, 1, 2, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 1, 2, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 1, 1, 2, 2,
3, 3, 1, 1, 3, 1, 6, 1,
1, 2, 2, 0, 2, 3, 3, 3,
0, 0, 0, 0
]
class << self
attr_accessor :_ami_protocol_parser_range_lengths
private :_ami_protocol_parser_range_lengths, :_ami_protocol_parser_range_lengths=
end
self._ami_protocol_parser_range_lengths = [
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 1, 1,
1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1,
1, 1, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 7, 7, 7,
7, 0, 0, 0, 7, 0, 7, 7,
7, 0, 0, 0, 7, 7, 7, 7,
7, 7, 7, 7, 7, 0, 0, 0,
7, 0, 0, 0, 7, 7, 7, 7,
7, 7, 7, 7, 0, 0, 0, 7,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
7, 0, 7, 7, 7, 0, 0, 0,
7, 7, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 7,
7, 7, 0, 0, 0, 0, 7, 7,
7, 0, 0, 0, 0, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 0, 0,
0, 7, 7, 0, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 7, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 7, 0, 7, 7,
7, 7, 7, 7
]
class << self
attr_accessor :_ami_protocol_parser_index_offsets
private :_ami_protocol_parser_index_offsets, :_ami_protocol_parser_index_offsets=
end
self._ami_protocol_parser_index_offsets = [
0, 0, 2, 4, 6, 8, 10, 12,
14, 16, 18, 20, 22, 24, 26, 28,
30, 32, 34, 36, 38, 40, 42, 45,
47, 50, 52, 55, 58, 62, 66, 68,
71, 75, 77, 81, 83, 85, 87, 89,
91, 93, 95, 97, 99, 101, 103, 105,
107, 109, 111, 113, 115, 117, 119, 121,
123, 126, 128, 131, 133, 136, 139, 142,
145, 148, 150, 153, 155, 158, 161, 164,
167, 170, 173, 176, 179, 181, 191, 201,
204, 207, 210, 213, 215, 217, 227, 236,
245, 254, 257, 259, 262, 273, 275, 284,
293, 302, 305, 307, 310, 321, 330, 341,
352, 363, 374, 385, 396, 405, 408, 410,
413, 424, 427, 430, 433, 442, 453, 464,
475, 486, 497, 508, 517, 520, 522, 525,
536, 539, 542, 545, 548, 551, 554, 557,
559, 561, 563, 565, 568, 571, 574, 576,
578, 581, 584, 587, 590, 593, 596, 598,
600, 609, 611, 620, 629, 638, 641, 643,
646, 655, 664, 667, 670, 674, 677, 681,
685, 689, 693, 697, 701, 705, 709, 713,
717, 721, 725, 729, 733, 735, 737, 740,
751, 762, 773, 777, 780, 784, 787, 798,
809, 820, 824, 827, 831, 834, 846, 858,
870, 882, 894, 906, 918, 930, 942, 954,
966, 978, 990, 1002, 1012, 1021, 1030, 1033,
1035, 1038, 1047, 1056, 1059, 1070, 1074, 1078,
1082, 1086, 1090, 1094, 1098, 1102, 1106, 1110,
1114, 1118, 1122, 1126, 1128, 1131, 1135, 1139,
1143, 1147, 1151, 1155, 1159, 1163, 1167, 1171,
1175, 1179, 1183, 1187, 1191, 1193, 1195, 1198,
1201, 1205, 1216, 1218, 1220, 1224, 1226, 1233,
1235, 1237, 1240, 1243, 1244, 1254, 1258, 1269,
1280, 1288, 1296, 1304
]
class << self
attr_accessor :_ami_protocol_parser_indicies
private :_ami_protocol_parser_indicies, :_ami_protocol_parser_indicies=
end
self._ami_protocol_parser_indicies = [
1, 0, 2, 0, 3, 0, 4, 0,
5, 0, 6, 0, 7, 0, 8, 0,
9, 0, 10, 0, 11, 0, 12, 0,
13, 0, 14, 0, 15, 0, 16, 0,
17, 0, 18, 0, 19, 0, 20, 0,
21, 0, 22, 23, 0, 24, 0, 25,
26, 0, 27, 0, 25, 26, 0, 22,
23, 0, 29, 30, 31, 28, 29, 30,
31, 28, 33, 31, 34, 33, 31, 35,
30, 31, 28, 33, 31, 36, 30, 31,
28, 38, 37, 39, 37, 40, 37, 41,
37, 42, 37, 43, 37, 44, 37, 45,
37, 46, 37, 47, 37, 48, 37, 49,
37, 50, 37, 51, 37, 52, 37, 53,
37, 54, 37, 55, 37, 56, 37, 57,
37, 58, 37, 59, 60, 37, 61, 37,
62, 63, 37, 64, 37, 62, 63, 37,
59, 60, 37, 65, 65, 37, 66, 66,
37, 67, 67, 37, 68, 37, 70, 71,
69, 73, 72, 74, 73, 72, 70, 71,
69, 75, 75, 37, 76, 76, 37, 77,
77, 37, 78, 78, 37, 79, 79, 37,
80, 80, 37, 81, 37, 82, 83, 84,
85, 86, 83, 84, 85, 86, 37, 82,
83, 84, 85, 86, 83, 84, 85, 86,
37, 87, 87, 37, 88, 88, 37, 89,
89, 37, 90, 90, 37, 91, 37, 92,
37, 95, 95, 93, 94, 93, 94, 93,
94, 93, 37, 98, 96, 97, 96, 97,
96, 97, 96, 37, 98, 96, 97, 96,
97, 96, 97, 96, 37, 98, 96, 97,
96, 97, 96, 97, 96, 37, 100, 101,
99, 103, 102, 104, 103, 102, 105, 108,
108, 106, 107, 106, 107, 106, 107, 106,
37, 109, 37, 112, 110, 111, 110, 111,
110, 111, 110, 37, 112, 110, 111, 110,
111, 110, 111, 110, 37, 112, 110, 111,
110, 111, 110, 111, 110, 37, 114, 115,
113, 117, 116, 118, 117, 116, 105, 108,
108, 106, 107, 106, 107, 106, 107, 106,
37, 112, 110, 111, 110, 111, 110, 111,
110, 37, 112, 119, 119, 110, 111, 110,
111, 110, 111, 110, 37, 112, 120, 120,
110, 111, 110, 111, 110, 111, 110, 37,
112, 121, 121, 110, 111, 110, 111, 110,
111, 110, 37, 112, 122, 122, 110, 111,
110, 111, 110, 111, 110, 37, 112, 123,
123, 110, 111, 110, 111, 110, 111, 110,
37, 112, 124, 124, 110, 111, 110, 111,
110, 111, 110, 37, 125, 110, 111, 110,
111, 110, 111, 110, 37, 127, 128, 126,
130, 129, 131, 130, 129, 105, 108, 108,
106, 107, 106, 107, 106, 107, 106, 37,
127, 128, 126, 114, 115, 113, 100, 101,
99, 98, 96, 97, 96, 97, 96, 97,
96, 37, 98, 132, 132, 96, 97, 96,
97, 96, 97, 96, 37, 98, 133, 133,
96, 97, 96, 97, 96, 97, 96, 37,
98, 134, 134, 96, 97, 96, 97, 96,
97, 96, 37, 98, 135, 135, 96, 97,
96, 97, 96, 97, 96, 37, 98, 136,
136, 96, 97, 96, 97, 96, 97, 96,
37, 98, 137, 137, 96, 97, 96, 97,
96, 97, 96, 37, 138, 96, 97, 96,
97, 96, 97, 96, 37, 140, 141, 139,
143, 142, 144, 143, 142, 105, 108, 108,
106, 107, 106, 107, 106, 107, 106, 37,
140, 141, 139, 145, 145, 37, 146, 146,
37, 147, 147, 37, 148, 148, 37, 149,
149, 37, 150, 150, 37, 151, 37, 152,
37, 153, 37, 154, 37, 155, 155, 37,
156, 156, 37, 157, 157, 37, 158, 37,
159, 37, 160, 160, 37, 161, 161, 37,
162, 162, 37, 163, 163, 37, 164, 164,
37, 165, 165, 37, 166, 37, 167, 37,
168, 170, 171, 170, 171, 170, 171, 170,
169, 172, 169, 175, 173, 174, 173, 174,
173, 174, 173, 169, 175, 173, 174, 173,
174, 173, 174, 173, 169, 175, 173, 174,
173, 174, 173, 174, 173, 169, 177, 178,
176, 180, 179, 181, 180, 179, 168, 170,
171, 170, 171, 170, 171, 170, 169, 175,
173, 174, 173, 174, 173, 174, 173, 169,
177, 178, 176, 184, 185, 183, 184, 185,
186, 183, 184, 185, 183, 184, 185, 187,
183, 184, 185, 188, 183, 184, 185, 189,
183, 184, 185, 190, 183, 184, 185, 191,
183, 184, 185, 192, 183, 184, 185, 193,
183, 184, 185, 194, 183, 184, 185, 195,
183, 184, 185, 196, 183, 184, 185, 197,
183, 184, 185, 198, 183, 184, 185, 199,
183, 184, 185, 200, 183, 201, 182, 202,
182, 203, 185, 183, 184, 185, 206, 204,
205, 204, 205, 204, 205, 204, 183, 184,
185, 206, 204, 205, 204, 205, 204, 205,
204, 183, 184, 185, 206, 204, 205, 204,
205, 204, 205, 204, 183, 208, 209, 210,
207, 212, 213, 211, 212, 213, 214, 211,
215, 213, 211, 184, 185, 219, 217, 218,
217, 218, 217, 218, 217, 183, 184, 185,
219, 217, 218, 217, 218, 217, 218, 217,
183, 184, 185, 219, 217, 218, 217, 218,
217, 218, 217, 183, 221, 222, 223, 220,
225, 226, 224, 225, 226, 227, 224, 228,
226, 224, 184, 185, 229, 219, 217, 218,
217, 218, 217, 218, 217, 183, 184, 185,
219, 230, 217, 218, 217, 218, 217, 218,
217, 183, 184, 185, 219, 231, 217, 218,
217, 218, 217, 218, 217, 183, 184, 185,
219, 232, 217, 218, 217, 218, 217, 218,
217, 183, 184, 185, 233, 219, 217, 218,
217, 218, 217, 218, 217, 183, 184, 185,
219, 234, 217, 218, 217, 218, 217, 218,
217, 183, 184, 185, 219, 235, 217, 218,
217, 218, 217, 218, 217, 183, 184, 185,
219, 236, 217, 218, 217, 218, 217, 218,
217, 183, 184, 185, 219, 237, 217, 218,
217, 218, 217, 218, 217, 183, 184, 185,
219, 238, 217, 218, 217, 218, 217, 218,
217, 183, 184, 185, 219, 239, 217, 218,
217, 218, 217, 218, 217, 183, 184, 185,
219, 240, 217, 218, 217, 218, 217, 218,
217, 183, 184, 185, 241, 219, 217, 218,
217, 218, 217, 218, 217, 183, 184, 185,
242, 219, 217, 218, 217, 218, 217, 218,
217, 183, 201, 245, 243, 244, 243, 244,
243, 244, 243, 216, 245, 243, 244, 243,
244, 243, 244, 243, 216, 245, 243, 244,
243, 244, 243, 244, 243, 216, 247, 248,
246, 250, 249, 251, 250, 249, 245, 243,
244, 243, 244, 243, 244, 243, 216, 245,
243, 244, 243, 244, 243, 244, 243, 216,
247, 248, 246, 184, 185, 219, 217, 218,
217, 218, 217, 218, 217, 183, 225, 226,
252, 224, 225, 226, 253, 224, 225, 226,
254, 224, 225, 226, 255, 224, 225, 226,
256, 224, 225, 226, 257, 224, 225, 226,
258, 224, 225, 226, 259, 224, 225, 226,
260, 224, 225, 226, 261, 224, 225, 226,
262, 224, 225, 226, 263, 224, 225, 226,
264, 224, 225, 226, 265, 224, 266, 249,
267, 250, 249, 221, 222, 223, 220, 212,
213, 268, 211, 212, 213, 269, 211, 212,
213, 270, 211, 212, 213, 271, 211, 212,
213, 272, 211, 212, 213, 273, 211, 212,
213, 274, 211, 212, 213, 275, 211, 212,
213, 276, 211, 212, 213, 277, 211, 212,
213, 278, 211, 212, 213, 279, 211, 212,
213, 280, 211, 212, 213, 281, 211, 283,
282, 284, 282, 285, 284, 282, 286, 284,
282, 208, 209, 210, 207, 184, 185, 206,
204, 205, 204, 205, 204, 205, 204, 183,
288, 287, 290, 289, 292, 293, 292, 291,
33, 31, 296, 297, 298, 299, 298, 299,
295, 301, 300, 302, 300, 303, 303, 300,
304, 304, 300, 169, 306, 307, 308, 309,
308, 309, 308, 309, 308, 305, 184, 185,
186, 183, 184, 185, 313, 312, 314, 312,
314, 312, 314, 312, 183, 184, 185, 313,
312, 314, 312, 314, 312, 314, 312, 183,
315, 316, 315, 316, 315, 316, 315, 311,
315, 316, 315, 316, 315, 316, 315, 311,
315, 316, 315, 316, 315, 316, 315, 311,
315, 316, 315, 316, 315, 316, 315, 311,
0
]
class << self
attr_accessor :_ami_protocol_parser_trans_targs
private :_ami_protocol_parser_trans_targs, :_ami_protocol_parser_trans_targs=
end
self._ami_protocol_parser_trans_targs = [
258, 2, 3, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 27,
24, 25, 26, 258, 29, 261, 32, 30,
260, 31, 260, 260, 260, 262, 36, 37,
38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 49, 50, 51, 52, 53,
54, 55, 56, 57, 61, 58, 59, 60,
262, 63, 64, 65, 66, 67, 68, 69,
67, 68, 262, 71, 72, 73, 74, 75,
76, 77, 78, 79, 129, 139, 144, 80,
81, 82, 83, 84, 85, 86, 116, 117,
87, 88, 89, 90, 91, 115, 90, 91,
92, 93, 94, 101, 102, 262, 95, 96,
97, 98, 99, 114, 98, 99, 100, 103,
104, 105, 106, 107, 108, 109, 110, 111,
113, 110, 111, 112, 118, 119, 120, 121,
122, 123, 124, 125, 126, 128, 125, 126,
127, 130, 131, 132, 133, 134, 135, 136,
137, 138, 262, 140, 141, 142, 143, 262,
145, 146, 147, 148, 149, 150, 151, 262,
153, 0, 154, 161, 267, 155, 156, 157,
158, 159, 162, 158, 159, 160, 268, 163,
164, 165, 166, 167, 168, 169, 170, 171,
172, 173, 174, 175, 176, 177, 178, 179,
180, 181, 268, 269, 184, 185, 186, 187,
188, 189, 256, 187, 188, 189, 238, 270,
268, 191, 192, 193, 194, 195, 196, 237,
194, 195, 196, 221, 271, 198, 199, 200,
201, 202, 203, 204, 205, 206, 207, 208,
209, 210, 211, 212, 213, 214, 215, 216,
219, 215, 216, 272, 222, 223, 224, 225,
226, 227, 228, 229, 230, 231, 232, 233,
234, 235, 236, 273, 239, 240, 241, 242,
243, 244, 245, 246, 247, 248, 249, 250,
251, 252, 253, 255, 254, 274, 275, 258,
259, 258, 1, 28, 33, 34, 260, 262,
263, 264, 265, 266, 262, 262, 35, 62,
70, 163, 164, 182, 183, 257, 268, 268,
190, 197, 220, 217, 218
]
class << self
attr_accessor :_ami_protocol_parser_trans_actions
private :_ami_protocol_parser_trans_actions, :_ami_protocol_parser_trans_actions=
end
self._ami_protocol_parser_trans_actions = [
43, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 5, 0, 0,
0, 7, 0, 37, 0, 130, 0, 0,
35, 0, 88, 125, 112, 55, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 5, 0, 0, 0, 7, 0,
45, 0, 0, 0, 0, 23, 94, 23,
0, 25, 103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 3, 0, 9, 9, 9,
0, 0, 11, 13, 79, 13, 0, 15,
0, 0, 9, 9, 9, 73, 0, 0,
11, 13, 79, 13, 0, 15, 0, 0,
0, 0, 0, 0, 0, 11, 82, 120,
82, 0, 85, 0, 0, 0, 0, 0,
0, 0, 11, 82, 120, 82, 0, 85,
0, 0, 0, 0, 0, 0, 0, 0,
67, 0, 47, 0, 0, 0, 1, 100,
0, 0, 0, 0, 0, 0, 1, 97,
0, 0, 9, 9, 70, 0, 0, 11,
13, 79, 13, 0, 15, 0, 65, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
21, 0, 57, 116, 0, 0, 11, 13,
13, 79, 13, 0, 0, 15, 0, 109,
63, 0, 0, 11, 13, 13, 79, 13,
0, 0, 15, 0, 109, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 21, 0, 0, 11, 13, 79,
13, 0, 15, 31, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 21, 15, 31, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 21, 0, 15, 15, 31, 31, 39,
31, 41, 0, 91, 17, 91, 33, 51,
0, 31, 31, 31, 53, 49, 0, 0,
0, 19, 19, 19, 76, 76, 61, 59,
9, 9, 9, 9, 9
]
class << self
attr_accessor :_ami_protocol_parser_to_state_actions
private :_ami_protocol_parser_to_state_actions, :_ami_protocol_parser_to_state_actions=
end
self._ami_protocol_parser_to_state_actions = [
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
27, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 27, 0, 106, 0, 27, 0,
0, 0, 0, 0, 106, 0, 0, 0,
0, 0, 0, 0
]
class << self
attr_accessor :_ami_protocol_parser_from_state_actions
private :_ami_protocol_parser_from_state_actions, :_ami_protocol_parser_from_state_actions=
end
self._ami_protocol_parser_from_state_actions = [
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 29, 0, 29, 0, 29, 0,
0, 0, 0, 0, 29, 0, 0, 0,
0, 0, 0, 0
]
class << self
attr_accessor :_ami_protocol_parser_eof_trans
private :_ami_protocol_parser_eof_trans, :_ami_protocol_parser_eof_trans=
end
self._ami_protocol_parser_eof_trans = [
0, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 0, 0, 33, 33,
0, 0, 0, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 183, 183, 183, 183, 183,
183, 183, 183, 183, 183, 183, 183, 183,
183, 183, 183, 183, 183, 183, 0, 0,
0, 0, 0, 0, 0, 0, 217, 217,
217, 217, 217, 217, 217, 217, 217, 217,
217, 217, 217, 217, 217, 217, 217, 217,
217, 217, 217, 217, 217, 217, 217, 217,
217, 217, 217, 217, 217, 217, 217, 217,
217, 217, 217, 217, 217, 217, 217, 217,
217, 217, 217, 217, 217, 217, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 290, 0, 295, 0, 301,
301, 301, 301, 0, 0, 311, 312, 312,
312, 312, 312, 312
]
class << self
attr_accessor :ami_protocol_parser_start
end
self.ami_protocol_parser_start = 258;
class << self
attr_accessor :ami_protocol_parser_first_final
end
self.ami_protocol_parser_first_final = 258;
class << self
attr_accessor :ami_protocol_parser_error
end
self.ami_protocol_parser_error = 0;
class << self
attr_accessor :ami_protocol_parser_en_irregularity
end
self.ami_protocol_parser_en_irregularity = 260;
class << self
attr_accessor :ami_protocol_parser_en_main
end
self.ami_protocol_parser_en_main = 258;
class << self
attr_accessor :ami_protocol_parser_en_protocol
end
self.ami_protocol_parser_en_protocol = 262;
class << self
attr_accessor :ami_protocol_parser_en_success
end
self.ami_protocol_parser_en_success = 152;
class << self
attr_accessor :ami_protocol_parser_en_response_follows
end
self.ami_protocol_parser_en_response_follows = 268;
# line 860 "lib/ruby_ami/lexer.rb"
begin
@current_pointer ||= 0
@data_ending_pointer ||= @data.length
@current_state = ami_protocol_parser_start
@ragel_stack_top = 0
@token_start = nil
@token_end = nil
@ragel_act = 0
end
# line 95 "lib/ruby_ami/lexer.rl.rb"
##
end
def <<(new_data)
extend_buffer_with new_data
resume!
end
def resume!
# line 882 "lib/ruby_ami/lexer.rb"
begin
_klen, _trans, _keys, _acts, _nacts = nil
_goto_level = 0
_resume = 10
_eof_trans = 15
_again = 20
_test_eof = 30
_out = 40
while true
_trigger_goto = false
if _goto_level <= 0
if @current_pointer == @data_ending_pointer
_goto_level = _test_eof
next
end
if @current_state == 0
_goto_level = _out
next
end
end
if _goto_level <= _resume
_acts = _ami_protocol_parser_from_state_actions[ @current_state]
_nacts = _ami_protocol_parser_actions[_acts]
_acts += 1
while _nacts > 0
_nacts -= 1
_acts += 1
case _ami_protocol_parser_actions[_acts - 1]
when 30 then
# line 1 "NONE"
begin
@token_start = @current_pointer
end
# line 916 "lib/ruby_ami/lexer.rb"
end # from state action switch
end
if _trigger_goto
next
end
_keys = _ami_protocol_parser_key_offsets[ @current_state]
_trans = _ami_protocol_parser_index_offsets[ @current_state]
_klen = _ami_protocol_parser_single_lengths[ @current_state]
_break_match = false
begin
if _klen > 0
_lower = _keys
_upper = _keys + _klen - 1
loop do
break if _upper < _lower
_mid = _lower + ( (_upper - _lower) >> 1 )
if @data[ @current_pointer].ord < _ami_protocol_parser_trans_keys[_mid]
_upper = _mid - 1
elsif @data[ @current_pointer].ord > _ami_protocol_parser_trans_keys[_mid]
_lower = _mid + 1
else
_trans += (_mid - _keys)
_break_match = true
break
end
end # loop
break if _break_match
_keys += _klen
_trans += _klen
end
_klen = _ami_protocol_parser_range_lengths[ @current_state]
if _klen > 0
_lower = _keys
_upper = _keys + (_klen << 1) - 2
loop do
break if _upper < _lower
_mid = _lower + (((_upper-_lower) >> 1) & ~1)
if @data[ @current_pointer].ord < _ami_protocol_parser_trans_keys[_mid]
_upper = _mid - 2
elsif @data[ @current_pointer].ord > _ami_protocol_parser_trans_keys[_mid+1]
_lower = _mid + 2
else
_trans += ((_mid - _keys) >> 1)
_break_match = true
break
end
end # loop
break if _break_match
_trans += _klen
end
end while false
_trans = _ami_protocol_parser_indicies[_trans]
end
if _goto_level <= _eof_trans
@current_state = _ami_protocol_parser_trans_targs[_trans]
if _ami_protocol_parser_trans_actions[_trans] != 0
_acts = _ami_protocol_parser_trans_actions[_trans]
_nacts = _ami_protocol_parser_actions[_acts]
_acts += 1
while _nacts > 0
_nacts -= 1
_acts += 1
case _ami_protocol_parser_actions[_acts - 1]
when 0 then
# line 32 "lib/ruby_ami/lexer.rl.rb"
begin
init_success end
when 1 then
# line 34 "lib/ruby_ami/lexer.rl.rb"
begin
init_response_follows end
when 2 then
# line 36 "lib/ruby_ami/lexer.rl.rb"
begin
init_error end
when 3 then
# line 38 "lib/ruby_ami/lexer.rl.rb"
begin
message_received @current_message end
when 4 then
# line 39 "lib/ruby_ami/lexer.rl.rb"
begin
error_received @current_message end
when 5 then
# line 41 "lib/ruby_ami/lexer.rl.rb"
begin
version_starts end
when 6 then
# line 42 "lib/ruby_ami/lexer.rl.rb"
begin
version_stops end
when 7 then
# line 44 "lib/ruby_ami/lexer.rl.rb"
begin
key_starts end
when 8 then
# line 45 "lib/ruby_ami/lexer.rl.rb"
begin
key_stops end
when 9 then
# line 47 "lib/ruby_ami/lexer.rl.rb"
begin
value_starts end
when 10 then
# line 48 "lib/ruby_ami/lexer.rl.rb"
begin
value_stops end
when 11 then
# line 50 "lib/ruby_ami/lexer.rl.rb"
begin
error_reason_starts end
when 12 then
# line 51 "lib/ruby_ami/lexer.rl.rb"
begin
error_reason_stops end
when 13 then
# line 53 "lib/ruby_ami/lexer.rl.rb"
begin
syntax_error_starts end
when 14 then
# line 54 "lib/ruby_ami/lexer.rl.rb"
begin
syntax_error_stops end
when 15 then
# line 56 "lib/ruby_ami/lexer.rl.rb"
begin
immediate_response_starts end
when 16 then
# line 57 "lib/ruby_ami/lexer.rl.rb"
begin
immediate_response_stops end
when 17 then
# line 59 "lib/ruby_ami/lexer.rl.rb"
begin
follows_text_starts end
when 18 then
# line 60 "lib/ruby_ami/lexer.rl.rb"
begin
follows_text_stops end
when 19 then
# line 62 "lib/ruby_ami/lexer.rl.rb"
begin
event_name_starts end
when 20 then
# line 63 "lib/ruby_ami/lexer.rl.rb"
begin
event_name_stops end
when 21 then
# line 34 "lib/ruby_ami/lexer_machine.rl"
begin
begin
@current_state = 152
_trigger_goto = true
_goto_level = _again
break
end
end
when 22 then
# line 35 "lib/ruby_ami/lexer_machine.rl"
begin
begin
@current_state = 152
_trigger_goto = true
_goto_level = _again
break
end
end
when 23 then
# line 36 "lib/ruby_ami/lexer_machine.rl"
begin
begin
@current_state = 152
_trigger_goto = true
_goto_level = _again
break
end
end
when 24 then
# line 38 "lib/ruby_ami/lexer_machine.rl"
begin
begin
@current_state = 268
_trigger_goto = true
_goto_level = _again
break
end
end
when 25 then
# line 43 "lib/ruby_ami/lexer_machine.rl"
begin
begin
@ragel_stack_top -= 1
@current_state = @ragel_stack[ @ragel_stack_top]
_trigger_goto = true
_goto_level = _again
break
end
end
when 26 then
# line 78 "lib/ruby_ami/lexer_machine.rl"
begin
begin
@current_state = 262
_trigger_goto = true
_goto_level = _again
break
end
end
when 27 then
# line 84 "lib/ruby_ami/lexer_machine.rl"
begin
message_received @current_message; begin
@current_state = 262
_trigger_goto = true
_goto_level = _again
break
end
end
when 31 then
# line 1 "NONE"
begin
@token_end = @current_pointer+1
end
when 32 then
# line 47 "lib/ruby_ami/lexer_machine.rl"
begin
@ragel_act = 1; end
when 33 then
# line 47 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
end
when 34 then
# line 48 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
begin begin
@ragel_stack_top -= 1
@current_state = @ragel_stack[ @ragel_stack_top]
_trigger_goto = true
_goto_level = _again
break
end
end
end
when 35 then
# line 47 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer
@current_pointer = @current_pointer - 1; end
when 36 then
# line 1 "NONE"
begin
case @ragel_act
when 0 then
begin begin
@current_state = 0
_trigger_goto = true
_goto_level = _again
break
end
end
else
begin begin @current_pointer = (( @token_end))-1; end
end
end
end
when 37 then
# line 55 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
begin begin
@current_state = 262
_trigger_goto = true
_goto_level = _again
break
end
end
end
when 38 then
# line 56 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
begin
# If this scanner's look-ahead capability didn't match the prompt, let's ignore the need for a prompt
@current_pointer = @current_pointer - 1;
begin
@current_state = 262
_trigger_goto = true
_goto_level = _again
break
end
end
end
when 39 then
# line 56 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer
@current_pointer = @current_pointer - 1; begin
# If this scanner's look-ahead capability didn't match the prompt, let's ignore the need for a prompt
@current_pointer = @current_pointer - 1;
begin
@current_state = 262
_trigger_goto = true
_goto_level = _again
break
end
end
end
when 40 then
# line 56 "lib/ruby_ami/lexer_machine.rl"
begin
begin @current_pointer = (( @token_end))-1; end
begin
# If this scanner's look-ahead capability didn't match the prompt, let's ignore the need for a prompt
@current_pointer = @current_pointer - 1;
begin
@current_state = 262
_trigger_goto = true
_goto_level = _again
break
end
end
end
when 41 then
# line 64 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
end
when 42 then
# line 65 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
end
when 43 then
# line 66 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
end
when 44 then
# line 67 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
end
when 45 then
# line 68 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
end
when 46 then
# line 69 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
end
when 47 then
# line 70 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
begin begin
@current_state = 262
_trigger_goto = true
_goto_level = _again
break
end
end
end
when 48 then
# line 71 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
begin
# If NONE of the above patterns match, we consider this a syntax error. The irregularity machine can recover gracefully.
@current_pointer = @current_pointer - 1;
begin
@ragel_stack[ @ragel_stack_top] = @current_state
@ragel_stack_top+= 1
@current_state = 260
_trigger_goto = true
_goto_level = _again
break
end
end
end
when 49 then
# line 71 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer
@current_pointer = @current_pointer - 1; begin
# If NONE of the above patterns match, we consider this a syntax error. The irregularity machine can recover gracefully.
@current_pointer = @current_pointer - 1;
begin
@ragel_stack[ @ragel_stack_top] = @current_state
@ragel_stack_top+= 1
@current_state = 260
_trigger_goto = true
_goto_level = _again
break
end
end
end
when 50 then
# line 71 "lib/ruby_ami/lexer_machine.rl"
begin
begin @current_pointer = (( @token_end))-1; end
begin
# If NONE of the above patterns match, we consider this a syntax error. The irregularity machine can recover gracefully.
@current_pointer = @current_pointer - 1;
begin
@ragel_stack[ @ragel_stack_top] = @current_state
@ragel_stack_top+= 1
@current_state = 260
_trigger_goto = true
_goto_level = _again
break
end
end
end
when 51 then
# line 82 "lib/ruby_ami/lexer_machine.rl"
begin
@ragel_act = 13; end
when 52 then
# line 84 "lib/ruby_ami/lexer_machine.rl"
begin
@ragel_act = 15; end
when 53 then
# line 83 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer+1
end
when 54 then
# line 82 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer
@current_pointer = @current_pointer - 1; end
when 55 then
# line 84 "lib/ruby_ami/lexer_machine.rl"
begin
@token_end = @current_pointer
@current_pointer = @current_pointer - 1; end
when 56 then
# line 82 "lib/ruby_ami/lexer_machine.rl"
begin
begin @current_pointer = (( @token_end))-1; end
end
when 57 then
# line 1 "NONE"
begin
case @ragel_act
when 0 then
begin begin
@current_state = 0
_trigger_goto = true
_goto_level = _again
break
end
end
else
begin begin @current_pointer = (( @token_end))-1; end
end
end
end
# line 1388 "lib/ruby_ami/lexer.rb"
end # action switch
end
end
if _trigger_goto
next
end
end
if _goto_level <= _again
_acts = _ami_protocol_parser_to_state_actions[ @current_state]
_nacts = _ami_protocol_parser_actions[_acts]
_acts += 1
while _nacts > 0
_nacts -= 1
_acts += 1
case _ami_protocol_parser_actions[_acts - 1]
when 28 then
# line 1 "NONE"
begin
@token_start = nil; end
when 29 then
# line 1 "NONE"
begin
@ragel_act = 0
end
# line 1413 "lib/ruby_ami/lexer.rb"
end # to state action switch
end
if _trigger_goto
next
end
if @current_state == 0
_goto_level = _out
next
end
@current_pointer += 1
if @current_pointer != @data_ending_pointer
_goto_level = _resume
next
end
end
if _goto_level <= _test_eof
if @current_pointer == @eof
if _ami_protocol_parser_eof_trans[ @current_state] > 0
_trans = _ami_protocol_parser_eof_trans[ @current_state] - 1;
_goto_level = _eof_trans
next;
end
end
end
if _goto_level <= _out
break
end
end
end
# line 104 "lib/ruby_ami/lexer.rl.rb"
##
end
def extend_buffer_with(new_data)
length = new_data.size
if length > BUFFER_SIZE
raise Exception, "ERROR: Buffer overrun! Input size (#{new_data.size}) larger than buffer (#{BUFFER_SIZE})"
end
if length + @data.size > BUFFER_SIZE
if @data.size != @current_pointer
if @current_pointer < length
# We are about to shift more bytes off the array than we have
# parsed. This will cause the parser to lose state so
# integrity cannot be guaranteed.
raise Exception, "ERROR: Buffer overrun! AMI parser cannot guarantee sanity. New data size: #{new_data.size}; Current pointer at #{@current_pointer}; Data size: #{@data.size}"
end
end
@data.slice! 0...length
adjust_pointers -length
end
@data << new_data
@data_ending_pointer = @data.size
end
protected
##
# This method will adjust all pointers into the buffer according
# to the supplied offset. This is necessary any time the buffer
# changes, for example when the sliding window is incremented forward
# after new data is received.
#
# It is VERY IMPORTANT that when any additional pointers are defined
# that they are added to this method. Unpredictable results may
# otherwise occur!
#
# @see https://adhearsion.lighthouseapp.com/projects/5871-adhearsion/tickets/72-ami-lexer-buffer-offset#ticket-72-26
#
# @param offset Adjust pointers by offset. May be negative.
#
def adjust_pointers(offset)
POINTERS.each do |ptr|
value = instance_variable_get(ptr)
instance_variable_set(ptr, value + offset) if !value.nil?
end
end
##
# Called after a response or event has been successfully parsed.
#
# @param [Response, Event] message The message just received
#
def message_received(message)
@delegate.message_received message
end
##
# Called when there is an Error: stanza on the socket. Could be caused by executing an unrecognized command, trying
# to originate into an invalid priority, etc. Note: many errors' responses are actually tightly coupled to a
# Event which comes directly after it. Often the message will say something like "Channel status
# will follow".
#
# @param [String] reason The reason given in the Message: header for the error stanza.
#
def error_received(message)
@delegate.error_received message
end
##
# Called when there's a syntax error on the socket. This doesn't happen as often as it should because, in many cases,
# it's impossible to distinguish between a syntax error and an immediate packet.
#
# @param [String] ignored_chunk The offending text which caused the syntax error.
def syntax_error_encountered(ignored_chunk)
@delegate.syntax_error_encountered ignored_chunk
end
def init_success
@current_message = Response.new
end
def init_response_follows
@current_message = Response.new
end
def init_error
@current_message = Error.new
end
def version_starts
@version_start = @current_pointer
end
def version_stops
self.ami_version = @data[@version_start...@current_pointer].to_f
@version_start = nil
end
def event_name_starts
@event_name_start = @current_pointer
end
def event_name_stops
event_name = @data[@event_name_start...@current_pointer]
@event_name_start = nil
@current_message = Event.new(event_name)
end
def key_starts
@current_key_position = @current_pointer
end
def key_stops
@current_key = @data[@current_key_position...@current_pointer]
end
def value_starts
@current_value_position = @current_pointer
end
def value_stops
@current_value = @data[@current_value_position...@current_pointer]
@last_seen_value_end = @current_pointer + 2 # 2 for \r\n
add_pair_to_current_message
end
def error_reason_starts
@error_reason_start = @current_pointer
end
def error_reason_stops
@current_message.message = @data[@error_reason_start...@current_pointer]
end
def follows_text_starts
@follows_text_start = @current_pointer
end
def follows_text_stops
text = @data[@last_seen_value_end..@current_pointer]
text.sub! /\r?\n--END COMMAND--/, ""
@current_message.text_body = text
@follows_text_start = nil
end
def add_pair_to_current_message
@current_message[@current_key] = @current_value
reset_key_and_value_positions
end
def reset_key_and_value_positions
@current_key, @current_value, @current_key_position, @current_value_position = nil
end
def syntax_error_starts
@current_syntax_error_start = @current_pointer # Adding 1 since the pointer is still set to the last successful match
end
def syntax_error_stops
# Subtracting 3 from @current_pointer below for "\r\n" which separates a stanza
offending_data = @data[@current_syntax_error_start...@current_pointer - 1]
syntax_error_encountered offending_data
@current_syntax_error_start = nil
end
def immediate_response_starts
@immediate_response_start = @current_pointer
end
def immediate_response_stops
message = @data[@immediate_response_start...(@current_pointer -1)]
message_received Response.from_immediate_response(message)
end
##
# This method is used primarily in debugging.
#
def view_buffer(message = nil)
message ||= "Viewing the buffer"
buffer = @data.clone
buffer.insert(@current_pointer, "\033[0;31m\033[1;31m^\033[0m")
buffer.gsub!("\r", "\\\\r")
buffer.gsub!("\n", "\\n\n")
puts <<-INSPECTION
VVVVVVVVVVVVVVVVVVVVVVVVVVVVV
#### #{message}
#############################
#{buffer}
#############################
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INSPECTION
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment