packetgen 3.3.1 → 3.3.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.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +7 -7
  4. data/lib/packetgen/capture.rb +2 -1
  5. data/lib/packetgen/config.rb +2 -1
  6. data/lib/packetgen/header/arp.rb +2 -1
  7. data/lib/packetgen/header/asn1_base.rb +2 -1
  8. data/lib/packetgen/header/base.rb +4 -3
  9. data/lib/packetgen/header/bootp.rb +2 -1
  10. data/lib/packetgen/header/dhcp/option.rb +2 -1
  11. data/lib/packetgen/header/dhcp/options.rb +2 -1
  12. data/lib/packetgen/header/dhcp.rb +2 -1
  13. data/lib/packetgen/header/dhcpv6/duid.rb +2 -1
  14. data/lib/packetgen/header/dhcpv6/option.rb +2 -1
  15. data/lib/packetgen/header/dhcpv6/options.rb +2 -1
  16. data/lib/packetgen/header/dhcpv6/relay.rb +2 -1
  17. data/lib/packetgen/header/dhcpv6.rb +2 -1
  18. data/lib/packetgen/header/dns/name.rb +2 -1
  19. data/lib/packetgen/header/dns/opt.rb +3 -2
  20. data/lib/packetgen/header/dns/option.rb +3 -2
  21. data/lib/packetgen/header/dns/qdsection.rb +2 -1
  22. data/lib/packetgen/header/dns/question.rb +2 -1
  23. data/lib/packetgen/header/dns/rr.rb +2 -1
  24. data/lib/packetgen/header/dns/rrsection.rb +2 -1
  25. data/lib/packetgen/header/dns.rb +3 -2
  26. data/lib/packetgen/header/dot11/control.rb +2 -1
  27. data/lib/packetgen/header/dot11/data.rb +4 -3
  28. data/lib/packetgen/header/dot11/element.rb +2 -1
  29. data/lib/packetgen/header/dot11/management.rb +2 -1
  30. data/lib/packetgen/header/dot11/sub_mngt.rb +2 -1
  31. data/lib/packetgen/header/dot11.rb +2 -1
  32. data/lib/packetgen/header/dot1q.rb +2 -1
  33. data/lib/packetgen/header/dot1x.rb +2 -1
  34. data/lib/packetgen/header/eap/fast.rb +2 -1
  35. data/lib/packetgen/header/eap/md5.rb +2 -1
  36. data/lib/packetgen/header/eap/tls.rb +3 -2
  37. data/lib/packetgen/header/eap/ttls.rb +3 -2
  38. data/lib/packetgen/header/eap.rb +3 -2
  39. data/lib/packetgen/header/eth.rb +3 -2
  40. data/lib/packetgen/header/gre.rb +2 -1
  41. data/lib/packetgen/header/http/headers.rb +4 -3
  42. data/lib/packetgen/header/http/request.rb +2 -1
  43. data/lib/packetgen/header/http/response.rb +2 -1
  44. data/lib/packetgen/header/http/verbs.rb +2 -1
  45. data/lib/packetgen/header/http.rb +2 -1
  46. data/lib/packetgen/header/icmp.rb +2 -1
  47. data/lib/packetgen/header/icmpv6.rb +2 -1
  48. data/lib/packetgen/header/igmp.rb +2 -1
  49. data/lib/packetgen/header/igmpv3/group_record.rb +2 -1
  50. data/lib/packetgen/header/igmpv3/mq.rb +2 -1
  51. data/lib/packetgen/header/igmpv3/mr.rb +2 -1
  52. data/lib/packetgen/header/igmpv3.rb +2 -1
  53. data/lib/packetgen/header/ip/addr.rb +2 -1
  54. data/lib/packetgen/header/ip/option.rb +3 -2
  55. data/lib/packetgen/header/ip/options.rb +2 -1
  56. data/lib/packetgen/header/ip.rb +3 -2
  57. data/lib/packetgen/header/ipv6/addr.rb +2 -1
  58. data/lib/packetgen/header/ipv6/extension.rb +2 -1
  59. data/lib/packetgen/header/ipv6/hop_by_hop.rb +2 -1
  60. data/lib/packetgen/header/ipv6.rb +2 -1
  61. data/lib/packetgen/header/llc.rb +2 -1
  62. data/lib/packetgen/header/mdns.rb +2 -1
  63. data/lib/packetgen/header/mld.rb +2 -1
  64. data/lib/packetgen/header/mldv2/mcast_address_record.rb +2 -1
  65. data/lib/packetgen/header/mldv2/mlq.rb +2 -1
  66. data/lib/packetgen/header/mldv2/mlr.rb +2 -1
  67. data/lib/packetgen/header/mldv2.rb +2 -1
  68. data/lib/packetgen/header/ospfv2/db_description.rb +2 -1
  69. data/lib/packetgen/header/ospfv2/hello.rb +2 -1
  70. data/lib/packetgen/header/ospfv2/ls_ack.rb +2 -1
  71. data/lib/packetgen/header/ospfv2/ls_request.rb +2 -1
  72. data/lib/packetgen/header/ospfv2/ls_update.rb +2 -1
  73. data/lib/packetgen/header/ospfv2/lsa.rb +2 -1
  74. data/lib/packetgen/header/ospfv2/lsa_header.rb +2 -1
  75. data/lib/packetgen/header/ospfv2.rb +2 -1
  76. data/lib/packetgen/header/ospfv3/db_description.rb +2 -1
  77. data/lib/packetgen/header/ospfv3/hello.rb +2 -1
  78. data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +2 -1
  79. data/lib/packetgen/header/ospfv3/ls_ack.rb +2 -1
  80. data/lib/packetgen/header/ospfv3/ls_request.rb +2 -1
  81. data/lib/packetgen/header/ospfv3/ls_update.rb +2 -1
  82. data/lib/packetgen/header/ospfv3/lsa.rb +2 -1
  83. data/lib/packetgen/header/ospfv3/lsa_header.rb +2 -1
  84. data/lib/packetgen/header/ospfv3.rb +2 -1
  85. data/lib/packetgen/header/sctp/chunk.rb +547 -0
  86. data/lib/packetgen/header/sctp/error.rb +347 -0
  87. data/lib/packetgen/header/sctp/padded32.rb +34 -0
  88. data/lib/packetgen/header/sctp/parameter.rb +229 -0
  89. data/lib/packetgen/header/sctp.rb +96 -0
  90. data/lib/packetgen/header/snmp.rb +3 -2
  91. data/lib/packetgen/header/tcp/option.rb +2 -1
  92. data/lib/packetgen/header/tcp/options.rb +2 -1
  93. data/lib/packetgen/header/tcp.rb +3 -2
  94. data/lib/packetgen/header/tftp.rb +2 -1
  95. data/lib/packetgen/header/udp.rb +2 -1
  96. data/lib/packetgen/header.rb +4 -2
  97. data/lib/packetgen/headerable.rb +2 -1
  98. data/lib/packetgen/inject.rb +2 -1
  99. data/lib/packetgen/inspect.rb +2 -1
  100. data/lib/packetgen/packet.rb +4 -3
  101. data/lib/packetgen/pcap.rb +2 -1
  102. data/lib/packetgen/pcapng/block.rb +3 -2
  103. data/lib/packetgen/pcapng/epb.rb +2 -1
  104. data/lib/packetgen/pcapng/file.rb +2 -1
  105. data/lib/packetgen/pcapng/idb.rb +2 -1
  106. data/lib/packetgen/pcapng/shb.rb +2 -1
  107. data/lib/packetgen/pcapng/spb.rb +2 -1
  108. data/lib/packetgen/pcapng/unknown_block.rb +2 -1
  109. data/lib/packetgen/pcapng.rb +2 -1
  110. data/lib/packetgen/pcaprub_wrapper.rb +2 -1
  111. data/lib/packetgen/proto.rb +2 -1
  112. data/lib/packetgen/types/abstract_tlv.rb +53 -15
  113. data/lib/packetgen/types/array.rb +20 -3
  114. data/lib/packetgen/types/cstring.rb +2 -1
  115. data/lib/packetgen/types/enum.rb +3 -2
  116. data/lib/packetgen/types/fieldable.rb +3 -2
  117. data/lib/packetgen/types/fields.rb +8 -7
  118. data/lib/packetgen/types/int.rb +2 -1
  119. data/lib/packetgen/types/int_string.rb +2 -1
  120. data/lib/packetgen/types/length_from.rb +2 -1
  121. data/lib/packetgen/types/oui.rb +2 -1
  122. data/lib/packetgen/types/string.rb +2 -1
  123. data/lib/packetgen/types/tlv.rb +2 -1
  124. data/lib/packetgen/types.rb +2 -1
  125. data/lib/packetgen/unknown_packet.rb +3 -2
  126. data/lib/packetgen/utils/arp_spoofer.rb +4 -3
  127. data/lib/packetgen/utils.rb +2 -1
  128. data/lib/packetgen/version.rb +3 -2
  129. data/lib/packetgen.rb +2 -1
  130. metadata +22 -11
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is part of PacketGen
4
+ # See https://github.com/lemontree55/packetgen 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
+ require 'digest/crc32c'
9
+
10
+ module PacketGen
11
+ module Header
12
+ # SCTP header ({https://tools.ietf.org/html/rfc9260 RFC 9260})
13
+ # 0 1 2 3
14
+ # 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
15
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
16
+ # | Source Port Number | Destination Port Number |
17
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
18
+ # | Verification Tag |
19
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
20
+ # | Checksum |
21
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
22
+ # | Chunk #1 |
23
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
24
+ # | ... |
25
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
26
+ # | Chunk #n |
27
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
28
+ #
29
+ # @author Sylvain Daubert
30
+ # @since 3.4.0
31
+ class SCTP < Base; end
32
+ end
33
+ end
34
+
35
+ require_relative 'sctp/chunk'
36
+ require_relative 'udp'
37
+
38
+ module PacketGen
39
+ module Header
40
+ class SCTP < Base
41
+ # IP protocol number for SCTP
42
+ IP_PROTOCOL = 132
43
+ # Port number for SCTP over TCP (RFC 6951)
44
+ UDP_PORT = 9899
45
+
46
+ # @!attribute sport
47
+ # 16-bit TCP source port
48
+ # @return [Integer]
49
+ define_field :sport, Types::Int16
50
+ # @!attribute dport
51
+ # 16-bit TCP destination port
52
+ # @return [Integer]
53
+ define_field :dport, Types::Int16
54
+ # @!attribute verification_tag
55
+ # 32-bit verification tag
56
+ # @return [Integer]
57
+ define_field :verification_tag, Types::Int32
58
+ # @!attribute checksum
59
+ # 32-bit TCP checksum
60
+ # @return [Integer]
61
+ define_field :checksum, Types::Int32le
62
+ # @!attribute chunks
63
+ # List of chunks this packet transports
64
+ # @return [ArrayOfChunk]
65
+ define_field :chunks, ArrayOfChunk
66
+
67
+ # Compute SCTP checksum
68
+ def calc_checksum
69
+ self.checksum = 0
70
+ crc32c = Digest::CRC32c.new
71
+ crc32c << to_s
72
+ self.checksum = crc32c.checksum
73
+ end
74
+
75
+ # Compute SCTP chunks length
76
+ def calc_length
77
+ self.chunks.each(&:calc_length)
78
+ end
79
+
80
+ # @return [String]
81
+ def inspect
82
+ super do |attr|
83
+ next unless attr == :chunks
84
+
85
+ chunks.map(&:inspect).join
86
+ end
87
+ end
88
+ end
89
+
90
+ self.add_class SCTP
91
+
92
+ IP.bind SCTP, protocol: SCTP::IP_PROTOCOL
93
+ IPv6.bind SCTP, next: SCTP::IP_PROTOCOL
94
+ UDP.bind SCTP, dport: SCTP::UDP_PORT
95
+ end
96
+ end
@@ -2,8 +2,9 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # This file is part of PacketGen
5
- # See https://github.com/sdaubert/packetgen for more informations
5
+ # See https://github.com/lemontree55/packetgen for more informations
6
6
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
7
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
7
8
  # This program is published under MIT license.
