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  }