Projects STRLCPY tun2socks Commits 007c97fe
🤬
  • ■ ■ ■ ■ ■ ■
    engine/engine.go
    skipped 2 lines
    3 3  import (
    4 4   "errors"
    5 5   "net"
     6 + "os/exec"
     7 + "strings"
    6 8   "sync"
    7 9   "time"
    8 10   
    skipped 81 lines
    90 92   return err
    91 93  }
    92 94   
     95 +func execCommand(cmd string) error {
     96 + parts := strings.Fields(cmd)
     97 + if len(parts) == 0 {
     98 + return errors.New("empty command")
     99 + }
     100 + _, err := exec.Command(parts[0], parts[1:]...).Output()
     101 + return err
     102 +}
     103 + 
    93 104  func general(k *Key) error {
    94 105   level, err := log.ParseLevel(k.LogLevel)
    95 106   if err != nil {
    skipped 61 lines
    157 168   if k.Device == "" {
    158 169   return errors.New("empty device")
    159 170   }
     171 + 
     172 + if k.TUNPreUp != "" {
     173 + if preUpErr := execCommand(k.TUNPreUp); preUpErr != nil {
     174 + log.Warnf("[TUN] failed to pre-execute: %s: %v", k.TUNPreUp, preUpErr)
     175 + }
     176 + }
     177 + 
     178 + defer func() {
     179 + if k.TUNPostUp == "" || err != nil {
     180 + return
     181 + }
     182 + if postUpErr := execCommand(k.TUNPostUp); postUpErr != nil {
     183 + log.Warnf("[TUN] failed to post-execute: %s: %v", k.TUNPostUp, postUpErr)
     184 + }
     185 + }()
    160 186   
    161 187   if _defaultProxy, err = parseProxy(k.Proxy); err != nil {
    162 188   return
    skipped 44 lines
  • ■ ■ ■ ■ ■ ■
    engine/key.go
    skipped 12 lines
    13 13   TCPModerateReceiveBuffer bool `yaml:"tcp-moderate-receive-buffer"`
    14 14   TCPSendBufferSize string `yaml:"tcp-send-buffer-size"`
    15 15   TCPReceiveBufferSize string `yaml:"tcp-receive-buffer-size"`
     16 + TUNPreUp string `yaml:"tun-pre-up"`
     17 + TUNPostUp string `yaml:"tun-post-up"`
    16 18   UDPTimeout time.Duration `yaml:"udp-timeout"`
    17 19  }
    18 20   
  • ■ ■ ■ ■ ■ ■
    main.go
    skipped 35 lines
    36 36   flag.StringVar(&key.TCPSendBufferSize, "tcp-sndbuf", "", "Set TCP send buffer size for netstack")
    37 37   flag.StringVar(&key.TCPReceiveBufferSize, "tcp-rcvbuf", "", "Set TCP receive buffer size for netstack")
    38 38   flag.BoolVar(&key.TCPModerateReceiveBuffer, "tcp-auto-tuning", false, "Enable TCP receive buffer auto-tuning")
     39 + flag.StringVar(&key.TUNPreUp, "tun-pre-up", "", "Execute a command before TUN device setup")
     40 + flag.StringVar(&key.TUNPostUp, "tun-post-up", "", "Execute a command after TUN device setup")
    39 41   flag.BoolVar(&versionFlag, "version", false, "Show version and then quit")
    40 42   flag.Parse()
    41 43  }
    skipped 30 lines
Please wait...
Page is in error, reload to recover