diff options
Diffstat (limited to 'lib/ssl/examples/src')
-rw-r--r-- | lib/ssl/examples/src/Makefile | 78 | ||||
-rw-r--r-- | lib/ssl/examples/src/client_server.erl | 85 |
2 files changed, 163 insertions, 0 deletions
diff --git a/lib/ssl/examples/src/Makefile b/lib/ssl/examples/src/Makefile new file mode 100644 index 0000000000..46c0507b3a --- /dev/null +++ b/lib/ssl/examples/src/Makefile @@ -0,0 +1,78 @@ +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 2003-2009. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% +# + +# + +include $(ERL_TOP)/make/target.mk +include $(ERL_TOP)/make/$(TARGET)/otp.mk + +# ---------------------------------------------------- +# Application version +# ---------------------------------------------------- +include ../../vsn.mk +VSN=$(SSL_VSN) + +# ---------------------------------------------------- +# Release directory specification +# ---------------------------------------------------- +RELSYSDIR = $(RELEASE_PATH)/lib/ssl-$(VSN) + +# ---------------------------------------------------- +# Common Macros +# ---------------------------------------------------- +EXTRA_ERLC_FLAGS = +warn_unused_vars +ERL_COMPILE_FLAGS += $(EXTRA_ERLC_FLAGS) + + +MODULES = client_server + +ERL_FILES= $(MODULES:%=%.erl) + +TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR)) + +# ---------------------------------------------------- +# Targets +# ---------------------------------------------------- + +debug opt: $(TARGET_FILES) + +clean: + rm -fr $(TARGET_FILES) *~ *.beam + +docs: + +# ---------------------------------------------------- +# Release Target +# ---------------------------------------------------- +include $(ERL_TOP)/make/otp_release_targets.mk + +release_spec: opt + $(INSTALL_DIR) $(RELSYSDIR)/examples/src + $(INSTALL_DIR) $(RELSYSDIR)/examples/ebin + (cd ..; tar cf - src ebin | (cd $(RELSYSDIR)/examples; tar xf -)) + chmod -f -R ug+w $(RELSYSDIR)/examples + +release_docs_spec: + + + + + + + diff --git a/lib/ssl/examples/src/client_server.erl b/lib/ssl/examples/src/client_server.erl new file mode 100644 index 0000000000..baf5a9185e --- /dev/null +++ b/lib/ssl/examples/src/client_server.erl @@ -0,0 +1,85 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2003-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% + +%%% Purpose: Example of SSL client and server using example certificates. + +-module(client_server). + +-export([start/0, start/1, init_connect/1]). + +start() -> + start([ssl, subject]). + +start(CertOpts) -> + %% Start ssl application + application:start(ssl), + + %% Always seed + ssl:seed("ellynatefttidppohjeh"), + + %% Let the current process be the server that listens and accepts + %% Listen + {ok, LSock} = ssl:listen(0, mk_opts(listen)), + {ok, {_, LPort}} = ssl:sockname(LSock), + io:fwrite("Listen: port = ~w.~n", [LPort]), + + %% Spawn the client process that connects to the server + spawn(?MODULE, init_connect, [{LPort, CertOpts}]), + + %% Accept + {ok, ASock} = ssl:transport_accept(LSock), + ok = ssl:ssl_accept(ASock), + io:fwrite("Accept: accepted.~n"), + {ok, Cert} = ssl:peercert(ASock, CertOpts), + io:fwrite("Accept: peer cert:~n~p~n", [Cert]), + io:fwrite("Accept: sending \"hello\".~n"), + ssl:send(ASock, "hello"), + {error, closed} = ssl:recv(ASock, 0), + io:fwrite("Accept: detected closed.~n"), + ssl:close(ASock), + io:fwrite("Listen: closing and terminating.~n"), + ssl:close(LSock), + application:stop(ssl). + + +%% Client connect +init_connect({LPort, CertOpts}) -> + {ok, Host} = inet:gethostname(), + {ok, CSock} = ssl:connect(Host, LPort, mk_opts(connect)), + io:fwrite("Connect: connected.~n"), + {ok, Cert} = ssl:peercert(CSock, CertOpts), + io:fwrite("Connect: peer cert:~n~p~n", [Cert]), + {ok, Data} = ssl:recv(CSock, 0), + io:fwrite("Connect: got data: ~p~n", [Data]), + io:fwrite("Connect: closing and terminating.~n"), + ssl:close(CSock). + +mk_opts(listen) -> + mk_opts("server"); +mk_opts(connect) -> + mk_opts("client"); +mk_opts(Role) -> + Dir = filename:join([code:lib_dir(ssl), "examples", "certs", "etc"]), + [{active, false}, + {verify, 2}, + {depth, 2}, + {cacertfile, filename:join([Dir, Role, "cacerts.pem"])}, + {certfile, filename:join([Dir, Role, "cert.pem"])}, + {keyfile, filename:join([Dir, Role, "key.pem"])}]. + |