1 |
|
%%%---------------------------------------------------------------------- |
2 |
|
%%% File : mongoose_transport.erl |
3 |
|
%%% Author : Piotr Nosek <piotr.nosek@erlang-solutions.com> |
4 |
|
%%% Purpose : TransportMod behaviour |
5 |
|
%%% Created : 18 Jan 2017 |
6 |
|
%%%---------------------------------------------------------------------- |
7 |
|
|
8 |
|
-module(mongoose_transport). |
9 |
|
-author('piotr.nosek@erlang-solutions.com'). |
10 |
|
|
11 |
|
-include_lib("public_key/include/public_key.hrl"). |
12 |
|
%%---------------------------------------------------------------------- |
13 |
|
%% Types |
14 |
|
%%---------------------------------------------------------------------- |
15 |
|
|
16 |
|
-type t() :: any(). |
17 |
|
-type send_xml_input() :: {xmlstreamelement, exml:element()} |
18 |
|
| jlib:xmlstreamstart() |
19 |
|
| jlib:xmlstreamend(). |
20 |
|
-type peer() :: {inet:ip_address(), inet:port_number()}. |
21 |
|
-type peername_return() :: {ok, peer()} | {error, inet:posix()}. |
22 |
|
-type peercert_return() :: no_peer_cert | {ok, #'Certificate'{}}. |
23 |
|
|
24 |
|
-export_type([t/0, send_xml_input/0, peer/0, peername_return/0, peercert_return/0]). |
25 |
|
|
26 |
|
%%---------------------------------------------------------------------- |
27 |
|
%% Callback declarations |
28 |
|
%%---------------------------------------------------------------------- |
29 |
|
|
30 |
|
-callback starttls(Transport :: t(), TLSOpts :: list()) -> t(). |
31 |
|
|
32 |
|
-callback starttls(Transport :: t(), TLSOpts :: list(), Data :: binary()) -> t(). |
33 |
|
|
34 |
|
-callback monitor(Transport :: t()) -> MonitorRef :: reference(). |
35 |
|
|
36 |
|
-callback send_xml(Transport :: t(), Data :: send_xml_input()) -> ok. |
37 |
|
|
38 |
|
-callback peername(Transport :: t()) -> peername_return(). |
39 |
|
|
40 |
|
%%---------------------------------------------------------------------- |
41 |
|
%% API |
42 |
|
%%---------------------------------------------------------------------- |
43 |
|
|
44 |
|
-export([starttls/3, starttls/4, monitor/2, send_xml/3, peername/2, |
45 |
|
get_peer_certificate/2]). |
46 |
|
|
47 |
|
-ignore_xref([behaviour_info/1]). |
48 |
|
|
49 |
|
-spec starttls(TransportMod :: module(), Transport :: t(), TLSOpts :: list()) -> t(). |
50 |
964 |
starttls(TransportMod, Transport, TLSOpts) -> TransportMod:starttls(Transport, TLSOpts). |
51 |
|
|
52 |
|
-spec starttls(TransportMod :: module(), Transport :: t(), TLSOpts :: list(), binary()) -> t(). |
53 |
92 |
starttls(TransportMod, Transport, TLSOpts, Data) -> TransportMod:starttls(Transport, TLSOpts, Data). |
54 |
|
|
55 |
|
-spec monitor(TransportMod :: module(), Transport :: t()) -> reference(). |
56 |
3591 |
monitor(TransportMod, Transport) -> TransportMod:monitor(Transport). |
57 |
|
|
58 |
|
-spec send_xml(TransportMod :: module(), Transport :: t(), Data :: send_xml_input()) -> ok. |
59 |
1382 |
send_xml(TransportMod, Transport, Data) -> TransportMod:send_xml(Transport, Data). |
60 |
|
|
61 |
|
-spec peername(TransportMod :: module(), Transport :: t()) -> peername_return(). |
62 |
4057 |
peername(TransportMod, Transport) -> TransportMod:peername(Transport). |
63 |
|
|
64 |
|
-spec get_peer_certificate(TransportMod :: module(), Transport :: t()) -> peercert_return(). |
65 |
3365 |
get_peer_certificate(TransportMod, Transport) -> TransportMod:get_peer_certificate(Transport). |