mirror of
				https://github.com/nadoo/glider.git
				synced 2025-11-04 07:42:38 +08:00 
			
		
		
		
	ws: allow to set Origin header and default to nil
This commit is contained in:
		
							parent
							
								
									8a2e95b17e
								
							
						
					
					
						commit
						4887089a4b
					
				
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@ -16,7 +16,7 @@ require (
 | 
				
			|||||||
	github.com/xtaci/kcp-go/v5 v5.6.1
 | 
						github.com/xtaci/kcp-go/v5 v5.6.1
 | 
				
			||||||
	golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897
 | 
						golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897
 | 
				
			||||||
	golang.org/x/net v0.0.0-20201031054903-ff519b6c9102 // indirect
 | 
						golang.org/x/net v0.0.0-20201031054903-ff519b6c9102 // indirect
 | 
				
			||||||
	golang.org/x/sys v0.0.0-20201106081118-db71ae66460a // indirect
 | 
						golang.org/x/sys v0.0.0-20201107080550-4d91cf3a1aaf // indirect
 | 
				
			||||||
	golang.org/x/tools v0.0.0-20201105220310-78b158585360 // indirect
 | 
						golang.org/x/tools v0.0.0-20201105220310-78b158585360 // indirect
 | 
				
			||||||
	gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect
 | 
						gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
									
									
									
									
								
							@ -119,8 +119,8 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w
 | 
				
			|||||||
golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20201106081118-db71ae66460a h1:ALUFBKlIyeY7y5ZgPJmblk/vKz+zBQSnNiPkt41sgeg=
 | 
					golang.org/x/sys v0.0.0-20201107080550-4d91cf3a1aaf h1:kt3wY1Lu5MJAnKTfoMR52Cu4gwvna4VTzNOiT8tY73s=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20201106081118-db71ae66460a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20201107080550-4d91cf3a1aaf/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
					golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
				
			||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
					golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
					golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
				
			||||||
 | 
				
			|||||||
@ -216,7 +216,7 @@ func (t *tls12TicketAuth) Encode(data []byte) (encodedData []byte, err error) {
 | 
				
			|||||||
		encodedData[pdata-1] = 0x1
 | 
							encodedData[pdata-1] = 0x1
 | 
				
			||||||
		encodedData[pdata-2] = 0x3 // tls version
 | 
							encodedData[pdata-2] = 0x3 // tls version
 | 
				
			||||||
		pdata -= 2
 | 
							pdata -= 2
 | 
				
			||||||
		l += 2
 | 
							// l += 2
 | 
				
			||||||
		encodedData[pdata-1] = 0x16 // tls handshake
 | 
							encodedData[pdata-1] = 0x16 // tls handshake
 | 
				
			||||||
		// pdata -= 1
 | 
							// pdata -= 1
 | 
				
			||||||
		// l += 1
 | 
							// l += 1
 | 
				
			||||||
 | 
				
			|||||||
@ -52,11 +52,11 @@ type ClientConn struct {
 | 
				
			|||||||
// NewClientConn creates a new ws client connection.
 | 
					// NewClientConn creates a new ws client connection.
 | 
				
			||||||
func (s *WS) NewClientConn(rc net.Conn) (*ClientConn, error) {
 | 
					func (s *WS) NewClientConn(rc net.Conn) (*ClientConn, error) {
 | 
				
			||||||
	conn := &ClientConn{Conn: rc}
 | 
						conn := &ClientConn{Conn: rc}
 | 
				
			||||||
	return conn, conn.Handshake(s.host, s.path)
 | 
						return conn, conn.Handshake(s.host, s.path, s.origin)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Handshake handshakes with the server using HTTP to request a protocol upgrade.
 | 
					// Handshake handshakes with the server using HTTP to request a protocol upgrade.
 | 
				
			||||||
func (c *ClientConn) Handshake(host, path string) error {
 | 
					func (c *ClientConn) Handshake(host, path, origin string) error {
 | 
				
			||||||
	clientKey := generateClientKey()
 | 
						clientKey := generateClientKey()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	buf := pool.GetBytesBuffer()
 | 
						buf := pool.GetBytesBuffer()
 | 
				
			||||||
@ -66,7 +66,9 @@ func (c *ClientConn) Handshake(host, path string) error {
 | 
				
			|||||||
	buf.WriteString("Host: " + host + "\r\n")
 | 
						buf.WriteString("Host: " + host + "\r\n")
 | 
				
			||||||
	buf.WriteString("Upgrade: websocket\r\n")
 | 
						buf.WriteString("Upgrade: websocket\r\n")
 | 
				
			||||||
	buf.WriteString("Connection: Upgrade\r\n")
 | 
						buf.WriteString("Connection: Upgrade\r\n")
 | 
				
			||||||
	buf.WriteString("Origin: http://" + host + "\r\n")
 | 
						if origin != "" {
 | 
				
			||||||
 | 
							buf.WriteString("Origin: http://" + origin + "\r\n")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	buf.WriteString("Sec-WebSocket-Key: " + clientKey + "\r\n")
 | 
						buf.WriteString("Sec-WebSocket-Key: " + clientKey + "\r\n")
 | 
				
			||||||
	buf.WriteString("Sec-WebSocket-Protocol: binary\r\n")
 | 
						buf.WriteString("Sec-WebSocket-Protocol: binary\r\n")
 | 
				
			||||||
	buf.WriteString("Sec-WebSocket-Version: 13\r\n")
 | 
						buf.WriteString("Sec-WebSocket-Version: 13\r\n")
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ func NewWSServer(s string, p proxy.Proxy) (proxy.Server, error) {
 | 
				
			|||||||
	// prepare transport listener
 | 
						// prepare transport listener
 | 
				
			||||||
	// TODO: check here
 | 
						// TODO: check here
 | 
				
			||||||
	if len(transport) < 2 {
 | 
						if len(transport) < 2 {
 | 
				
			||||||
		return nil, errors.New("[tls] malformd listener:" + s)
 | 
							return nil, errors.New("[ws] malformd listener:" + s)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	w, err := NewWS(transport[0], nil, p)
 | 
						w, err := NewWS(transport[0], nil, p)
 | 
				
			||||||
 | 
				
			|||||||
@ -21,6 +21,7 @@ type WS struct {
 | 
				
			|||||||
	addr   string
 | 
						addr   string
 | 
				
			||||||
	host   string
 | 
						host   string
 | 
				
			||||||
	path   string
 | 
						path   string
 | 
				
			||||||
 | 
						origin string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	server proxy.Server
 | 
						server proxy.Server
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -46,6 +47,7 @@ func NewWS(s string, d proxy.Dialer, p proxy.Proxy) (*WS, error) {
 | 
				
			|||||||
		addr:   addr,
 | 
							addr:   addr,
 | 
				
			||||||
		host:   u.Query().Get("host"),
 | 
							host:   u.Query().Get("host"),
 | 
				
			||||||
		path:   u.Path,
 | 
							path:   u.Path,
 | 
				
			||||||
 | 
							origin: u.Query().Get("origin"),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if w.host == "" {
 | 
						if w.host == "" {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user