]> Cypherpunks.ru repositories - govpn.git/blobdiff - src/cypherpunks.ru/govpn/cmd/govpn-client/main.go
-version command line option
[govpn.git] / src / cypherpunks.ru / govpn / cmd / govpn-client / main.go
index 38bdae3bec704dd0e099bb9b7b0771577106052f..c7b04a7635af89d2e2fdb8fa931543a996295764 100644 (file)
@@ -45,11 +45,13 @@ var (
        mtu         = flag.Int("mtu", govpn.MTUDefault, "MTU of TAP interface")
        timeoutP    = flag.Int("timeout", 60, "Timeout seconds")
        timeSync    = flag.Int("timesync", 0, "Time synchronization requirement")
+       noreconnect = flag.Bool("noreconnect", false, "Disable reconnection after timeout")
        noisy       = flag.Bool("noise", false, "Enable noise appending")
        encless     = flag.Bool("encless", false, "Encryptionless mode")
        cpr         = flag.Int("cpr", 0, "Enable constant KiB/sec out traffic rate")
        egdPath     = flag.String("egd", "", "Optional path to EGD socket")
        syslog      = flag.Bool("syslog", false, "Enable logging to syslog")
+       version     = flag.Bool("version", false, "Print version information")
        warranty    = flag.Bool("warranty", false, "Print warranty information")
 
        conf        *govpn.PeerConf
@@ -57,7 +59,7 @@ var (
        timeout     int
        firstUpCall bool = true
        knownPeers  govpn.KnownPeers
-       idsCache    *govpn.CipherCache
+       idsCache    *govpn.MACCache
 )
 
 func main() {
@@ -66,6 +68,10 @@ func main() {
                fmt.Println(govpn.Warranty)
                return
        }
+       if *version {
+               fmt.Println(govpn.VersionGet())
+               return
+       }
        timeout = *timeoutP
        var err error
        log.SetFlags(log.Ldate | log.Lmicroseconds | log.Lshortfile)
@@ -78,6 +84,12 @@ func main() {
                govpn.EGDInit(*egdPath)
        }
 
+       if *proxyAddr != "" {
+               *proto = "tcp"
+       }
+       if !(*proto == "udp" || *proto == "tcp") {
+               log.Fatalln("Unknown protocol specified")
+       }
        if *verifierRaw == "" {
                log.Fatalln("No verifier specified")
        }
@@ -108,7 +120,7 @@ func main() {
                Verifier: verifier,
                DSAPriv:  priv,
        }
-       idsCache = govpn.NewCipherCache()
+       idsCache = govpn.NewMACCache()
        confs := map[govpn.PeerId]*govpn.PeerConf{*verifier.Id: conf}
        idsCache.Update(&confs)
        log.Println(govpn.VersionGet())
@@ -139,9 +151,6 @@ MainCycle:
                timeouted := make(chan struct{})
                rehandshaking := make(chan struct{})
                termination := make(chan struct{})
-               if *proxyAddr != "" {
-                       *proto = "tcp"
-               }
                switch *proto {
                case "udp":
                        go startUDP(timeouted, rehandshaking, termination)
@@ -151,8 +160,6 @@ MainCycle:
                        } else {
                                go startTCP(timeouted, rehandshaking, termination)
                        }
-               default:
-                       log.Fatalln("Unknown protocol specified")
                }
                select {
                case <-termSignal:
@@ -160,7 +167,11 @@ MainCycle:
                        termination <- struct{}{}
                        break MainCycle
                case <-timeouted:
-                       break MainCycle
+                       if *noreconnect {
+                               break MainCycle
+                       }
+                       govpn.BothPrintf(`[sleep seconds="%d"]`, timeout)
+                       time.Sleep(time.Second * time.Duration(timeout))
                case <-rehandshaking:
                }
                close(timeouted)