masque_tcp_proxy_handler (masque v0.7.0)

View Source

Built-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/2 writes 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

accept(Req)

handle_data(Data, State)

-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}}.

handle_eof(State)

-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}}.

handle_info(Other, State)

-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}}.

init(_, Opts)

-spec init(masque_handler:req(), term()) ->
              {ok, #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}} |
              {stop, term()}.

terminate(Reason, State)

-spec terminate(term(), #state{socket :: gen_tcp:socket(), eof_timer :: reference() | undefined}) -> ok.