bin_struct 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/README.md +18 -0
- data/lib/bin_struct/abstract_tlv.rb +270 -0
- data/lib/bin_struct/array.rb +288 -0
- data/lib/bin_struct/cstring.rb +106 -0
- data/lib/bin_struct/enum.rb +200 -0
- data/lib/bin_struct/fieldable.rb +64 -0
- data/lib/bin_struct/fields.rb +612 -0
- data/lib/bin_struct/int.rb +514 -0
- data/lib/bin_struct/int_string.rb +99 -0
- data/lib/bin_struct/length_from.rb +51 -0
- data/lib/bin_struct/oui.rb +49 -0
- data/lib/bin_struct/string.rb +94 -0
- data/lib/bin_struct/version.rb +11 -0
- data/lib/bin_struct.rb +35 -0
- metadata +71 -0
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This file is part of BinStruct
|
4
|
+
# see https://github.com/lemontree55/bin_struct for more informations
|
5
|
+
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
7
|
+
# This program is published under MIT license.
|
8
|
+
|
9
|
+
require 'forwardable'
|
10
|
+
|
11
|
+
module BinStruct
|
12
|
+
# This class mimics regular String, but it is {Fieldable}.
|
13
|
+
# @author Sylvain Daubert
|
14
|
+
# @since 3.1.6 no more a subclass or regular String
|
15
|
+
class String
|
16
|
+
extend Forwardable
|
17
|
+
include Fieldable
|
18
|
+
include LengthFrom
|
19
|
+
|
20
|
+
def_delegators :@string, :[], :to_s, :length, :size, :inspect, :==,
|
21
|
+
:unpack, :force_encoding, :encoding, :index, :empty?,
|
22
|
+
:encode, :slice, :slice!, :[]=
|
23
|
+
|
24
|
+
# @return [::String]
|
25
|
+
attr_reader :string
|
26
|
+
# @return [Integer]
|
27
|
+
attr_reader :static_length
|
28
|
+
|
29
|
+
# @param [Hash] options
|
30
|
+
# @option options [Types::Int,Proc] :length_from object or proc from which
|
31
|
+
# takes length when reading
|
32
|
+
# @option options [Integer] :static_length set a static length for this string
|
33
|
+
def initialize(options = {})
|
34
|
+
register_internal_string(+'')
|
35
|
+
initialize_length_from(options)
|
36
|
+
@static_length = options[:static_length]
|
37
|
+
end
|
38
|
+
|
39
|
+
def initialize_copy(_orig)
|
40
|
+
@string = @string.dup
|
41
|
+
end
|
42
|
+
|
43
|
+
# @param [::String] str
|
44
|
+
# @return [String] self
|
45
|
+
def read(str)
|
46
|
+
s = read_with_length_from(str)
|
47
|
+
register_internal_string s
|
48
|
+
self
|
49
|
+
end
|
50
|
+
|
51
|
+
alias old_sz_to_read sz_to_read
|
52
|
+
private :old_sz_to_read
|
53
|
+
|
54
|
+
# Size to read.
|
55
|
+
# Computed from static_length or length_from, if defined.
|
56
|
+
# @return [Integer]
|
57
|
+
# @since 3.1.6
|
58
|
+
def sz_to_read
|
59
|
+
return static_length if static_length?
|
60
|
+
|
61
|
+
old_sz_to_read
|
62
|
+
end
|
63
|
+
|
64
|
+
# Say if a static length is defined
|
65
|
+
# @return [Boolean]
|
66
|
+
# @since 3.1.6
|
67
|
+
def static_length?
|
68
|
+
!static_length.nil?
|
69
|
+
end
|
70
|
+
|
71
|
+
def format_inspect
|
72
|
+
inspect
|
73
|
+
end
|
74
|
+
|
75
|
+
# Append the given string to String
|
76
|
+
# @param [#to_s] str
|
77
|
+
# @return [self]
|
78
|
+
def <<(str)
|
79
|
+
@string << str.to_s
|
80
|
+
self
|
81
|
+
end
|
82
|
+
|
83
|
+
alias sz length
|
84
|
+
alias to_human to_s
|
85
|
+
alias from_human read
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
def register_internal_string(str)
|
90
|
+
@string = str
|
91
|
+
BinStruct.force_binary(@string)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This file is part of BinStruct
|
4
|
+
# see https://github.com/lemontree55/bin_struct for more informations
|
5
|
+
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
7
|
+
# This program is published under MIT license.
|
8
|
+
|
9
|
+
module BinStruct
|
10
|
+
VERSION = '0.1.0'
|
11
|
+
end
|
data/lib/bin_struct.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This file is part of BinStruct
|
4
|
+
# see https://github.com/lemontree55/bin_struct for more informations
|
5
|
+
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
|
6
|
+
# Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
|
7
|
+
# This program is published under MIT license.
|
8
|
+
|
9
|
+
require_relative 'bin_struct/version'
|
10
|
+
|
11
|
+
# BinStruct module
|
12
|
+
# @author LemonTree55
|
13
|
+
module BinStruct
|
14
|
+
# BinStruct error class
|
15
|
+
class Error < StandardError; end
|
16
|
+
|
17
|
+
# Force binary encoding for +str+
|
18
|
+
# @param [String] str
|
19
|
+
# @return [String] binary encoded string
|
20
|
+
def self.force_binary(str)
|
21
|
+
str.dup.force_encoding(Encoding::BINARY)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
require_relative 'bin_struct/fieldable'
|
26
|
+
require_relative 'bin_struct/int'
|
27
|
+
require_relative 'bin_struct/enum'
|
28
|
+
require_relative 'bin_struct/fields'
|
29
|
+
require_relative 'bin_struct/length_from'
|
30
|
+
require_relative 'bin_struct/abstract_tlv'
|
31
|
+
require_relative 'bin_struct/array'
|
32
|
+
require_relative 'bin_struct/string'
|
33
|
+
require_relative 'bin_struct/cstring'
|
34
|
+
require_relative 'bin_struct/int_string'
|
35
|
+
require_relative 'bin_struct/oui'
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bin_struct
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- LemonTree55
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-07-16 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: 'BinStruct is a binary dissector and generator. It eases manipulating
|
14
|
+
complex binary data.
|
15
|
+
|
16
|
+
'
|
17
|
+
email:
|
18
|
+
- lenontree@proton.me
|
19
|
+
executables: []
|
20
|
+
extensions: []
|
21
|
+
extra_rdoc_files:
|
22
|
+
- README.md
|
23
|
+
files:
|
24
|
+
- CHANGELOG.md
|
25
|
+
- README.md
|
26
|
+
- lib/bin_struct.rb
|
27
|
+
- lib/bin_struct/abstract_tlv.rb
|
28
|
+
- lib/bin_struct/array.rb
|
29
|
+
- lib/bin_struct/cstring.rb
|
30
|
+
- lib/bin_struct/enum.rb
|
31
|
+
- lib/bin_struct/fieldable.rb
|
32
|
+
- lib/bin_struct/fields.rb
|
33
|
+
- lib/bin_struct/int.rb
|
34
|
+
- lib/bin_struct/int_string.rb
|
35
|
+
- lib/bin_struct/length_from.rb
|
36
|
+
- lib/bin_struct/oui.rb
|
37
|
+
- lib/bin_struct/string.rb
|
38
|
+
- lib/bin_struct/version.rb
|
39
|
+
homepage: https://github.com/lemontree55/bin_struct
|
40
|
+
licenses:
|
41
|
+
- MIT
|
42
|
+
metadata:
|
43
|
+
homepage_uri: https://github.com/lemontree55/bin_struct
|
44
|
+
source_code_uri: https://github.com/lemontree55/bin_struct
|
45
|
+
bug_tracker_uri: https://github.com/lemontree55/bin_struct/issues
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options:
|
48
|
+
- "--title"
|
49
|
+
- BinStruct
|
50
|
+
- "--main"
|
51
|
+
- README.md
|
52
|
+
- "--inline-source"
|
53
|
+
- "--quiet"
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 2.7.0
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
requirements: []
|
67
|
+
rubygems_version: 3.3.15
|
68
|
+
signing_key:
|
69
|
+
specification_version: 4
|
70
|
+
summary: Binary dissector and generator
|
71
|
+
test_files: []
|