8
9
 
9
10
  module PacketGen
@@ -13,7 +14,7 @@ module PacketGen
13
14
 
14
15
  # Simple Network Management Protocol (SNMP)
15
16
  #
16
- # See https://github.com/sdaubert/packetgen/wiki/SNMP
17
+ # See https://github.com/lemontree55/packetgen/wiki/SNMP
17
18
  # @author Sylvain Daubert
18
19
  # @since 2.0.0
19
20
  class SNMP < ASN1Base
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  require_relative 'option'
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -233,7 +234,7 @@ module PacketGen
233
234
  def flags2string
234
235
  flags = +''
235
236
  %w[ns cwr ece urg ack psh rst syn fin].each do |fl|
236
- flags << (send("flag_#{fl}?") ? fl[0].upcase : '.')
237
+ flags << (send(:"flag_#{fl}?") ? fl[0].upcase : '.')
237
238
  end
238
239
 
239
240
  flags
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -2,8 +2,9 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # This file is part of PacketGen
5
- # See https://github.com/sdaubert/packetgen for more informations
5
+ # See https://github.com/lemontree55/packetgen for more informations
6
6
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
7
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
7
8
  # This program is published under MIT license.
8
9
 
9
10
  module PacketGen
@@ -91,8 +92,9 @@ require_relative 'header/arp'
91
92
  require_relative 'header/ipv6'
