コード例 #1
0
ファイル: main.go プロジェクト: xieshmei/firefly-proxy
func (h *tunnelConnHandler) serveWithMux(conn net.Conn) {
	server := mux.NewServer(conn)
	for {
		stream, err := server.Accept()
		if err != nil {
			log.Printf("error to accept new mux streams: %s", err)
			server.Close()
			return
		}
		go func(cc net.Conn) {
			s, err := net.DialTimeout("tcp", h.socksAddr, h.socksTimeout)
			if err != nil {
				log.Printf("error connecting SOCKS server: %s", err)
				cc.Close()
				return
			}
			socks := &gosocks.SocksConn{s.(net.Conn), h.socksTimeout}
			if h.socksAuth.ServerAuthenticate(cc, socks) != nil {
				cc.Close()
				socks.Close()
				return
			}
			sockstun.TunnelServer(cc, socks)
		}(stream)
	}
}
コード例 #2
0
ファイル: main.go プロジェクト: xieshmei/firefly-proxy
func (h *tunnelConnHandler) serveWithoutMux(conn net.Conn) {
	s, err := net.DialTimeout("tcp", h.socksAddr, h.socksTimeout)
	if err != nil {
		log.Printf("error connecting SOCKS server: %s", err)
		conn.Close()
		return
	}
	socks := &gosocks.SocksConn{s.(net.Conn), h.socksTimeout}
	if h.socksAuth.ServerAuthenticate(conn, socks) != nil {
		conn.Close()
		socks.Close()
		return
	}
	sockstun.TunnelServer(conn, socks)
}