mirror of
https://github.com/nadoo/glider.git
synced 2025-02-24 01:45:39 +08:00
general: add some comments to functions
This commit is contained in:
parent
53466d8183
commit
7ba0773fd7
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