92
93
  require_relative 'header/icmpv6'
93
94
  require_relative 'header/gre'
94
- require_relative 'header/udp'
95
+ require_relative 'header/sctp'
95
96
  require_relative 'header/tcp'
97
+ require_relative 'header/udp'
96
98
  require_relative 'header/eap'
97
99
  require_relative 'header/dns'
98
100
  require_relative 'header/asn1_base'
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
  require_relative 'pcaprub_wrapper'
8
9
 
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -2,7 +2,8 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # This file is part of PacketGen
5
- # See https://github.com/sdaubert/packetgen for more informations
5
+ # See https://github.com/lemontree55/packetgen for more informations
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
7
8
  # This program is published under MIT license.
8
9
 
@@ -422,9 +423,9 @@ module PacketGen
422
423
  return header unless arg.is_a? Hash
423
424
 
424
425
  arg.each do |key, value|
425
- raise ArgumentError, "unknown #{key} attribute for #{klass}" unless header.respond_to? "#{key}="
426
+ raise ArgumentError, "unknown #{key} attribute for #{klass}" unless header.respond_to?(:"#{key}=")
426
427
 
427
- header.send "#{key}=", value
428
+ header.send(:"#{key}=", value)
428
429
  end
429
430
 
430
431
  header
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
  require_relative 'pcaprub_wrapper'
