Skip to content

Instantly share code, notes, and snippets.

@5HT
Created June 27, 2023 18:50
Show Gist options
  • Save 5HT/5784c0b1a373587a78572e8a0ed95888 to your computer and use it in GitHub Desktop.
Save 5HT/5784c0b1a373587a78572e8a0ed95888 to your computer and use it in GitHub Desktop.
main(_) ->
try
start()
catch
ErrT:Err ->
io:format("[ERROR] ~p : ~p~n", [ErrT, Err]),
usage()
end;
main(_) ->
usage().
usage() ->
io:format("usage: repro\n"),
halt(1).
start() ->
ssl:start(),
server(4000).
server(Port) ->
Opts = [
{cacertfile, "/certs/ca_certificate.pem"},
{certfile, "/certs/server_certificate.pem"},
{keyfile, "/certs/server_key.pem"},
{reuseaddr, true},
{active, false}
],
{ok, LSocket} = ssl:listen(Port, Opts),
accept(LSocket).
accept(LSocket) ->
{ok, Socket} = ssl:transport_accept(LSocket),
Pid = spawn(fun() ->
try
ok = ssl:ssl_accept(Socket),
io:format("Connection accepted ~p~n", [Socket]),
send_html(Socket)
catch
_:_ -> ignore
end
end),
ssl:controlling_process(Socket, Pid),
accept(LSocket).
send_html(Socket) ->
ssl:setopts(Socket, [{active, once}]),
receive
{ssl,Sock, _Data} ->
ssl:send(Sock, "HTTP/1.1 200 OK\n"++
"Date: Sun, 18 Oct 2009 08:56:53 GMT\r\n"++
"Last-Modified: Sat, 20 Nov 2004 07:16:26 GMT\r\n"++
"ETag: 10000000565a5-2c-3e94b66c2e680\r\n" ++
"Accept-Ranges: bytes\r\n"++
"Content-Length: 44\r\n"++
"Connection: close\r\n"++
"Content-Type: text/html\r\n"++
"\r\n"++
"<html><script src='myscripts.js'></script><body><h1>It works!</h1></body></html>\r\n");
{ssl_closed, Sock} ->
io:format("Closing socket: ~p~n", [Sock]);
Error ->
io:format("Error on socket: ~p~n", [Error])
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment