X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fgovpn%2Fcmd%2Fgovpn-server%2Fconf.go;h=36681078b565978fab4731b26aaf51a66d05b541;hb=5bdcecf9c5ba070fceeeb45864ff7a88af7dd44c;hp=284f4f9dc5a2047b0cefed8c5f6d6e1728f15ad1;hpb=af08408334c3e2f23acde5f74e77f628c85b532a;p=govpn.git diff --git a/src/govpn/cmd/govpn-server/conf.go b/src/govpn/cmd/govpn-server/conf.go index 284f4f9..3668107 100644 --- a/src/govpn/cmd/govpn-server/conf.go +++ b/src/govpn/cmd/govpn-server/conf.go @@ -20,6 +20,7 @@ package main import ( "encoding/json" + "errors" "io/ioutil" "log" "time" @@ -33,39 +34,47 @@ const ( var ( confs map[govpn.PeerId]*govpn.PeerConf - idsCache govpn.CipherCache + idsCache *govpn.CipherCache ) -func confRead() map[govpn.PeerId]*govpn.PeerConf { +func confRead() (*map[govpn.PeerId]*govpn.PeerConf, error) { data, err := ioutil.ReadFile(*confPath) if err != nil { - log.Fatalln("Unable to read configuration:", err) + return nil, err } confsRaw := new(map[string]govpn.PeerConf) err = json.Unmarshal(data, confsRaw) if err != nil { - log.Fatalln("Unable to parse configuration:", err) + return nil, err } confs := make(map[govpn.PeerId]*govpn.PeerConf, len(*confsRaw)) for name, pc := range *confsRaw { verifier, err := govpn.VerifierFromString(pc.VerifierRaw) if err != nil { - log.Fatalln("Unable to decode the key:", err.Error(), pc.VerifierRaw) + return nil, errors.New("Unable to decode verifier: " + err.Error()) } - if pc.EncLess { + if pc.Encless { pc.Noise = true } + if pc.MTU == 0 { + pc.MTU = govpn.MTUDefault + } + if pc.MTU > govpn.MTUMax { + log.Println("MTU value", pc.MTU, "is too high, overriding to", govpn.MTUMax) + pc.MTU = govpn.MTUMax + } conf := govpn.PeerConf{ Verifier: verifier, Id: verifier.Id, Name: name, Iface: pc.Iface, + MTU: pc.MTU, Up: pc.Up, Down: pc.Down, Noise: pc.Noise, CPR: pc.CPR, - EncLess: pc.EncLess, + Encless: pc.Encless, } if pc.TimeoutInt <= 0 { pc.TimeoutInt = govpn.TimeoutDefault @@ -73,21 +82,29 @@ func confRead() map[govpn.PeerId]*govpn.PeerConf { conf.Timeout = time.Second * time.Duration(pc.TimeoutInt) confs[*verifier.Id] = &conf } - return confs + return &confs, nil } -func confRefresh() { - confs = confRead() +func confRefresh() error { + newConfs, err := confRead() + if err != nil { + log.Println("Unable to parse peers configuration:", err) + return err + } + confs = *newConfs ids := make([]govpn.PeerId, 0, len(confs)) for peerId, _ := range confs { ids = append(ids, peerId) } idsCache.Update(ids) + return nil } func confInit() { idsCache = govpn.NewCipherCache(nil) - confRefresh() + if err := confRefresh(); err != nil { + log.Fatalln(err) + } go func() { for { time.Sleep(RefreshRate)