Просмотр исходного кода

Add new option for preferring of new IP

tags/v1.0.3^2
9seconds 6 лет назад
Родитель
Сommit
07f00a363e
2 измененных файлов: 26 добавлений и 0 удалений
  1. 20
    0
      config/config.go
  2. 6
    0
      main.go

+ 20
- 0
config/config.go Просмотреть файл

32
 	SecretModeTLS
32
 	SecretModeTLS
33
 )
33
 )
34
 
34
 
35
+type PreferIP uint8
36
+
37
+const (
38
+	PreferIPv4 PreferIP = iota
39
+	PreferIPv6
40
+)
41
+
35
 const SimpleSecretLength = 16
42
 const SimpleSecretLength = 16
36
 
43
 
37
 type OptionType uint8
44
 type OptionType uint8
40
 	OptionTypeDebug OptionType = iota
47
 	OptionTypeDebug OptionType = iota
41
 	OptionTypeVerbose
48
 	OptionTypeVerbose
42
 
49
 
50
+	OptionTypePreferIP
51
+
43
 	OptionTypeBind
52
 	OptionTypeBind
44
 	OptionTypePublicIPv4
53
 	OptionTypePublicIPv4
45
 	OptionTypePublicIPv6
54
 	OptionTypePublicIPv6
86
 	Debug      bool       `json:"debug"`
95
 	Debug      bool       `json:"debug"`
87
 	Verbose    bool       `json:"verbose"`
96
 	Verbose    bool       `json:"verbose"`
88
 	SecretMode SecretMode `json:"secret_mode"`
97
 	SecretMode SecretMode `json:"secret_mode"`
98
+	PreferIP   PreferIP   `json:"prefer_ip"`
89
 
99
 
90
 	Secret []byte `json:"secret"`
100
 	Secret []byte `json:"secret"`
91
 	AdTag  []byte `json:"adtag"`
101
 	AdTag  []byte `json:"adtag"`
105
 			C.Debug = opt.Value.(bool)
115
 			C.Debug = opt.Value.(bool)
106
 		case OptionTypeVerbose:
116
 		case OptionTypeVerbose:
107
 			C.Verbose = opt.Value.(bool)
117
 			C.Verbose = opt.Value.(bool)
118
+		case OptionTypePreferIP:
119
+			value := opt.Value.(string)
120
+			switch value {
121
+			case "ipv4":
122
+				C.PreferIP = PreferIPv4
123
+			case "ipv6":
124
+				C.PreferIP = PreferIPv6
125
+			default:
126
+				return fmt.Errorf("incorrect direct IP mode %s", value)
127
+			}
108
 		case OptionTypeBind:
128
 		case OptionTypeBind:
109
 			C.Bind = opt.Value.(*net.TCPAddr)
129
 			C.Bind = opt.Value.(*net.TCPAddr)
110
 		case OptionTypePublicIPv4:
130
 		case OptionTypePublicIPv4:

+ 6
- 0
main.go Просмотреть файл

43
 		Short('v').
43
 		Short('v').
44
 		Envar("MTG_VERBOSE").
44
 		Envar("MTG_VERBOSE").
45
 		Bool()
45
 		Bool()
46
+	runPreferIP = runCommand.Flag("prefer-ip",
47
+		"Prefer this IP protocol if possible. Valid options are 'ipv4' and 'ipv6'").
48
+		Envar("MTG_PREFER_DIRECT_IP").
49
+		Default("ipv6").
50
+		Enum("ipv4", "ipv6")
46
 	runBind = runCommand.Flag("bind",
51
 	runBind = runCommand.Flag("bind",
47
 		"Host:Port to bind proxy to.").
52
 		"Host:Port to bind proxy to.").
48
 		Short('b').
53
 		Short('b').
130
 		err := config.Init(
135
 		err := config.Init(
131
 			config.Opt{Option: config.OptionTypeDebug, Value: *runDebug},
136
 			config.Opt{Option: config.OptionTypeDebug, Value: *runDebug},
132
 			config.Opt{Option: config.OptionTypeVerbose, Value: *runVerbose},
137
 			config.Opt{Option: config.OptionTypeVerbose, Value: *runVerbose},
138
+			config.Opt{Option: config.OptionTypePreferIP, Value: *runPreferIP},
133
 			config.Opt{Option: config.OptionTypeBind, Value: *runBind},
139
 			config.Opt{Option: config.OptionTypeBind, Value: *runBind},
134
 			config.Opt{Option: config.OptionTypePublicIPv4, Value: *runPublicIPv4},
140
 			config.Opt{Option: config.OptionTypePublicIPv4, Value: *runPublicIPv4},
135
 			config.Opt{Option: config.OptionTypePublicIPv6, Value: *runPublicIPv6},
141
 			config.Opt{Option: config.OptionTypePublicIPv6, Value: *runPublicIPv6},

Загрузка…
Отмена
Сохранить