mirror of
				https://github.com/nadoo/glider.git
				synced 2025-11-04 07:42:38 +08:00 
			
		
		
		
	ss: optimize dial and pktconn code
This commit is contained in:
		
							parent
							
								
									31930f2955
								
							
						
					
					
						commit
						e1e8908ae2
					
				
							
								
								
									
										36
									
								
								ss.go
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								ss.go
									
									
									
									
									
								
							@ -219,22 +219,10 @@ func (s *SS) Dial(network, addr string) (net.Conn, error) {
 | 
				
			|||||||
		return nil, errors.New("Unable to parse address: " + addr)
 | 
							return nil, errors.New("Unable to parse address: " + addr)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch network {
 | 
						if network == "uot" {
 | 
				
			||||||
	case "tcp":
 | 
					 | 
				
			||||||
		return s.dialTCP(target)
 | 
					 | 
				
			||||||
	case "uot":
 | 
					 | 
				
			||||||
		target[0] = target[0] | 0x8
 | 
							target[0] = target[0] | 0x8
 | 
				
			||||||
		return s.dialTCP(target)
 | 
					 | 
				
			||||||
	// case "udp":
 | 
					 | 
				
			||||||
	// 	return s.dialUDP(target)
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		return nil, errors.New("Unknown schema: " + network)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// DialTCP connects to the address addr via the proxy.
 | 
					 | 
				
			||||||
func (s *SS) dialTCP(target Addr) (net.Conn, error) {
 | 
					 | 
				
			||||||
	c, err := s.cDialer.Dial("tcp", s.addr)
 | 
						c, err := s.cDialer.Dial("tcp", s.addr)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logf("dial to %s error: %s", s.addr, err)
 | 
							logf("dial to %s error: %s", s.addr, err)
 | 
				
			||||||
@ -252,6 +240,7 @@ func (s *SS) dialTCP(target Addr) (net.Conn, error) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return c, err
 | 
						return c, err
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DialUDP connects to the given address via the proxy.
 | 
					// DialUDP connects to the given address via the proxy.
 | 
				
			||||||
@ -282,6 +271,7 @@ type PktConn struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// NewPktConn returns a PktConn
 | 
					// NewPktConn returns a PktConn
 | 
				
			||||||
func NewPktConn(c net.PacketConn, addr net.Addr, target Addr, tgtHeader bool) *PktConn {
 | 
					func NewPktConn(c net.PacketConn, addr net.Addr, target Addr, tgtHeader bool) *PktConn {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pc := &PktConn{
 | 
						pc := &PktConn{
 | 
				
			||||||
		PacketConn: c,
 | 
							PacketConn: c,
 | 
				
			||||||
		addr:       addr,
 | 
							addr:       addr,
 | 
				
			||||||
@ -291,30 +281,26 @@ func NewPktConn(c net.PacketConn, addr net.Addr, target Addr, tgtHeader bool) *P
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (pc *PktConn) Read(b []byte) (int, error) {
 | 
					func (pc *PktConn) Read(b []byte) (int, error) {
 | 
				
			||||||
 | 
						n, _, err := pc.ReadFrom(b)
 | 
				
			||||||
 | 
						return n, err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (pc *PktConn) ReadFrom(b []byte) (int, net.Addr, error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !pc.tgtHeader {
 | 
						if !pc.tgtHeader {
 | 
				
			||||||
		n, _, err := pc.PacketConn.ReadFrom(b)
 | 
							return pc.PacketConn.ReadFrom(b)
 | 
				
			||||||
		return n, err
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	buf := make([]byte, len(b))
 | 
						buf := make([]byte, len(b))
 | 
				
			||||||
	n, raddr, err := pc.PacketConn.ReadFrom(buf)
 | 
						n, raddr, err := pc.PacketConn.ReadFrom(buf)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return 0, err
 | 
							return n, raddr, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	srcAddr := ParseAddr(raddr.String())
 | 
						srcAddr := ParseAddr(raddr.String())
 | 
				
			||||||
	copy(b, buf[len(srcAddr):])
 | 
						copy(b, buf[len(srcAddr):])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return n - len(srcAddr), err
 | 
						return n - len(srcAddr), raddr, err
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (pc *PktConn) ReadFrom(b []byte) (int, net.Addr, error) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	n, err := pc.Read(b)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// TODO: Addr
 | 
					 | 
				
			||||||
	return n, nil, err
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (pc *PktConn) Write(b []byte) (int, error) {
 | 
					func (pc *PktConn) Write(b []byte) (int, error) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user