|
-define(nlTcpMgrSup, nlTcpMgrSup).
|
|
-define(nlSslMgrSup, nlSslMgrSup).
|
|
-define(nlUdpMgrSup, nlUdpMgrSup).
|
|
-define(nlDtlsMgrSup, nlDtlsMgrSup).
|
|
|
|
-define(miSockReady, miSockReady).
|
|
|
|
-define(WARN(Tag, Format, Data), nlNetCom:warnMsg(Tag, Format, Data)).
|
|
-define(getListValue(Key, List, Default), nlNetCom:getListValue(Key, List, Default)).
|
|
|
|
-define(SSL_CLOSE_TIMEOUT, 5000).
|
|
-define(SSL_HANDSHAKE_TIMEOUT, 15000).
|
|
-define(PROXY_RECV_TIMEOUT, 5000).
|
|
|
|
-type(listenOpt() ::
|
|
{acceptors, non_neg_integer()} |
|
|
{tcpOpts, [gen_tcp:listen_option()]} |
|
|
{sslOpts, [ssl:ssl_option()]} |
|
|
{udpOpts, [gen_udp:option()]} |
|
|
{dtlsOpts, [gen_udp:option() | ssl:ssl_option()]}).
|
|
|
|
-type(listenOn() :: inet:port_number() | {host(), inet:port_number()}).
|
|
|
|
%%--------------------------------------------------------------------
|
|
%% SSL socket wrapper
|
|
%%--------------------------------------------------------------------
|
|
|
|
-record(ssl_socket, {tcp :: inet:socket(), ssl :: ssl:sslsocket()}).
|
|
|
|
-define(IS_SSL(Sock), is_record(Sock, ssl_socket)).
|
|
|
|
%% 令牌桶相关定义
|
|
-record(tokenBucket, {
|
|
rate :: pos_integer() %% 速率
|
|
, tokens :: non_neg_integer() %% 剩余tokens数量
|
|
, lastTime :: pos_integer() %% 最后一次更新访问时间单位毫秒
|
|
, bucketSize :: pos_integer() %% 桶大小 可以容纳的令牌数量
|
|
}).
|
|
|
|
%%--------------------------------------------------------------------
|
|
%% Proxy-Protocol Socket Wrapper
|
|
%%--------------------------------------------------------------------
|
|
|
|
-export_type([listenOn/0]).
|
|
|
|
-type(proto() :: atom()).
|
|
-type(transport() :: module()).
|
|
-type(udp_transport() :: {udp | dtls, pid(), inet:socket()}).
|
|
-type(socket() :: esockd_transport:socket()).
|
|
-type(mfargs() :: atom() | {atom(), atom()} | {module(), atom(), [term()]}).
|
|
-type(sock_fun() :: fun((esockd_transport:socket()) -> {ok, esockd_transport:socket()} | {error, term()})).
|
|
|
|
-type(host() :: inet:ip_address() | string()).
|
|
-type(listen_on() :: inet:port_number() | {host(), inet:port_number()}).
|
|
|
|
-type(pp2_additional_ssl_field() :: {pp2_ssl_client, boolean()}
|
|
| {pp2_ssl_client_cert_conn, boolean()}
|
|
| {pp2_ssl_client_cert_sess, boolean()}
|
|
| {pp2_ssl_verify, success | failed}
|
|
| {pp2_ssl_version, binary()} % US-ASCII string
|
|
| {pp2_ssl_cn, binary()} % UTF8-encoded string
|
|
| {pp2_ssl_cipher, binary()} % US-ASCII string
|
|
| {pp2_ssl_sig_alg, binary()} % US-ASCII string
|
|
| {pp2_ssl_key_alg, binary()}).% US-ASCII string
|
|
|
|
-type(pp2_additional_field() :: {pp2_alpn, binary()} % byte sequence
|
|
| {pp2_authority, binary()} % UTF8-encoded string
|
|
| {pp2_crc32c, integer()} % 32-bit number
|
|
| {pp2_netns, binary()} % US-ASCII string
|
|
| {pp2_ssl, list(pp2_additional_ssl_field())}).
|
|
|
|
-record(proxy_socket, {inet :: inet4 | inet6 | 'unix' | 'unspec',
|
|
socket :: inet:socket() | #ssl_socket{},
|
|
src_addr :: inet:ip_address() | undefined,
|
|
dst_addr :: inet:ip_address() | undefined,
|
|
src_port :: inet:port_number() | undefined,
|
|
dst_port :: inet:port_number() | undefined,
|
|
%% Proxy protocol v2 addtional fields
|
|
pp2_additional_info = [] :: list(pp2_additional_field())}).
|
|
|
|
-define(IS_PROXY(Sock), is_record(Sock, proxy_socket)).
|
|
|