fix proto

This commit is contained in:
anlicheng 2026-02-14 23:58:09 +08:00
parent 77ddabbf43
commit 06e52f18ce
8 changed files with 162 additions and 117 deletions

View File

@ -74,6 +74,9 @@
-define(STUN_ATTR_CHANGE_PORT, 1). -define(STUN_ATTR_CHANGE_PORT, 1).
-define(STUN_ATTR_CHANGE_PEER, 2). -define(STUN_ATTR_CHANGE_PEER, 2).
%%
-define(PACKET_WELCOME, 16#4F).
%% %%
-define(PACKET_STUN_DATA, 16#FF). -define(PACKET_STUN_DATA, 16#FF).

View File

@ -157,7 +157,8 @@
mac = <<>> :: iodata() | undefined, % = 4, optional mac = <<>> :: iodata() | undefined, % = 4, optional
ip = 0 :: non_neg_integer() | undefined, % = 5, optional, 32 bits ip = 0 :: non_neg_integer() | undefined, % = 5, optional, 32 bits
nat_type = 0 :: non_neg_integer() | undefined, % = 6, optional, 32 bits nat_type = 0 :: non_neg_integer() | undefined, % = 6, optional, 32 bits
v6_info :: sdlan_pb:sdl_v6_info() | undefined % = 7, optional v6_info :: sdlan_pb:sdl_v6_info() | undefined, % = 7, optional
session_token = <<>> :: iodata() | undefined % = 8, optional
}). }).
-endif. -endif.

View File

