httpd_util
Miscellaneous utility functions to be used when implementing Erlang web server API modules.
This module provides the Erlang web server API module programmer with miscellaneous utility functions.
Functions
convert_request_date(DateString) -> ErlDate|bad_date
DateString = string()
ErlDate = {{Year,Month,Date},{Hour,Min,Sec}}
Year = Month = Date = Hour = Min = Sec = integer()
convert_request_date/1
converts DateString
to
the Erlang date format. DateString
must be in one of the
three date formats defined in
create_etag(FileInfo) -> Etag
FileInfo = file_info()
Etag = string()
create_etag/1
calculates the Etag for a file from its
size and time for last modification. FileInfo
is a record defined
in kernel/include/file.hrl
.
day(NthDayOfWeek) -> DayOfWeek
NthDayOfWeek = 1-7
DayOfWeek = string()
day/1
converts the day of the week
(NthDayOfWeek
) from an integer (1-7) to an abbreviated
string, that is:
1 = "Mon", 2 = "Tue", ..., 7 = "Sat".
decode_hex(HexValue) -> DecValue
HexValue = DecValue = string()
Converts the hexadecimal value HexValue
into its
decimal equivalent (DecValue
).
flatlength(NestedList) -> Size
NestedList = list()
Size = integer()
flatlength/1
computes the size of the possibly nested
list NestedList
, which can contain binaries.
hexlist_to_integer(HexString) -> Number
Number = integer()
HexString = string()
hexlist_to_integer
converts the hexadecimal value of
HexString
to an integer.
integer_to_hexlist(Number) -> HexString
Number = integer()
HexString = string()
integer_to_hexlist/1
returns a string representing
Number
in a hexadecimal form.
lookup(ETSTable,Key) -> Result
lookup(ETSTable,Key,Undefined) -> Result
ETSTable = ets_table()
Key = term()
Result = term() | undefined | Undefined
Undefined = term()
lookup
extracts {Key,Value}
tuples from
ETSTable
and returns the Value
associated
with Key
. If ETSTable
is of type bag
,
only the first Value
associated with Key
is
returned. lookup/2
returns undefined
and
lookup/3
returns Undefined
if no Value
is found.
lookup_mime(ConfigDB,Suffix)
lookup_mime(ConfigDB,Suffix,Undefined) -> MimeType
ConfigDB = ets_table()
Suffix = string()
MimeType = string() | undefined | Undefined
Undefined = term()
lookup_mime
returns the MIME type associated with a
specific file suffix as specified in the file mime.types
(located in the
lookup_mime_default(ConfigDB,Suffix)
lookup_mime_default(ConfigDB,Suffix,Undefined) -> MimeType
ConfigDB = ets_table()
Suffix = string()
MimeType = string() | undefined | Undefined
Undefined = term()
lookup_mime_default
returns the MIME type associated
with a specific file suffix as specified in the
mime.types
file (located in the
DefaultType
is
returned.
message(StatusCode,PhraseArgs,ConfigDB) -> Message
StatusCode = 301 | 400 | 403 | 404 | 500 | 501 | 504
PhraseArgs = term()
ConfigDB = ets_table
Message = string()
message/3
returns an informative HTTP 1.1 status
string in HTML. Each StatusCode
requires a specific
PhraseArgs
:
301
string()
: A URL pointing at the new document
position.
400 | 401 | 500
none
(no PhraseArgs
).
403 | 404
string()
: A Request-URI
as described in
501
{Method,RequestURI,HTTPVersion}
: The HTTP
Method
, Request-URI
, and HTTP-Version
as defined in RFC 2616.
504
string()
: A string describing why the service
was unavailable.
month(NthMonth) -> Month
NthMonth = 1-12
Month = string()
month/1
converts the month NthMonth
as an
integer (1-12) to an abbreviated string, that is:
1 = "Jan", 2 = "Feb", ..., 12 = "Dec".
multi_lookup(ETSTable,Key) -> Result
ETSTable = ets_table()
Key = term()
Result = [term()]
multi_lookup
extracts all {Key,Value}
tuples
from an ETSTable
and returns all Values
associated with Key
in a list.
reason_phrase(StatusCode) -> Description
StatusCode = 100| 200 | 201 | 202 | 204 | 205 | 206 | 300 | 301 | 302 | 303 | 304 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 410 411 | 412 | 413 | 414 415 | 416 | 417 | 500 | 501 | 502 | 503 | 504 | 505
Description = string()
reason_phrase
returns Description
of an
HTTP 1.1 StatusCode
, for example, 200 is "OK" and 201
is "Created". For more information, see
rfc1123_date() -> RFC1123Date
rfc1123_date({{YYYY,MM,DD},{Hour,Min,Sec}}) -> RFC1123Date
YYYY = MM = DD = Hour = Min = Sec = integer()
RFC1123Date = string()
rfc1123_date/0
returns the current date in RFC 1123
format. rfc_date/1
converts the date in the Erlang format
to the RFC 1123 date format.
split(String,RegExp,N) -> SplitRes
String = RegExp = string()
SplitRes = {ok, FieldList} | {error, errordesc()}
Fieldlist = [string()]
N = integer
split/3
splits String
in N
chunks
using RegExp
. split/3
is equivalent to
regexp:split/2
with the exception that N
defines the maximum number of fields in
FieldList
.
split_script_path(RequestLine) -> Splitted
RequestLine = string()
Splitted = not_a_script | {Path, PathInfo, QueryString}
Path = QueryString = PathInfo = string()
split_script_path/1
is equivalent to
split_path/1
with one exception. If the longest
possible path is not a regular, accessible, and executable
file, then not_a_script
is returned.
split_path(RequestLine) -> {Path,QueryStringOrPathInfo}
RequestLine = Path = QueryStringOrPathInfo = string()
split_path/1
splits RequestLine
in a file
reference (Path
), and a QueryString
or a
PathInfo
string as specified in
QueryString
is isolated from Path
with a
question mark (?
) and PathInfo
with a slash
(/). In the case of a QueryString
, everything before
?
is a Path
and everything after ?
is a
QueryString
. In the case of a PathInfo
,
RequestLine
is scanned from left-to-right on the hunt
for longest possible Path
being a file or a
directory. Everything after the longest possible
Path
, isolated with a /
, is regarded as
PathInfo
. The resulting Path
is decoded using
decode_hex/1
before delivery.
strip(String) -> Stripped
String = Stripped = string()
strip/1
removes any leading or trailing linear white
space from the string. Linear white space is to be read as
horizontal tab or space.
suffix(FileName) -> Suffix
FileName = Suffix = string()
suffix/1
is equivalent to
filename:extension/1
with the exception that
Suffix
is returned without a leading dot (.
).