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.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +5 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +84 -0
  5. data/docs/filters.md +25 -0
  6. data/docs/performance.md +113 -0
  7. data/docs/releases.md +15 -0
  8. data/docs/upstream.md +32 -0
  9. data/exe/vanken +5 -0
  10. data/exe/vanken-capture +6 -0
  11. data/lib/vanken/app/capture_controller.rb +197 -0
  12. data/lib/vanken/app/document.rb +305 -0
  13. data/lib/vanken/app/document_jobs.rb +199 -0
  14. data/lib/vanken/capture/analyzer.rb +44 -0
  15. data/lib/vanken/capture/analyzer_process.rb +91 -0
  16. data/lib/vanken/capture/analyzer_wire.rb +42 -0
  17. data/lib/vanken/capture/analyzer_worker.rb +153 -0
  18. data/lib/vanken/capture/control_protocol.rb +32 -0
  19. data/lib/vanken/capture/filter_worker.rb +180 -0
  20. data/lib/vanken/capture/helper_main.rb +137 -0
  21. data/lib/vanken/capture/helper_options.rb +70 -0
  22. data/lib/vanken/capture/launcher.rb +181 -0
  23. data/lib/vanken/capture/privileges.rb +24 -0
  24. data/lib/vanken/capture/receiver.rb +39 -0
  25. data/lib/vanken/cli.rb +68 -0
  26. data/lib/vanken/config/log.rb +19 -0
  27. data/lib/vanken/config/preferences.rb +126 -0
  28. data/lib/vanken/core/display_filter/compiler.rb +108 -0
  29. data/lib/vanken/core/display_filter/errors.rb +19 -0
  30. data/lib/vanken/core/display_filter/field_resolver.rb +86 -0
  31. data/lib/vanken/core/display_filter/lexer.rb +124 -0
  32. data/lib/vanken/core/display_filter/parser.rb +157 -0
  33. data/lib/vanken/core/display_filter/types.rb +176 -0
  34. data/lib/vanken/core/frame.rb +33 -0
  35. data/lib/vanken/core/frame_store.rb +179 -0
  36. data/lib/vanken/core/frame_view.rb +68 -0
  37. data/lib/vanken/core/stores.rb +192 -0
  38. data/lib/vanken/errors.rb +9 -0
  39. data/lib/vanken/gateway/capture_filter.rb +30 -0
  40. data/lib/vanken/gateway/detail_builder.rb +63 -0
  41. data/lib/vanken/gateway/dissector.rb +176 -0
  42. data/lib/vanken/gateway/file_reader.rb +153 -0
  43. data/lib/vanken/gateway/file_writer.rb +64 -0
  44. data/lib/vanken/gateway/interfaces.rb +30 -0
  45. data/lib/vanken/gateway/live_capture.rb +79 -0
  46. data/lib/vanken/gateway/packet_snapshot.rb +89 -0
  47. data/lib/vanken/ui/actions.rb +50 -0
  48. data/lib/vanken/ui/application.rb +205 -0
  49. data/lib/vanken/ui/dialogs.rb +89 -0
  50. data/lib/vanken/ui/file_operations.rb +113 -0
  51. data/lib/vanken/ui/filter_operations.rb +120 -0
  52. data/lib/vanken/ui/main_view.rb +113 -0
  53. data/lib/vanken/ui/packet_source.rb +161 -0
  54. data/lib/vanken/ui/selection.rb +91 -0
  55. data/lib/vanken/version.rb +5 -0
  56. data/lib/vanken.rb +17 -0
  57. data/packaging/README.md +33 -0
  58. data/sig/generated/vanken/app/capture_controller.rbs +58 -0
  59. data/sig/generated/vanken/app/document.rbs +117 -0
  60. data/sig/generated/vanken/app/document_jobs.rbs +27 -0
  61. data/sig/generated/vanken/capture/analyzer.rbs +11 -0
  62. data/sig/generated/vanken/capture/analyzer_process.rbs +17 -0
  63. data/sig/generated/vanken/capture/analyzer_wire.rbs +19 -0
  64. data/sig/generated/vanken/capture/analyzer_worker.rbs +45 -0
  65. data/sig/generated/vanken/capture/control_protocol.rbs +17 -0
  66. data/sig/generated/vanken/capture/filter_worker.rbs +51 -0
  67. data/sig/generated/vanken/capture/helper_main.rbs +23 -0
  68. data/sig/generated/vanken/capture/helper_options.rbs +27 -0
  69. data/sig/generated/vanken/capture/launcher.rbs +60 -0
  70. data/sig/generated/vanken/capture/privileges.rbs +12 -0
  71. data/sig/generated/vanken/capture/receiver.rbs +15 -0
  72. data/sig/generated/vanken/cli.rbs +9 -0
  73. data/sig/generated/vanken/config/log.rbs +9 -0
  74. data/sig/generated/vanken/config/preferences.rbs +49 -0
  75. data/sig/generated/vanken/core/display_filter/compiler.rbs +45 -0
  76. data/sig/generated/vanken/core/display_filter/errors.rbs +16 -0
  77. data/sig/generated/vanken/core/display_filter/field_resolver.rbs +48 -0
  78. data/sig/generated/vanken/core/display_filter/lexer.rbs +49 -0
  79. data/sig/generated/vanken/core/display_filter/parser.rbs +95 -0
  80. data/sig/generated/vanken/core/display_filter/types.rbs +45 -0
  81. data/sig/generated/vanken/core/frame.rbs +63 -0
  82. data/sig/generated/vanken/core/frame_store.rbs +65 -0
  83. data/sig/generated/vanken/core/frame_view.rbs +36 -0
  84. data/sig/generated/vanken/core/stores.rbs +110 -0
  85. data/sig/generated/vanken/errors.rbs +18 -0
  86. data/sig/generated/vanken/gateway/capture_filter.rbs +17 -0
  87. data/sig/generated/vanken/gateway/detail_builder.rbs +21 -0
  88. data/sig/generated/vanken/gateway/dissector.rbs +113 -0
  89. data/sig/generated/vanken/gateway/file_reader.rbs +53 -0
  90. data/sig/generated/vanken/gateway/file_writer.rbs +27 -0
  91. data/sig/generated/vanken/gateway/interfaces.rbs +16 -0
  92. data/sig/generated/vanken/gateway/live_capture.rbs +48 -0
  93. data/sig/generated/vanken/gateway/packet_snapshot.rbs +48 -0
  94. data/sig/generated/vanken/ui/actions.rbs +9 -0
  95. data/sig/generated/vanken/ui/application.rbs +85 -0
  96. data/sig/generated/vanken/ui/dialogs.rbs +21 -0
  97. data/sig/generated/vanken/ui/file_operations.rbs +25 -0
  98. data/sig/generated/vanken/ui/filter_operations.rbs +33 -0
  99. data/sig/generated/vanken/ui/main_view.rbs +21 -0
  100. data/sig/generated/vanken/ui/packet_source.rbs +40 -0
  101. data/sig/generated/vanken/ui/selection.rbs +23 -0
  102. data/sig/generated/vanken/version.rbs +5 -0
  103. data/sig/vanken.rbs +25 -0
  104. 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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Vanken