8
9
 
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -65,7 +66,7 @@ module PacketGen
65
66
  raise ArgumentError, "unknown endianness for #{self.class}" unless %i[little big].include?(endian)
66
67
 
67
68
  @endian = endian
68
- @fields.each { |_f, v| v.endian = endian if v.is_a?(Types::Int) }
69
+ @fields.each_value { |v| v.endian = endian if v.is_a?(Types::Int) }
69
70
  endian
70
71
  end
71
72
 
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  require 'stringio'
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
  require 'pcaprub'
8
9
 
@@ -2,8 +2,9 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # This file is part of PacketGen
5
- # See https://github.com/sdaubert/packetgen for more informations
5
+ # See https://github.com/lemontree55/packetgen for more informations
6
6
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
7
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
7
8
  # This program is published under MIT license.
8
9
 
9
10
  require 'socket'
@@ -2,8 +2,9 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # This file is part of PacketGen
5
- # See https://github.com/sdaubert/packetgen for more informations
5
+ # See https://github.com/lemontree55/packetgen for more informations
6
6
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
7
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
7
8
  # This program is published under MIT license.
8
9
 
9
10
  module PacketGen
@@ -71,6 +72,8 @@ module PacketGen
71
72
  # @private
72
73
  attr_accessor :field_in_length
