mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 01:15:41 +08:00
proxy: move conn to proxy package
This commit is contained in:
parent
47e20cf7f4
commit
bd358e4ae6
@ -138,7 +138,7 @@ glider -h
|
||||
-rules-dir string
|
||||
rule file folder
|
||||
-service value
|
||||
enable services
|
||||
run specified services, format: SERVICE_NAME[,SERVICE_CONFIG]
|
||||
-strategy string
|
||||
forward strategy, default: rr (default "rr")
|
||||
-verbose
|
||||
@ -373,9 +373,9 @@ glider -config CONFIGPATH -listen :8080 -verbose
|
||||
|
||||
#### Scheme:
|
||||
|
||||
service=SERVICE_NAME[,SERVICE_CONFIG]
|
||||
```service=SERVICE_NAME[,SERVICE_CONFIG]```
|
||||
|
||||
- dhcpd(from v0.11.0):
|
||||
- dhcpd:
|
||||
- service=dhcpd,INTERFACE,START_IP,END_IP
|
||||
- e.g., service=dhcpd,en0,192.168.254.100,192.168.254.199
|
||||
|
||||
|
@ -63,7 +63,7 @@ func parseConfig() *Config {
|
||||
flag.IntVar(&conf.DNSConfig.MinTTL, "dnsminttl", 0, "minimum TTL value for entries in the CACHE(seconds)")
|
||||
flag.StringSliceUniqVar(&conf.DNSConfig.Records, "dnsrecord", nil, "custom dns record, format: domain/ip")
|
||||
|
||||
flag.StringSliceUniqVar(&conf.Services, "service", nil, "enable services")
|
||||
flag.StringSliceUniqVar(&conf.Services, "service", nil, "run specified services, format: SERVICE_NAME[,SERVICE_CONFIG]")
|
||||
|
||||
flag.Usage = usage
|
||||
err := flag.Parse()
|
||||
|
@ -1,4 +1,4 @@
|
||||
package conn
|
||||
package proxy
|
||||
|
||||
import (
|
||||
"bufio"
|
@ -6,7 +6,6 @@ import (
|
||||
"net"
|
||||
"net/textproto"
|
||||
|
||||
"github.com/nadoo/glider/common/conn"
|
||||
"github.com/nadoo/glider/common/log"
|
||||
"github.com/nadoo/glider/common/pool"
|
||||
"github.com/nadoo/glider/proxy"
|
||||
@ -51,7 +50,7 @@ func (s *HTTP) Dial(network, addr string) (net.Conn, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c := conn.NewConn(rc)
|
||||
c := proxy.NewConn(rc)
|
||||
tpr := textproto.NewReader(c.Reader())
|
||||
line, err := tpr.ReadLine()
|
||||
if err != nil {
|
||||
|
@ -9,7 +9,6 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/nadoo/glider/common/conn"
|
||||
"github.com/nadoo/glider/common/log"
|
||||
"github.com/nadoo/glider/common/pool"
|
||||
"github.com/nadoo/glider/proxy"
|
||||
@ -46,15 +45,15 @@ func (s *HTTP) ListenAndServe() {
|
||||
func (s *HTTP) Serve(cc net.Conn) {
|
||||
defer cc.Close()
|
||||
|
||||
var c *conn.Conn
|
||||
var c *proxy.Conn
|
||||
switch cc := cc.(type) {
|
||||
case *conn.Conn:
|
||||
case *proxy.Conn:
|
||||
c = cc
|
||||
case *net.TCPConn:
|
||||
cc.SetKeepAlive(true)
|
||||
c = conn.NewConn(cc)
|
||||
c = proxy.NewConn(cc)
|
||||
default:
|
||||
c = conn.NewConn(cc)
|
||||
c = proxy.NewConn(cc)
|
||||
}
|
||||
|
||||
req, err := parseRequest(c.Reader())
|
||||
@ -72,7 +71,7 @@ func (s *HTTP) Serve(cc net.Conn) {
|
||||
s.servRequest(req, c)
|
||||
}
|
||||
|
||||
func (s *HTTP) servRequest(req *request, c *conn.Conn) {
|
||||
func (s *HTTP) servRequest(req *request, c *proxy.Conn) {
|
||||
// Auth
|
||||
if s.user != "" && s.password != "" {
|
||||
if user, pass, ok := extractUserPass(req.auth); !ok || user != s.user || pass != s.password {
|
||||
@ -103,7 +102,7 @@ func (s *HTTP) servHTTPS(r *request, c net.Conn) {
|
||||
|
||||
log.F("[http] %s <-> %s [c] via %s", c.RemoteAddr(), r.uri, dialer.Addr())
|
||||
|
||||
if err = conn.Relay(c, rc); err != nil {
|
||||
if err = proxy.Relay(c, rc); err != nil {
|
||||
log.F("[http] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), r.uri, dialer.Addr(), err)
|
||||
// record remote conn failure only
|
||||
if !strings.Contains(err.Error(), s.addr) {
|
||||
@ -112,7 +111,7 @@ func (s *HTTP) servHTTPS(r *request, c net.Conn) {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *HTTP) servHTTP(req *request, c *conn.Conn) {
|
||||
func (s *HTTP) servHTTP(req *request, c *proxy.Conn) {
|
||||
rc, dialer, err := s.proxy.Dial("tcp", req.target)
|
||||
if err != nil {
|
||||
fmt.Fprintf(c, "%s 502 ERROR\r\n\r\n", req.proto)
|
||||
@ -134,7 +133,7 @@ func (s *HTTP) servHTTP(req *request, c *conn.Conn) {
|
||||
// copy the left request bytes to remote server. eg. length specificed or chunked body.
|
||||
go func() {
|
||||
if _, err := c.Reader().Peek(1); err == nil {
|
||||
conn.Copy(rc, c)
|
||||
proxy.Copy(rc, c)
|
||||
rc.SetDeadline(time.Now())
|
||||
c.SetDeadline(time.Now())
|
||||
}
|
||||
@ -168,5 +167,5 @@ func (s *HTTP) servHTTP(req *request, c *conn.Conn) {
|
||||
log.F("[http] %s <-> %s via %s", c.RemoteAddr(), req.target, dialer.Addr())
|
||||
c.Write(buf.Bytes())
|
||||
|
||||
conn.Copy(c, r)
|
||||
proxy.Copy(c, r)
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import (
|
||||
"net"
|
||||
"net/url"
|
||||
|
||||
"github.com/nadoo/glider/common/conn"
|
||||
"github.com/nadoo/glider/common/log"
|
||||
"github.com/nadoo/glider/proxy"
|
||||
"github.com/nadoo/glider/proxy/http"
|
||||
@ -87,7 +86,7 @@ func (m *Mixed) Serve(c net.Conn) {
|
||||
c.SetKeepAlive(true)
|
||||
}
|
||||
|
||||
cc := conn.NewConn(c)
|
||||
cc := proxy.NewConn(c)
|
||||
head, err := cc.Peek(1)
|
||||
if err != nil {
|
||||
// log.F("[mixed] socks5 peek error: %s", err)
|
||||
|
@ -11,7 +11,6 @@ import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"github.com/nadoo/glider/common/conn"
|
||||
"github.com/nadoo/glider/common/log"
|
||||
"github.com/nadoo/glider/common/socks"
|
||||
"github.com/nadoo/glider/proxy"
|
||||
@ -114,7 +113,7 @@ func (s *RedirProxy) Serve(c net.Conn) {
|
||||
|
||||
log.F("[redir] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr())
|
||||
|
||||
if err = conn.Relay(c, rc); err != nil {
|
||||
if err = proxy.Relay(c, rc); err != nil {
|
||||
log.F("[redir] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), tgt, dialer.Addr(), err)
|
||||
// record remote conn failure only
|
||||
if !strings.Contains(err.Error(), s.addr) {
|
||||
|
@ -19,7 +19,6 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/nadoo/glider/common/conn"
|
||||
"github.com/nadoo/glider/common/log"
|
||||
"github.com/nadoo/glider/common/pool"
|
||||
"github.com/nadoo/glider/common/socks"
|
||||
@ -142,7 +141,7 @@ func (s *Socks5) Serve(c net.Conn) {
|
||||
|
||||
log.F("[socks5] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr())
|
||||
|
||||
if err = conn.Relay(c, rc); err != nil {
|
||||
if err = proxy.Relay(c, rc); err != nil {
|
||||
log.F("[socks5] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), tgt, dialer.Addr(), err)
|
||||
// record remote conn failure only
|
||||
if !strings.Contains(err.Error(), s.addr) {
|
||||
@ -163,7 +162,7 @@ func (s *Socks5) ListenAndServeUDP() {
|
||||
log.F("[socks5-udp] listening UDP on %s", s.addr)
|
||||
|
||||
var nm sync.Map
|
||||
buf := make([]byte, conn.UDPBufSize)
|
||||
buf := make([]byte, proxy.UDPBufSize)
|
||||
|
||||
for {
|
||||
c := NewPktConn(lc, nil, nil, true, nil)
|
||||
@ -192,7 +191,7 @@ func (s *Socks5) ListenAndServeUDP() {
|
||||
nm.Store(raddr.String(), pc)
|
||||
|
||||
go func() {
|
||||
conn.RelayUDP(c, raddr, pc, 2*time.Minute)
|
||||
proxy.RelayUDP(c, raddr, pc, 2*time.Minute)
|
||||
pc.Close()
|
||||
nm.Delete(raddr.String())
|
||||
}()
|
||||
|
@ -10,7 +10,6 @@ import (
|
||||
|
||||
"github.com/nadoo/go-shadowsocks2/core"
|
||||
|
||||
"github.com/nadoo/glider/common/conn"
|
||||
"github.com/nadoo/glider/common/log"
|
||||
"github.com/nadoo/glider/common/pool"
|
||||
"github.com/nadoo/glider/common/socks"
|
||||
@ -122,7 +121,7 @@ func (s *SS) Serve(c net.Conn) {
|
||||
}
|
||||
defer rc.Close()
|
||||
|
||||
buf := pool.GetBuffer(conn.UDPBufSize)
|
||||
buf := pool.GetBuffer(proxy.UDPBufSize)
|
||||
defer pool.PutBuffer(buf)
|
||||
|
||||
n, err := c.Read(buf)
|
||||
@ -160,7 +159,7 @@ func (s *SS) Serve(c net.Conn) {
|
||||
|
||||
log.F("[ss] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr())
|
||||
|
||||
if err = conn.Relay(c, rc); err != nil {
|
||||
if err = proxy.Relay(c, rc); err != nil {
|
||||
log.F("[ss] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), tgt, dialer.Addr(), err)
|
||||
// record remote conn failure only
|
||||
if !strings.Contains(err.Error(), s.addr) {
|
||||
@ -183,7 +182,7 @@ func (s *SS) ListenAndServeUDP() {
|
||||
log.F("[ss-udp] listening UDP on %s", s.addr)
|
||||
|
||||
var nm sync.Map
|
||||
buf := make([]byte, conn.UDPBufSize)
|
||||
buf := make([]byte, proxy.UDPBufSize)
|
||||
|
||||
for {
|
||||
c := NewPktConn(lc, nil, nil, true)
|
||||
@ -207,7 +206,7 @@ func (s *SS) ListenAndServeUDP() {
|
||||
nm.Store(raddr.String(), pc)
|
||||
|
||||
go func() {
|
||||
conn.RelayUDP(c, raddr, pc, 2*time.Minute)
|
||||
proxy.RelayUDP(c, raddr, pc, 2*time.Minute)
|
||||
pc.Close()
|
||||
nm.Delete(raddr.String())
|
||||
}()
|
||||
|
@ -6,7 +6,6 @@ import (
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/nadoo/glider/common/conn"
|
||||
"github.com/nadoo/glider/common/log"
|
||||
"github.com/nadoo/glider/proxy"
|
||||
)
|
||||
@ -90,7 +89,7 @@ func (s *TCPTun) Serve(c net.Conn) {
|
||||
|
||||
log.F("[tcptun] %s <-> %s via %s", c.RemoteAddr(), s.raddr, dialer.Addr())
|
||||
|
||||
if err = conn.Relay(c, rc); err != nil {
|
||||
if err = proxy.Relay(c, rc); err != nil {
|
||||
log.F("[tcptun] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), s.raddr, dialer.Addr(), err)
|
||||
// record remote conn failure only
|
||||
if !strings.Contains(err.Error(), s.addr) {
|
||||
|
@ -6,9 +6,9 @@ import (
|
||||
"io"
|
||||
"net"
|
||||
|
||||
"github.com/nadoo/glider/common/conn"
|
||||
"github.com/nadoo/glider/common/pool"
|
||||
"github.com/nadoo/glider/common/socks"
|
||||
"github.com/nadoo/glider/proxy"
|
||||
)
|
||||
|
||||
// PktConn .
|
||||
@ -41,7 +41,7 @@ func (pc *PktConn) ReadFrom(b []byte) (int, net.Addr, error) {
|
||||
}
|
||||
|
||||
length := int(binary.BigEndian.Uint16(b[:2]))
|
||||
if length > conn.UDPBufSize {
|
||||
if length > proxy.UDPBufSize {
|
||||
return 0, nil, errors.New("packet invalid")
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,6 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/nadoo/glider/common/conn"
|
||||
"github.com/nadoo/glider/common/log"
|
||||
"github.com/nadoo/glider/proxy"
|
||||
)
|
||||
@ -66,7 +65,7 @@ func (s *UDPTun) ListenAndServe() {
|
||||
log.F("[udptun] listening UDP on %s", s.addr)
|
||||
|
||||
var nm sync.Map
|
||||
buf := make([]byte, conn.UDPBufSize)
|
||||
buf := make([]byte, proxy.UDPBufSize)
|
||||
|
||||
for {
|
||||
n, raddr, err := c.ReadFrom(buf)
|
||||
@ -88,7 +87,7 @@ func (s *UDPTun) ListenAndServe() {
|
||||
nm.Store(raddr.String(), pc)
|
||||
|
||||
go func(c, pc net.PacketConn, raddr net.Addr) {
|
||||
conn.RelayUDP(c, raddr, pc, 2*time.Minute)
|
||||
proxy.RelayUDP(c, raddr, pc, 2*time.Minute)
|
||||
pc.Close()
|
||||
nm.Delete(raddr.String())
|
||||
}(c, pc, raddr)
|
||||
|
@ -8,7 +8,6 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/nadoo/glider/common/conn"
|
||||
"github.com/nadoo/glider/common/log"
|
||||
"github.com/nadoo/glider/proxy"
|
||||
)
|
||||
@ -64,7 +63,7 @@ func (s *UoTTun) ListenAndServe() {
|
||||
|
||||
log.F("[uottun] listening UDP on %s", s.addr)
|
||||
|
||||
buf := make([]byte, conn.UDPBufSize)
|
||||
buf := make([]byte, proxy.UDPBufSize)
|
||||
|
||||
for {
|
||||
n, clientAddr, err := c.ReadFrom(buf)
|
||||
@ -82,7 +81,7 @@ func (s *UoTTun) ListenAndServe() {
|
||||
go func() {
|
||||
// no remote forwarder, just a local udp forwarder
|
||||
if urc, ok := rc.(*net.UDPConn); ok {
|
||||
conn.RelayUDP(c, clientAddr, urc, 2*time.Minute)
|
||||
proxy.RelayUDP(c, clientAddr, urc, 2*time.Minute)
|
||||
urc.Close()
|
||||
return
|
||||
}
|
||||
|
@ -9,8 +9,8 @@ import (
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
"github.com/nadoo/glider/common/conn"
|
||||
"github.com/nadoo/glider/common/pool"
|
||||
"github.com/nadoo/glider/proxy"
|
||||
)
|
||||
|
||||
const Version byte = 0
|
||||
@ -69,7 +69,7 @@ func (c *Conn) Read(b []byte) (n int, err error) {
|
||||
}
|
||||
|
||||
if addLen := int64(buf[1]); addLen > 0 {
|
||||
conn.CopyN(ioutil.Discard, c.Conn, addLen)
|
||||
proxy.CopyN(ioutil.Discard, c.Conn, addLen)
|
||||
}
|
||||
c.rcved = true
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user