proxy: move conn to proxy package

This commit is contained in:
nadoo 2020-10-01 22:38:34 +08:00
parent 47e20cf7f4
commit bd358e4ae6
14 changed files with 33 additions and 42 deletions

View File

@ -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

View File

@ -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()

View File

@ -1,4 +1,4 @@
package conn
package proxy
import (
"bufio"

View File

@ -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 {

View File

@ -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)
}

View File

@ -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)

View File

@ -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) {

View File

@ -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())
}()

View File

@ -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())
}()

View File

@ -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) {

View File

@ -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")
}

View File

@ -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)

View File

@ -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
}

View File

@ -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
}