73
74
 
75
+ # rubocop:disable Metrics/ParameterLists
76
+
74
77
  # Generate a TLV class
75
78
  # @param [Class] type_class Class to use for +type+
76
79
  # @param [Class] length_class Class to use for +length+
@@ -105,6 +108,7 @@ module PacketGen
105
108
 
106
109
  klass
107
110
  end
111
+ # rubocop:enable Metrics/ParameterLists
108
112
 
109
113
  # @!attribute type
110
114
  # @abstract Type attribute for real TLV class
@@ -118,13 +122,22 @@ module PacketGen
118
122
 
119
123
  # @abstract Should only be called on real TLV classes, created by {.create}.
120
124
  # Set enum hash for {#type} field.
121
- # @param [Hash] hsh enum hash
125
+ # @param [Hash{String, Symbol => Integer}] hsh enum hash
122
126
  # @return [void]
123
127
  def define_type_enum(hsh)
124
128
  field_defs[:type][:enum].clear
125
129
  field_defs[:type][:enum].merge!(hsh)
126
130
  end
127
131
 
132
+ # @abstract Should only be called on real TLV classes, created by {.create}.
133
+ # Set default value for {#type} field.
134
+ # @param [Integer,String,Symbol,nil] default default value from +hsh+ for type
135
+ # @return [void]
136
+ # @since 3.4.0
137
+ def define_type_default(default)
138
+ field_defs[:type][:default] = default
139
+ end
140
+
128
141
  private
129
142
 
130
143
  def check_field_in_length(field_in_length)
@@ -157,6 +170,16 @@ module PacketGen
157
170
  end
158
171
  end
159
172
 
173
+ # @!attribute type
174
+ # @abstract Type attribute
175
+ # @return [Integer]
176
+ # @!attribute length
177
+ # @abstract Length
178
+ # @return [Integer]
179
+ # @!attribute value
180
+ # @abstract Value attribute
181
+ # @return [Object]
182
+
160
183
  # @abstract Should only be called on real TLV classes, created by {.create}.
161
184
  # @param [Hash] options
162
185
  # @option options [Integer] :type
@@ -172,13 +195,16 @@ module PacketGen
172
195
  super
173
196
  # used #value= defined below, which set length if needed
174
197
  self.value = options[:value] if options[:value]
198
+ calc_length unless options.key?(:length)
175
199
  end
176
200
 
177
201
  # @abstract Should only be called on real TLV class instances.
178
202
  # Populate object from a binary string
179
- # @param [String] str
203
+ # @param [String,nil] str
180
204
  # @return [Fields] self
181
205
  def read(str)
206
+ return self if str.nil?
207
+
182
208
  idx = 0
183
209
  fields.each do |field_name|
184
210
  field = self[field_name]
@@ -192,20 +218,18 @@ module PacketGen
192
218
 
193
219
  # @abstract Should only be called on real TLV class instances.
194
220
  # Set +value+. May set +length+ if value is a {Types::String}.
195
- # @param [::String,Integer] val
196
- # @return [::String,Integer]
221
+ # @param [Object] val
222
+ # @return [Object]
223
+ # @since 3.4.0 Base on field's +#from_human+ method
197
224
  def value=(val)
198
- self[:value].from_human(val)
199
-
200
- fil = @field_in_length
201
- fil = 'TLV' if @header_in_length
202
-
203
- length = 0
204
- fil.each_char do |field_type|
205
- length += self[FIELD_TYPES[field_type]].sz
225
+ if val.is_a?(self[:value].class)
226
+ self[:value] = val
227
+ elsif self[:value].respond_to?(:from_human)
228
+ self[:value].from_human(val)
229
+ else
230
+ self[:value].read(val)
206
231
  end
207
- self.length = length
208
-
232
+ calc_length
209
233
  val
210
234
  end
211
235
 
@@ -223,6 +247,20 @@ module PacketGen
223
247
  'type:%s,length:%u,value:%s' % [human_type, length, my_value]
224
248
  end
225
249
 
