|
|
@@ -4,6 +4,7 @@ package dispatcher
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
+ "strings"
|
|
|
|
|
|
core "github.com/v2fly/v2ray-core/v4"
|
|
|
"github.com/v2fly/v2ray-core/v4/common"
|
|
|
@@ -68,7 +69,15 @@ type ipAddressInRangeOpt struct {
|
|
|
}
|
|
|
|
|
|
type DNSThenOthersSniffResult struct {
|
|
|
- domainName string
|
|
|
+ domainName string
|
|
|
+ protocolOriginalName string
|
|
|
+}
|
|
|
+
|
|
|
+func (f DNSThenOthersSniffResult) IsProtoSubsetOf(protocolName string) bool {
|
|
|
+ if strings.HasPrefix(protocolName, f.protocolOriginalName) {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ return false
|
|
|
}
|
|
|
|
|
|
func (DNSThenOthersSniffResult) Protocol() string {
|
|
|
@@ -93,7 +102,7 @@ func newFakeDNSThenOthers(ctx context.Context, fakeDNSSniffer protocolSnifferWit
|
|
|
for _, v := range others {
|
|
|
if v.metadataSniffer || bytes != nil {
|
|
|
if result, err := v.protocolSniffer(ctx, bytes); err == nil {
|
|
|
- return DNSThenOthersSniffResult{result.Domain()}, nil
|
|
|
+ return DNSThenOthersSniffResult{domainName: result.Domain(), protocolOriginalName: result.Protocol()}, nil
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -107,6 +116,6 @@ func newFakeDNSThenOthers(ctx context.Context, fakeDNSSniffer protocolSnifferWit
|
|
|
return nil, common.ErrNoClue
|
|
|
}
|
|
|
},
|
|
|
- metadataSniffer: true,
|
|
|
+ metadataSniffer: false,
|
|
|
}, nil
|
|
|
}
|