onion 0.1.1 → 0.1.2

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.
@@ -0,0 +1,111 @@
1
+ module Onion
2
+ grammar RouterStatuses
3
+ include Common
4
+
5
+ rule router_statuses
6
+ (getinfo_error_response / router_status)+ {
7
+ def routers
8
+ routers = []
9
+ self.elements.each do |entry|
10
+ unless entry.extension_modules.join.include?("Error")
11
+ if entry.extra_info.elements != []
12
+ entry.extra_info.elements.each do |info|
13
+ # TODO: Is there a better way to differeniate between extra info?
14
+ if info.extension_modules.join.include?("::Status")
15
+ routers << Router.new(entry.r.nick, entry.r.fingerprint, info.flags)
16
+ end
17
+ end
18
+ else
19
+ routers << Router.new(entry.r.nick, entry.r.fingerprint, nil)
20
+ end
21
+ end
22
+ end
23
+ return routers
24
+ end
25
+ }
26
+ end
27
+
28
+ rule getinfo_error_response
29
+ "552" [ /0-9a-zA-Z\-=,"]+ NL
30
+ end
31
+
32
+ rule command_ack
33
+ "250 OK\r\n"
34
+ end
35
+
36
+ rule response_start
37
+ "250+" [/0-9a-zA-Z]+ "=\r\n"
38
+ end
39
+
40
+ rule response_end
41
+ ".\r\n"
42
+ end
43
+
44
+ rule router_status
45
+ response_start r:router extra_info:(extra_info*) response_end command_ack
46
+ end
47
+
48
+ rule router
49
+ "r" SP n:Nickname SP f:Identity SP Digest SP Publication SP IP SP ORPort SP DirPort NL {
50
+ def nick
51
+ n.text_value.strip
52
+ end
53
+
54
+ def fingerprint
55
+ f.text_value.strip
56
+ end
57
+ }
58
+ end
59
+
60
+ rule Identity
61
+ Base64Hash
62
+ end
63
+
64
+ rule Digest
65
+ Base64Hash
66
+ end
67
+
68
+ rule Publication
69
+ DateTime
70
+ end
71
+
72
+ rule extra_info
73
+ status / bandwidth / policy
74
+ end
75
+
76
+ rule status
77
+ "s" (SP flag:status_flag)+ NL {
78
+ def flags
79
+ results = []
80
+ self.elements[1].elements.each do |e|
81
+ if e.respond_to? :flag
82
+ results << e.flag.text_value
83
+ end
84
+ end
85
+ return results
86
+ end
87
+ }
88
+ end
89
+
90
+ rule status_flag
91
+ documented_status_flag / undocumented_status_flag
92
+ end
93
+
94
+ rule documented_status_flag
95
+ "Authority" / "BadExit" / "BadDirectory" / "Exit" / "Fast"
96
+ / "Guard" / "Named" / "Stable" / "Running" / "Valid" / "V2Dir"
97
+ end
98
+
99
+ rule undocumented_status_flag
100
+ [a-zA-Z]+
101
+ end
102
+
103
+ rule bandwidth
104
+ "w" [ /0-9a-zA-Z\-=]+ NL
105
+ end
106
+
107
+ rule policy
108
+ "p" [ /0-9a-zA-Z\-=,]+ NL
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,356 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module Onion
5
+ module StreamLists
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root ||= :stream_list
10
+ end
11
+
12
+ include Common
13
+
14
+ module StreamList0
15
+ def streams
16
+ streams = []
17
+ self.elements.each do |stream|
18
+ streams << Stream.new(stream.s_id.text_value.strip, stream.c_id.text_value.strip)
19
+ end
20
+ return streams
21
+ end
22
+ end
23
+
24
+ def _nt_stream_list
25
+ start_index = index
26
+ if node_cache[:stream_list].has_key?(index)
27
+ cached = node_cache[:stream_list][index]
28
+ if cached
29
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
30
+ @index = cached.interval.end
31
+ end
32
+ return cached
33
+ end
34
+
35
+ s0, i0 = [], index
36
+ loop do
37
+ r1 = _nt_stream_list_entry
38
+ if r1
39
+ s0 << r1
40
+ else
41
+ break
42
+ end
43
+ end
44
+ if s0.empty?
45
+ @index = i0
46
+ r0 = nil
47
+ else
48
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
49
+ r0.extend(StreamList0)
50
+ end
51
+
52
+ node_cache[:stream_list][start_index] = r0
53
+
54
+ r0
55
+ end
56
+
57
+ module StreamListEntry0
58
+ def s_id
59
+ elements[0]
60
+ end
61
+
62
+ def SP1
63
+ elements[1]
64
+ end
65
+
66
+ def s
67
+ elements[2]
68
+ end
69
+
70
+ def SP2
71
+ elements[3]
72
+ end
73
+
74
+ def c_id
75
+ elements[4]
76
+ end
77
+
78
+ def SP3
79
+ elements[5]
80
+ end
81
+
82
+ def t
83
+ elements[6]
84
+ end
85
+
86
+ end
87
+
88
+ def _nt_stream_list_entry
89
+ start_index = index
90
+ if node_cache[:stream_list_entry].has_key?(index)
91
+ cached = node_cache[:stream_list_entry][index]
92
+ if cached
93
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
94
+ @index = cached.interval.end
95
+ end
96
+ return cached
97
+ end
98
+
99
+ i0, s0 = index, []
100
+ r1 = _nt_StreamID
101
+ s0 << r1
102
+ if r1
103
+ r2 = _nt_SP
104
+ s0 << r2
105
+ if r2
106
+ r3 = _nt_StreamStatus
107
+ s0 << r3
108
+ if r3
109
+ r4 = _nt_SP
110
+ s0 << r4
111
+ if r4
112
+ r5 = _nt_CircuitID
113
+ s0 << r5
114
+ if r5
115
+ r6 = _nt_SP
116
+ s0 << r6
117
+ if r6
118
+ r7 = _nt_Target
119
+ s0 << r7
120
+ if r7
121
+ if has_terminal?("\r\n", false, index)
122
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 2))
123
+ @index += 2
124
+ else
125
+ terminal_parse_failure("\r\n")
126
+ r8 = nil
127
+ end
128
+ s0 << r8
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
136
+ if s0.last
137
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
138
+ r0.extend(StreamListEntry0)
139
+ else
140
+ @index = i0
141
+ r0 = nil
142
+ end
143
+
144
+ node_cache[:stream_list_entry][start_index] = r0
145
+
146
+ r0
147
+ end
148
+
149
+ def _nt_StreamStatus
150
+ start_index = index
151
+ if node_cache[:StreamStatus].has_key?(index)
152
+ cached = node_cache[:StreamStatus][index]
153
+ if cached
154
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
155
+ @index = cached.interval.end
156
+ end
157
+ return cached
158
+ end
159
+
160
+ i0 = index
161
+ if has_terminal?("NEW", false, index)
162
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
163
+ @index += 3
164
+ else
165
+ terminal_parse_failure("NEW")
166
+ r1 = nil
167
+ end
168
+ if r1
169
+ r0 = r1
170
+ else
171
+ if has_terminal?("NEWRESOLVE", false, index)
172
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 10))
173
+ @index += 10
174
+ else
175
+ terminal_parse_failure("NEWRESOLVE")
176
+ r2 = nil
177
+ end
178
+ if r2
179
+ r0 = r2
180
+ else
181
+ if has_terminal?("REMAP", false, index)
182
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 5))
183
+ @index += 5
184
+ else
185
+ terminal_parse_failure("REMAP")
186
+ r3 = nil
187
+ end
188
+ if r3
189
+ r0 = r3
190
+ else
191
+ if has_terminal?("SENTCONNECT", false, index)
192
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 11))
193
+ @index += 11
194
+ else
195
+ terminal_parse_failure("SENTCONNECT")
196
+ r4 = nil
197
+ end
198
+ if r4
199
+ r0 = r4
200
+ else
201
+ if has_terminal?("SENTRESOLVE", false, index)
202
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 11))
203
+ @index += 11
204
+ else
205
+ terminal_parse_failure("SENTRESOLVE")
206
+ r5 = nil
207
+ end
208
+ if r5
209
+ r0 = r5
210
+ else
211
+ if has_terminal?("SUCCEEDED", false, index)
212
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 9))
213
+ @index += 9
214
+ else
215
+ terminal_parse_failure("SUCCEEDED")
216
+ r6 = nil
217
+ end
218
+ if r6
219
+ r0 = r6
220
+ else
221
+ if has_terminal?("FAILED", false, index)
222
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 6))
223
+ @index += 6
224
+ else
225
+ terminal_parse_failure("FAILED")
226
+ r7 = nil
227
+ end
228
+ if r7
229
+ r0 = r7
230
+ else
231
+ if has_terminal?("CLOSED", false, index)
232
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 6))
233
+ @index += 6
234
+ else
235
+ terminal_parse_failure("CLOSED")
236
+ r8 = nil
237
+ end
238
+ if r8
239
+ r0 = r8
240
+ else
241
+ if has_terminal?("DETACHED", false, index)
242
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 8))
243
+ @index += 8
244
+ else
245
+ terminal_parse_failure("DETACHED")
246
+ r9 = nil
247
+ end
248
+ if r9
249
+ r0 = r9
250
+ else
251
+ @index = i0
252
+ r0 = nil
253
+ end
254
+ end
255
+ end
256
+ end
257
+ end
258
+ end
259
+ end
260
+ end
261
+ end
262
+
263
+ node_cache[:StreamStatus][start_index] = r0
264
+
265
+ r0
266
+ end
267
+
268
+ module Target0
269
+ end
270
+
271
+ def _nt_Target
272
+ start_index = index
273
+ if node_cache[:Target].has_key?(index)
274
+ cached = node_cache[:Target][index]
275
+ if cached
276
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
277
+ @index = cached.interval.end
278
+ end
279
+ return cached
280
+ end
281
+
282
+ i0, s0 = index, []
283
+ s1, i1 = [], index
284
+ loop do
285
+ if has_terminal?('\G[$0-9a-zA-Z\\.\\-]', true, index)
286
+ r2 = true
287
+ @index += 1
288
+ else
289
+ r2 = nil
290
+ end
291
+ if r2
292
+ s1 << r2
293
+ else
294
+ break
295
+ end
296
+ end
297
+ if s1.empty?
298
+ @index = i1
299
+ r1 = nil
300
+ else
301
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
302
+ end
303
+ s0 << r1
304
+ if r1
305
+ if has_terminal?(":", false, index)
306
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
307
+ @index += 1
308
+ else
309
+ terminal_parse_failure(":")
310
+ r3 = nil
311
+ end
312
+ s0 << r3
313
+ if r3
314
+ s4, i4 = [], index
315
+ loop do
316
+ if has_terminal?('\G[0-9]', true, index)
317
+ r5 = true
318
+ @index += 1
319
+ else
320
+ r5 = nil
321
+ end
322
+ if r5
323
+ s4 << r5
324
+ else
325
+ break
326
+ end
327
+ end
328
+ if s4.empty?
329
+ @index = i4
330
+ r4 = nil
331
+ else
332
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
333
+ end
334
+ s0 << r4
335
+ end
336
+ end
337
+ if s0.last
338
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
339
+ r0.extend(Target0)
340
+ else
341
+ @index = i0
342
+ r0 = nil
343
+ end
344
+
345
+ node_cache[:Target][start_index] = r0
346
+
347
+ r0
348
+ end
349
+
350
+ end
351
+
352
+ class StreamListsParser < Treetop::Runtime::CompiledParser
353
+ include StreamLists
354
+ end
355
+
356
+ end