250
+ # Calculate length
251
+ # @return [void]
252
+ # @since 3.4.0
253
+ def calc_length
254
+ fil = @field_in_length
255
+ fil = 'TLV' if @header_in_length
256
+
257
+ length = 0
258
+ fil.each_char do |field_type|
259
+ length += self[FIELD_TYPES[field_type]].sz
260
+ end
261
+ self.length = length
262
+ end
263
+
226
264
  private
227
265
 
228
266
  def real_length
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  require 'forwardable'
@@ -225,8 +226,8 @@ module PacketGen
225
226
  klass == obj_klass ? obj : klass.new(hsh)
226
227
  end
227
228
 
228
- def real_type(obj)
229
- obj.class
229
+ def real_type(_obj)
230
+ self.class.set_of_klass
230
231
  end
231
232
 
232
233
  def create_object_from_str(str)
@@ -242,28 +243,44 @@ module PacketGen
242
243
  end
243
244
  end
244
245
 
246
+ # @private
247
+ module ArrayOfIntMixin
248
+ def read_from_array(ary)
249
+ return self if ary.empty?
250
+
251
+ ary.each do |i|
252
+ self << self.class.set_of_klass.new(i)
253
+ end
254
+ end
255
+ end
256
+
245
257
  # Specialized array to handle serie of {Int8}.
246
258
  class ArrayOfInt8 < Array
259
+ include ArrayOfIntMixin
247
260
  set_of Int8
248
261
  end
249
262
 
250
263
  # Specialized array to handle serie of {Int16}.
251
264
  class ArrayOfInt16 < Array
265
+ include ArrayOfIntMixin
252
266
  set_of Int16
253
267
  end
254
268
 
255
269
  # Specialized array to handle serie of {Int16le}.
256
270
  class ArrayOfInt16le < Array
271
+ include ArrayOfIntMixin
257
272
  set_of Int16le
258
273
  end
259
274
 
260
275
  # Specialized array to handle serie of {Int32}.
261
276
  class ArrayOfInt32 < Types::Array
277
+ include ArrayOfIntMixin
262
278
  set_of Types::Int32
263
279
  end
264
280
 
265
281
  # Specialized array to handle serie of {Int32le}.
266
282
  class ArrayOfInt32le < Types::Array
283
+ include ArrayOfIntMixin
267
284
  set_of Types::Int32le
268
285
  end
269
286
  end
@@ -2,8 +2,9 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # This file is part of PacketGen
5
- # See https://github.com/sdaubert/packetgen for more informations
5
+ # See https://github.com/lemontree55/packetgen for more informations
6
6
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
7
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
7
8
  # This program is published under MIT license.
8
9
 
9
10
  require 'forwardable'
@@ -2,8 +2,9 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # This file is part of PacketGen
5
- # See https://github.com/sdaubert/packetgen for more informations
5
+ # See https://github.com/lemontree55/packetgen for more informations
6
6
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
7
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
7
8
  # This program is published under MIT license.
8
9
 
9
10
  module PacketGen
@@ -14,7 +15,7 @@ module PacketGen
14
15
  # and named values.
15
16
  #
16
17
  # == Simple example
17
- # enum = Int8Enum.new(0, 'low' => 0, 'medium' => 1, 'high' => 2})
18
+ # enum = Int8Enum.new('low' => 0, 'medium' => 1, 'high' => 2})
18
19
  # In this example, +enum+ is a 8-bit field which may take one
19
20
  # among three values: +low+, +medium+ or +high+:
20
21
  # enum.value = 'high'
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is part of PacketGen
4
- # See https://github.com/sdaubert/packetgen for more informations
4
+ # See https://github.com/lemontree55/packetgen for more informations
5
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # Copyright (C) 2024 LemonTree55 <lenontree@proton.me>
6
7
  # This program is published under MIT license.
7
8
 
8
9
  module PacketGen
@@ -55,7 +56,7 @@ module PacketGen
55
56
 
56
57
  # rubocop:enable Lint/UselessMethodDefinition
57
58
 
58
- # Format object when inspecting a {Field} object
59
+ # Format object when inspecting a {Fields} object
59
60
  # @return [String]
60
61
  def format_inspect
61
62
  to_human