@@ -60,6 +60,52 @@ type Instance struct {
60
60
running bool
61
61
}
62
62
63
+ func addInboundHandlers (server * Instance , configs []* InboundHandlerConfig ) error {
64
+ if len (configs ) == 0 {
65
+ return nil
66
+ }
67
+
68
+ inboundManager := server .GetFeature (inbound .ManagerType ()).(inbound.Manager )
69
+ for _ , inboundConfig := range configs {
70
+ rawHandler , err := CreateObject (server , inboundConfig )
71
+ if err != nil {
72
+ return err
73
+ }
74
+ handler , ok := rawHandler .(inbound.Handler )
75
+ if ! ok {
76
+ return newError ("not an InboundHandler" )
77
+ }
78
+ if err := inboundManager .AddHandler (context .Background (), handler ); err != nil {
79
+ return err
80
+ }
81
+ }
82
+
83
+ return nil
84
+ }
85
+
86
+ func addOutboundHandlers (server * Instance , configs []* OutboundHandlerConfig ) error {
87
+ if len (configs ) == 0 {
88
+ return nil
89
+ }
90
+
91
+ outboundManager := server .GetFeature (outbound .ManagerType ()).(outbound.Manager )
92
+ for _ , outboundConfig := range configs {
93
+ rawHandler , err := CreateObject (server , outboundConfig )
94
+ if err != nil {
95
+ return err
96
+ }
97
+ handler , ok := rawHandler .(outbound.Handler )
98
+ if ! ok {
99
+ return newError ("not an OutboundHandler" )
100
+ }
101
+ if err := outboundManager .AddHandler (context .Background (), handler ); err != nil {
102
+ return err
103
+ }
104
+ }
105
+
106
+ return nil
107
+ }
108
+
63
109
// New returns a new V2Ray instance based on given configuration.
64
110
// The instance is not started at this point.
65
111
// To ensure V2Ray instance works properly, the config must contain one Dispatcher, one InboundHandlerManager and one OutboundHandlerManager. Other features are optional.
@@ -106,38 +152,12 @@ func New(config *Config) (*Instance, error) {
106
152
return nil , newError ("not all dependency are resolved." )
107
153
}
108
154
109
- if len (config .Inbound ) > 0 {
110
- inboundManager := server .GetFeature (inbound .ManagerType ()).(inbound.Manager )
111
- for _ , inboundConfig := range config .Inbound {
112
- rawHandler , err := CreateObject (server , inboundConfig )
113
- if err != nil {
114
- return nil , err
115
- }
116
- handler , ok := rawHandler .(inbound.Handler )
117
- if ! ok {
118
- return nil , newError ("not an InboundHandler" )
119
- }
120
- if err := inboundManager .AddHandler (context .Background (), handler ); err != nil {
121
- return nil , err
122
- }
123
- }
155
+ if err := addInboundHandlers (server , config .Inbound ); err != nil {
156
+ return nil , err
124
157
}
125
158
126
- if len (config .Outbound ) > 0 {
127
- outboundManager := server .GetFeature (outbound .ManagerType ()).(outbound.Manager )
128
- for _ , outboundConfig := range config .Outbound {
129
- rawHandler , err := CreateObject (server , outboundConfig )
130
- if err != nil {
131
- return nil , err
132
- }
133
- handler , ok := rawHandler .(outbound.Handler )
134
- if ! ok {
135
- return nil , newError ("not an OutboundHandler" )
136
- }
137
- if err := outboundManager .AddHandler (context .Background (), handler ); err != nil {
138
- return nil , err
139
- }
140
- }
159
+ if err := addOutboundHandlers (server , config .Outbound ); err != nil {
160
+ return nil , err
141
161
}
142
162
143
163
return server , nil
0 commit comments