vanken 0.1.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/CHANGELOG.md +5 -0
- data/LICENSE.txt +21 -0
- data/README.md +84 -0
- data/docs/filters.md +25 -0
- data/docs/performance.md +113 -0
- data/docs/releases.md +15 -0
- data/docs/upstream.md +32 -0
- data/exe/vanken +5 -0
- data/exe/vanken-capture +6 -0
- data/lib/vanken/app/capture_controller.rb +197 -0
- data/lib/vanken/app/document.rb +305 -0
- data/lib/vanken/app/document_jobs.rb +199 -0
- data/lib/vanken/capture/analyzer.rb +44 -0
- data/lib/vanken/capture/analyzer_process.rb +91 -0
- data/lib/vanken/capture/analyzer_wire.rb +42 -0
- data/lib/vanken/capture/analyzer_worker.rb +153 -0
- data/lib/vanken/capture/control_protocol.rb +32 -0
- data/lib/vanken/capture/filter_worker.rb +180 -0
- data/lib/vanken/capture/helper_main.rb +137 -0
- data/lib/vanken/capture/helper_options.rb +70 -0
- data/lib/vanken/capture/launcher.rb +181 -0
- data/lib/vanken/capture/privileges.rb +24 -0
- data/lib/vanken/capture/receiver.rb +39 -0
- data/lib/vanken/cli.rb +68 -0
- data/lib/vanken/config/log.rb +19 -0
- data/lib/vanken/config/preferences.rb +126 -0
- data/lib/vanken/core/display_filter/compiler.rb +108 -0
- data/lib/vanken/core/display_filter/errors.rb +19 -0
- data/lib/vanken/core/display_filter/field_resolver.rb +86 -0
- data/lib/vanken/core/display_filter/lexer.rb +124 -0
- data/lib/vanken/core/display_filter/parser.rb +157 -0
- data/lib/vanken/core/display_filter/types.rb +176 -0
- data/lib/vanken/core/frame.rb +33 -0
- data/lib/vanken/core/frame_store.rb +179 -0
- data/lib/vanken/core/frame_view.rb +68 -0
- data/lib/vanken/core/stores.rb +192 -0
- data/lib/vanken/errors.rb +9 -0
- data/lib/vanken/gateway/capture_filter.rb +30 -0
- data/lib/vanken/gateway/detail_builder.rb +63 -0
- data/lib/vanken/gateway/dissector.rb +176 -0
- data/lib/vanken/gateway/file_reader.rb +153 -0
- data/lib/vanken/gateway/file_writer.rb +64 -0
- data/lib/vanken/gateway/interfaces.rb +30 -0
- data/lib/vanken/gateway/live_capture.rb +79 -0
- data/lib/vanken/gateway/packet_snapshot.rb +89 -0
- data/lib/vanken/ui/actions.rb +50 -0
- data/lib/vanken/ui/application.rb +205 -0
- data/lib/vanken/ui/dialogs.rb +89 -0
- data/lib/vanken/ui/file_operations.rb +113 -0
- data/lib/vanken/ui/filter_operations.rb +120 -0
- data/lib/vanken/ui/main_view.rb +113 -0
- data/lib/vanken/ui/packet_source.rb +161 -0
- data/lib/vanken/ui/selection.rb +91 -0
- data/lib/vanken/version.rb +5 -0
- data/lib/vanken.rb +17 -0
- data/packaging/README.md +33 -0
- data/sig/generated/vanken/app/capture_controller.rbs +58 -0
- data/sig/generated/vanken/app/document.rbs +117 -0
- data/sig/generated/vanken/app/document_jobs.rbs +27 -0
- data/sig/generated/vanken/capture/analyzer.rbs +11 -0
- data/sig/generated/vanken/capture/analyzer_process.rbs +17 -0
- data/sig/generated/vanken/capture/analyzer_wire.rbs +19 -0
- data/sig/generated/vanken/capture/analyzer_worker.rbs +45 -0
- data/sig/generated/vanken/capture/control_protocol.rbs +17 -0
- data/sig/generated/vanken/capture/filter_worker.rbs +51 -0
- data/sig/generated/vanken/capture/helper_main.rbs +23 -0
- data/sig/generated/vanken/capture/helper_options.rbs +27 -0
- data/sig/generated/vanken/capture/launcher.rbs +60 -0
- data/sig/generated/vanken/capture/privileges.rbs +12 -0
- data/sig/generated/vanken/capture/receiver.rbs +15 -0
- data/sig/generated/vanken/cli.rbs +9 -0
- data/sig/generated/vanken/config/log.rbs +9 -0
- data/sig/generated/vanken/config/preferences.rbs +49 -0
- data/sig/generated/vanken/core/display_filter/compiler.rbs +45 -0
- data/sig/generated/vanken/core/display_filter/errors.rbs +16 -0
- data/sig/generated/vanken/core/display_filter/field_resolver.rbs +48 -0
- data/sig/generated/vanken/core/display_filter/lexer.rbs +49 -0
- data/sig/generated/vanken/core/display_filter/parser.rbs +95 -0
- data/sig/generated/vanken/core/display_filter/types.rbs +45 -0
- data/sig/generated/vanken/core/frame.rbs +63 -0
- data/sig/generated/vanken/core/frame_store.rbs +65 -0
- data/sig/generated/vanken/core/frame_view.rbs +36 -0
- data/sig/generated/vanken/core/stores.rbs +110 -0
- data/sig/generated/vanken/errors.rbs +18 -0
- data/sig/generated/vanken/gateway/capture_filter.rbs +17 -0
- data/sig/generated/vanken/gateway/detail_builder.rbs +21 -0
- data/sig/generated/vanken/gateway/dissector.rbs +113 -0
- data/sig/generated/vanken/gateway/file_reader.rbs +53 -0
- data/sig/generated/vanken/gateway/file_writer.rbs +27 -0
- data/sig/generated/vanken/gateway/interfaces.rbs +16 -0
- data/sig/generated/vanken/gateway/live_capture.rbs +48 -0
- data/sig/generated/vanken/gateway/packet_snapshot.rbs +48 -0
- data/sig/generated/vanken/ui/actions.rbs +9 -0
- data/sig/generated/vanken/ui/application.rbs +85 -0
- data/sig/generated/vanken/ui/dialogs.rbs +21 -0
- data/sig/generated/vanken/ui/file_operations.rbs +25 -0
- data/sig/generated/vanken/ui/filter_operations.rbs +33 -0
- data/sig/generated/vanken/ui/main_view.rbs +21 -0
- data/sig/generated/vanken/ui/packet_source.rbs +40 -0
- data/sig/generated/vanken/ui/selection.rbs +23 -0
- data/sig/generated/vanken/version.rbs +5 -0
- data/sig/vanken.rbs +25 -0
- metadata +192 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module UI
|
|
5
|
+
module Selection
|
|
6
|
+
def select_packet(number)
|
|
7
|
+
doc = document
|
|
8
|
+
return unless doc && number.is_a?(Integer) && number.between?(1, doc.count)
|
|
9
|
+
@selection_generation += 1
|
|
10
|
+
generation = @selection_generation
|
|
11
|
+
@app.executor.background do
|
|
12
|
+
nodes = doc.details(number)
|
|
13
|
+
bytes = doc.store.read(number).bytes
|
|
14
|
+
@app.executor.post do
|
|
15
|
+
next unless generation == @selection_generation && document.equal?(doc)
|
|
16
|
+
update { |state| state.merge!(number: number, node: nil, details: nodes, bytes: bytes) }
|
|
17
|
+
@tree.replace(nodes)
|
|
18
|
+
@hex.bytes = bytes
|
|
19
|
+
end
|
|
20
|
+
rescue StandardError => error
|
|
21
|
+
@app.executor.post { show_error(error) if generation == @selection_generation }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
def select_detail(node)
|
|
25
|
+
return unless node.is_a?(Core::DetailNode)
|
|
26
|
+
update { |state| state[:node] = node }
|
|
27
|
+
@hex.highlights = if node.source == :frame && node.offset && node.length.positive?
|
|
28
|
+
finish = [node.offset + node.length, selected_bytes.bytesize].min
|
|
29
|
+
layer = detail_nodes.drop(1).find { |item| item.source == :frame && item.children.any? && item.descendants.include?(node) }
|
|
30
|
+
highlights = []
|
|
31
|
+
if layer&.offset && layer.length.positive?
|
|
32
|
+
highlights << {range: layer.offset...[layer.offset + layer.length, selected_bytes.bytesize].min, tone: :secondary}
|
|
33
|
+
end
|
|
34
|
+
highlights << {range: node.offset...finish, tone: :primary} if finish > node.offset
|
|
35
|
+
highlights
|
|
36
|
+
else
|
|
37
|
+
[]
|
|
38
|
+
end
|
|
39
|
+
@hex.scroll_to_offset(node.offset) if node.offset && node.offset < selected_bytes.bytesize && node.source == :frame
|
|
40
|
+
end
|
|
41
|
+
def select_bytes(range)
|
|
42
|
+
matches = detail_nodes.flat_map(&:descendants).select { |node| node.source == :frame && node.offset && node.length.positive? && range.begin.between?(node.offset, node.offset + node.length - 1) }
|
|
43
|
+
node = matches.min_by { |item| [item.length, item.field ? 0 : 1] }
|
|
44
|
+
return unless node
|
|
45
|
+
select_detail(node)
|
|
46
|
+
parent = detail_nodes.find { |item| item.descendants.include?(node) }
|
|
47
|
+
@tree.expand(parent.id) if parent
|
|
48
|
+
@tree.select_id(node.id)
|
|
49
|
+
end
|
|
50
|
+
def navigate(delta)
|
|
51
|
+
return unless document && document.displayed_count.positive?
|
|
52
|
+
current = document.display_numbers.index(selected_number) || 0
|
|
53
|
+
index = (current + delta).clamp(0, document.displayed_count - 1)
|
|
54
|
+
@table.select(index)
|
|
55
|
+
@table.scroll_to(index, align: :nearest)
|
|
56
|
+
end
|
|
57
|
+
def first_packet
|
|
58
|
+
return unless document&.displayed_count&.positive?
|
|
59
|
+
@table.select(0)
|
|
60
|
+
@table.scroll_to(0)
|
|
61
|
+
end
|
|
62
|
+
def last_packet
|
|
63
|
+
return unless document&.displayed_count&.positive?
|
|
64
|
+
@table.select(document.displayed_count - 1)
|
|
65
|
+
@table.scroll_to(document.displayed_count - 1)
|
|
66
|
+
end
|
|
67
|
+
def go_to_packet
|
|
68
|
+
path_dialog("パケットへ移動") do |value|
|
|
69
|
+
number = Integer(value, 10)
|
|
70
|
+
index = document&.display_numbers&.index(number)
|
|
71
|
+
raise Vanken::Error, "指定したパケットは表示されていません" unless index
|
|
72
|
+
@table.select(index)
|
|
73
|
+
@table.scroll_to(index, align: :center)
|
|
74
|
+
dismiss_dialog
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
def copy_bytes(format = :hex)
|
|
78
|
+
range = @hex.selection || (0...selected_bytes.bytesize)
|
|
79
|
+
range = 0...selected_bytes.bytesize if range.size.zero?
|
|
80
|
+
bytes = selected_bytes.byteslice(range) || "".b
|
|
81
|
+
text = case format
|
|
82
|
+
when :text then bytes.dup.force_encoding(Encoding::UTF_8).scrub
|
|
83
|
+
when :escaped then bytes.bytes.map { |byte| byte.between?(32, 126) && ![34, 92].include?(byte) ? byte.chr : Kernel.format("\\x%02x", byte) }.join
|
|
84
|
+
when :dump then bytes.bytes.each_slice(16).with_index.map { |row, index| Kernel.format("%04x %s", range.begin + (index * 16), row.map { |byte| Kernel.format("%02x", byte) }.join(" ")) }.join("\n")
|
|
85
|
+
else bytes.unpack1("H*").scan(/../).join(" ")
|
|
86
|
+
end
|
|
87
|
+
copy_text(text)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
data/lib/vanken.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "vanken/version"
|
|
4
|
+
|
|
5
|
+
require_relative "vanken/errors"
|
|
6
|
+
|
|
7
|
+
require "time"
|
|
8
|
+
require_relative "vanken/core/frame"
|
|
9
|
+
require_relative "vanken/core/frame_store"
|
|
10
|
+
require_relative "vanken/core/stores"
|
|
11
|
+
require_relative "vanken/config/preferences"
|
|
12
|
+
require_relative "vanken/gateway/dissector"
|
|
13
|
+
require_relative "vanken/gateway/file_reader"
|
|
14
|
+
require_relative "vanken/gateway/file_writer"
|
|
15
|
+
require_relative "vanken/gateway/detail_builder"
|
|
16
|
+
require_relative "vanken/app/document"
|
|
17
|
+
require_relative "vanken/cli"
|
data/packaging/README.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Live capture permissions
|
|
2
|
+
|
|
3
|
+
The application runs as your normal user. The capture helper opens the capture device, drops supplementary groups and both real and effective group/user IDs, and writes pcapng to stdout. The interpreter, helper, libraries, gems, and every parent directory of the privileged wrapper must be owned by root and must not be writable by group or other users.
|
|
4
|
+
|
|
5
|
+
On macOS, grant the intended capture group access to `/dev/bpf*` using an administrator-managed startup configuration. Once `vanken-capture --check --interface lo0` reports `"direct":true`, Vanken can capture without sudo. Device permissions may need to be restored after a reboot.
|
|
6
|
+
|
|
7
|
+
For Linux, an administrator can install an isolated Ruby runtime and the required redhound gem under a root-owned prefix, copy `lib/` and `exe/vanken-capture` into `/usr/local/libexec/vanken/`, and install this fixed-path wrapper. Replace the runtime and gem paths below with the actual root-owned installation paths:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
#!/bin/sh
|
|
11
|
+
exec /usr/bin/env -i PATH=/usr/bin:/bin \
|
|
12
|
+
GEM_HOME=/opt/vanken-ruby/gems GEM_PATH=/opt/vanken-ruby/gems \
|
|
13
|
+
/opt/vanken-ruby/bin/ruby -I /usr/local/libexec/vanken/lib \
|
|
14
|
+
/usr/local/libexec/vanken/helper "$@"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Save it as `/usr/local/libexec/vanken/vanken-capture`, owned by root with mode `0755`. The executable saved as `helper` is the packaged `exe/vanken-capture`; `lib/` is the packaged Ruby library directory. Install redhound `2.0.0.rc2` and the runtime's standard-library gems in the isolated gem directory. Keep this tree separate from development checkouts, user gem homes, rbenv installations owned by users, and plugins.
|
|
18
|
+
|
|
19
|
+
An administrator may grant a dedicated capture group access through sudoers:
|
|
20
|
+
|
|
21
|
+
```sudoers
|
|
22
|
+
%vanken ALL=(root) NOPASSWD: /usr/local/libexec/vanken/vanken-capture
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Validate the rule with `visudo`. Members of this group can capture network traffic. Vanken supplies `--drop-to UID:GID` for the invoking user and only invokes the fixed wrapper through sudo or pkexec. A polkit policy must likewise allow that fixed path; an optional askpass helper must meet the same ownership requirements. Vanken rejects elevation of a development checkout and does not grant capabilities to a general-purpose Ruby interpreter.
|
|
26
|
+
|
|
27
|
+
`vanken-capture --list-interfaces` lists interfaces without elevated privileges. `vanken-capture --check --interface IF` checks direct device access. A helper invoked manually with sudo needs `--drop-to` because the wrapper clears the environment:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
sudo /usr/local/libexec/vanken/vanken-capture -i eth0 --drop-to "$(id -u):$(id -g)" > capture.pcapng
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
For the isolated Linux integration check, run `script/capture-ci.sh` with Docker available. It creates a disposable privileged container, installs root-owned Ruby/gems and the fixed helper wrapper, creates the `vanken-test` namespace and a veth pair, then runs the tests as an unprivileged user. The tests verify UID dropping, packet capture, statistics, and clean shutdown. The nightly `Live capture` workflow runs this same command.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Generated from lib/vanken/app/capture_controller.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module App
|
|
5
|
+
class CaptureController
|
|
6
|
+
class Error < Vanken::CaptureError
|
|
7
|
+
attr_reader code: untyped
|
|
8
|
+
|
|
9
|
+
def initialize: (untyped message, ?code: untyped) -> untyped
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def initialize: (?launcher: untyped, ?preferences: untyped, ?on_update: untyped, ?on_document: untyped) -> untyped
|
|
13
|
+
|
|
14
|
+
def state: () -> untyped
|
|
15
|
+
|
|
16
|
+
def stats: () -> untyped
|
|
17
|
+
|
|
18
|
+
def error: () -> untyped
|
|
19
|
+
|
|
20
|
+
def warning: () -> untyped
|
|
21
|
+
|
|
22
|
+
def document: () -> untyped
|
|
23
|
+
|
|
24
|
+
def options: () -> untyped
|
|
25
|
+
|
|
26
|
+
def capturing?: () -> untyped
|
|
27
|
+
|
|
28
|
+
def running?: () -> untyped
|
|
29
|
+
|
|
30
|
+
def snapshot: () -> untyped
|
|
31
|
+
|
|
32
|
+
def start: (untyped options) -> untyped
|
|
33
|
+
|
|
34
|
+
def stop: () -> untyped
|
|
35
|
+
|
|
36
|
+
def wait: (?untyped timeout, **untyped options) -> untyped
|
|
37
|
+
|
|
38
|
+
alias await wait
|
|
39
|
+
|
|
40
|
+
def close: () -> untyped
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def run: () -> untyped
|
|
45
|
+
|
|
46
|
+
def consume_control: (untyped io) -> untyped
|
|
47
|
+
|
|
48
|
+
# Called under @mutex; the helper stop runs separately so UI callbacks never wait for it.
|
|
49
|
+
def stop_helper: () -> untyped
|
|
50
|
+
|
|
51
|
+
def fail_capture: (untyped error, ?replace: untyped) -> untyped
|
|
52
|
+
|
|
53
|
+
def thread: () ?{ (?) -> untyped } -> untyped
|
|
54
|
+
|
|
55
|
+
def notify: () -> untyped
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Generated from lib/vanken/app/document.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module App
|
|
5
|
+
class Document
|
|
6
|
+
include DocumentJobs
|
|
7
|
+
|
|
8
|
+
attr_reader store: untyped
|
|
9
|
+
|
|
10
|
+
attr_reader columns: untyped
|
|
11
|
+
|
|
12
|
+
attr_reader annotations: untyped
|
|
13
|
+
|
|
14
|
+
attr_reader error: untyped
|
|
15
|
+
|
|
16
|
+
attr_reader path: untyped
|
|
17
|
+
|
|
18
|
+
attr_reader source: untyped
|
|
19
|
+
|
|
20
|
+
attr_reader progress: untyped
|
|
21
|
+
|
|
22
|
+
attr_reader filter: untyped
|
|
23
|
+
|
|
24
|
+
attr_reader marked: untyped
|
|
25
|
+
|
|
26
|
+
attr_reader ignored: untyped
|
|
27
|
+
|
|
28
|
+
attr_reader time_references: untyped
|
|
29
|
+
|
|
30
|
+
attr_reader catalog: untyped
|
|
31
|
+
|
|
32
|
+
attr_reader analysis_options: untyped
|
|
33
|
+
|
|
34
|
+
attr_accessor frame_latency: untyped
|
|
35
|
+
|
|
36
|
+
attr_accessor scanner: untyped
|
|
37
|
+
|
|
38
|
+
def initialize: (?on_update: untyped, ?preferences: untyped, ?store: untyped, ?scanner: untyped, ?process_analysis: untyped) -> untyped
|
|
39
|
+
|
|
40
|
+
def open: (untyped path) -> untyped
|
|
41
|
+
|
|
42
|
+
def ingest: (untyped source, ?live: untyped) -> untyped
|
|
43
|
+
|
|
44
|
+
def count: () -> untyped
|
|
45
|
+
|
|
46
|
+
def displayed_count: () -> untyped
|
|
47
|
+
|
|
48
|
+
def number_at: (untyped index) -> untyped
|
|
49
|
+
|
|
50
|
+
def display_numbers: () -> untyped
|
|
51
|
+
|
|
52
|
+
def dirty?: () -> untyped
|
|
53
|
+
|
|
54
|
+
def loading?: () -> untyped
|
|
55
|
+
|
|
56
|
+
def cancelled?: () -> untyped
|
|
57
|
+
|
|
58
|
+
def received?: () -> untyped
|
|
59
|
+
|
|
60
|
+
def complete?: () -> untyped
|
|
61
|
+
|
|
62
|
+
def closing?: () -> untyped
|
|
63
|
+
|
|
64
|
+
def stream_frames: (untyped stream) -> untyped
|
|
65
|
+
|
|
66
|
+
def packet: (untyped number) -> untyped
|
|
67
|
+
|
|
68
|
+
# @rbs (Integer number) -> Gateway::PacketSnapshot?
|
|
69
|
+
def packet_snapshot: (Integer number) -> Gateway::PacketSnapshot?
|
|
70
|
+
|
|
71
|
+
def view: (untyped number, ?packet: untyped, ?snapshot: untyped) -> untyped
|
|
72
|
+
|
|
73
|
+
def row: (untyped number) -> untyped
|
|
74
|
+
|
|
75
|
+
def details: (untyped number) -> untyped
|
|
76
|
+
|
|
77
|
+
def publish: (untyped number, untyped packet) -> untyped
|
|
78
|
+
|
|
79
|
+
def publish_failure: (untyped number, untyped error) -> untyped
|
|
80
|
+
|
|
81
|
+
# Only immutable context for this unpublished range crosses the worker pipe.
|
|
82
|
+
def analysis_configuration: (untyped first, untyped last) -> untyped
|
|
83
|
+
|
|
84
|
+
def publish_analysis_batch: (untyped batch, untyped analyzer, untyped generation, ?context_token: untyped) -> untyped
|
|
85
|
+
|
|
86
|
+
def receiving_done: () -> untyped
|
|
87
|
+
|
|
88
|
+
def analyzing_done: () -> untyped
|
|
89
|
+
|
|
90
|
+
def signal: () -> untyped
|
|
91
|
+
|
|
92
|
+
def wait_for_frames: () -> untyped
|
|
93
|
+
|
|
94
|
+
def fail: (untyped error) -> untyped
|
|
95
|
+
|
|
96
|
+
def time_value: (untyped number, ?untyped format, ?references: untyped) -> untyped
|
|
97
|
+
|
|
98
|
+
def cancel: () -> untyped
|
|
99
|
+
|
|
100
|
+
def wait: (?untyped timeout) -> untyped
|
|
101
|
+
|
|
102
|
+
def close: () -> untyped
|
|
103
|
+
|
|
104
|
+
private
|
|
105
|
+
|
|
106
|
+
def persisted_summary: (untyped number) -> untyped
|
|
107
|
+
|
|
108
|
+
def persisted_details: (untyped number) -> untyped
|
|
109
|
+
|
|
110
|
+
def thread: () ?{ (?) -> untyped } -> untyped
|
|
111
|
+
|
|
112
|
+
def notify: (?force: untyped) -> untyped
|
|
113
|
+
|
|
114
|
+
def restore_nodes: (untyped nodes) -> untyped
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Generated from lib/vanken/app/document_jobs.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module App
|
|
5
|
+
module DocumentJobs
|
|
6
|
+
def apply_filter: (untyped expression) -> untyped
|
|
7
|
+
|
|
8
|
+
def cancel_scan: () -> untyped
|
|
9
|
+
|
|
10
|
+
def filter_payload: (untyped first, untyped last, ?expression: untyped, ?snapshot: untyped) -> untyped
|
|
11
|
+
|
|
12
|
+
def displayed_predecessor: (untyped number, untyped snapshot) -> untyped
|
|
13
|
+
|
|
14
|
+
def sort: (untyped key, ?untyped direction) -> untyped
|
|
15
|
+
|
|
16
|
+
def save: (untyped path, ?format: untyped, ?numbers: untyped) -> untyped
|
|
17
|
+
|
|
18
|
+
def wait_for_save: (?untyped timeout) -> untyped
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def stale_job?: (untyped generation) -> untyped
|
|
23
|
+
|
|
24
|
+
def filter_snapshot: (?displayed_delta: untyped) -> untyped
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Generated from lib/vanken/capture/analyzer_process.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module Capture
|
|
5
|
+
class AnalyzerProcess
|
|
6
|
+
attr_reader pid: untyped
|
|
7
|
+
|
|
8
|
+
def initialize: (untyped document, ?verify_checksums: untyped) -> untyped
|
|
9
|
+
|
|
10
|
+
def run: () -> untyped
|
|
11
|
+
|
|
12
|
+
def request: (untyped value) -> untyped
|
|
13
|
+
|
|
14
|
+
def shutdown: () -> untyped
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Generated from lib/vanken/capture/analyzer_wire.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module Capture
|
|
5
|
+
# These pipes are private to the same-user worker. Marshal.load only receives
|
|
6
|
+
# protocol messages serialized by our child, never an external serialized object.
|
|
7
|
+
module AnalyzerWire
|
|
8
|
+
VERSION: ::Integer
|
|
9
|
+
|
|
10
|
+
MAX_BYTES: untyped
|
|
11
|
+
|
|
12
|
+
def self.write: (untyped io, untyped value) -> untyped
|
|
13
|
+
|
|
14
|
+
def self.read: (untyped io, ?cancelled: untyped) -> untyped
|
|
15
|
+
|
|
16
|
+
def self.exact: (untyped io, untyped length, untyped cancelled) -> untyped
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Generated from lib/vanken/capture/analyzer_worker.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module Capture
|
|
5
|
+
class AnalyzerWorker
|
|
6
|
+
class Reader
|
|
7
|
+
attr_accessor limit: untyped
|
|
8
|
+
|
|
9
|
+
attr_accessor interfaces: untyped
|
|
10
|
+
|
|
11
|
+
def initialize: (untyped directory) -> untyped
|
|
12
|
+
|
|
13
|
+
def metadata: (untyped number) -> untyped
|
|
14
|
+
|
|
15
|
+
def read: (untyped number) -> untyped
|
|
16
|
+
|
|
17
|
+
def close: () -> untyped
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def read_at: (untyped io, untyped size, untyped offset) -> untyped
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class Context
|
|
25
|
+
attr_reader store: untyped
|
|
26
|
+
|
|
27
|
+
def initialize: (untyped store) -> untyped
|
|
28
|
+
|
|
29
|
+
def time_value: (untyped number, untyped _format, references: untyped) -> untyped
|
|
30
|
+
|
|
31
|
+
def displayed_predecessor: (untyped number, untyped snapshot) -> untyped
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def initialize: (untyped request) -> untyped
|
|
35
|
+
|
|
36
|
+
def analyze: (untyped request) -> untyped
|
|
37
|
+
|
|
38
|
+
def matches: (untyped request) -> untyped
|
|
39
|
+
|
|
40
|
+
def close: () -> untyped
|
|
41
|
+
|
|
42
|
+
def self.run: () -> untyped
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Generated from lib/vanken/capture/control_protocol.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module Capture
|
|
5
|
+
class ControlProtocol
|
|
6
|
+
TYPES: untyped
|
|
7
|
+
|
|
8
|
+
MAX_LINE_BYTES: ::Integer
|
|
9
|
+
|
|
10
|
+
def initialize: (untyped io) -> untyped
|
|
11
|
+
|
|
12
|
+
def write: (untyped type, **untyped fields) -> untyped
|
|
13
|
+
|
|
14
|
+
def self.parse: (untyped line) -> untyped
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Generated from lib/vanken/capture/filter_worker.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module Capture
|
|
5
|
+
class FilterWorker
|
|
6
|
+
class Reader
|
|
7
|
+
attr_reader count: untyped
|
|
8
|
+
|
|
9
|
+
def initialize: (untyped directory, untyped annotations_json) -> untyped
|
|
10
|
+
|
|
11
|
+
def metadata: (untyped number) -> untyped
|
|
12
|
+
|
|
13
|
+
def frame: (untyped number) -> untyped
|
|
14
|
+
|
|
15
|
+
def annotation: (untyped number) -> untyped
|
|
16
|
+
|
|
17
|
+
def packet_snapshot: (untyped number) -> untyped
|
|
18
|
+
|
|
19
|
+
def close: () -> untyped
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def open_file: (untyped path) -> untyped
|
|
24
|
+
|
|
25
|
+
def read_exact: (untyped io, untyped length, untyped offset) -> untyped
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class View
|
|
29
|
+
def initialize: (untyped reader, untyped number, untyped dissector, untyped context) -> untyped
|
|
30
|
+
|
|
31
|
+
def layer?: (untyped name) -> untyped
|
|
32
|
+
|
|
33
|
+
def field_type: (untyped name) -> untyped
|
|
34
|
+
|
|
35
|
+
def values: (untyped name) -> untyped
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def packet: () -> untyped
|
|
40
|
+
|
|
41
|
+
def annotation: () -> untyped
|
|
42
|
+
|
|
43
|
+
def delta: (untyped previous) -> untyped
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.call: (untyped payload) -> untyped
|
|
47
|
+
|
|
48
|
+
def self.validate: (untyped payload) -> untyped
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated from lib/vanken/capture/helper_main.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module Capture
|
|
5
|
+
class HelperMain
|
|
6
|
+
def initialize: (?stdin: untyped, ?stdout: untyped, ?stderr: untyped, ?env: untyped) -> untyped
|
|
7
|
+
|
|
8
|
+
def run: (untyped argv) -> untyped
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def capture: (untyped options) -> untyped
|
|
13
|
+
|
|
14
|
+
def check: (untyped options) -> untyped
|
|
15
|
+
|
|
16
|
+
def drop_target: () -> untyped
|
|
17
|
+
|
|
18
|
+
def failure: (untyped code, untyped message, untyped exit_code) -> untyped
|
|
19
|
+
|
|
20
|
+
def monotonic: () -> untyped
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Generated from lib/vanken/capture/helper_options.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module Capture
|
|
5
|
+
class HelperOptions
|
|
6
|
+
attr_reader command: untyped
|
|
7
|
+
|
|
8
|
+
attr_reader capture: untyped
|
|
9
|
+
|
|
10
|
+
attr_reader drop_to: untyped
|
|
11
|
+
|
|
12
|
+
attr_reader stats_interval: untyped
|
|
13
|
+
|
|
14
|
+
attr_reader flush_interval: untyped
|
|
15
|
+
|
|
16
|
+
def self.parse: (untyped argv) -> untyped
|
|
17
|
+
|
|
18
|
+
def initialize: () -> untyped
|
|
19
|
+
|
|
20
|
+
def parse: (untyped argv) -> untyped
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def bounded: (untyped value, untyped range, untyped name) -> untyped
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Generated from lib/vanken/capture/launcher.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module Capture
|
|
5
|
+
class Launcher
|
|
6
|
+
class Unavailable < StandardError
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
WRAPPER: ::String
|
|
10
|
+
|
|
11
|
+
SAFE_ENV: untyped
|
|
12
|
+
|
|
13
|
+
class Handle
|
|
14
|
+
attr_reader pid: untyped
|
|
15
|
+
|
|
16
|
+
attr_reader stdin: untyped
|
|
17
|
+
|
|
18
|
+
attr_reader stdout: untyped
|
|
19
|
+
|
|
20
|
+
attr_reader stderr: untyped
|
|
21
|
+
|
|
22
|
+
attr_reader status: untyped
|
|
23
|
+
|
|
24
|
+
def initialize: (untyped pid, untyped stdin, untyped stdout, untyped stderr) -> untyped
|
|
25
|
+
|
|
26
|
+
def wait: (?timeout: untyped) -> untyped
|
|
27
|
+
|
|
28
|
+
def stop: (?timeout: untyped) -> untyped
|
|
29
|
+
|
|
30
|
+
def close: () -> untyped
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def signal: (untyped signal) -> untyped
|
|
35
|
+
|
|
36
|
+
def monotonic: () -> untyped
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def initialize: (?strategy: untyped, ?wrapper: untyped, ?direct_command: untyped, ?askpass: untyped, ?env: untyped) -> untyped
|
|
40
|
+
|
|
41
|
+
def launch: (?untyped options, ?strategy: untyped) -> untyped
|
|
42
|
+
|
|
43
|
+
def command_for: (untyped strategy, untyped args) -> untyped
|
|
44
|
+
|
|
45
|
+
def self.trusted_path?: (untyped path) -> untyped
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def spawn: (untyped command, ?untyped extra_env) -> untyped
|
|
50
|
+
|
|
51
|
+
def automatic_strategy: (untyped args) -> untyped
|
|
52
|
+
|
|
53
|
+
def trusted_path!: (untyped path) -> untyped
|
|
54
|
+
|
|
55
|
+
def executable: (untyped name) -> untyped
|
|
56
|
+
|
|
57
|
+
def capture_argv: (untyped options) -> untyped
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Generated from lib/vanken/capture/receiver.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Vanken
|
|
4
|
+
module Capture
|
|
5
|
+
class Receiver
|
|
6
|
+
def initialize: (untyped document, untyped source) -> untyped
|
|
7
|
+
|
|
8
|
+
def run: () -> untyped
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def each_frame: () -> untyped
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|