@ -35,7 +35,7 @@
%% %%
max_packet_size = 16384, max_packet_size = 16384,
%% %%
heartbeat_interval = 5000, heartbeat_sec = 10,
stream :: undefined | quicer:stream_handle(), stream :: undefined | quicer:stream_handle(),
%% framing的解析 %% framing的解析
@ -80,8 +80,8 @@ start_link(Conn, Limits) when is_list(Limits) ->
%% process to initialize. %% process to initialize.
init([Conn, Limits]) -> init([Conn, Limits]) ->
MaxPacketSize = proplists:get_value(max_packet_size, Limits, 16384), MaxPacketSize = proplists:get_value(max_packet_size, Limits, 16384),
HeartbeatSec = proplists:get_value(heartbeat_sec, Limits, 5), HeartbeatSec = proplists:get_value(heartbeat_sec, Limits, 10),
{ok, initializing, #state{conn = Conn, max_packet_size = MaxPacketSize, heartbeat_interval = HeartbeatSec * 1000}, [{next_event, internal, do_init}]}. {ok, initializing, #state{conn = Conn, max_packet_size = MaxPacketSize, heartbeat_sec = HeartbeatSec}, [{next_event, internal, do_init}]}.
%% @private %% @private
%% @doc This function is called by a gen_statem when it needs to find out %% @doc This function is called by a gen_statem when it needs to find out
@ -94,10 +94,19 @@ callback_mode() ->
%% gen_statem receives an event from call/2, cast/2, or as a normal %% gen_statem receives an event from call/2, cast/2, or as a normal
%% process message, this function is called. %% process message, this function is called.
handle_event(internal, do_init, initializing, State=#state{conn = Conn}) -> handle_event(internal, do_init, initializing, State=#state{conn = Conn, max_packet_size = MaxPacketSize, heartbeat_sec = HeartbeatSec}) ->
case quicer:accept_stream(Conn, #{active => true}) of case quicer:accept_stream(Conn, #{active => true}) of
{ok, Stream} -> {ok, Stream} ->
logger:debug("[sdlan_quic_channel] get stream: ~p", [Stream]), %%
WelcomePkt = sdlan_pb:encode_msg(#sdl_welcome{
version = 1,
max_bidi_streams = 1,
max_packet_size = MaxPacketSize,
heartbeat_sec = HeartbeatSec
}),
{ok, _} = quicer:send(Stream, <<0:32, ?PACKET_WELCOME, WelcomePkt/binary>>),
logger:debug("[sdlan_quic_channel] get stream: ~p, send welcome", [Stream]),
{next_state, initialized, State#state{stream = Stream}}; {next_state, initialized, State#state{stream = Stream}};
{error, Reason} -> {error, Reason} ->
logger:error("[sdlan_quic_channel] accept stream failed: ~p", [Reason]), logger:error("[sdlan_quic_channel] accept stream failed: ~p", [Reason]),

View File

@ -60,6 +60,6 @@ init([]) ->
%%% Internal functions %%% Internal functions
%%%=================================================================== %%%===================================================================
-spec start_channel(NConn :: quicer:connection_handle(), Limits :: proplists()) -> supervisor:startchild_ret(). -spec start_channel(NConn :: quicer:connection_handle(), Limits :: proplists:proplist()) -> supervisor:startchild_ret().
start_channel(NConn, Limits) when is_list(Limits) -> start_channel(NConn, Limits) when is_list(Limits) ->
supervisor:start_child(?MODULE, [NConn, Limits]). supervisor:start_child(?MODULE, [NConn, Limits]).

View File

@ -10,7 +10,6 @@
-author("anlicheng"). -author("anlicheng").
-include("sdlan.hrl"). -include("sdlan.hrl").
-include("sdlan_pb.hrl"). -include("sdlan_pb.hrl").
-include("sdlan_tables.hrl").
-behaviour(gen_server). -behaviour(gen_server).

View File

@ -628,7 +628,7 @@ encode_msg_sdl_network_shutdown_event(#sdl_network_shutdown_event{message = F1},
encode_msg_sdl_stun_request(Msg, TrUserData) -> encode_msg_sdl_stun_request(Msg, <<>>, TrUserData). encode_msg_sdl_stun_request(Msg, TrUserData) -> encode_msg_sdl_stun_request(Msg, <<>>, TrUserData).
encode_msg_sdl_stun_request(#sdl_stun_request{cookie = F1, client_id = F2, network_id = F3, mac = F4, ip = F5, nat_type = F6, v6_info = F7}, Bin, TrUserData) -> encode_msg_sdl_stun_request(#sdl_stun_request{cookie = F1, client_id = F2, network_id = F3, mac = F4, ip = F5, nat_type = F6, v6_info = F7, session_token = F8}, Bin, TrUserData) ->
B1 = if F1 == undefined -> Bin; B1 = if F1 == undefined -> Bin;
true -> true ->
begin begin
@ -685,8 +685,18 @@ encode_msg_sdl_stun_request(#sdl_stun_request{cookie = F1, client_id = F2, netwo
end end
end end
end, end,
if F7 == undefined -> B6; B7 = if F7 == undefined -> B6;
true -> begin TrF7 = id(F7, TrUserData), e_mfield_sdl_stun_request_v6_info(TrF7, <<B6/binary, 58>>, TrUserData) end true -> begin TrF7 = id(F7, TrUserData), e_mfield_sdl_stun_request_v6_info(TrF7, <<B6/binary, 58>>, TrUserData) end
end,
if F8 == undefined -> B7;
true ->
begin
TrF8 = id(F8, TrUserData),
case iolist_size(TrF8) of
0 -> B7;
_ -> e_type_bytes(TrF8, <<B7/binary, 66>>, TrUserData)
end
end
end. end.
encode_msg_sdl_stun_reply(Msg, TrUserData) -> encode_msg_sdl_stun_reply(Msg, <<>>, TrUserData). encode_msg_sdl_stun_reply(Msg, TrUserData) -> encode_msg_sdl_stun_reply(Msg, <<>>, TrUserData).
@ -2044,78 +2054,84 @@ skip_32_sdl_network_shutdown_event(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUse
skip_64_sdl_network_shutdown_event(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_network_shutdown_event(Rest, Z1, Z2, F, F@_1, TrUserData). skip_64_sdl_network_shutdown_event(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_network_shutdown_event(Rest, Z1, Z2, F, F@_1, TrUserData).
decode_msg_sdl_stun_request(Bin, TrUserData) -> decode_msg_sdl_stun_request(Bin, TrUserData) ->
dfp_read_field_def_sdl_stun_request(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(0, TrUserData), id(undefined, TrUserData), TrUserData). dfp_read_field_def_sdl_stun_request(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(0, TrUserData), id(undefined, TrUserData), id(<<>>, TrUserData), TrUserData).
dfp_read_field_def_sdl_stun_request(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> d_field_sdl_stun_request_cookie(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); dfp_read_field_def_sdl_stun_request(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_stun_request_cookie(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
dfp_read_field_def_sdl_stun_request(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> d_field_sdl_stun_request_client_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); dfp_read_field_def_sdl_stun_request(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_stun_request_client_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
dfp_read_field_def_sdl_stun_request(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> d_field_sdl_stun_request_network_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); dfp_read_field_def_sdl_stun_request(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_stun_request_network_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
dfp_read_field_def_sdl_stun_request(<<34, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> d_field_sdl_stun_request_mac(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); dfp_read_field_def_sdl_stun_request(<<34, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_stun_request_mac(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
dfp_read_field_def_sdl_stun_request(<<40, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> d_field_sdl_stun_request_ip(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); dfp_read_field_def_sdl_stun_request(<<40, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_stun_request_ip(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
dfp_read_field_def_sdl_stun_request(<<48, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> d_field_sdl_stun_request_nat_type(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); dfp_read_field_def_sdl_stun_request(<<48, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_stun_request_nat_type(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
dfp_read_field_def_sdl_stun_request(<<58, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> d_field_sdl_stun_request_v6_info(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); dfp_read_field_def_sdl_stun_request(<<58, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_stun_request_v6_info(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
dfp_read_field_def_sdl_stun_request(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, _) -> #sdl_stun_request{cookie = F@_1, client_id = F@_2, network_id = F@_3, mac = F@_4, ip = F@_5, nat_type = F@_6, v6_info = F@_7}; dfp_read_field_def_sdl_stun_request(<<66, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> d_field_sdl_stun_request_session_token(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
dfp_read_field_def_sdl_stun_request(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> dg_read_field_def_sdl_stun_request(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData). dfp_read_field_def_sdl_stun_request(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, _) ->
#sdl_stun_request{cookie = F@_1, client_id = F@_2, network_id = F@_3, mac = F@_4, ip = F@_5, nat_type = F@_6, v6_info = F@_7, session_token = F@_8};
dfp_read_field_def_sdl_stun_request(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> dg_read_field_def_sdl_stun_request(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData).
dg_read_field_def_sdl_stun_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_stun_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 32 - 7 ->
dg_read_field_def_sdl_stun_request(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); dg_read_field_def_sdl_stun_request(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
dg_read_field_def_sdl_stun_request(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> dg_read_field_def_sdl_stun_request(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) ->
Key = X bsl N + Acc, Key = X bsl N + Acc,
case Key of case Key of
8 -> d_field_sdl_stun_request_cookie(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); 8 -> d_field_sdl_stun_request_cookie(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
18 -> d_field_sdl_stun_request_client_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); 18 -> d_field_sdl_stun_request_client_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
24 -> d_field_sdl_stun_request_network_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); 24 -> d_field_sdl_stun_request_network_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
34 -> d_field_sdl_stun_request_mac(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); 34 -> d_field_sdl_stun_request_mac(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
40 -> d_field_sdl_stun_request_ip(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); 40 -> d_field_sdl_stun_request_ip(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
48 -> d_field_sdl_stun_request_nat_type(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); 48 -> d_field_sdl_stun_request_nat_type(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
58 -> d_field_sdl_stun_request_v6_info(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); 58 -> d_field_sdl_stun_request_v6_info(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
66 -> d_field_sdl_stun_request_session_token(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
_ -> _ ->
case Key band 7 of case Key band 7 of
0 -> skip_varint_sdl_stun_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); 0 -> skip_varint_sdl_stun_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
1 -> skip_64_sdl_stun_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); 1 -> skip_64_sdl_stun_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
2 -> skip_length_delimited_sdl_stun_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); 2 -> skip_length_delimited_sdl_stun_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
3 -> skip_group_sdl_stun_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); 3 -> skip_group_sdl_stun_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
5 -> skip_32_sdl_stun_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) 5 -> skip_32_sdl_stun_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData)
end end
end; end;
dg_read_field_def_sdl_stun_request(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, _) -> #sdl_stun_request{cookie = F@_1, client_id = F@_2, network_id = F@_3, mac = F@_4, ip = F@_5, nat_type = F@_6, v6_info = F@_7}. dg_read_field_def_sdl_stun_request(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, _) ->
#sdl_stun_request{cookie = F@_1, client_id = F@_2, network_id = F@_3, mac = F@_4, ip = F@_5, nat_type = F@_6, v6_info = F@_7, session_token = F@_8}.
d_field_sdl_stun_request_cookie(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) when N < 57 -> d_field_sdl_stun_request_cookie(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 ->
d_field_sdl_stun_request_cookie(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); d_field_sdl_stun_request_cookie(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
d_field_sdl_stun_request_cookie(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> d_field_sdl_stun_request_cookie(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) ->
{NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest},
dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData). dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData).
d_field_sdl_stun_request_client_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) when N < 57 -> d_field_sdl_stun_request_client_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 ->
d_field_sdl_stun_request_client_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); d_field_sdl_stun_request_client_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
d_field_sdl_stun_request_client_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> d_field_sdl_stun_request_client_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) ->
{NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, {NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end,
dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData). dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData).
d_field_sdl_stun_request_network_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) when N < 57 -> d_field_sdl_stun_request_network_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 ->
d_field_sdl_stun_request_network_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); d_field_sdl_stun_request_network_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
d_field_sdl_stun_request_network_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, F@_6, F@_7, TrUserData) -> d_field_sdl_stun_request_network_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) ->
{NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest},
dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, F@_6, F@_7, TrUserData). dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData).
d_field_sdl_stun_request_mac(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) when N < 57 -> d_field_sdl_stun_request_mac(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); d_field_sdl_stun_request_mac(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 ->
d_field_sdl_stun_request_mac(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, F@_5, F@_6, F@_7, TrUserData) -> d_field_sdl_stun_request_mac(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
d_field_sdl_stun_request_mac(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, F@_5, F@_6, F@_7, F@_8, TrUserData) ->
{NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, {NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end,
dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, F@_5, F@_6, F@_7, TrUserData). dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, F@_5, F@_6, F@_7, F@_8, TrUserData).
d_field_sdl_stun_request_ip(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) when N < 57 -> d_field_sdl_stun_request_ip(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); d_field_sdl_stun_request_ip(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 ->
d_field_sdl_stun_request_ip(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, F@_6, F@_7, TrUserData) -> d_field_sdl_stun_request_ip(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
d_field_sdl_stun_request_ip(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, F@_6, F@_7, F@_8, TrUserData) ->
{NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest},
dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, F@_6, F@_7, TrUserData). dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, F@_6, F@_7, F@_8, TrUserData).
d_field_sdl_stun_request_nat_type(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) when N < 57 -> d_field_sdl_stun_request_nat_type(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 ->
d_field_sdl_stun_request_nat_type(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); d_field_sdl_stun_request_nat_type(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
d_field_sdl_stun_request_nat_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, _, F@_7, TrUserData) -> d_field_sdl_stun_request_nat_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, _, F@_7, F@_8, TrUserData) ->
{NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest},
dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, NewFValue, F@_7, TrUserData). dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, NewFValue, F@_7, F@_8, TrUserData).
d_field_sdl_stun_request_v6_info(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) when N < 57 -> d_field_sdl_stun_request_v6_info(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 ->
d_field_sdl_stun_request_v6_info(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); d_field_sdl_stun_request_v6_info(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
d_field_sdl_stun_request_v6_info(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, Prev, TrUserData) -> d_field_sdl_stun_request_v6_info(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, Prev, F@_8, TrUserData) ->
{NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bs:Len/binary, Rest2/binary>> = Rest, {id(decode_msg_sdl_v6_info(Bs, TrUserData), TrUserData), Rest2} end, {NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bs:Len/binary, Rest2/binary>> = Rest, {id(decode_msg_sdl_v6_info(Bs, TrUserData), TrUserData), Rest2} end,
dfp_read_field_def_sdl_stun_request(RestF, dfp_read_field_def_sdl_stun_request(RestF,
0, 0,
@ -2130,25 +2146,32 @@ d_field_sdl_stun_request_v6_info(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_
if Prev == undefined -> NewFValue; if Prev == undefined -> NewFValue;
true -> merge_msg_sdl_v6_info(Prev, NewFValue, TrUserData) true -> merge_msg_sdl_v6_info(Prev, NewFValue, TrUserData)
end, end,
F@_8,
TrUserData). TrUserData).
skip_varint_sdl_stun_request(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> skip_varint_sdl_stun_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); d_field_sdl_stun_request_session_token(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 ->
skip_varint_sdl_stun_request(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> dfp_read_field_def_sdl_stun_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData). d_field_sdl_stun_request_session_token(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
d_field_sdl_stun_request_session_token(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, _, TrUserData) ->
{NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end,
dfp_read_field_def_sdl_stun_request(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, NewFValue, TrUserData).
skip_length_delimited_sdl_stun_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) when N < 57 -> skip_varint_sdl_stun_request(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> skip_varint_sdl_stun_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
skip_length_delimited_sdl_stun_request(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData); skip_varint_sdl_stun_request(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> dfp_read_field_def_sdl_stun_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData).
skip_length_delimited_sdl_stun_request(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) ->
skip_length_delimited_sdl_stun_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) when N < 57 ->
skip_length_delimited_sdl_stun_request(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);
skip_length_delimited_sdl_stun_request(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) ->
Length = X bsl N + Acc, Length = X bsl N + Acc,
<<_:Length/binary, Rest2/binary>> = Rest, <<_:Length/binary, Rest2/binary>> = Rest,
dfp_read_field_def_sdl_stun_request(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData). dfp_read_field_def_sdl_stun_request(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData).
skip_group_sdl_stun_request(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> skip_group_sdl_stun_request(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) ->
{_, Rest} = read_group(Bin, FNum), {_, Rest} = read_group(Bin, FNum),
dfp_read_field_def_sdl_stun_request(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData). dfp_read_field_def_sdl_stun_request(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData).
skip_32_sdl_stun_request(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> dfp_read_field_def_sdl_stun_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData). skip_32_sdl_stun_request(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> dfp_read_field_def_sdl_stun_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData).
skip_64_sdl_stun_request(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData) -> dfp_read_field_def_sdl_stun_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, TrUserData). skip_64_sdl_stun_request(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) -> dfp_read_field_def_sdl_stun_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData).
decode_msg_sdl_stun_reply(Bin, TrUserData) -> dfp_read_field_def_sdl_stun_reply(Bin, 0, 0, 0, id(0, TrUserData), TrUserData). decode_msg_sdl_stun_reply(Bin, TrUserData) -> dfp_read_field_def_sdl_stun_reply(Bin, 0, 0, 0, id(0, TrUserData), TrUserData).
@ -2855,8 +2878,8 @@ merge_msg_sdl_network_shutdown_event(#sdl_network_shutdown_event{message = PFmes
end}. end}.
-compile({nowarn_unused_function,merge_msg_sdl_stun_request/3}). -compile({nowarn_unused_function,merge_msg_sdl_stun_request/3}).
merge_msg_sdl_stun_request(#sdl_stun_request{cookie = PFcookie, client_id = PFclient_id, network_id = PFnetwork_id, mac = PFmac, ip = PFip, nat_type = PFnat_type, v6_info = PFv6_info}, merge_msg_sdl_stun_request(#sdl_stun_request{cookie = PFcookie, client_id = PFclient_id, network_id = PFnetwork_id, mac = PFmac, ip = PFip, nat_type = PFnat_type, v6_info = PFv6_info, session_token = PFsession_token},
#sdl_stun_request{cookie = NFcookie, client_id = NFclient_id, network_id = NFnetwork_id, mac = NFmac, ip = NFip, nat_type = NFnat_type, v6_info = NFv6_info}, TrUserData) -> #sdl_stun_request{cookie = NFcookie, client_id = NFclient_id, network_id = NFnetwork_id, mac = NFmac, ip = NFip, nat_type = NFnat_type, v6_info = NFv6_info, session_token = NFsession_token}, TrUserData) ->
#sdl_stun_request{cookie = #sdl_stun_request{cookie =
if NFcookie =:= undefined -> PFcookie; if NFcookie =:= undefined -> PFcookie;
true -> NFcookie true -> NFcookie
@ -2885,6 +2908,10 @@ merge_msg_sdl_stun_request(#sdl_stun_request{cookie = PFcookie, client_id = PFcl
if PFv6_info /= undefined, NFv6_info /= undefined -> merge_msg_sdl_v6_info(PFv6_info, NFv6_info, TrUserData); if PFv6_info /= undefined, NFv6_info /= undefined -> merge_msg_sdl_v6_info(PFv6_info, NFv6_info, TrUserData);
PFv6_info == undefined -> NFv6_info; PFv6_info == undefined -> NFv6_info;
NFv6_info == undefined -> PFv6_info NFv6_info == undefined -> PFv6_info
end,
session_token =
if NFsession_token =:= undefined -> PFsession_token;
true -> NFsession_token
end}. end}.
-compile({nowarn_unused_function,merge_msg_sdl_stun_reply/3}). -compile({nowarn_unused_function,merge_msg_sdl_stun_reply/3}).
@ -3266,7 +3293,7 @@ v_msg_sdl_network_shutdown_event(X, Path, _TrUserData) -> mk_type_error({expecte
-compile({nowarn_unused_function,v_msg_sdl_stun_request/3}). -compile({nowarn_unused_function,v_msg_sdl_stun_request/3}).
-dialyzer({nowarn_function,v_msg_sdl_stun_request/3}). -dialyzer({nowarn_function,v_msg_sdl_stun_request/3}).
v_msg_sdl_stun_request(#sdl_stun_request{cookie = F1, client_id = F2, network_id = F3, mac = F4, ip = F5, nat_type = F6, v6_info = F7}, Path, TrUserData) -> v_msg_sdl_stun_request(#sdl_stun_request{cookie = F1, client_id = F2, network_id = F3, mac = F4, ip = F5, nat_type = F6, v6_info = F7, session_token = F8}, Path, TrUserData) ->
if F1 == undefined -> ok; if F1 == undefined -> ok;
true -> v_type_uint32(F1, [cookie | Path], TrUserData) true -> v_type_uint32(F1, [cookie | Path], TrUserData)
end, end,
@ -3288,6 +3315,9 @@ v_msg_sdl_stun_request(#sdl_stun_request{cookie = F1, client_id = F2, network_id
if F7 == undefined -> ok; if F7 == undefined -> ok;
true -> v_submsg_sdl_v6_info(F7, [v6_info | Path], TrUserData) true -> v_submsg_sdl_v6_info(F7, [v6_info | Path], TrUserData)
end, end,
if F8 == undefined -> ok;
true -> v_type_bytes(F8, [session_token | Path], TrUserData)
end,
ok; ok;
v_msg_sdl_stun_request(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_stun_request}, X, Path). v_msg_sdl_stun_request(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_stun_request}, X, Path).
@ -3515,7 +3545,8 @@ get_msg_defs() ->
#field{name = mac, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []}, #field{name = mac, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []},
#field{name = ip, fnum = 5, rnum = 6, type = uint32, occurrence = defaulty, opts = []}, #field{name = ip, fnum = 5, rnum = 6, type = uint32, occurrence = defaulty, opts = []},
#field{name = nat_type, fnum = 6, rnum = 7, type = uint32, occurrence = defaulty, opts = []}, #field{name = nat_type, fnum = 6, rnum = 7, type = uint32, occurrence = defaulty, opts = []},
#field{name = v6_info, fnum = 7, rnum = 8, type = {msg, sdl_v6_info}, occurrence = optional, opts = []}]}, #field{name = v6_info, fnum = 7, rnum = 8, type = {msg, sdl_v6_info}, occurrence = optional, opts = []},
#field{name = session_token, fnum = 8, rnum = 9, type = bytes, occurrence = defaulty, opts = []}]},
{{msg, sdl_stun_reply}, [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}]}, {{msg, sdl_stun_reply}, [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}]},
{{msg, sdl_data}, {{msg, sdl_data},
[#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, [#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []},
@ -3667,7 +3698,8 @@ find_msg_def(sdl_stun_request) ->
#field{name = mac, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []}, #field{name = mac, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []},
#field{name = ip, fnum = 5, rnum = 6, type = uint32, occurrence = defaulty, opts = []}, #field{name = ip, fnum = 5, rnum = 6, type = uint32, occurrence = defaulty, opts = []},
#field{name = nat_type, fnum = 6, rnum = 7, type = uint32, occurrence = defaulty, opts = []}, #field{name = nat_type, fnum = 6, rnum = 7, type = uint32, occurrence = defaulty, opts = []},
#field{name = v6_info, fnum = 7, rnum = 8, type = {msg, sdl_v6_info}, occurrence = optional, opts = []}]; #field{name = v6_info, fnum = 7, rnum = 8, type = {msg, sdl_v6_info}, occurrence = optional, opts = []},
#field{name = session_token, fnum = 8, rnum = 9, type = bytes, occurrence = defaulty, opts = []}];
find_msg_def(sdl_stun_reply) -> [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}]; find_msg_def(sdl_stun_reply) -> [#field{name = cookie, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}];
find_msg_def(sdl_data) -> find_msg_def(sdl_data) ->
[#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, [#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []},

View File

@ -19,20 +19,11 @@ start() ->
do_start() -> do_start() ->
Port = 1365, Port = 1365,
{ok, Conn} = quicer:connect("localhost", Port, [{alpn, ["punchnet/1.0"]}, {verify, none}], 5000), {ok, Conn} = quicer:connect("localhost", Port, [{alpn, ["punchnet/1.0"]}, {verify, none}], 5000),
receive
{quic, connected, Conn} ->
ok
after 1000 ->
ok
end,
{ok, Stm} = quicer:start_stream(Conn, []), {ok, Stm} = quicer:start_stream(Conn, []),
receive receive
{quic, stream_started, Stm} -> Info ->
ok logger:debug("get info: ~p", [Info])
after 1000 ->
ok
end, end,
Data = <<"ping">>, Data = <<"ping">>,

View File

@ -15,7 +15,7 @@ message SDLV6Info {
// super之间采用了quic协议通讯 // super之间采用了quic协议通讯
// : <<Len:16, Data/binary>> // : <<Len:16, Data/binary>>
// : <<PacketId:32, PacketType:8, Payload/binary>> // : <<PacketType:8, Payload/binary>>
message SDLWelcome { message SDLWelcome {
uint32 version = 1; uint32 version = 1;
@ -29,77 +29,86 @@ message SDLWelcome {
// quic // quic
message SDLEmpty { message SDLEmpty {
uint32 pktId = 1;
} }
// , // ,
message SDLRegisterSuper { message SDLRegisterSuper {
string client_id = 1; uint32 pktId = 1;
string client_id = 2;
// https请求分配了 // https请求分配了
// (network_id, mac, ip, mask_len, hostname) // (network_id, mac, ip, mask_len, hostname)
uint32 network_id = 2; uint32 network_id = 3;
bytes mac = 3; bytes mac = 4;
uint32 ip = 4; uint32 ip = 5;
uint32 mask_len = 5; uint32 mask_len = 6;
string hostname = 6; string hostname = 7;
string pub_key = 7; string pub_key = 8;
// 使http协议请求后端token或者账号密码登录时, access_token; // 使http协议请求后端token或者账号密码登录时, access_token;
// RegisterSuper的时候 (access_token) // RegisterSuper的时候 (access_token)
string access_token = 8; string access_token = 9;
} }
// https的接口里面去完成 // https的接口里面去完成
// quic去通讯session_token校验 // quic去通讯session_token校验
message SDLRegisterSuperAck { message SDLRegisterSuperAck {
bytes aes_key = 1; uint32 pktId = 1;
bytes session_token = 2; bytes aes_key = 2;
bytes session_token = 3;
} }
message SDLRegisterSuperNak { message SDLRegisterSuperNak {
uint32 error_code = 1; uint32 pktId = 1;
string error_message = 2; uint32 error_code = 2;
string error_message = 3;
} }
// //
message SDLQueryInfo { message SDLQueryInfo {
bytes dst_mac = 1; uint32 pktId = 1;
bytes dst_mac = 2;
} }
message SDLPeerInfo { message SDLPeerInfo {
bytes dst_mac = 1; uint32 pktId = 1;
SDLV4Info v4_info = 2; bytes dst_mac = 2;
optional SDLV6Info v6_info = 3; SDLV4Info v4_info = 3;
optional SDLV6Info v6_info = 4;
} }
// ARP查询相关 // ARP查询相关
// arp请求是通过广播的形式获取到的macos这种tun的实现arp请求包的 // arp请求是通过广播的形式获取到的macos这种tun的实现arp请求包的
// mac对应的ip地址的广 // mac对应的ip地址的广
message SDLArpRequest { message SDLArpRequest {
uint32 target_ip = 1; uint32 pktId = 1;
uint32 target_ip = 2;
} }
message SDLArpResponse { message SDLArpResponse {
uint32 target_ip = 1; uint32 pktId = 1;
bytes target_mac = 2; uint32 target_ip = 2;
bytes target_mac = 3;
} }
// //
message SDLPolicyRequest { message SDLPolicyRequest {
uint32 src_identity_id = 1; uint32 pktId = 1;
uint32 dst_identity_id = 2; uint32 src_identity_id = 2;
uint32 version = 3; uint32 dst_identity_id = 3;
uint32 version = 4;
} }
// quic通讯rules部分已经没有了长度限制 // quic通讯rules部分已经没有了长度限制
message SDLPolicyResponse { message SDLPolicyResponse {
uint32 src_identity_id = 1; uint32 pktId = 1;
uint32 dst_identity_id = 2; uint32 src_identity_id = 2;
uint32 dst_identity_id = 3;
// ; // ;
uint32 version = 3; uint32 version = 4;
// 4+1+2 // 4+1+2
bytes rules = 4; bytes rules = 5;
} }
// //
@ -132,6 +141,7 @@ message SDLStunRequest {
uint32 ip = 5; uint32 ip = 5;
uint32 nat_type = 6; uint32 nat_type = 6;
optional SDLV6Info v6_info = 7; optional SDLV6Info v6_info = 7;
bytes session_token = 8;
} }
message SDLStunReply { message SDLStunReply {