diff --git a/src/mtp_abridged.erl b/src/mtp_abridged.erl index 165b9c0..2c059b0 100644 --- a/src/mtp_abridged.erl +++ b/src/mtp_abridged.erl @@ -56,7 +56,7 @@ try_decode_packet_len(Len, LenStripped, Data, St) -> {incomplete, St#st{buffer = Data}} end. --spec encode_packet(binary(), codec()) -> iodata(). +-spec encode_packet(binary(), codec()) -> {iodata(), codec()}. encode_packet(Bin, St) -> Size = byte_size(Bin), Len = Size div 4, diff --git a/src/mtp_codec.erl b/src/mtp_codec.erl index 58c60af..a670e5d 100644 --- a/src/mtp_codec.erl +++ b/src/mtp_codec.erl @@ -19,8 +19,9 @@ -export_type([codec/0]). -type state() :: any(). --type crypto_codec() :: mtb_aes_cbc - | mtp_obfuscated. +-type crypto_codec() :: mtp_aes_cbc + | mtp_obfuscated + | mtp_noop_codec. -type packet_codec() :: mtp_abridged | mtp_full | mtp_intermediate @@ -58,6 +59,7 @@ decompose(#codec{crypto_mod = CryptoMod, crypto_state = CryptoState, %% try_decode_packet(Inner) |> try_decode_packet(Outer) +-spec try_decode_packet(binary(), codec()) -> {ok, binary(), codec()} | {incomplete, codec()}. try_decode_packet(Bin, #codec{crypto_mod = CryptoMod, crypto_state = CryptoSt, packet_mod = PacketMod, @@ -80,6 +82,7 @@ try_decode_packet(Bin, #codec{crypto_mod = CryptoMod, end. %% encode_packet(Outer) |> encode_packet(Inner) +-spec encode_packet(iodata(), codec()) -> {iodata(), codec()}. encode_packet(Bin, #codec{packet_mod = PacketMod, packet_state = PacketSt, crypto_mod = CryptoMod, diff --git a/src/mtp_down_conn.erl b/src/mtp_down_conn.erl index 85d717b..eea9ffb 100644 --- a/src/mtp_down_conn.erl +++ b/src/mtp_down_conn.erl @@ -92,14 +92,9 @@ handle_cast(shutdown, State) -> handle_info({tcp, Sock, Data}, #state{sock = Sock} = S) -> mtp_metric:count_inc([?APP, received, bytes], byte_size(Data), #{labels => [downstream]}), mtp_metric:histogram_observe([?APP, tracker_packet_size, bytes], byte_size(Data), #{labels => [downstream]}), - case handle_downstream_data(Data, S) of - {ok, S1} -> - ok = inet:setopts(Sock, [{active, once}]), - {noreply, S1}; - {error, Reason} -> - lager:error("Error sending tunnelled data to in socket: ~p", [Reason]), - {stop, normal, S} - end; + {ok, S1} = handle_downstream_data(Data, S), + ok = inet:setopts(Sock, [{active, once}]), + {noreply, S1}; handle_info({tcp_closed, Sock}, #state{sock = Sock} = State) -> {stop, normal, State}; handle_info({tcp_error, Sock, Reason}, #state{sock = Sock} = State) -> diff --git a/src/mtp_handler.erl b/src/mtp_handler.erl index 3539db7..aa721d2 100644 --- a/src/mtp_handler.erl +++ b/src/mtp_handler.erl @@ -44,7 +44,7 @@ transport :: transport(), codec :: mtp_codec:codec() | undefined, - down :: mtp_down_conn:handle(), + down :: mtp_down_conn:handle() | undefined, dc_id :: integer(), ad_tag :: binary(), @@ -88,7 +88,7 @@ ranch_init({Ref, Transport, Opts}) -> {buffer, BufSize} ]), gen_server:enter_loop(?MODULE, [], State); - error -> + {stop, error} -> exit(normal) end. @@ -114,7 +114,7 @@ init({Socket, Transport, [Name, Secret, Tag]}) -> {error, Reason} -> mtp_metric:count_inc([?APP, in_connection_closed, total], 1, #{labels => [Name]}), lager:info("Can't read peername: ~p", [Reason]), - error + {stop, error} end. handle_call(_Request, _From, State) -> @@ -123,13 +123,8 @@ handle_call(_Request, _From, State) -> handle_cast({proxy_ans, Down, Data}, #state{down = Down} = S) -> %% telegram server -> proxy - case up_send(Data, S) of - {ok, S1} -> - maybe_check_health(bump_timer(S1)); - {error, Reason} -> - lager:error("Error sending tunnelled data to in socket: ~p", [Reason]), - {stop, normal, S} - end; + {ok, S1} = up_send(Data, S), + maybe_check_health(bump_timer(S1)); handle_cast({close_ext, Down}, #state{down = Down, sock = USock, transport = UTrans} = S) -> lager:debug("asked to close connection by downstream"), ok = UTrans:close(USock), diff --git a/src/mtp_intermediate.erl b/src/mtp_intermediate.erl index 3e31698..df5e9ad 100644 --- a/src/mtp_intermediate.erl +++ b/src/mtp_intermediate.erl @@ -63,7 +63,7 @@ try_decode_packet_len(Len, Data, #int_st{padding = Pad} = St) -> {incomplete, St#int_st{buffer = Data}} end. --spec encode_packet(iodata(), codec()) -> iodata(). +-spec encode_packet(iodata(), codec()) -> {iodata(), codec()}. encode_packet(Data, #int_st{padding = Pad} = St) -> Size = iolist_size(Data), Packet = case Pad of diff --git a/src/mtp_secure.erl b/src/mtp_secure.erl index 696fac8..77d7ea2 100644 --- a/src/mtp_secure.erl +++ b/src/mtp_secure.erl @@ -24,6 +24,6 @@ new() -> try_decode_packet(Data, St) -> mtp_intermediate:try_decode_packet(Data, St). --spec encode_packet(iodata(), codec()) -> iodata(). +-spec encode_packet(iodata(), codec()) -> {iodata(), codec()}. encode_packet(Data, St) -> mtp_intermediate:encode_packet(Data, St).