From 95acbc70053bae852aceffc42ab7c9d743e7bad1 Mon Sep 17 00:00:00 2001 From: SisMaker <156736github> Date: Fri, 14 Jan 2022 23:46:17 +0800 Subject: [PATCH] =?UTF-8?q?ft:=20=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/eNet.hrl | 1 + src/proxyPt/ntPptAcceptor.erl | 17 +++++++++-------- src/proxyPt/ntPptListener.erl | 11 ++++++----- src/ssl/ntSslAcceptor.erl | 21 +++++++++++---------- src/ssl/ntSslListener.erl | 11 ++++++----- src/tcp/ntTcpAcceptor.erl | 17 +++++++++-------- src/tcp/ntTcpListener.erl | 11 ++++++----- 7 files changed, 48 insertions(+), 41 deletions(-) diff --git a/include/eNet.hrl b/include/eNet.hrl index e143061..9f42460 100644 --- a/include/eNet.hrl +++ b/include/eNet.hrl @@ -25,6 +25,7 @@ -type listenOpt() :: {aptCnt, non_neg_integer()} | {conMod, atom()} | + {conArgs, atom()} | {tcpOpts, [gen_tcp:listen_option()]} | {sslOpts, [ssl:ssl_option()]} | {sslHSTet, timeout()} | diff --git a/src/proxyPt/ntPptAcceptor.erl b/src/proxyPt/ntPptAcceptor.erl index a2fc715..82f36ff 100644 --- a/src/proxyPt/ntPptAcceptor.erl +++ b/src/proxyPt/ntPptAcceptor.erl @@ -8,7 +8,7 @@ -compile({inline_size, 128}). -export([ - start_link/7 + start_link/8 , pptAndHS/5 @@ -23,9 +23,9 @@ ]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% genActor start %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec start_link(list(), timeout(), boolean(), timeout(), inet:socket(), module(), [proc_lib:spawn_option()]) -> {ok, pid()}. -start_link(SslOpts, SslHSTet, ProxyPt, ProxyPtTet, LSock, ConMod, SpawnOpts) -> - proc_lib:start_link(?MODULE, init_it, [self(), {SslOpts, SslHSTet, ProxyPt, ProxyPtTet, LSock, ConMod}], infinity, SpawnOpts). +-spec start_link(list(), timeout(), boolean(), timeout(), inet:socket(), module(), term(), [proc_lib:spawn_option()]) -> {ok, pid()}. +start_link(SslOpts, SslHSTet, ProxyPt, ProxyPtTet, LSock, ConMod, ConArgs, SpawnOpts) -> + proc_lib:start_link(?MODULE, init_it, [self(), {SslOpts, SslHSTet, ProxyPt, ProxyPtTet, LSock, ConMod, ConArgs}], infinity, SpawnOpts). init_it(Parent, Args) -> process_flag(trap_exit, true), @@ -81,26 +81,27 @@ loop(Parent, State) -> , proxyPtTet , ref , conMod + , conArgs , sockMod }). -spec init(Args :: term()) -> ok. -init({SslOpts, SslHSTet, ProxyPt, ProxyPtTet, LSock, ConMod}) -> +init({SslOpts, SslHSTet, ProxyPt, ProxyPtTet, LSock, ConMod, ConArgs}) -> case prim_inet:async_accept(LSock, -1) of {ok, Ref} -> {ok, SockMod} = inet_db:lookup_socket(LSock), - {ok, #state{lSock = LSock, sslOpts = SslOpts, sslHSTet = SslHSTet, proxyPt = ProxyPt, proxyPtTet = ProxyPtTet, ref = Ref, conMod = ConMod, sockMod = SockMod}}; + {ok, #state{lSock = LSock, sslOpts = SslOpts, sslHSTet = SslHSTet, proxyPt = ProxyPt, proxyPtTet = ProxyPtTet, ref = Ref, conMod = ConMod, conArgs = ConArgs, sockMod = SockMod}}; {error, Reason} -> ?ntErr("init prim_inet:async_accept error ~p~n", [Reason]), {stop, Reason} end. -handleMsg({inet_async, LSock, Ref, Msg}, #state{lSock = LSock, sslOpts = SslOpts, sslHSTet = SslHSTet, proxyPt = ProxyPt, proxyPtTet = ProxyPtTet, ref = Ref, conMod = ConMod, sockMod = SockMod} = State) -> +handleMsg({inet_async, LSock, Ref, Msg}, #state{lSock = LSock, sslOpts = SslOpts, sslHSTet = SslHSTet, proxyPt = ProxyPt, proxyPtTet = ProxyPtTet, ref = Ref, conMod = ConMod, conArgs = ConArgs, sockMod = SockMod} = State) -> case Msg of {ok, Sock} -> %% make it look like gen_tcp:accept inet_db:register_socket(Sock, SockMod), - try ConMod:newConn(Sock) of + try ConMod:newConn(Sock, ConArgs) of {ok, Pid} -> gen_tcp:controlling_process(Sock, Pid), Pid ! {?mSockReady, Sock, SslOpts, SslHSTet, ProxyPt, ProxyPtTet}, diff --git a/src/proxyPt/ntPptListener.erl b/src/proxyPt/ntPptListener.erl index 1b11e66..f7bb32a 100644 --- a/src/proxyPt/ntPptListener.erl +++ b/src/proxyPt/ntPptListener.erl @@ -99,7 +99,8 @@ init({AptSupName, Port, ListenOpts}) -> {ok, LSock} -> AptCnt = ?getLValue(aptCnt, ListenOpts, ?AptCnt), ConMod = ?getLValue(conMod, ListenOpts, undefined), - startAcceptor(AptCnt, LSock, AptSupName, ConMod), + ConArgs = ?getLValue(conArgs, ListenOpts, undefined), + startAcceptor(AptCnt, LSock, AptSupName, ConMod, ConArgs), {ok, {LAddr, LPort}} = inet:sockname(LSock), % ?ntInfo("success to listen on ~p ~n", [Port]), {ok, #state{listenAddr = LAddr, listenPort = LPort, lSock = LSock, opts = [{acceptors, AptCnt}, {tcpOpts, LastTcpOpts}]}}; @@ -126,11 +127,11 @@ terminate(_Reason, #state{lSock = LSock, listenAddr = Addr, listenPort = Port}) catch port_close(LSock), ok. -startAcceptor(0, _LSock, _AptSupName, _ConMod) -> +startAcceptor(0, _LSock, _AptSupName, _ConMod, _ConArgs) -> ok; -startAcceptor(N, LSock, AptSupName, ConMod) -> - supervisor:start_child(AptSupName, [LSock, ConMod, []]), - startAcceptor(N - 1, LSock, AptSupName, ConMod). +startAcceptor(N, LSock, AptSupName, ConMod, ConArgs) -> + supervisor:start_child(AptSupName, [LSock, ConMod, ConArgs, []]), + startAcceptor(N - 1, LSock, AptSupName, ConMod, ConArgs). -spec getOpts(pid()) -> [listenOpt()]. getOpts(Listener) -> diff --git a/src/ssl/ntSslAcceptor.erl b/src/ssl/ntSslAcceptor.erl index 9753dde..a9847e6 100644 --- a/src/ssl/ntSslAcceptor.erl +++ b/src/ssl/ntSslAcceptor.erl @@ -7,7 +7,7 @@ -compile({inline_size, 128}). -export([ - start_link/5 + start_link/6 , handshake/3 @@ -22,9 +22,9 @@ ]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% genActor start %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec start_link(list(), timeout(), inet:socket(), module(), [proc_lib:spawn_option()]) -> {ok, pid()}. -start_link(SslOpts, HandshakeTimeout, LSock, ConMod, SpawnOpts) -> - proc_lib:start_link(?MODULE, init_it, [self(), {SslOpts, HandshakeTimeout, LSock, ConMod}], infinity, SpawnOpts). +-spec start_link(list(), timeout(), inet:socket(), module(), term(), [proc_lib:spawn_option()]) -> {ok, pid()}. +start_link(SslOpts, HandshakeTimeout, LSock, ConMod, ConArgs, SpawnOpts) -> + proc_lib:start_link(?MODULE, init_it, [self(), {SslOpts, HandshakeTimeout, LSock, ConMod, ConArgs}], infinity, SpawnOpts). init_it(Parent, Args) -> process_flag(trap_exit, true), @@ -75,32 +75,33 @@ loop(Parent, State) -> -record(state, { lSock , sslOpts - , handshake_timeout + , sslHSTet , ref , conMod + , conArgs , sockMod }). -spec init(Args :: term()) -> ok. -init({SslOpts, HandshakeTimeout, LSock, ConMod}) -> +init({SslOpts, SslHSTet, LSock, ConMod, ConArgs}) -> case prim_inet:async_accept(LSock, -1) of {ok, Ref} -> {ok, SockMod} = inet_db:lookup_socket(LSock), - {ok, #state{lSock = LSock, sslOpts = SslOpts, handshake_timeout = HandshakeTimeout, ref = Ref, conMod = ConMod, sockMod = SockMod}}; + {ok, #state{lSock = LSock, sslOpts = SslOpts, sslHSTet = SslHSTet, ref = Ref, conMod = ConMod, conArgs = ConArgs, sockMod = SockMod}}; {error, Reason} -> ?ntErr("init prim_inet:async_accept error ~p~n", [Reason]), {stop, Reason} end. -handleMsg({inet_async, LSock, Ref, Msg}, #state{lSock = LSock, sslOpts = SslOpts, handshake_timeout = HandshakeTimeout, ref = Ref, conMod = ConMod, sockMod = SockMod} = State) -> +handleMsg({inet_async, LSock, Ref, Msg}, #state{lSock = LSock, sslOpts = SslOpts, sslHSTet = SslHSTet, ref = Ref, conMod = ConMod, conArgs = ConArgs, sockMod = SockMod} = State) -> case Msg of {ok, Sock} -> %% make it look like gen_tcp:accept inet_db:register_socket(Sock, SockMod), - try ConMod:newConn(Sock) of + try ConMod:newConn(Sock, ConArgs) of {ok, Pid} -> gen_tcp:controlling_process(Sock, Pid), - Pid ! {?mSockReady, Sock, SslOpts, HandshakeTimeout}, + Pid ! {?mSockReady, Sock, SslOpts, SslHSTet}, newAsyncAccept(LSock, State); {close, Reason} -> ?ntErr("handleMsg ConMod:newAcceptor return close ~p~n", [Reason]), diff --git a/src/ssl/ntSslListener.erl b/src/ssl/ntSslListener.erl index e012cd9..2e71854 100644 --- a/src/ssl/ntSslListener.erl +++ b/src/ssl/ntSslListener.erl @@ -99,7 +99,8 @@ init({AptSupName, Port, ListenOpts}) -> {ok, LSock} -> AptCnt = ?getLValue(aptCnt, ListenOpts, ?AptCnt), ConMod = ?getLValue(conMod, ListenOpts, undefined), - startAcceptor(AptCnt, LSock, AptSupName, ConMod), + ConArgs = ?getLValue(conArgs, ListenOpts, undefined), + startAcceptor(AptCnt, LSock, AptSupName, ConMod, ConArgs), {ok, {LAddr, LPort}} = inet:sockname(LSock), % ?ntInfo("success to listen on ~p ~n", [Port]), {ok, #state{listenAddr = LAddr, listenPort = LPort, lSock = LSock, opts = [{acceptors, AptCnt}, {tcpOpts, LastTcpOpts}]}}; @@ -126,11 +127,11 @@ terminate(_Reason, #state{lSock = LSock, listenAddr = Addr, listenPort = Port}) catch port_close(LSock), ok. -startAcceptor(0, _LSock, _AptSupName, _ConMod) -> +startAcceptor(0, _LSock, _AptSupName, _ConMod, _ConArgs) -> ok; -startAcceptor(N, LSock, AptSupName, ConMod) -> - supervisor:start_child(AptSupName, [LSock, ConMod, []]), - startAcceptor(N - 1, LSock, AptSupName, ConMod). +startAcceptor(N, LSock, AptSupName, ConMod, ConArgs) -> + supervisor:start_child(AptSupName, [LSock, ConMod, ConArgs, []]), + startAcceptor(N - 1, LSock, AptSupName, ConMod, ConArgs). -spec getOpts(pid()) -> [listenOpt()]. getOpts(Listener) -> diff --git a/src/tcp/ntTcpAcceptor.erl b/src/tcp/ntTcpAcceptor.erl index bd8cc3d..b881178 100644 --- a/src/tcp/ntTcpAcceptor.erl +++ b/src/tcp/ntTcpAcceptor.erl @@ -7,7 +7,7 @@ -compile({inline_size, 128}). -export([ - start_link/3 + start_link/4 , init/1 , handleMsg/2 @@ -20,9 +20,9 @@ ]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% genActor start %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec start_link(inet:socket(), module(), [proc_lib:spawn_option()]) -> {ok, pid()}. -start_link(LSock, ConMod, SpawnOpts) -> - proc_lib:start_link(?MODULE, init_it, [self(), {LSock, ConMod}], infinity, SpawnOpts). +-spec start_link(inet:socket(), module(), term(), [proc_lib:spawn_option()]) -> {ok, pid()}. +start_link(LSock, ConMod, ConArgs, SpawnOpts) -> + proc_lib:start_link(?MODULE, init_it, [self(), {LSock, ConMod, ConArgs}], infinity, SpawnOpts). init_it(Parent, Args) -> process_flag(trap_exit, true), @@ -74,26 +74,27 @@ loop(Parent, State) -> lSock , ref , conMod + , conArgs , sockMod }). -spec init(Args :: term()) -> ok. -init({LSock, ConMod}) -> +init({LSock, ConMod, ConArgs}) -> case prim_inet:async_accept(LSock, -1) of {ok, Ref} -> {ok, SockMod} = inet_db:lookup_socket(LSock), - {ok, #state{lSock = LSock, ref = Ref, conMod = ConMod, sockMod = SockMod}}; + {ok, #state{lSock = LSock, ref = Ref, conMod = ConMod, conArgs = ConArgs, sockMod = SockMod}}; {error, Reason} -> ?ntErr("init prim_inet:async_accept error ~p~n", [Reason]), {stop, Reason} end. -handleMsg({inet_async, LSock, Ref, Msg}, #state{lSock = LSock, ref = Ref, conMod = ConMod, sockMod = SockMod} = State) -> +handleMsg({inet_async, LSock, Ref, Msg}, #state{lSock = LSock, ref = Ref, conMod = ConMod, conArgs = ConArgs, sockMod = SockMod} = State) -> case Msg of {ok, Sock} -> %% make it look like gen_tcp:accept inet_db:register_socket(Sock, SockMod), - try ConMod:newConn(Sock) of + try ConMod:newConn(Sock, ConArgs) of {ok, Pid} -> gen_tcp:controlling_process(Sock, Pid), Pid ! {?mSockReady, Sock}, diff --git a/src/tcp/ntTcpListener.erl b/src/tcp/ntTcpListener.erl index a55fd98..cd93876 100644 --- a/src/tcp/ntTcpListener.erl +++ b/src/tcp/ntTcpListener.erl @@ -99,7 +99,8 @@ init({AptSupName, Port, ListenOpts}) -> {ok, LSock} -> AptCnt = ?getLValue(aptCnt, ListenOpts, ?AptCnt), ConMod = ?getLValue(conMod, ListenOpts, undefined), - startAcceptor(AptCnt, LSock, AptSupName, ConMod), + ConArgs = ?getLValue(conArgs, ListenOpts, undefined), + startAcceptor(AptCnt, LSock, AptSupName, ConMod, ConArgs), {ok, {LAddr, LPort}} = inet:sockname(LSock), % ?ntInfo("success to listen on ~p ~n", [Port]), {ok, #state{listenAddr = LAddr, listenPort = LPort, lSock = LSock, opts = [{acceptors, AptCnt}, {tcpOpts, LastTcpOpts}]}}; @@ -126,11 +127,11 @@ terminate(_Reason, #state{lSock = LSock, listenAddr = Addr, listenPort = Port}) catch port_close(LSock), ok. -startAcceptor(0, _LSock, _AptSupName, _ConMod) -> +startAcceptor(0, _LSock, _AptSupName, _ConMod, _ConArgs) -> ok; -startAcceptor(N, LSock, AptSupName, ConMod) -> - supervisor:start_child(AptSupName, [LSock, ConMod, []]), - startAcceptor(N - 1, LSock, AptSupName, ConMod). +startAcceptor(N, LSock, AptSupName, ConMod, ConArgs) -> + supervisor:start_child(AptSupName, [LSock, ConMod, ConArgs, []]), + startAcceptor(N - 1, LSock, AptSupName, ConMod, ConArgs). -spec getOpts(pid()) -> [listenOpt()]. getOpts(Listener) ->