소스 검색

Remove map usage in options

世界 7 달 전
부모
커밋
b0a36b9fac
2개의 변경된 파일18개의 추가작업 그리고 15개의 파일을 삭제
  1. 8 7
      option/shadowtls.go
  2. 10 8
      protocol/shadowtls/inbound.go

+ 8 - 7
option/shadowtls.go

@@ -4,17 +4,18 @@ import (
 	"encoding/json"
 
 	E "github.com/sagernet/sing/common/exceptions"
+	"github.com/sagernet/sing/common/json/badjson"
 )
 
 type ShadowTLSInboundOptions struct {
 	ListenOptions
-	Version                int                                  `json:"version,omitempty"`
-	Password               string                               `json:"password,omitempty"`
-	Users                  []ShadowTLSUser                      `json:"users,omitempty"`
-	Handshake              ShadowTLSHandshakeOptions            `json:"handshake,omitempty"`
-	HandshakeForServerName map[string]ShadowTLSHandshakeOptions `json:"handshake_for_server_name,omitempty"`
-	StrictMode             bool                                 `json:"strict_mode,omitempty"`
-	WildcardSNI            WildcardSNI                          `json:"wildcard_sni,omitempty"`
+	Version                int                                                  `json:"version,omitempty"`
+	Password               string                                               `json:"password,omitempty"`
+	Users                  []ShadowTLSUser                                      `json:"users,omitempty"`
+	Handshake              ShadowTLSHandshakeOptions                            `json:"handshake,omitempty"`
+	HandshakeForServerName *badjson.TypedMap[string, ShadowTLSHandshakeOptions] `json:"handshake_for_server_name,omitempty"`
+	StrictMode             bool                                                 `json:"strict_mode,omitempty"`
+	WildcardSNI            WildcardSNI                                          `json:"wildcard_sni,omitempty"`
 }
 
 type WildcardSNI int

+ 10 - 8
protocol/shadowtls/inbound.go

@@ -46,14 +46,16 @@ func NewInbound(ctx context.Context, router adapter.Router, logger log.ContextLo
 	var handshakeForServerName map[string]shadowtls.HandshakeConfig
 	if options.Version > 1 {
 		handshakeForServerName = make(map[string]shadowtls.HandshakeConfig)
-		for serverName, serverOptions := range options.HandshakeForServerName {
-			handshakeDialer, err := dialer.New(ctx, serverOptions.DialerOptions, serverOptions.ServerIsDomain())
-			if err != nil {
-				return nil, err
-			}
-			handshakeForServerName[serverName] = shadowtls.HandshakeConfig{
-				Server: serverOptions.ServerOptions.Build(),
-				Dialer: handshakeDialer,
+		if options.HandshakeForServerName != nil {
+			for _, entry := range options.HandshakeForServerName.Entries() {
+				handshakeDialer, err := dialer.New(ctx, entry.Value.DialerOptions, entry.Value.ServerIsDomain())
+				if err != nil {
+					return nil, err
+				}
+				handshakeForServerName[entry.Key] = shadowtls.HandshakeConfig{
+					Server: entry.Value.ServerOptions.Build(),
+					Dialer: handshakeDialer,
+				}
 			}
 		}
 	}