Sha256: f8597d9d25cdc7e53c62dc8b23827719ca9926e5134791bd3d3e9a25500ac01b

Contents?: true

Size: 1.32 KB

Versions: 2

Compression:

Stored size: 1.32 KB

Contents

# rbs_inline: enabled
# frozen_string_literal: true

module Redhound
  class L4
    class Udp < Base
      # @rbs (bytes: Array[Integer]) -> void
      def initialize(bytes:)
        raise ArgumentError, "bytes must be bigger than #{size} bytes" unless bytes.size >= size

        @bytes = bytes
      end

      # @rbs () -> Redhound::L4::Udp
      def generate
        @sport = @bytes[0..1]
        @dport = @bytes[2..3]
        @len = @bytes[4..5]
        @check = @bytes[6..7]
        @data = @bytes[8..]
        self
      end

      # @rbs () -> Integer
      def size = 8

      # @rbs () -> String
      def to_s
        <<-UDP
    └─ UDP Src: #{sport} Dst: #{dport} Len: #{len} Checksum: #{check}
        └─ Payload: #{data}
        UDP
      end

      private

      # @rbs () -> Integer
      def sport
        @sport.map { |b| b.to_s(16).rjust(2, '0') }.join.to_i(16)
      end

      # @rbs () -> Integer
      def dport
        @dport.map { |b| b.to_s(16).rjust(2, '0') }.join.to_i(16)
      end

      # @rbs () -> Integer
      def len
        @len.map { |b| b.to_s(16).rjust(2, '0') }.join.to_i(16)
      end

      # @rbs () -> Integer
      def check
        @check.map { |b| b.to_s(16).rjust(2, '0') }.join.to_i(16)
      end

      # @rbs () -> String
      def data
        @data.map(&:chr).join
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
redhound-1.0.1 lib/redhound/l4/udp.rb
redhound-1.0.0 lib/redhound/l4/udp.rb