mirror of
				https://github.com/e1732a364fed/v2ray_simple.git
				synced 2025-11-01 04:22:48 +08:00 
			
		
		
		
	 146f7cf926
			
		
	
	146f7cf926
	
	
	
		
			
			修复 websocket时无回落的问题 修复 websocket不匹配时直接返回内部错误字符串导致 可探测 的超级bug 修复回落不匹配问题 修复websocket时readv闪退问题 修复 命令行 loglevel参数被配置文件覆盖问题 修复获取tls 的 alpn和 sni时遇到空指针闪退问题 将默认fallback地址的赋值放到通用代码中; 移除 ErrSingleFallback, 改用utils.ErrFirstBuffer 使ws的server可以返回 预设的path
		
			
				
	
	
		
			49 lines
		
	
	
		
			837 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			837 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package tlsLayer
 | |
| 
 | |
| import (
 | |
| 	"crypto/tls"
 | |
| 	"net"
 | |
| 	"unsafe"
 | |
| 
 | |
| 	"github.com/hahahrfool/v2ray_simple/utils"
 | |
| )
 | |
| 
 | |
| type Server struct {
 | |
| 	tlsConfig *tls.Config
 | |
| }
 | |
| 
 | |
| func NewServer(host, certFile, keyFile string, isInsecure bool) (*Server, error) {
 | |
| 
 | |
| 	cert, err := tls.LoadX509KeyPair(certFile, keyFile)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	s := &Server{
 | |
| 		tlsConfig: &tls.Config{
 | |
| 			InsecureSkipVerify: isInsecure,
 | |
| 			ServerName:         host,
 | |
| 			Certificates:       []tls.Certificate{cert},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	return s, nil
 | |
| }
 | |
| 
 | |
| func (s *Server) Handshake(underlay net.Conn) (tlsConn *Conn, err error) {
 | |
| 	rawTlsConn := tls.Server(underlay, s.tlsConfig)
 | |
| 	err = rawTlsConn.Handshake()
 | |
| 	if err != nil {
 | |
| 		err = utils.NewErr("tlsLayer: tls握手失败", err)
 | |
| 
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	tlsConn = &Conn{
 | |
| 		Conn: rawTlsConn,
 | |
| 		ptr:  unsafe.Pointer(rawTlsConn),
 | |
| 	}
 | |
| 
 | |
| 	return
 | |
| 
 | |
| }
 |