summaryrefslogtreecommitdiff
path: root/src/tls/tls.erl
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2004-08-01 20:12:20 +0000
committerAlexey Shchepin <alexey@process-one.net>2004-08-01 20:12:20 +0000
commit73d7e1161e4e208338eb3e28c37462277499eeb5 (patch)
tree1d31a7015048caf378d4c048d11a2b6314be93de /src/tls/tls.erl
parent* examples/extauth/check_pass_null.pl: A reference "null" (diff)
* src/tls/tls.erl: Added recv_data/2 function
* src/jlib.erl: Added NS_TLS macro * src/ejabberd_receiver.erl: Support for STARTTLS * src/ejabberd_c2s.erl: Likewise SVN Revision: 252
Diffstat (limited to 'src/tls/tls.erl')
-rw-r--r--src/tls/tls.erl41
1 files changed, 22 insertions, 19 deletions
diff --git a/src/tls/tls.erl b/src/tls/tls.erl
index edf94a16..361c92fc 100644
--- a/src/tls/tls.erl
+++ b/src/tls/tls.erl
@@ -15,7 +15,7 @@
-export([start/0, start_link/0,
tcp_to_tls/2, tls_to_tcp/1,
send/2,
- recv/2, recv/3,
+ recv/2, recv/3, recv_data/2,
close/1,
test/0]).
@@ -86,7 +86,6 @@ tcp_to_tls(TCPSocket, Options) ->
{value, {certfile, CertFile}} ->
ok = erl_ddll:load_driver(ejabberd:get_so_path(), tls_drv),
Port = open_port({spawn, tls_drv}, [binary]),
- io:format("open_port: ~p~n", [Port]),
case port_control(Port, ?SET_CERTIFICATE_FILE,
CertFile ++ [0]) of
<<0>> ->
@@ -104,23 +103,27 @@ tls_to_tcp(#tlssock{tcpsock = TCPSocket, tlsport = Port}) ->
recv(Socket, Length) ->
recv(Socket, Length, infinity).
-recv(#tlssock{tcpsock = TCPSocket, tlsport = Port}, Length, Timeout) ->
+recv(#tlssock{tcpsock = TCPSocket, tlsport = Port} = TLSSock,
+ Length, Timeout) ->
case gen_tcp:recv(TCPSocket, Length, Timeout) of
{ok, Packet} ->
- case port_control(Port, ?SET_ENCRYPTED_INPUT, Packet) of
- <<0>> ->
- case port_control(Port, ?GET_DECRYPTED_INPUT, []) of
- <<0, In/binary>> ->
- case port_control(Port, ?GET_ENCRYPTED_OUTPUT, []) of
- <<0, Out/binary>> ->
- case gen_tcp:send(TCPSocket, Out) of
- ok ->
- {ok, In};
- Error ->
- Error
- end;
- <<1, Error/binary>> ->
- {error, binary_to_list(Error)}
+ recv_data(TLSSock, Packet);
+ {error, _Reason} = Error ->
+ Error
+ end.
+
+recv_data(#tlssock{tcpsock = TCPSocket, tlsport = Port}, Packet) ->
+ case port_control(Port, ?SET_ENCRYPTED_INPUT, Packet) of
+ <<0>> ->
+ case port_control(Port, ?GET_DECRYPTED_INPUT, []) of
+ <<0, In/binary>> ->
+ case port_control(Port, ?GET_ENCRYPTED_OUTPUT, []) of
+ <<0, Out/binary>> ->
+ case gen_tcp:send(TCPSocket, Out) of
+ ok ->
+ {ok, In};
+ Error ->
+ Error
end;
<<1, Error/binary>> ->
{error, binary_to_list(Error)}
@@ -128,8 +131,8 @@ recv(#tlssock{tcpsock = TCPSocket, tlsport = Port}, Length, Timeout) ->
<<1, Error/binary>> ->
{error, binary_to_list(Error)}
end;
- {error, _Reason} = Error ->
- Error
+ <<1, Error/binary>> ->
+ {error, binary_to_list(Error)}
end.
send(#tlssock{tcpsock = TCPSocket, tlsport = Port}, Packet) ->