Skip to content

Commit

Permalink
Merge pull request #90 from efine/feature/peercert
Browse files Browse the repository at this point in the history
Add support for getting peer cert when using TLS
  • Loading branch information
joedevivo authored Sep 2, 2016
2 parents 42667a9 + 63c9460 commit d59b541
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/h2_connection.erl
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
send_promise/4,
get_response/2,
get_peer/1,
get_peercert/1,
get_streams/1,
send_window_update/2,
send_frame/2
Expand Down Expand Up @@ -241,6 +242,11 @@ send_body(Pid, StreamId, Body, Opts) ->
get_peer(Pid) ->
gen_fsm:sync_send_all_state_event(Pid, get_peer).

-spec get_peercert(pid()) ->
{ok, binary()} | {error, term()}.
get_peercert(Pid) ->
gen_fsm:sync_send_all_state_event(Pid, get_peercert).

-spec is_push(pid()) -> boolean().
is_push(Pid) ->
gen_fsm:sync_send_all_state_event(Pid, is_push).
Expand Down Expand Up @@ -1099,6 +1105,18 @@ handle_sync_event(get_peer, _F, StateName,
{ok, _AddrPort}=OK ->
{reply, OK, StateName, Conn}
end;
handle_sync_event(get_peercert, _F, StateName,
#connection{
socket={Transport,_}=Socket
}=Conn) ->
case sock:peercert(Socket) of
{error, _}=Error ->
lager:warning("failed to fetch peer cert for ~p socket",
[Transport]),
{reply, Error, StateName, Conn};
{ok, _Cert}=OK ->
{reply, OK, StateName, Conn}
end;
handle_sync_event(_E, _F, StateName,
#connection{}=Conn) ->
{next_state, StateName, Conn}.
Expand Down
6 changes: 6 additions & 0 deletions src/sock.erl
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
recv/3,
close/1,
peername/1,
peercert/1,
setopts/2
]).

Expand Down Expand Up @@ -61,6 +62,11 @@ peername({ssl, Socket}) ->
peername({gen_tcp, Socket}) ->
inet:peername(Socket).

peercert({ssl, Socket}) ->
ssl:peercert(Socket);
peercert({gen_tcp, _Socket}) ->
{error, unsupported}.

setopts({ssl, Socket}, Opts) ->
ssl:setopts(Socket, Opts);
setopts({gen_tcp, Socket}, Opts) ->
Expand Down

0 comments on commit d59b541

Please sign in to comment.