mirror of
				https://github.com/nadoo/glider.git
				synced 2025-11-04 15:52:38 +08:00 
			
		
		
		
	general: add some comments to functions
This commit is contained in:
		
							parent
							
								
									e28a2b4141
								
							
						
					
					
						commit
						4bd8bae2a5
					
				
							
								
								
									
										2
									
								
								dns.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								dns.go
									
									
									
									
									
								
							@ -62,7 +62,7 @@ type DNS struct {
 | 
				
			|||||||
	answerHandlers []DNSAnswerHandler
 | 
						answerHandlers []DNSAnswerHandler
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewDNS returns a dns forwarder. client -> dns.udp -> glider -> forwarder -> remote dns addr
 | 
					// NewDNS returns a dns forwarder. client[dns.udp] -> glider[tcp] -> forwarder[dns.tcp] -> remote dns addr
 | 
				
			||||||
func NewDNS(addr, raddr string, sDialer Dialer) (*DNS, error) {
 | 
					func NewDNS(addr, raddr string, sDialer Dialer) (*DNS, error) {
 | 
				
			||||||
	s := &DNS{
 | 
						s := &DNS{
 | 
				
			||||||
		Forwarder: NewForwarder(addr, nil),
 | 
							Forwarder: NewForwarder(addr, nil),
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DNSTun .
 | 
					// DNSTun struct
 | 
				
			||||||
type DNSTun struct {
 | 
					type DNSTun struct {
 | 
				
			||||||
	*Forwarder        // as client
 | 
						*Forwarder        // as client
 | 
				
			||||||
	sDialer    Dialer // dialer for server
 | 
						sDialer    Dialer // dialer for server
 | 
				
			||||||
@ -13,7 +13,7 @@ type DNSTun struct {
 | 
				
			|||||||
	tcp *TCPTun
 | 
						tcp *TCPTun
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewDNSTun returns a dns forwarder.
 | 
					// NewDNSTun returns a dns tunnel forwarder.
 | 
				
			||||||
func NewDNSTun(addr, raddr string, sDialer Dialer) (*DNSTun, error) {
 | 
					func NewDNSTun(addr, raddr string, sDialer Dialer) (*DNSTun, error) {
 | 
				
			||||||
	s := &DNSTun{
 | 
						s := &DNSTun{
 | 
				
			||||||
		Forwarder: NewForwarder(addr, nil),
 | 
							Forwarder: NewForwarder(addr, nil),
 | 
				
			||||||
 | 
				
			|||||||
@ -2,13 +2,13 @@ package main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import "net"
 | 
					import "net"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Forwarder .
 | 
					// Forwarder struct
 | 
				
			||||||
type Forwarder struct {
 | 
					type Forwarder struct {
 | 
				
			||||||
	addr    string
 | 
						addr    string
 | 
				
			||||||
	cDialer Dialer
 | 
						cDialer Dialer
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewForwarder .
 | 
					// NewForwarder returns a base forwarder
 | 
				
			||||||
func NewForwarder(addr string, cDialer Dialer) *Forwarder {
 | 
					func NewForwarder(addr string, cDialer Dialer) *Forwarder {
 | 
				
			||||||
	if cDialer == nil {
 | 
						if cDialer == nil {
 | 
				
			||||||
		cDialer = Direct
 | 
							cDialer = Direct
 | 
				
			||||||
@ -17,12 +17,15 @@ func NewForwarder(addr string, cDialer Dialer) *Forwarder {
 | 
				
			|||||||
	return &Forwarder{addr: addr, cDialer: cDialer}
 | 
						return &Forwarder{addr: addr, cDialer: cDialer}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Addr returns forwarder's address
 | 
				
			||||||
func (p *Forwarder) Addr() string { return p.addr }
 | 
					func (p *Forwarder) Addr() string { return p.addr }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Dial to remote addr via cDialer
 | 
				
			||||||
func (p *Forwarder) Dial(network, addr string) (net.Conn, error) {
 | 
					func (p *Forwarder) Dial(network, addr string) (net.Conn, error) {
 | 
				
			||||||
	return p.cDialer.Dial(network, addr)
 | 
						return p.cDialer.Dial(network, addr)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NextDialer returns the next cDialer
 | 
				
			||||||
func (p *Forwarder) NextDialer(dstAddr string) Dialer {
 | 
					func (p *Forwarder) NextDialer(dstAddr string) Dialer {
 | 
				
			||||||
	return p.cDialer
 | 
						return p.cDialer
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								http.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								http.go
									
									
									
									
									
								
							@ -16,7 +16,7 @@ import (
 | 
				
			|||||||
	"time"
 | 
						"time"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// HTTP .
 | 
					// HTTP struct
 | 
				
			||||||
type HTTP struct {
 | 
					type HTTP struct {
 | 
				
			||||||
	*Forwarder        // as client
 | 
						*Forwarder        // as client
 | 
				
			||||||
	sDialer    Dialer // dialer for server
 | 
						sDialer    Dialer // dialer for server
 | 
				
			||||||
 | 
				
			|||||||
@ -53,6 +53,7 @@ const NLA_F_NET_BYTEORDER = (1 << 14)
 | 
				
			|||||||
var nextSeqNr uint32
 | 
					var nextSeqNr uint32
 | 
				
			||||||
var nativeEndian binary.ByteOrder
 | 
					var nativeEndian binary.ByteOrder
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IPSetManager struct
 | 
				
			||||||
type IPSetManager struct {
 | 
					type IPSetManager struct {
 | 
				
			||||||
	fd  int
 | 
						fd  int
 | 
				
			||||||
	lsa syscall.SockaddrNetlink
 | 
						lsa syscall.SockaddrNetlink
 | 
				
			||||||
@ -61,6 +62,7 @@ type IPSetManager struct {
 | 
				
			|||||||
	domainSet sync.Map
 | 
						domainSet sync.Map
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewIPSetManager returns a IPSetManager
 | 
				
			||||||
func NewIPSetManager(mainSet string, rules []*RuleConf) (*IPSetManager, error) {
 | 
					func NewIPSetManager(mainSet string, rules []*RuleConf) (*IPSetManager, error) {
 | 
				
			||||||
	fd, err := syscall.Socket(syscall.AF_NETLINK, syscall.SOCK_RAW, syscall.NETLINK_NETFILTER)
 | 
						fd, err := syscall.Socket(syscall.AF_NETLINK, syscall.SOCK_RAW, syscall.NETLINK_NETFILTER)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -111,7 +113,7 @@ func NewIPSetManager(mainSet string, rules []*RuleConf) (*IPSetManager, error) {
 | 
				
			|||||||
	return m, nil
 | 
						return m, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AddDomainIP used to update ipset according to domainSet rule
 | 
					// AddDomainIP implements the DNSAnswerHandler function, used to update ipset according to domainSet rule
 | 
				
			||||||
func (m *IPSetManager) AddDomainIP(domain, ip string) error {
 | 
					func (m *IPSetManager) AddDomainIP(domain, ip string) error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ip != "" {
 | 
						if ip != "" {
 | 
				
			||||||
 | 
				
			|||||||
@ -4,13 +4,15 @@ package main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import "errors"
 | 
					import "errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type IPSetManager struct {
 | 
					// IPSetManager struct
 | 
				
			||||||
}
 | 
					type IPSetManager struct{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewIPSetManager returns a IPSetManager
 | 
				
			||||||
func NewIPSetManager(mainSet string, rules []*RuleConf) (*IPSetManager, error) {
 | 
					func NewIPSetManager(mainSet string, rules []*RuleConf) (*IPSetManager, error) {
 | 
				
			||||||
	return nil, errors.New("ipset not supported on this os")
 | 
						return nil, errors.New("ipset not supported on this os")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// AddDomainIP implements the DNSAnswerHandler function
 | 
				
			||||||
func (m *IPSetManager) AddDomainIP(domain, ip string) error {
 | 
					func (m *IPSetManager) AddDomainIP(domain, ip string) error {
 | 
				
			||||||
	return errors.New("ipset not supported on this os")
 | 
						return errors.New("ipset not supported on this os")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								log.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								log.go
									
									
									
									
									
								
							@ -2,7 +2,7 @@ package main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import "log"
 | 
					import "log"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// LogFunc .
 | 
					// LogFunc defines a simple log function
 | 
				
			||||||
type LogFunc func(f string, v ...interface{})
 | 
					type LogFunc func(f string, v ...interface{})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var logf LogFunc
 | 
					var logf LogFunc
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								mixed.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								mixed.go
									
									
									
									
									
								
							@ -17,7 +17,7 @@ var httpMethods = [...][]byte{
 | 
				
			|||||||
	[]byte("TRACE"),
 | 
						[]byte("TRACE"),
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MixedProxy .
 | 
					// MixedProxy struct
 | 
				
			||||||
type MixedProxy struct {
 | 
					type MixedProxy struct {
 | 
				
			||||||
	sDialer Dialer
 | 
						sDialer Dialer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,8 @@ import (
 | 
				
			|||||||
	"unsafe"
 | 
						"unsafe"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const GETSOCKOPT = 15 // https://golang.org/src/syscall/syscall_linux_386.go#L183
 | 
					// https://github.com/golang/go/blob/9e6b79a5dfb2f6fe4301ced956419a0da83bd025/src/syscall/syscall_linux_386.go#L196
 | 
				
			||||||
 | 
					const GETSOCKOPT = 15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func socketcall(call, a0, a1, a2, a3, a4, a5 uintptr) error {
 | 
					func socketcall(call, a0, a1, a2, a3, a4, a5 uintptr) error {
 | 
				
			||||||
	var a [6]uintptr
 | 
						var a [6]uintptr
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@ import (
 | 
				
			|||||||
	"log"
 | 
						"log"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RedirProxy .
 | 
					// RedirProxy struct
 | 
				
			||||||
type RedirProxy struct{}
 | 
					type RedirProxy struct{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewRedirProxy returns a redirect proxy.
 | 
					// NewRedirProxy returns a redirect proxy.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										7
									
								
								rule.go
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								rule.go
									
									
									
									
									
								
							@ -7,7 +7,7 @@ import (
 | 
				
			|||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RuleDialer .
 | 
					// RuleDialer struct
 | 
				
			||||||
type RuleDialer struct {
 | 
					type RuleDialer struct {
 | 
				
			||||||
	gDialer Dialer
 | 
						gDialer Dialer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -16,7 +16,7 @@ type RuleDialer struct {
 | 
				
			|||||||
	cidrMap   sync.Map
 | 
						cidrMap   sync.Map
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewRuleDialer .
 | 
					// NewRuleDialer returns a new rule dialer
 | 
				
			||||||
func NewRuleDialer(rules []*RuleConf, gDialer Dialer) *RuleDialer {
 | 
					func NewRuleDialer(rules []*RuleConf, gDialer Dialer) *RuleDialer {
 | 
				
			||||||
	rd := &RuleDialer{gDialer: gDialer}
 | 
						rd := &RuleDialer{gDialer: gDialer}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -55,8 +55,10 @@ func NewRuleDialer(rules []*RuleConf, gDialer Dialer) *RuleDialer {
 | 
				
			|||||||
	return rd
 | 
						return rd
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Addr returns RuleDialer's address, always be "RULES"
 | 
				
			||||||
func (rd *RuleDialer) Addr() string { return "RULES" }
 | 
					func (rd *RuleDialer) Addr() string { return "RULES" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NextDialer return next dialer according to rule
 | 
				
			||||||
func (p *RuleDialer) NextDialer(dstAddr string) Dialer {
 | 
					func (p *RuleDialer) NextDialer(dstAddr string) Dialer {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// TODO: change to index finders
 | 
						// TODO: change to index finders
 | 
				
			||||||
@ -106,6 +108,7 @@ func (p *RuleDialer) NextDialer(dstAddr string) Dialer {
 | 
				
			|||||||
	return p.gDialer
 | 
						return p.gDialer
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Dial dials to targer addr and return a conn
 | 
				
			||||||
func (rd *RuleDialer) Dial(network, addr string) (net.Conn, error) {
 | 
					func (rd *RuleDialer) Dial(network, addr string) (net.Conn, error) {
 | 
				
			||||||
	return rd.NextDialer(addr).Dial(network, addr)
 | 
						return rd.NextDialer(addr).Dial(network, addr)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Server .
 | 
					// Server interface
 | 
				
			||||||
type Server interface {
 | 
					type Server interface {
 | 
				
			||||||
	// ListenAndServe as proxy server, use only in server mode.
 | 
						// ListenAndServe as proxy server, use only in server mode.
 | 
				
			||||||
	ListenAndServe()
 | 
						ListenAndServe()
 | 
				
			||||||
 | 
				
			|||||||
@ -55,7 +55,7 @@ var socks5Errors = []string{
 | 
				
			|||||||
	"address type not supported",
 | 
						"address type not supported",
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SOCKS5 .
 | 
					// SOCKS5 struct
 | 
				
			||||||
type SOCKS5 struct {
 | 
					type SOCKS5 struct {
 | 
				
			||||||
	*Forwarder
 | 
						*Forwarder
 | 
				
			||||||
	sDialer Dialer
 | 
						sDialer Dialer
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@ import (
 | 
				
			|||||||
	"time"
 | 
						"time"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewStrategyDialer .
 | 
					// NewStrategyDialer returns a new Strategy Dialer
 | 
				
			||||||
func NewStrategyDialer(strategy string, dialers []Dialer, website string, duration int) Dialer {
 | 
					func NewStrategyDialer(strategy string, dialers []Dialer, website string, duration int) Dialer {
 | 
				
			||||||
	var dialer Dialer
 | 
						var dialer Dialer
 | 
				
			||||||
	if len(dialers) == 0 {
 | 
						if len(dialers) == 0 {
 | 
				
			||||||
@ -32,7 +32,7 @@ func NewStrategyDialer(strategy string, dialers []Dialer, website string, durati
 | 
				
			|||||||
	return dialer
 | 
						return dialer
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// rrDialer
 | 
					// rrDialer is the base struct of strategy dialer
 | 
				
			||||||
type rrDialer struct {
 | 
					type rrDialer struct {
 | 
				
			||||||
	dialers []Dialer
 | 
						dialers []Dialer
 | 
				
			||||||
	idx     int
 | 
						idx     int
 | 
				
			||||||
@ -44,7 +44,7 @@ type rrDialer struct {
 | 
				
			|||||||
	duration int
 | 
						duration int
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// newRRDialer .
 | 
					// newRRDialer returns a new rrDialer
 | 
				
			||||||
func newRRDialer(dialers []Dialer, website string, duration int) *rrDialer {
 | 
					func newRRDialer(dialers []Dialer, website string, duration int) *rrDialer {
 | 
				
			||||||
	rr := &rrDialer{dialers: dialers}
 | 
						rr := &rrDialer{dialers: dialers}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@ package main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import "net"
 | 
					import "net"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TCPTun .
 | 
					// TCPTun struct
 | 
				
			||||||
type TCPTun struct {
 | 
					type TCPTun struct {
 | 
				
			||||||
	*Forwarder
 | 
						*Forwarder
 | 
				
			||||||
	sDialer Dialer
 | 
						sDialer Dialer
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
	"syscall"
 | 
						"syscall"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TProxy struct
 | 
				
			||||||
type TProxy struct {
 | 
					type TProxy struct {
 | 
				
			||||||
	*Forwarder        // as client
 | 
						*Forwarder        // as client
 | 
				
			||||||
	sDialer    Dialer // dialer for server
 | 
						sDialer    Dialer // dialer for server
 | 
				
			||||||
@ -28,10 +29,12 @@ func (s *TProxy) ListenAndServe() {
 | 
				
			|||||||
	s.ListenAndServeUDP()
 | 
						s.ListenAndServeUDP()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ListenAndServeTCP .
 | 
				
			||||||
func (s *TProxy) ListenAndServeTCP() {
 | 
					func (s *TProxy) ListenAndServeTCP() {
 | 
				
			||||||
 | 
						logf("proxy-tproxy tcp mode not supported now, please use 'redir' instead")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ListenAndServeUDP .
 | 
				
			||||||
func (s *TProxy) ListenAndServeUDP() {
 | 
					func (s *TProxy) ListenAndServeUDP() {
 | 
				
			||||||
	laddr, err := net.ResolveUDPAddr("udp", s.addr)
 | 
						laddr, err := net.ResolveUDPAddr("udp", s.addr)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
	"log"
 | 
						"log"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TProxy struct
 | 
				
			||||||
type TProxy struct{}
 | 
					type TProxy struct{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewTProxy returns a tproxy.
 | 
					// NewTProxy returns a tproxy.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user