Plug.Conn.Adapter behaviour

Specification of the connection adapter API implemented by webservers.

Summary

Types

Callbacks

chunk(payload, arg2)

Sends a chunk in the chunked response.

get_http_protocol(payload)

Returns the HTTP protocol and its version.

get_peer_data(payload)

Returns peer information such as the address, port and ssl cert.

inform(payload, arg2, headers)

Send an informational response to the client.

push(payload, path, headers)

Push a resource to the client.

read_req_body(payload, options)

Reads the request body.

send_chunked(payload, arg2, arg3)

Sends the given status, headers as the beginning of a chunked response to the client.

send_file(payload, arg2, arg3, file, offset, length)

Sends the given status, headers and file as a response back to the client.

send_resp(payload, arg2, arg3, arg4)

Sends the given status, headers and body as a response back to the client.

Types

http_protocol()

Specs

http_protocol() :: :"HTTP/1" | :"HTTP/1.1" | :"HTTP/2" | atom()

payload()

Specs

payload() :: term()

peer_data()

Specs

peer_data() :: %{
  address: :inet.ip_address(),
  port: :inet.port_number(),
  ssl_cert: binary() | nil
}

Callbacks

chunk(payload, arg2)

Specs

chunk(payload(), Plug.Conn.body()) ::
  :ok | {:ok, sent_body :: binary(), payload()} | {:error, term()}

Sends a chunk in the chunked response.

If the request has method "HEAD", the adapter should not send the response to the client.

Webservers are advised to return :ok and not modify any further state for each chunk. However, the test implementation returns the actual body and payload so it can be used during testing.

get_http_protocol(payload)

Specs

get_http_protocol(payload()) :: http_protocol()

Returns the HTTP protocol and its version.

get_peer_data(payload)

Specs

get_peer_data(payload()) :: peer_data()

Returns peer information such as the address, port and ssl cert.

inform(payload, arg2, headers)

Specs

inform(payload(), Plug.Conn.status(), headers :: Keyword.t()) ::
  :ok | {:error, term()}

Send an informational response to the client.

If the adapter does not support inform, then {:error, :not_supported} should be returned.

push(payload, path, headers)

Specs

push(payload(), path :: String.t(), headers :: Keyword.t()) ::
  :ok | {:error, term()}

Push a resource to the client.

If the adapter does not support server push then {:error, :not_supported} should be returned.

read_req_body(payload, options)

Specs

read_req_body(payload(), options :: Keyword.t()) ::
  {:ok, data :: binary(), payload()}
  | {:more, data :: binary(), payload()}
  | {:error, term()}

Reads the request body.

Read the docs in Plug.Conn.read_body/2 for the supported options and expected behaviour.

send_chunked(payload, arg2, arg3)

Specs

send_chunked(payload(), Plug.Conn.status(), Plug.Conn.headers()) ::
  {:ok, sent_body :: binary() | nil, payload()}

Sends the given status, headers as the beginning of a chunked response to the client.

Webservers are advised to return nil as the sent_body, as the body can no longer be manipulated. However, the test implementation returns the actual body so it can be used during testing.

send_file(payload, arg2, arg3, file, offset, length)

Specs

send_file(
  payload(),
  Plug.Conn.status(),
  Plug.Conn.headers(),
  file :: binary(),
  offset :: integer(),
  length :: integer() | :all
) :: {:ok, sent_body :: binary() | nil, payload()}

Sends the given status, headers and file as a response back to the client.

If the request has method "HEAD", the adapter should not send the response to the client.

Webservers are advised to return nil as the sent_body, as the body can no longer be manipulated. However, the test implementation returns the actual body so it can be used during testing.

send_resp(payload, arg2, arg3, arg4)

Specs

send_resp(payload(), Plug.Conn.status(), Plug.Conn.headers(), Plug.Conn.body()) ::
  {:ok, sent_body :: binary() | nil, payload()}

Sends the given status, headers and body as a response back to the client.

If the request has method "HEAD", the adapter should not send the response to the client.

Webservers are advised to return nil as the sent_body, as the body can no longer be manipulated. However, the test implementation returns the actual body so it can be used during testing.

© 2013 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/plug/Plug.Conn.Adapter.html