# httpd_util

### MODULE

httpd_util

### MODULE SUMMARY

Miscellaneous utility functions to be used when implementing Erlang Webserver API modules.

### DESCRIPTION

This module provides the Erlang Web Server API module programmer with miscellaneous utility functions.

### EXPORTS

`convert_request_date(DateString) -> ErlDate|bad_date`

Types:

`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 that is defined in the RFC 2616.

`create_etag(FileInfo) -> Etag`

Types:

`FileInfo = file_info()`
`Etag = string()`

`create_etag/1` calculates the Etag for a file, from it's size and time for last modification. fileinfo is a record defined in `kernel/include/file.hrl`

`decode_hex(HexValue) -> DecValue`

Types:

`HexValue = DecValue = string()`

Converts the hexadecimal value `HexValue` into it's decimal equivalent (`DecValue`).

`day(NthDayOfWeek) -> DayOfWeek`

Types:

`NthDayOfWeek = 1-7`
`DayOfWeek = string()`

`day/1` converts the day of the week (`NthDayOfWeek`) as an integer (1-7) to an abbreviated string, that is:

1 = "Mon", 2 = "Tue", ..., 7 = "Sat".

`encode_base64(ASCIIString) -> Base64String`

Types:

`ASCIIString = string()`
`Base64String = string()`

Deprecated use http_base_64:decode/1

`flatlength(NestedList) -> Size`

Types:

`NestedList = list()`
`Size = integer()`

`flatlength/1` computes the size of the possibly nested list `NestedList`. Which may contain binaries.

`header(StatusCode,PersistentConn)`
`header(StatusCode,Date)`
`header(StatusCode,MimeType,Date)`
`header(StatusCode,MimeType,PersistentConn,Date) -> HTTPHeader`

Types:

`StatusCode = integer()`
`Date = rfc1123_date()`
`MimeType = string()`
`PersistentConn = true | false`

`header` returns a HTTP 1.1 header string. The `StatusCode` is one of the status codes defined in RFC 2616 and the `Date` string is RFC 1123 compliant. (See rfc1123_date/0).

Note that the two version of `header/n` that does not has a `PersistentConn` argument is there only for backward compability, and must not be used in new Erlang Webserver API modules. that will support persistent connections.

`hexlist_to_integer(HexString) -> Number`

Types:

`Number = integer()`
`HexString = string()`

`hexlist_to_integer` Convert the Hexadecimal value of HexString to an integer.

`integer_to_hexlist(Number) -> HexString`

Types:

`Number = integer()`
`HexString = string()`

`integer_to_hexlist/1` Returns a string that represents the Number in a Hexadecimal form.

`key1search(TupleList,Key)`
`key1search(TupleList,Key,Undefined) -> Result`

Types:

`TupleList = [tuple()]`
`Key = term()`
`Result = term() | undefined | Undefined`
`Undefined = term()`

`key1search` searches the `TupleList` for a tuple whose first element is `Key`. `key1search/2` returns `undefined` and `key1search/3` returns `Undefined` if no tuple is found.

`lookup(ETSTable,Key) -> Result`
`lookup(ETSTable,Key,Undefined) -> Result`

Types:

`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`

Types:

`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 `mime.types` file (located in the config directory (`UNIX: $SERVER_ROOT/conf/mime.types, Windows: %SERVER_ROOT%\conf\mime.types`)).

`lookup_mime_default(ConfigDB,Suffix)`
`lookup_mime_default(ConfigDB,Suffix,Undefined) -> MimeType`

Types:

`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 config directory (`UNIX: $SERVER_ROOT/conf/mime.types, Windows: %SERVER_ROOT%\conf\mime.types`)). If no appropriate association can be found the value of DefaultType is returned.

`message(StatusCode,PhraseArgs,ConfigDB) -> Message`

Types:

`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 RFC 2616.
`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`

Types:

`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`

Types:

`ETSTable = ets_table()`
`Key = term()`
`Result = [term()]`

`multi_lookup` extracts all `{Key,Value}` tuples from an `ETSTable` and returns all `Values` associated with the `Key` in a list.

`reason_phrase(StatusCode) -> Description`

Types:

`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 the `Description` of an HTTP 1.1 `StatusCode`, for example 200 is "OK" and 201 is "Created". Read RFC 2616 for further information.

`rfc1123_date() -> RFC1123Date`
`rfc1123_date({{YYYY,MM,DD},{Hour,Min,Sec}}}) -> RFC1123Date`

Types:

`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`

Types:

`String = RegExp = string()`
`SplitRes = {ok, FieldList} | {error, errordesc()}`
`Fieldlist = [string()]`
`N = integer`

`split/3` splits the `String` in `N` chunks using the `RegExp`. `split/3` is is equivalent to `regexp:split/2` with one exception, that is `N` defines the number of maximum number of fields in the `FieldList`.

`split_script_path(RequestLine) -> Splitted`

Types:

`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 `not_a_script` is returned.

`split_path(RequestLine) -> {Path,QueryStringOrPathInfo}`

Types:

`RequestLine = Path = QueryStringOrPathInfo = string()`

`split_path/1` splits the `RequestLine` in a file reference (`Path`) and a `QueryString` or a `PathInfo` string as specified in RFC 2616. A `QueryString` is isolated from the `Path` with a question mark (`?`) and `PathInfo` with a slash (/). In the case of a `QueryString`, everything before the `?` is a `Path` and everything after a `QueryString`. In the case of a `PathInfo` the `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`

Types:

`String = Stripped = string()`

`strip/1` removes any leading or trailing linear white space from the string. Linear white space should be read as horisontal tab or space.

`suffix(FileName) -> Suffix`

Types:

`FileName = Suffix = string()`

`suffix/1` is equivalent to `filename:extension/1` with one exception, that is `Suffix` is returned without a leading dot (`.`).

### SEE ALSO

httpd(3)

### AUTHORS

Joakim Grebenö - support@erlang.ericsson.se
Mattias Nilsson - support@erlang.ericsson.se

inets 4.7.16
Copyright © 1991-2007 Ericsson AB