1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-12-21 09:36:34 -05:00

inbound detour

This commit is contained in:
V2Ray 2015-10-31 22:22:43 +01:00
parent 1708c48f5b
commit 3c43268898
5 changed files with 86 additions and 9 deletions

View File

@ -16,9 +16,15 @@ type LogConfig interface {
AccessLog() string AccessLog() string
} }
type InboundDetour interface { type PortRange interface {
From() uint16
To() uint16
}
type InboundDetourConfig interface {
Protocol() string Protocol() string
Port() PortRange() PortRange
Settings() interface{}
} }
type PointConfig interface { type PointConfig interface {
@ -26,4 +32,5 @@ type PointConfig interface {
LogConfig() LogConfig LogConfig() LogConfig
InboundConfig() ConnectionConfig InboundConfig() ConnectionConfig
OutboundConfig() ConnectionConfig OutboundConfig() ConnectionConfig
InboundDetours() []InboundDetourConfig
} }

View File

@ -19,11 +19,15 @@ func (c *ConnectionConfig) Protocol() string {
} }
func (c *ConnectionConfig) Settings() interface{} { func (c *ConnectionConfig) Settings() interface{} {
configObj := proxyjson.CreateConfig(c.Protocol(), c.Type) return loadConnectionConfig(c.SettingsMessage, c.Protocol(), c.Type)
}
func loadConnectionConfig(message json.RawMessage, protocol string, cType proxyconfig.Type) interface{} {
configObj := proxyjson.CreateConfig(protocol, cType)
if configObj == nil { if configObj == nil {
panic("Unknown protocol " + c.Protocol()) panic("Unknown protocol " + protocol)
} }
err := json.Unmarshal(c.SettingsMessage, configObj) err := json.Unmarshal(message, configObj)
if err != nil { if err != nil {
log.Error("Unable to parse connection config: %v", err) log.Error("Unable to parse connection config: %v", err)
panic("Failed to parse connection config.") panic("Failed to parse connection config.")

View File

@ -0,0 +1,26 @@
package json
import (
"encoding/json"
"github.com/v2ray/v2ray-core/app/point/config"
proxyconfig "github.com/v2ray/v2ray-core/proxy/common/config"
)
type InboundDetourConfig struct {
ProtocolValue string
PortRangeValue *PortRange
SettingsValue json.RawMessage
}
func (this *InboundDetourConfig) Protocol() string {
return this.ProtocolValue
}
func (this *InboundDetourConfig) PortRange() config.PortRange {
return this.PortRangeValue
}
func (this *InboundDetourConfig) Settings() interface{} {
return loadConnectionConfig(this.SettingsValue, this.ProtocolValue, proxyconfig.TypeInbound)
}

View File

@ -12,10 +12,11 @@ import (
// Config is the config for Point server. // Config is the config for Point server.
type Config struct { type Config struct {
PortValue uint16 `json:"port"` // Port of this Point server. PortValue uint16 `json:"port"` // Port of this Point server.
LogConfigValue *LogConfig `json:"log"` LogConfigValue *LogConfig `json:"log"`
InboundConfigValue *ConnectionConfig `json:"inbound"` InboundConfigValue *ConnectionConfig `json:"inbound"`
OutboundConfigValue *ConnectionConfig `json:"outbound"` OutboundConfigValue *ConnectionConfig `json:"outbound"`
InboundDetoursValue []*InboundDetourConfig `json:"inboundDetour"`
} }
func (config *Config) Port() uint16 { func (config *Config) Port() uint16 {
@ -43,6 +44,14 @@ func (config *Config) OutboundConfig() config.ConnectionConfig {
return config.OutboundConfigValue return config.OutboundConfigValue
} }
func (this *Config) InboundDetours() []config.InboundDetourConfig {
detours := make([]config.InboundDetourConfig, len(this.InboundDetoursValue))
for idx, detour := range this.InboundDetoursValue {
detours[idx] = detour
}
return detours
}
func LoadConfig(file string) (*Config, error) { func LoadConfig(file string) (*Config, error) {
fixedFile := os.ExpandEnv(file) fixedFile := os.ExpandEnv(file)
rawConfig, err := ioutil.ReadFile(fixedFile) rawConfig, err := ioutil.ReadFile(fixedFile)

View File

@ -21,6 +21,28 @@ type LogConfig struct {
AccessLogValue string AccessLogValue string
} }
type PortRange struct {
FromValue uint16
ToValue uint16
}
func (this *PortRange) From() uint16 {
return this.FromValue
}
func (this *PortRange) To() uint16 {
return this.ToValue
}
type InboundDetourConfig struct {
ConnectionConfig
PortRangeValue *PortRange
}
func (this *InboundDetourConfig) PortRange() config.PortRange {
return this.PortRangeValue
}
func (config *LogConfig) AccessLog() string { func (config *LogConfig) AccessLog() string {
return config.AccessLogValue return config.AccessLogValue
} }
@ -30,6 +52,7 @@ type Config struct {
LogConfigValue *LogConfig LogConfigValue *LogConfig
InboundConfigValue *ConnectionConfig InboundConfigValue *ConnectionConfig
OutboundConfigValue *ConnectionConfig OutboundConfigValue *ConnectionConfig
InboundDetoursValue []*InboundDetourConfig
} }
func (config *Config) Port() uint16 { func (config *Config) Port() uint16 {
@ -47,3 +70,11 @@ func (config *Config) InboundConfig() config.ConnectionConfig {
func (config *Config) OutboundConfig() config.ConnectionConfig { func (config *Config) OutboundConfig() config.ConnectionConfig {
return config.OutboundConfigValue return config.OutboundConfigValue
} }
func (this *Config) InboundDetours() []config.InboundDetourConfig {
detours := make([]config.InboundDetourConfig, len(this.InboundDetoursValue))
for idx, detour := range this.InboundDetoursValue {
detours[idx] = detour
}
return detours
}