-include_lib("ssl/src/ssl_internal.hrl").
-include_lib("ssl/src/ssl_handshake.hrl").
-include("dtls4srtp_record.hrl").
as_client() ->
application:start(crypto),
application:start(asn1),
application:start(public_key),
application:start(ssl),
CertF = "./MyCert.pem",
KeyF = "./MyCert_key.pem",
Dtls = dtls4srtp:new(client, not_specified, undefined, CertF, KeyF)
{ok, Socket} =gen_udp:open(5670, [binary, {active, true}, {recbuf, 8192}]),
Owner = spawn(fun() -> test_loop(Dtls, Socket) end),
gen_udp:controlling_process(Socket, Owner),
%
PeerIPPort = mock_peer_ipport(),
PeerFingerprint = mock_peer_fingerprint(),
Owner ! {start, PeerIPPort, PeerFingerprint},
timer:send_after(3000, Owner, stop).
test_loop(D, Peer, Sock) ->
receive
{start, PeerIpPort, PeerFP} ->
dtls4srtp:set_owner(D, self()),
dtls4srtp:set_peer_cert_fingerprint(D, FPorCrypto)
dtls4srtp:start(D),
test_loop(D, PeerIpPort, Sock);
{dtls, flight, <<_RecordType,254,255,_Epoch:16,_Seq:48,_Len:16, _ContentType, _Bin/binary>>=Data} ->
io:format("Data:~n~p~n", [Data]),
send_flight(Sock, Peer, Data),
test_loop(D, Peer, Sock);
{udp, _Socket, _Addr, _Port, <<0:2,_:1,1:1,_:1,1:1,_:2,_/binary>>=DtlsFlight} ->
dtls4srtp:on_received(D, DtlsFlight),
test_loop(D, Peer, Sock);
stop ->
dtls4srtp:shutdown(D),
io:format("test stopped.~n")
end.
mock_peer_ipport() ->
{"x.x.x.x", 5670}.
mock_peer_fingerprint() ->
{sha256, <<16#aaaaaaaaa...>>}.
send_flight(Sock, {PeerIp, PeerPort}, Data) ->
gen_udp:send(Sock, PeerIp, PeerPort, Data).