Current section
Files
Jump to
Current section
Files
src/stratus_ffi.erl
-module(stratus_ffi).
-export([tcp_shutdown/2, tcp_send/2, ssl_shutdown/2, ssl_send/2, tcp_set_opts/2,
ssl_set_opts/2, ssl_start/0, custom_sni_matcher/0,
ssl_controlling_process/2, tcp_controlling_process/2,
parse_known_socket_reason/1 ]).
tcp_shutdown(Socket, How) ->
case gen_tcp:shutdown(Socket, How) of
ok ->
{ok, nil};
{error, Reason} ->
{error, Reason}
end.
tcp_send(Socket, Packet) ->
case gen_tcp:send(Socket, Packet) of
ok ->
{ok, nil};
{error, Reason} ->
{error, Reason}
end.
ssl_shutdown(Socket, How) ->
case ssl:shutdown(Socket, How) of
ok ->
{ok, nil};
{error, Reason} ->
{error, Reason}
end.
ssl_send(Socket, Packet) ->
case ssl:send(Socket, Packet) of
ok ->
{ok, nil};
{error, Reason} ->
{error, Reason}
end.
tcp_set_opts(Socket, Opts) ->
case inet:setopts(Socket, Opts) of
ok ->
{ok, nil};
{error, Reason} ->
{error, Reason}
end.
ssl_set_opts(Socket, Opts) ->
case ssl:setopts(Socket, Opts) of
ok ->
{ok, nil};
{error, Reason} ->
{error, Reason}
end.
ssl_start() ->
case ssl:start() of
ok ->
{ok, nil};
{error, Reason} ->
{error, Reason}
end.
% Thank you! https://github.com/erlang/otp/issues/4321
custom_sni_matcher() ->
{customize_hostname_check,
[{match_fun, public_key:pkix_verify_hostname_match_fun(https)}]}.
ssl_controlling_process(Socket, NewOwner) ->
case ssl:controlling_process(Socket, NewOwner) of
ok -> {ok, nil};
Error -> Error
end.
tcp_controlling_process(Socket, NewOwner) ->
case gen_tcp:controlling_process(Socket, NewOwner) of
ok -> {ok, nil};
Error -> Error
end.
parse_known_socket_reason(Reason) ->
case Reason of
closed -> {ok, closed};
timeout -> {ok, timeout};
badarg -> {ok, badarg};
terminated -> {ok, terminated};
eaddrinuse -> {ok, eaddrinuse};
eaddrnotavail -> {ok, eaddrnotavail};
eafnosupport -> {ok, eafnosupport};
ealready -> {ok, ealready};
econnaborted -> {ok, econnaborted};
econnrefused -> {ok, econnrefused};
econnreset -> {ok, econnreset};
edestaddrreq -> {ok, edestaddrreq};
ehostdown -> {ok, ehostdown};
ehostunreach -> {ok, ehostunreach};
einprogress -> {ok, einprogress};
eisconn -> {ok, eisconn};
emsgsize -> {ok, emsgsize};
enetdown -> {ok, enetdown};
enetunreach -> {ok, enetunreach};
enopkg -> {ok, enopkg};
enoprotoopt -> {ok, enoprotoopt};
enotconn -> {ok, enotconn};
enotty -> {ok, enotty};
enotsock -> {ok, enotsock};
eproto -> {ok, eproto};
eprotonosupport -> {ok, eprotonosupport};
eprototype -> {ok, eprototype};
esocktnosupport -> {ok, esocktnosupport};
etimedout -> {ok, etimedout};
ewouldblock -> {ok, ewouldblock};
exbadport -> {ok, exbadport};
exbadseq -> {ok, exbadseq};
Unknown -> {error, Unknown}
end.