chore cleanup

This commit is contained in:
Jason
2019-08-13 18:05:53 +08:00
parent 5c3c821db5
commit 941604a309
6 changed files with 28 additions and 39 deletions
+11 -19
View File
@@ -31,7 +31,6 @@ var (
args = new(CmdArgs)
handlerCreator func()
postFlagsInitFn []func()
lwipWriter io.Writer
@@ -41,14 +40,13 @@ var (
type CmdArgs struct {
// Main
Version *bool
DelayICMP *int
TunName *string
TunAddr *string
TunGw *string
TunMask *string
TunDns *string
LogLevel *string
Version *bool
TunName *string
TunAddr *string
TunGw *string
TunMask *string
TunDns *string
LogLevel *string
// Proxy
ProxyServer *string
@@ -79,7 +77,6 @@ func init() {
args.TunGw = flag.String("tunGw", "240.0.0.1", "TUN interface gateway")
args.TunMask = flag.String("tunMask", "255.255.255.0", "TUN interface netmask, it should be a prefix length (a number) for IPv6 address")
args.TunDns = flag.String("tunDns", "1.1.1.1", "DNS resolvers for TUN interface (Windows Only)")
args.DelayICMP = flag.Int("delayICMP", 1, "Delay ICMP packets for a short period of time, in milliseconds")
// Proxy
args.ProxyServer = flag.String("proxyServer", "", "Proxy server address")
@@ -127,13 +124,9 @@ func main() {
}
// Setup TCP/IP stack.
lwipWriter = core.NewLWIPStack().(io.Writer)
// Wrap a writer to delay ICMP packets if delay time is not zero.
if *args.DelayICMP > 0 {
log.Infof("ICMP packets will be delayed for %dms", *args.DelayICMP)
lwipWriter = filter.NewICMPFilter(lwipWriter, *args.DelayICMP).(io.Writer)
}
// Wrap a writer to delay ICMP packets.
w := core.NewLWIPStack().(io.Writer)
lwipWriter = filter.NewICMPFilter(w).(io.Writer)
// Register TCP and UDP handlers to handle accepted connections.
proxyAddr, err := net.ResolveTCPAddr("tcp", *args.ProxyServer)
@@ -153,8 +146,7 @@ func main() {
// Copy packets from tun device to lwip stack, it's the main loop.
go func() {
_, err := io.CopyBuffer(lwipWriter, tunDev, make([]byte, MTU))
if err != nil {
if _, err := io.CopyBuffer(lwipWriter, tunDev, make([]byte, MTU)); err != nil {
log.Fatalf("copying data failed: %v", err)
}
}()
+3 -4
View File
@@ -34,7 +34,7 @@ func NewSimpleSessionStater() stats.SessionStater {
return &simpleSessionStater{}
}
func (s *simpleSessionStater) Start() error {
func (s *simpleSessionStater) Start() {
log.Debugf("Start session stater")
sessionStatsHandler := func(resp http.ResponseWriter, req *http.Request) {
// Make a snapshot.
@@ -97,12 +97,11 @@ func (s *simpleSessionStater) Start() error {
mux.HandleFunc(StatsPath, sessionStatsHandler)
s.server = &http.Server{Addr: StatsAddr, Handler: mux}
go s.server.ListenAndServe()
return nil
}
func (s *simpleSessionStater) Stop() error {
func (s *simpleSessionStater) Stop() {
log.Debugf("Stop session stater")
return s.server.Close()
s.server.Close()
}
func (s *simpleSessionStater) AddSession(key interface{}, session *stats.Session) {
+2 -2
View File
@@ -8,8 +8,8 @@ import (
)
type SessionStater interface {
Start() error
Stop() error
Start()
Stop()
AddSession(key interface{}, session *Session)
GetSession(key interface{}) *Session
RemoveSession(key interface{})
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"io"
)
// Filter is used for filtering IP packets comming from TUN.
// Filter is used for filtering IP packets coming from TUN.
type Filter interface {
io.Writer
}
+6 -10
View File
@@ -2,7 +2,6 @@ package filter
import (
"io"
"time"
"github.com/xjasonlyu/tun2socks/common/log"
"github.com/xjasonlyu/tun2socks/common/packet"
@@ -10,26 +9,23 @@ import (
type icmpFilter struct {
writer io.Writer
delay int
}
func NewICMPFilter(w io.Writer, delay int) Filter {
return &icmpFilter{writer: w, delay: delay}
func NewICMPFilter(w io.Writer) Filter {
return &icmpFilter{writer: w}
}
func (w *icmpFilter) Write(buf []byte) (int, error) {
if uint8(buf[9]) == packet.PROTOCOL_ICMP {
func (f *icmpFilter) Write(buf []byte) (int, error) {
if buf[9] == packet.PROTOCOL_ICMP {
payload := make([]byte, len(buf))
copy(payload, buf)
go func(data []byte) {
time.Sleep(time.Duration(w.delay) * time.Millisecond)
_, err := w.writer.Write(data)
if err != nil {
if _, err := f.writer.Write(data); err != nil {
log.Fatalf("failed to input data to the stack: %v", err)
}
}(payload)
return len(buf), nil
} else {
return w.writer.Write(buf)
return f.writer.Write(buf)
}
}
+5 -3
View File
@@ -42,6 +42,9 @@ func NewUDPHandler(proxyHost string, proxyPort uint16, timeout time.Duration, fa
}
func (h *udpHandler) handleTCP(conn core.UDPConn, c net.Conn) {
// keep tcp connection alive
tcpKeepAlive(c)
for {
// clear timeout settings
c.SetDeadline(time.Time{})
@@ -74,7 +77,7 @@ func (h *udpHandler) fetchUDPInput(conn core.UDPConn, input net.PacketConn) {
return
}
if n < 4 {
if n < 5 {
log.Warnf("short udp packet length: %d", n)
return
}
@@ -85,7 +88,7 @@ func (h *udpHandler) fetchUDPInput(conn core.UDPConn, input net.PacketConn) {
return
}
if _, err := conn.WriteFrom(buf[int(3+len(addr)):n], resolvedAddr); err != nil {
if _, err := conn.WriteFrom(buf[3+len(addr):n], resolvedAddr); err != nil {
log.Warnf("failed to write UDP data: %v", err)
return
}
@@ -94,7 +97,6 @@ func (h *udpHandler) fetchUDPInput(conn core.UDPConn, input net.PacketConn) {
func (h *udpHandler) Connect(conn core.UDPConn, target *net.UDPAddr) error {
if target == nil {
// return h.connectInternal(conn, "")
log.Warnf("UDP target is invalid: %s", conn.LocalAddr().String())
return errors.New("UDP target is invalid")
}