github.com/searKing/golang/go@v1.2.74/net/mux/matcher_tls.go (about) 1 // Copyright 2020 The searKing Author. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package mux 6 7 import ( 8 "encoding/binary" 9 10 "github.com/searKing/golang/go/crypto/tls" 11 ) 12 13 // TLS matches HTTPS requests. 14 // 15 // By default, any TLS handshake packet is matched. An optional whitelist 16 // of versions can be passed in to restrict the matcher, for example: 17 // TLS(tls.VersionTLS11, tls.VersionTLS12) 18 // reverse of crypto/tls/conn.go func (c *Conn) readRecordOrCCS(expectChangeCipherSpec bool) error { 19 // HandlerShake of TLS 20 // type byte // recordTypeHandshake 21 // versions [2]byte 22 func TLS(versions ...int) MatcherFunc { 23 const recordTypeHandshake = 22 24 if len(versions) == 0 { 25 versions = tls.Versions 26 } 27 var prefixes [][]byte 28 for _, v := range versions { 29 var ver = make([]byte, 2) 30 binary.BigEndian.PutUint16(ver, uint16(v)) 31 // recordType+VersionTLS+len(PayLoad) 32 var prefix []byte 33 prefix = append(prefix, recordTypeHandshake) 34 prefix = append(prefix, ver...) 35 prefixes = append(prefixes, prefix) 36 } 37 return AnyPrefixByteMatcher(prefixes...) 38 }