masque_tcp_proxy_handler (masque v0.7.0)
View SourceBuilt-in MASQUE handler that bridges a CONNECT-TCP tunnel to a real TCP connection on the server.
For every accepted tunnel the handler resolves the target host, opens a gen_tcp connection, and relays bytes both ways:
- Client-to-target:
handle_data/2writes bytes to the TCP socket. - Target-to-client:
{tcp, Socket, Bytes}messages arrive on the session and are emitted as{send_data, Bytes}actions. - Target FIN:
{tcp_closed, Socket}closes the tunnel.
Accepts the same policy hooks as the UDP proxy (allow, resolver, family), plus connect_timeout (default 5000 ms).
Summary
Functions
-spec accept(masque_handler:req()) -> masque_handler:accept_result().
-spec handle_data(binary(), #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}) -> {ok, #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}} | {stop, term(), #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}}.
-spec handle_eof(#state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}) -> {ok, #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}} | {stop, term(), #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}}.
-spec handle_info(term(), #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}) -> {ok, #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}} | {ok, #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}, [term()]} | {stop, term(), #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}}.
-spec init(masque_handler:req(), term()) -> {ok, #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}} | {stop, term()}.
-spec terminate(term(), #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}) -> ok.