gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/tunnel/options.go (about) 1 package tunnel 2 3 import ( 4 "time" 5 6 "github.com/google/uuid" 7 "gitee.com/liuxuezhan/go-micro-v1.18.0/transport" 8 "gitee.com/liuxuezhan/go-micro-v1.18.0/transport/quic" 9 ) 10 11 var ( 12 // DefaultAddress is default tunnel bind address 13 DefaultAddress = ":0" 14 // The shared default token 15 DefaultToken = "go.micro.tunnel" 16 ) 17 18 type Option func(*Options) 19 20 // Options provides network configuration options 21 type Options struct { 22 // Id is tunnel id 23 Id string 24 // Address is tunnel address 25 Address string 26 // Nodes are remote nodes 27 Nodes []string 28 // The shared auth token 29 Token string 30 // Transport listens to incoming connections 31 Transport transport.Transport 32 } 33 34 type DialOption func(*DialOptions) 35 36 type DialOptions struct { 37 // Link specifies the link to use 38 Link string 39 // specify mode of the session 40 Mode Mode 41 // the dial timeout 42 Timeout time.Duration 43 } 44 45 type ListenOption func(*ListenOptions) 46 47 type ListenOptions struct { 48 // specify mode of the session 49 Mode Mode 50 // The read timeout 51 Timeout time.Duration 52 } 53 54 // The tunnel id 55 func Id(id string) Option { 56 return func(o *Options) { 57 o.Id = id 58 } 59 } 60 61 // The tunnel address 62 func Address(a string) Option { 63 return func(o *Options) { 64 o.Address = a 65 } 66 } 67 68 // Nodes specify remote network nodes 69 func Nodes(n ...string) Option { 70 return func(o *Options) { 71 o.Nodes = n 72 } 73 } 74 75 // Token sets the shared token for auth 76 func Token(t string) Option { 77 return func(o *Options) { 78 o.Token = t 79 } 80 } 81 82 // Transport listens for incoming connections 83 func Transport(t transport.Transport) Option { 84 return func(o *Options) { 85 o.Transport = t 86 } 87 } 88 89 // Listen options 90 func ListenMode(m Mode) ListenOption { 91 return func(o *ListenOptions) { 92 o.Mode = m 93 } 94 } 95 96 // Timeout for reads and writes on the listener session 97 func ListenTimeout(t time.Duration) ListenOption { 98 return func(o *ListenOptions) { 99 o.Timeout = t 100 } 101 } 102 103 // Dial options 104 105 // Dial multicast sets the multicast option to send only to those mapped 106 func DialMode(m Mode) DialOption { 107 return func(o *DialOptions) { 108 o.Mode = m 109 } 110 } 111 112 // DialTimeout sets the dial timeout of the connection 113 func DialTimeout(t time.Duration) DialOption { 114 return func(o *DialOptions) { 115 o.Timeout = t 116 } 117 } 118 119 // DialLink specifies the link to pin this connection to. 120 // This is not applicable if the multicast option is set. 121 func DialLink(id string) DialOption { 122 return func(o *DialOptions) { 123 o.Link = id 124 } 125 } 126 127 // DefaultOptions returns router default options 128 func DefaultOptions() Options { 129 return Options{ 130 Id: uuid.New().String(), 131 Address: DefaultAddress, 132 Token: DefaultToken, 133 Transport: quic.NewTransport(), 134 } 135 }