metasploit-framework/lib/rex/mime/header.rb

79 lines
1.2 KiB
Ruby
Raw Normal View History

# -*- coding: binary -*-
module Rex
module MIME
class Header
require 'rex/text'
attr_accessor :headers
def initialize(data='')
self.headers = []
parse(data)
end
def parse(data)
prev = nil
data.gsub("\r", '').split("\n").each do |line|
# Handle header folding
if (line =~ /^\s+/)
# Ignore if there is no previous header
next if not prev
next if not self.headers[prev]
self.headers[prev][1] << line.strip
next
end
var,val = line.split(':')
next if not val
self.headers << [ var.to_s.strip, val.to_s.strip ]
prev = self.headers.length - 1
end
end
def to_s
self.headers.map{ |pair| "#{pair[0]}: #{pair[1]}\r\n" }.join
end
def find(idx)
if (idx.class == ::Fixnum)
return self.headers[idx]
else
self.headers.each do |pair|
if (pair[0] == idx.to_s)
return pair
end
end
end
nil
end
def set(var, val)
hdr = self.find(var) || self.add(var, '')
hdr[1] = val
end
def add(var, val)
self.headers << [var, val]
self.headers[-1]
end
def remove(idx)
if (idx.class == ::Fixnum)
self.headers.delete_at(idx)
else
self.headers.each_index do |i|
pair = self.headers[i]
if (pair[0] == idx.to_s)
self.headers.delete_at(i)
end
end
end
end
end
end
end