diff options
author | Alexey Shchepin <alexey@process-one.net> | 2004-08-01 20:12:20 +0000 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2004-08-01 20:12:20 +0000 |
commit | 73d7e1161e4e208338eb3e28c37462277499eeb5 (patch) | |
tree | 1d31a7015048caf378d4c048d11a2b6314be93de /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.erl | 41 |
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) -> |