Object HttpHeader
The HTTPHeader object wraps the HTTP request and response headers along with status codes and other information. You do not construct this object directly , this is passed to you when you are working with HTTP File Extraction scripts
| name | input params | return value | description | 
|---|---|---|---|
| is_request | – | boolean | True if the header is a HTTP request header | 
| is_response | – | boolean | True if the header is a HTTP response header | 
| get_path | – | string | The path in the HTTP request URI | 
| get_value | string | string |  Get the value of the requested HTTP header, Returns nil if header not found.  | 
	
| get_all_headers | – | table | Return a table of attribute => value pairs | 
| get_method | – | string | For requests GET/POST/HEAD or other methods | 
| get_status | – | number | HTTP Status Code 200=OK | 
| is_method | string | bool |  Check header method. hdr:is_method("POST") is short cut for hdr:get_method()=="POST" @    | 
	
| match_value | string – header_name, string value_regex | bool |  Short cut for get_value + match(..)  check if the header value matches the specified regex (see example 3 below). The regex must be Google RE2 compatible  | 
	
Usage examples
To check whether content type contains a video*
Note we are checking for a nil value because the HTTP Header Content-Type may not be present in that header.
  ..
  local ct = header:get_value("Content-Type")
  if ct and ct:match("video")   then
      print(">>>>>  Saving video file for analysis "..ct.."flow - "..flowkey:id() )
      return true
  else
      return false
  end
Printing all the headers
Here is a sample debug session where you can inspect the HTTP Header methods
The built in debugger is invoked as
dbg = require('debugger')
..
onfile_http = function(... req_header, resp_header, ...)
	dbg()
end
The objects of type HTTPHeader can be used as shown below
debugger.lua> 
debugger.lua> p req_header:get_all_headers()
req_header:get_all_headers() => {"Host" = "toolbar.google.com", "User-Agent" = "Mozilla/4.0 (compatible; GoogleToolbar 4.0.1601.4978-big; Windows XP 5.1; MSIE 6.0.2900.2180)", "Referer" = "navclient.update/en/4.0.1601.4978-big"}
debugger.lua> p resp_header:get_all_headers()
resp_header:get_all_headers() => {"Transfer-Encoding" = "chunked", "Date" = "Tue, 12 Feb 2008 14:30:02 GMT", "Content-Type" = "text/plain", "Server" = "GFE/1.3", "Cache-control" = "private"}
debugger.lua> 
Function match_value
Matches a field against a regex (partial match).
Purpose
Just a convenience function that you will find very handy when inspecting HTTP , SMTP headers etc.
Parameters
| header_name | string | name of the HTTP header field | 
| regex | string |  a RE2 compatible regex against which the value of header_name above will be matched. The Regex algorithm used is PartialMatch    | 
	
Return value
- True
 - the header value matches the regex
 - False
 - the header does not exist or the value does not match
 
Example
Say we want to match the following
- Content-Type := application/x-shockwave-flash
 - Content-Type := application/x-msdownload
 
--
-- without using match_value
-- get content type, check for nil, and then use LUA regex match(..)
--
local ct = header:get_value("Content-Type")
if ct and ct:match("application/x-shockwave-flash") or ct:match("application/x-msdownload")   then  
	print(">>>>>  Saving video file for analysis "..ct.."flow - "..flowkey:id() )
	return true
end
-- using match_value
--
if header:match_value("Content-Type","(shockwave|msdownload") then
	print(">>>>>  Saving video file for analysis "..ct.."flow - "..flowkey:id() )
	return true
end