connection.go 1011 B

123456789101112131415161718192021222324252627282930313233343536
  1. package json
  2. import (
  3. "encoding/json"
  4. "github.com/v2ray/v2ray-core/common/log"
  5. proxyconfig "github.com/v2ray/v2ray-core/proxy/common/config"
  6. proxyjson "github.com/v2ray/v2ray-core/proxy/common/config/json"
  7. )
  8. type ConnectionConfig struct {
  9. ProtocolString string `json:"protocol"`
  10. SettingsMessage json.RawMessage `json:"settings"`
  11. Type proxyconfig.Type `json:"-"`
  12. }
  13. func (c *ConnectionConfig) Protocol() string {
  14. return c.ProtocolString
  15. }
  16. func (c *ConnectionConfig) Settings() interface{} {
  17. return loadConnectionConfig(c.SettingsMessage, c.Protocol(), c.Type)
  18. }
  19. func loadConnectionConfig(message json.RawMessage, protocol string, cType proxyconfig.Type) interface{} {
  20. configObj := proxyjson.CreateConfig(protocol, cType)
  21. if configObj == nil {
  22. panic("Unknown protocol " + protocol)
  23. }
  24. err := json.Unmarshal(message, configObj)
  25. if err != nil {
  26. log.Error("Unable to parse connection config: %v", err)
  27. panic("Failed to parse connection config.")
  28. }
  29. return configObj
  30. }