./ct_report/coverage/mod_global_distrib_transport.COVER.html

1 %%==============================================================================
2 %% Copyright 2017 Erlang Solutions Ltd.
3 %%
4 %% Licensed under the Apache License, Version 2.0 (the "License");
5 %% you may not use this file except in compliance with the License.
6 %% You may obtain a copy of the License at
7 %%
8 %% http://www.apache.org/licenses/LICENSE-2.0
9 %%
10 %% Unless required by applicable law or agreed to in writing, software
11 %% distributed under the License is distributed on an "AS IS" BASIS,
12 %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 %% See the License for the specific language governing permissions and
14 %% limitations under the License.
15 %%==============================================================================
16
17 -module(mod_global_distrib_transport).
18 -author('konrad.zemek@erlang-solutions.com').
19
20 -record(?MODULE, {
21 transport :: fast_tls | gen_tcp,
22 socket :: fast_tls:tls_socket() | gen_tcp:socket()
23 }).
24
25 -type t() :: #?MODULE{}.
26
27 -export([wrap/2, wrap/3, setopts/2, recv_data/2, close/1, send/2, peername/1]).
28 -export_types([t/0]).
29
30 %%--------------------------------------------------------------------
31 %% API
32 %%--------------------------------------------------------------------
33
34 -spec wrap(gen_tcp:socket(), ConnOpts :: map()) -> {ok, t()} | {error, any()}.
35 wrap(Socket, ConnOpts) ->
36
:-(
wrap(Socket, ConnOpts, []).
37
38 -spec wrap(gen_tcp:socket(), ConnOpts :: map(), ExtraOpts :: proplists:proplist()) ->
39 {ok, t()} | {error, any()}.
40 wrap(Socket, #{tls := Opts}, ExtraOpts) ->
41
:-(
case fast_tls:tcp_to_tls(Socket, ExtraOpts ++ maps:to_list(Opts)) of
42
:-(
{ok, TLSSocket} -> {ok, #?MODULE{transport = fast_tls, socket = TLSSocket}};
43
:-(
Error -> Error
44 end;
45 wrap(Socket, #{}, _ExtraOpts) ->
46
:-(
{ok, #?MODULE{transport = gen_tcp, socket = Socket}}.
47
48 -spec setopts(t(), Opts :: proplists:proplist()) -> ok | {error, term()}.
49 setopts(#?MODULE{transport = gen_tcp, socket = Socket}, Opts) ->
50
:-(
inet:setopts(Socket, Opts);
51 setopts(#?MODULE{transport = fast_tls, socket = Socket}, Opts) ->
52
:-(
fast_tls:setopts(Socket, Opts).
53
54 -spec recv_data(t(), Data :: binary()) -> {ok, binary()} | {error, any()}.
55 recv_data(#?MODULE{transport = gen_tcp}, Data) ->
56
:-(
{ok, Data};
57 recv_data(#?MODULE{transport = fast_tls, socket = Socket}, Data) ->
58
:-(
fast_tls:recv_data(Socket, Data).
59
60 -spec close(t()) -> ok | {error, any()}.
61 close(#?MODULE{transport = gen_tcp, socket = Socket}) ->
62
:-(
gen_tcp:close(Socket);
63 close(#?MODULE{transport = fast_tls, socket = Socket}) ->
64
:-(
fast_tls:close(Socket).
65
66 -spec send(t(), Data :: binary()) -> ok | {error, any()}.
67 send(#?MODULE{transport = gen_tcp, socket = Socket}, Data) ->
68
:-(
gen_tcp:send(Socket, Data);
69 send(#?MODULE{transport = fast_tls, socket = Socket}, Data) ->
70
:-(
fast_tls:send(Socket, Data).
71
72 -spec peername(t()) -> {inet:ip_address(), inet:port_number()} | unknown.
73 peername(#?MODULE{transport = gen_tcp, socket = Socket}) ->
74
:-(
normalize_peername(inet:peername(Socket));
75 peername(#?MODULE{transport = fast_tls, socket = Socket}) ->
76
:-(
normalize_peername(fast_tls:peername(Socket)).
77
78 -spec normalize_peername({ok, {inet:ip_address(), inet:port_number()}} | any()) ->
79 {inet:ip_address(), inet:port_number()} | unknown.
80
:-(
normalize_peername({ok, {IP, Port}}) when is_tuple(IP), is_integer(Port) -> {IP, Port};
81
:-(
normalize_peername(_Other) -> unknown.
82
Line Hits Source