-------------------------------------------------------------------------------- -- Title: MIMEHeaders.lua -- Description: Like a square peg in a round hole -- Author: Raphaël Szwarc http://alt.textdrive.com/lua/ -- Creation Date: February 1, 2005 -- Legal: Copyright (C) 2005 Raphaël Szwarc -------------------------------------------------------------------------------- -- import dependencies local LUObject = require( "LUObject" ) local LUList = require( "LUList" ) local LUString = require( "LUString" ) local MIMEHeader = require( "MIMEHeader" ) -- define the class local super = LUObject local self = super() function self:init( aContent, aStart ) self = super.init( self ) local someHeaders = LUList() local aBuffer = nil local aLine = nil local anEnd = nil while true do anEnd = aContent:find( "\r\n", aStart, true ) if anEnd ~= nil then aLine = aContent:sub( aStart, anEnd - 1 ) anEnd = anEnd + 2 aStart = anEnd if aLine ~= "" then local aChar = aLine:sub( 1, 1 ) if aChar ~= " " and aChar ~= "\t" then if aBuffer ~= nil then local anHeader = MIMEHeader( aBuffer:join( " " ) ) someHeaders:add( anHeader ) end aBuffer = LUList() end aBuffer:add( LUString:trim( aLine ) ) else break end else break end end if aBuffer ~= nil and aBuffer:hasData() == true then someHeaders:add( MIMEHeader( aBuffer:join( " " ) ) ) end self._endIndex = anEnd or aStart self._content = someHeaders return self end function self:content() return self._content end function self:endIndex() return self._endIndex end function self:getHeader( aKey ) aKey = aKey:lower() for anIndex, anHeader in self:content():iterator() do if anHeader:key() == aKey then return anHeader end end return nil end function self:getAllHeaders( aKey ) local someValues = LUList() aKey = aKey:lower() for anIndex, anHeader in self:content():iterator() do if anHeader:key() == aKey then someValues:add( anHeader ) end end return someValues end function self:getValue( aKey ) local anHeader = self:getHeader( aKey ) if anHeader ~= nil then return anHeader:value() end return nil end function self:getAllValues( aKey ) local someValues = LUList() for anIndex, anHeader in self:getAllHeaders( aKey ):iterator() do someValues:add( anHeader:value() ) end return someValues end function self:keys() local someKeys = LUList() for anIndex, anHeader in self:content():iterator() do local aKey = anHeader:key() someKeys:add( aKey ) end return someKeys end return self