Packages
raxx
0.12.2
1.1.0
1.0.1
1.0.0
1.0.0-rc.3
1.0.0-rc.2
retired
1.0.0-rc.1
retired
1.0.0-rc.0
retired
0.18.1
0.18.0
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.1
0.16.0
retired
0.15.11
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.14
0.14.13
0.14.12
0.14.11
0.14.10
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.1
0.11.0
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
0.0.1
Interface for HTTP webservers, frameworks and clients.
Current section
Files
Jump to
Current section
Files
lib/raxx/header/connection.ex
defmodule Raxx.Connection do
@moduledoc """
Manipulate connection header on raxx messages
DEBT do not show deprecated headers at raxx level
"""
@moduledoc false
@field_name "connection"
@doc """
Read connection of the HTTP message.
## Examples
iex> %Raxx.Request{headers: [{"connection", "close"}]} |> Raxx.Connection.fetch
{:ok, "close"}
iex> %Raxx.Request{headers: []} |> Raxx.Connection.fetch
{:error, :field_value_not_specified}
"""
def fetch(%{headers: headers}) do
case :proplists.lookup_all(@field_name,headers) do
[{@field_name, field_binary}] ->
{:ok, field_binary}
[] ->
{:error, :field_value_not_specified}
_ ->
{:error, :duplicated_field}
end
end
@doc """
Test if a Connection is marked as reuseable
This behaviour depends if the HTTP version is 1.0 or 1.1.
# DEBT add a version field to the request/response types.
# Assumes 1.1
## Examples
iex> %Raxx.Request{headers: [{"connection", "close"}]} |> Raxx.Connection.is_persistant?
false
iex> %Raxx.Request{headers: []} |> Raxx.Connection.is_persistant?
true
"""
def is_persistant?(request) do
case fetch(request) do
{:ok, "close"} ->
false
_ ->
true
end
end
@doc """
Keep alive the connection for more messages.
## Examples
iex> %Raxx.Response{} |> Raxx.Connection.mark_persistant() |> Raxx.Connection.fetch()
{:ok, "keep-alive"}
"""
def mark_persistant(request) do
set(request, "keep-alive")
end
@doc """
Set the connection of a HTTP message.
"""
def set(message = %{headers: headers}, value) do
headers = :proplists.delete(@field_name, headers)
headers = [{@field_name, value} | headers]
%{message | headers: headers}
end
end