mirror of https://github.com/v2ray/v2ray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1011 B
37 lines
1011 B
package json
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/v2ray/v2ray-core/common/log"
|
|
proxyconfig "github.com/v2ray/v2ray-core/proxy/common/config"
|
|
proxyjson "github.com/v2ray/v2ray-core/proxy/common/config/json"
|
|
)
|
|
|
|
type ConnectionConfig struct {
|
|
ProtocolString string `json:"protocol"`
|
|
SettingsMessage json.RawMessage `json:"settings"`
|
|
Type proxyconfig.Type `json:"-"`
|
|
}
|
|
|
|
func (c *ConnectionConfig) Protocol() string {
|
|
return c.ProtocolString
|
|
}
|
|
|
|
func (c *ConnectionConfig) Settings() interface{} {
|
|
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 {
|
|
panic("Unknown protocol " + protocol)
|
|
}
|
|
err := json.Unmarshal(message, configObj)
|
|
if err != nil {
|
|
log.Error("Unable to parse connection config: %v", err)
|
|
panic("Failed to parse connection config.")
|
|
}
|
|
return configObj
|
|
}
|