4
+ VERSION = "0.1.0"
5
+ 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"
@@ -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,11 @@
1
+ # Generated from lib/vanken/capture/analyzer.rb with RBS::Inline
2
+
3
+ module Vanken
4
+ module Capture
5
+ class Analyzer
6
+ def initialize: (untyped document, untyped dissector) -> untyped
7
+
8
+ def run: () -> untyped
9
+ end
10
+ end
11
+ 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,12 @@
1
+ # Generated from lib/vanken/capture/privileges.rb with RBS::Inline
2
+
3
+ module Vanken
4
+ module Capture
5
+ module Privileges
6
+ class Error < StandardError
7
+ end
8
+
9
+ def self.drop!: (untyped uid, untyped gid) -> untyped
10
+ end
11
+ end
12
+ 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
@@ -0,0 +1,9 @@
1
+ # Generated from lib/vanken/cli.rb with RBS::Inline
2
+
3
+ module Vanken
4
+ module CLI
5
+ def self.start: (untyped argv, ?out: untyped, ?err: untyped) -> untyped
6
+
7
+ def self.print_columns: (untyped options, untyped out) -> untyped
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # Generated from lib/vanken/config/log.rb with RBS::Inline
2
+
3
+ module Vanken
4
+ module Config
5
+ module Log
6
+ def self.open: (?debug: untyped, ?directory: untyped) -> untyped
7
+ end
8
+ end
9
+ end