Current section

Files

Jump to
kadabra lib connection ssl.ex
Raw

lib/connection/ssl.ex

defmodule Kadabra.Connection.Ssl do
@moduledoc false
@type sock :: {:sslsocket, any, pid | {any, any}}
@type connection_result :: {:ok, sock}
| {:error, :not_implmenented}
| {:error, :bad_scheme}
@spec connect(charlist, Keyword.t) :: connection_result
def connect(uri, opts) do
case opts[:scheme] do
:http -> {:error, :not_implemented}
:https -> do_connect(uri, opts)
_ -> {:error, :bad_scheme}
end
end
defp do_connect(uri, opts) do
:ssl.start()
ssl_opts = options(opts[:ssl])
:ssl.connect(uri, opts[:port], ssl_opts)
end
@spec options(Keyword.t | nil) :: [...]
def options(nil), do: options([])
def options(opts) do
opts ++ [
{:active, :once},
{:packet, :raw},
{:reuseaddr, false},
{:alpn_advertised_protocols, [<<"h2">>]},
:binary
]
end
end