module Pio::UdpHeader
UDP Header Format.
Public Class Methods
included(klass)
click to toggle source
# File lib/pio/udp_header.rb, line 20 def self.included(klass) def klass.udp_header uint16 :udp_source_port uint16 :udp_destination_port uint16 :udp_length, initial_value: :calculate_udp_length uint16 :udp_checksum, initial_value: :calculate_udp_checksum end end
Private Instance Methods
calculate_udp_checksum()
click to toggle source
# File lib/pio/udp_header.rb, line 35 def calculate_udp_checksum sum = [*pseudo_udp_header.unpack('n*'), udp_source_port, udp_destination_port, udp_length, *udp_payload_multiple_of_2octets.unpack('n*')].inject(:+) ~((sum & 0xffff) + (sum >> 16)) & 0xffff end
calculate_udp_length()
click to toggle source
# File lib/pio/udp_header.rb, line 31 def calculate_udp_length 8 + udp_payload_binary.length end
pseudo_udp_header()
click to toggle source
# File lib/pio/udp_header.rb, line 48 def pseudo_udp_header PseudoUdpHeader.new(source_ip_address: source_ip_address, destination_ip_address: destination_ip_address, udp_length: udp_length).to_binary_s end
udp_payload_binary()
click to toggle source
# File lib/pio/udp_header.rb, line 44 def udp_payload_binary binary_after :udp_checksum end
udp_payload_multiple_of_2octets()
click to toggle source
# File lib/pio/udp_header.rb, line 54 def udp_payload_multiple_of_2octets udp_payload_binary + '\x00' * (udp_payload_binary.length.even? ? 0 : 1) end