Class: PacketGen::Header::HTTP::Headers Abstract

Inherits:
Object
  • Object
show all
Includes:
Types::Fieldable
Defined in:
lib/packetgen/header/http/headers.rb

Overview

This class is abstract.

Base class for HTTP headers.

Author:

  • Kent ‘picat’ Gruber

Since:

  • 2.2.0

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Types::Fieldable

#format_inspect, #sz, #type_name

Constructor Details

#initializeHeaders

Returns a new instance of Headers.

Since:

  • 2.2.0



23
24
25
# File 'lib/packetgen/header/http/headers.rb', line 23

def initialize
  @data = {}
end

Instance Attribute Details

#dataHash? (readonly) Also known as: to_h

Underlying Headers data (or nil).

Returns:

  • (Hash, nil)

Since:

  • 2.2.0



20
21
22
# File 'lib/packetgen/header/http/headers.rb', line 20

def data
  @data
end

Instance Method Details

#[](header) ⇒ String

Get header value from its name

Parameters:

  • header (String)

    header name

Returns:

  • (String)

    header value

Since:

  • 2.2.0



48
49
50
# File 'lib/packetgen/header/http/headers.rb', line 48

def [](header)
  data[header]
end

#from_human(data) ⇒ self

Read human-readable data to populate header data.

Parameters:

  • data (String, Hash)

Returns:

  • (self)

Since:

  • 2.2.0



81
82
83
# File 'lib/packetgen/header/http/headers.rb', line 81

def from_human(data)
  read(data)
end

#given?Boolean

Check if any headers were given.

Returns:

  • (Boolean)

Since:

  • 2.2.0



87
88
89
90
91
# File 'lib/packetgen/header/http/headers.rb', line 87

def given?
  return true unless @data.nil? || @data.empty?

  false
end

#header?(header) ⇒ Boolean Also known as: has_header?

Say if self include header header

Parameters:

  • header (String)

    header name

Returns:

  • (Boolean)

Since:

  • 2.2.0



55
56
57
# File 'lib/packetgen/header/http/headers.rb', line 55

def header?(header)
  data.key?(header)
end

#read(s_or_h) ⇒ self

Populate object from a string or directly from a hash.

Parameters:

  • s_or_h (String, Hash)

Returns:

  • (self)

Since:

  • 2.2.0



30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/packetgen/header/http/headers.rb', line 30

def read(s_or_h)
  case s_or_h
  when String
    @data = s_or_h.split("\n").filter_map do |h|
      next unless h.include?(':')

      k, v = h.split(':', 2)
      [k, v.strip]
    end.to_h
  when Hash
    @data = s_or_h
  end
  self
end

#to_humanHash

Get a human readable string.

Returns:

  • (Hash)

Since:

  • 2.2.0



74
75
76
# File 'lib/packetgen/header/http/headers.rb', line 74

def to_human
  @data
end

#to_sString

Get binary string.

Returns:

  • (String)

Since:

  • 2.2.0



62
63
64
65
66
67
68
69
70
# File 'lib/packetgen/header/http/headers.rb', line 62

def to_s
  return "\r\n" if @data.nil? || @data.empty?

  d = []
  @data.map do |k, v|
    d << "#{k}: #{v}"
  end
  d.join("\r\n") << "\r\n\r\n"
end