keyPath = flag.String("key", "", "Path to authentication key file")
upPath = flag.String("up", "", "Path to up-script")
downPath = flag.String("down", "", "Path to down-script")
+ stats = flag.String("stats", "", "Enable stats retrieving on host:port")
mtu = flag.Int("mtu", 1500, "MTU")
nonceDiff = flag.Int("noncediff", 1, "Allow nonce difference")
timeoutP = flag.Int("timeout", 60, "Timeout seconds")
govpn.Noncediff = *nonceDiff
id := govpn.IDDecode(*IDRaw)
+ govpn.PeersInitDummy(id)
key := govpn.KeyRead(*keyPath)
if id == nil {
panic("ID is not specified")
var ethPkt []byte
var udpPkt *govpn.UDPPkt
var udpPktData []byte
+ knownPeers := govpn.KnownPeers(map[string]**govpn.Peer{remote.String(): &peer})
+
+ log.Println(govpn.VersionGet())
+ if *stats != "" {
+ log.Println("Stats are going to listen on", *stats)
+ statsPort, err := net.Listen("tcp", *stats)
+ if err != nil {
+ panic(err)
+ }
+ go govpn.StatsProcessor(statsPort, &knownPeers)
+ }
termSignal := make(chan os.Signal, 1)
signal.Notify(termSignal, os.Interrupt, os.Kill)
- log.Println("Client version", govpn.Version)
log.Println("Starting handshake")
handshake := govpn.HandshakeStart(conn, remote, id, key)
MainCycle:
for {
- if peer != nil && peer.Bytes > govpn.MaxBytesPerKey {
+ if peer != nil && (peer.BytesIn+peer.BytesOut) > govpn.MaxBytesPerKey {
peer.Zero()
peer = nil
handshake = govpn.HandshakeStart(conn, remote, id, key)
}
udpPktData = udpBuf[:udpPkt.Size]
- if govpn.IsValidHandshakePkt(udpPktData) {
+ if peer == nil {
if udpPkt.Addr.String() != remote.String() {
udpReady <- struct{}{}
log.Println("Unknown handshake message")
continue
}
- if p := handshake.Client(conn, key, udpPktData); p != nil {
+ if govpn.IDsCache.Find(udpPktData) == nil {
+ log.Println("Invalid identity in handshake packet")
+ udpReady <- struct{}{}
+ continue
+ }
+ if p := handshake.Client(id, conn, key, udpPktData); p != nil {
log.Println("Handshake completed")
if firstUpCall {
go govpn.ScriptCall(*upPath, *ifaceName)