diff --git a/contrib/ui/mesh-ui/webview.go b/contrib/ui/mesh-ui/webview.go
old mode 100755
new mode 100644
index 4939585d..946b728b
--- a/contrib/ui/mesh-ui/webview.go
+++ b/contrib/ui/mesh-ui/webview.go
@@ -1,7 +1,9 @@
package main
import (
+ "bytes"
"encoding/json"
+ "errors"
"fmt"
"io/ioutil"
"log"
@@ -9,20 +11,45 @@ import (
"net/url"
"os"
"path/filepath"
- "runtime"
"strconv"
"strings"
"time"
"github.com/hjson/hjson-go"
- "github.com/jchv/go-webview-selector"
+ "github.com/webview/webview"
+ "golang.org/x/text/encoding/unicode"
"github.com/RiV-chain/RiV-mesh/src/admin"
+ "github.com/RiV-chain/RiV-mesh/src/defaults"
+ "github.com/docopt/docopt-go"
)
+var usage = `Graphical interface for RiV mesh.
+
+Usage:
+ mesh-ui [] [-c]
+ mesh-ui -h | --help
+ mesh-ui -v | --version
+
+Options:
+ Index file name [default: index.html].
+ -c --console Show debug console window.
+ -h --help Show this screen.
+ -v --version Show version.`
+
+var confui struct {
+ IndexHtml string `docopt:""`
+ Console bool `docopt:"-c,--console"`
+}
+
var uiVersion = "0.0.1"
func main() {
+ opts, _ := docopt.ParseArgs(usage, os.Args[1:], uiVersion)
+ opts.Bind(&confui)
+ if !confui.Console {
+ Console(false)
+ }
debug := true
w := webview.New(debug)
defer w.Destroy()
@@ -42,7 +69,6 @@ func main() {
fmt.Printf("Unable to create folder: %v", err)
}
mesh_settings_path := filepath.Join(user_home, mesh_folder, mesh_conf)
- riv_ctrl_path = get_ctl_path()
if _, err := os.Stat(mesh_settings_path); os.IsNotExist(err) {
err := ioutil.WriteFile(mesh_settings_path, []byte(""), 0750)
if err != nil {
@@ -67,18 +93,32 @@ func main() {
}
}
}
- var path string
- if len(os.Args) > 1 {
- path, err = filepath.Abs(filepath.Dir(os.Args[1]))
- } else {
- path, err = filepath.Abs(filepath.Dir(os.Args[0]))
+ if confui.IndexHtml == "" {
+ confui.IndexHtml = "index.html"
}
- if err != nil {
- log.Fatal(err)
+ //Check is it URL already
+ indexUrl, err := url.ParseRequestURI(confui.IndexHtml)
+ if err != nil || len(indexUrl.Scheme) < 2 { // handling no scheme at all and windows c:\ as scheme detection
+ confui.IndexHtml, err = filepath.Abs(confui.IndexHtml)
+ if err != nil {
+ panic(errors.New("Index file not found: " + err.Error()))
+ }
+ if stat, err := os.Stat(confui.IndexHtml); err != nil {
+ panic(errors.New(fmt.Sprintf("Index file %v not found or permissians denied: %v", confui.IndexHtml, err.Error())))
+ } else if stat.IsDir() {
+ panic(errors.New(fmt.Sprintf("Index file %v not found", confui.IndexHtml)))
+ }
+ path_prefix := ""
+ if indexUrl != nil && len(indexUrl.Scheme) == 1 {
+ path_prefix = "/"
+ }
+ indexUrl, err = url.ParseRequestURI("file://" + path_prefix + strings.ReplaceAll(confui.IndexHtml, "\\", "/"))
+ if err != nil {
+ panic(errors.New("Index file URL parse error: " + err.Error()))
+ }
}
- log.Println(path)
w.Bind("onLoad", func() {
log.Println("page loaded")
go run(w)
@@ -105,10 +145,8 @@ func main() {
w.Bind("ping", func(peer_list string) {
go ping(w, peer_list)
})
- //dat, err := ioutil.ReadFile(path+"/index.html")
- //w.Navigate("data:text/html,"+url.QueryEscape(string(dat)))
- //w.Navigate("data:text/html,"+""+path+"")
- w.Navigate("file://" + path + "/index.html")
+ log.Printf("Opening: %v", indexUrl)
+ w.Navigate(indexUrl.String())
w.Run()
}
@@ -138,45 +176,19 @@ func check(peer string) int64 {
return d.Milliseconds()
}
-func get_user_home_path() string {
- path, exists := os.LookupEnv("HOME")
- if exists {
- return path
- } else {
- return ""
- }
-}
-
-func get_ctl_path() string {
- if runtime.GOOS == "windows" {
- program_path := "programfiles"
- path, exists := os.LookupEnv(program_path)
- if exists {
- fmt.Println("Program path: %s", path)
- ctl_path := fmt.Sprintf("%s\\RiV-mesh\\meshctl.exe", path)
- return ctl_path
- } else {
- fmt.Println("could not find Program Files path")
- return ""
- }
- } else {
- ctl_path := fmt.Sprintf("/usr/local/bin/meshctl")
- return ctl_path
- }
-}
-
func run(w webview.WebView) {
- if len(riv_ctrl_path) > 0 {
- get_self(w)
- get_peers(w)
- }
+ get_self(w)
+ get_peers(w)
_ = time.AfterFunc(10*time.Second, func() {
run(w)
})
}
func add_peers(uri string) {
- run_command_with_arg("addpeers", "uri="+uri)
+ _, err := run_command_with_arg("addpeers", "uri="+uri)
+ if err != nil {
+ log.Println("Error in the add_peers() call:", err)
+ }
}
func remove_peers() {
@@ -237,3 +249,117 @@ func setPingValue(p webview.WebView, peer string, value string) {
p.Eval("setPingValue('" + peer + "','" + value + "');")
})
}
+
+func run_command(command string) []byte {
+ data, err := run_command_with_arg(command, "")
+ if err != nil {
+ log.Println("Error in the "+command+" call:", err)
+ }
+ return data
+}
+
+func run_command_with_arg(command string, arg string) ([]byte, error) {
+ logbuffer := &bytes.Buffer{}
+ logger := log.New(logbuffer, "", log.Flags())
+
+ wrapErr := func(err error) error {
+ logger.Println("Error:", err)
+ return errors.New(fmt.Sprintln(logbuffer))
+ }
+
+ endpoint := getEndpoint(logger)
+
+ var conn net.Conn
+ u, err := url.Parse(endpoint)
+ d := net.Dialer{Timeout: 5000 * time.Millisecond}
+ if err == nil {
+ switch strings.ToLower(u.Scheme) {
+ case "unix":
+ logger.Println("Connecting to UNIX socket", endpoint[7:])
+ conn, err = d.Dial("unix", endpoint[7:])
+ case "tcp":
+ logger.Println("Connecting to TCP socket", u.Host)
+ conn, err = d.Dial("tcp", u.Host)
+ default:
+ logger.Println("Unknown protocol or malformed address - check your endpoint")
+ err = errors.New("protocol not supported")
+ }
+ } else {
+ logger.Println("Connecting to TCP socket", u.Host)
+ conn, err = d.Dial("tcp", endpoint)
+ }
+ if err != nil {
+ return nil, wrapErr(err)
+ }
+
+ logger.Println("Connected")
+ defer conn.Close()
+
+ decoder := json.NewDecoder(conn)
+ encoder := json.NewEncoder(conn)
+ send := &admin.AdminSocketRequest{}
+ recv := &admin.AdminSocketResponse{}
+ send.Name = command
+ args := map[string]string{}
+ switch {
+ case len(arg) > 0:
+ tokens := strings.SplitN(arg, "=", 2)
+ args[tokens[0]] = tokens[1]
+ default:
+ }
+
+ if send.Arguments, err = json.Marshal(args); err != nil {
+ return nil, err
+ }
+ if err := encoder.Encode(&send); err != nil {
+ return nil, err
+ }
+ logger.Printf("Request sent")
+ //js, _ := json.Marshal(send)
+ //fmt.Println("sent:", string(js))
+ if err := decoder.Decode(&recv); err != nil {
+ return nil, wrapErr(err)
+ }
+ if recv.Status == "error" {
+ if err := recv.Error; err != "" {
+ return nil, wrapErr(errors.New("Admin socket returned an error:" + err))
+ } else {
+ return nil, wrapErr(errors.New("Admin socket returned an error but didn't specify any error text"))
+ }
+ }
+ if json, err := json.MarshalIndent(recv.Response, "", " "); err == nil {
+ return json, nil
+ }
+ return nil, wrapErr(err)
+}
+
+func getEndpoint(logger *log.Logger) string {
+ if config, err := os.ReadFile(defaults.GetDefaults().DefaultConfigFile); err == nil {
+ if bytes.Equal(config[0:2], []byte{0xFF, 0xFE}) ||
+ bytes.Equal(config[0:2], []byte{0xFE, 0xFF}) {
+ utf := unicode.UTF16(unicode.BigEndian, unicode.UseBOM)
+ decoder := utf.NewDecoder()
+ config, err = decoder.Bytes(config)
+ if err != nil {
+ return defaults.GetDefaults().DefaultAdminListen
+ }
+ }
+ var dat map[string]interface{}
+ if err := hjson.Unmarshal(config, &dat); err != nil {
+ return defaults.GetDefaults().DefaultAdminListen
+ }
+ if ep, ok := dat["AdminListen"].(string); ok && (ep != "none" && ep != "") {
+ logger.Println("Found platform default config file", defaults.GetDefaults().DefaultConfigFile)
+ logger.Println("Using endpoint", ep, "from AdminListen")
+ return ep
+ } else {
+ logger.Println("Configuration file doesn't contain appropriate AdminListen option")
+ logger.Println("Falling back to platform default", defaults.GetDefaults().DefaultAdminListen)
+ return defaults.GetDefaults().DefaultAdminListen
+ }
+ } else {
+ logger.Println("Can't open config file from default location", defaults.GetDefaults().DefaultConfigFile)
+ logger.Println("Falling back to platform default", defaults.GetDefaults().DefaultAdminListen)
+ return defaults.GetDefaults().DefaultAdminListen
+ }
+}
diff --git a/contrib/ui/mesh-ui/webview_other.go b/contrib/ui/mesh-ui/webview_other.go
index 782e0954..e4365ad5 100644
--- a/contrib/ui/mesh-ui/webview_other.go
+++ b/contrib/ui/mesh-ui/webview_other.go
@@ -3,30 +3,16 @@
package main
-import (
- "os/exec"
-)
+import "os"
-var riv_ctrl_path string
-
-func run_command(command string) []byte {
- args := []string{"-json", command}
- cmd := exec.Command(riv_ctrl_path, args...)
- out, err := cmd.CombinedOutput()
- if err != nil {
- //log.Fatalf("cmd.Run() failed with %s\n", err)
- return []byte(err.Error())
+func get_user_home_path() string {
+ path, exists := os.LookupEnv("HOME")
+ if exists {
+ return path
+ } else {
+ return ""
}
- return out
}
-func run_command_with_arg(command string, arg string) []byte {
- args := []string{"-json", command, arg}
- cmd := exec.Command(riv_ctrl_path, args...)
- out, err := cmd.CombinedOutput()
- if err != nil {
- //log.Fatalf("command failed: %s\n", riv_ctrl_path+" "+strings.Join(args, " "))
- return []byte(err.Error())
- }
- return out
+func Console(show bool) {
}
diff --git a/contrib/ui/mesh-ui/webview_windows.go b/contrib/ui/mesh-ui/webview_windows.go
index 2b0fd730..872f3b63 100755
--- a/contrib/ui/mesh-ui/webview_windows.go
+++ b/contrib/ui/mesh-ui/webview_windows.go
@@ -4,32 +4,31 @@
package main
import (
- "os/exec"
+ "os"
"syscall"
)
-var riv_ctrl_path string
-
-func run_command(command string) []byte {
- args := []string{"-json", command}
- cmd := exec.Command(riv_ctrl_path, args...)
- cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
- out, err := cmd.CombinedOutput()
- if err != nil {
- //log.Fatalf("cmd.Run() failed with %s\n", err)
- return []byte(err.Error())
+func get_user_home_path() string {
+ path, exists := os.LookupEnv("USERPROFILE")
+ if exists {
+ return path
+ } else {
+ return ""
}
- return out
}
-func run_command_with_arg(command string, arg string) []byte {
- args := []string{"-json", command, arg}
- cmd := exec.Command(riv_ctrl_path, args...)
- cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
- out, err := cmd.CombinedOutput()
- if err != nil {
- //log.Fatalf("command failed: %s\n", riv_ctrl_path+" "+strings.Join(args, " "))
- return []byte(err.Error())
+func Console(show bool) {
+ var getWin = syscall.NewLazyDLL("kernel32.dll").NewProc("GetConsoleWindow")
+ var showWin = syscall.NewLazyDLL("user32.dll").NewProc("ShowWindow")
+ hwnd, _, _ := getWin.Call()
+ if hwnd == 0 {
+ return
+ }
+ if show {
+ var SW_RESTORE uintptr = 9
+ showWin.Call(hwnd, SW_RESTORE)
+ } else {
+ var SW_HIDE uintptr = 0
+ showWin.Call(hwnd, SW_HIDE)
}
- return out
}
diff --git a/go.mod b/go.mod
index 79f35206..4a732385 100644
--- a/go.mod
+++ b/go.mod
@@ -22,6 +22,7 @@ require (
)
require (
+ github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 // indirect
github.com/dustin/go-humanize v1.0.0 // indirect
github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 // indirect
github.com/getlantern/ema v0.0.0-20190620044903-5943d28f40e4 // indirect
@@ -32,14 +33,11 @@ require (
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f // indirect
github.com/go-stack/stack v1.8.0 // indirect
github.com/google/uuid v1.1.2 // indirect
- github.com/jchv/go-webview-selector v0.0.0-20220126075917-13df59bce3cf // direct
- github.com/jchv/go-webview2 v0.0.0-20220126073738-2ea27096a5eb // indirect
- github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5 // indirect
+ github.com/webview/webview v0.0.0-20210330151455-f540d88dde4e
github.com/libp2p/go-buffer-pool v0.0.2 // indirect
github.com/mattn/go-colorable v0.1.8 // indirect
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect
github.com/rivo/uniseg v0.2.0 // indirect
- github.com/webview/webview v0.0.0-20221206071508-862eb96057ff // indirect
go.uber.org/atomic v1.7.0 // indirect
go.uber.org/multierr v1.6.0 // indirect
go.uber.org/zap v1.19.1 // indirect
diff --git a/go.sum b/go.sum
index 39ad0f18..4c41cad8 100644
--- a/go.sum
+++ b/go.sum
@@ -12,6 +12,8 @@ github.com/cheggaaa/pb/v3 v3.0.8/go.mod h1:UICbiLec/XO6Hw6k+BHEtHeQFzzBH4i2/qk/o
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ=
+github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
@@ -43,12 +45,6 @@ github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwM
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw=
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
-github.com/jchv/go-webview-selector v0.0.0-20220126075917-13df59bce3cf h1:LfCNdIjo0pYj7ChAEkRZKPW/GKOzQLGqz/8CbDTxBvE=
-github.com/jchv/go-webview-selector v0.0.0-20220126075917-13df59bce3cf/go.mod h1:RfUO9QcPUZ27qVS+rq9SYhhjsVNiolWwaIQdNjqFUsQ=
-github.com/jchv/go-webview2 v0.0.0-20220126073738-2ea27096a5eb h1:oKKhiqJVbFqiPo+cj7zmY/R8AaOxgLQixUAOP/bKuRM=
-github.com/jchv/go-webview2 v0.0.0-20220126073738-2ea27096a5eb/go.mod h1:/BNVc0Sw3Wj6Sz9uSxPwhCEUhhWs92hPde75K2YV24A=
-github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5 h1:pdFFlHXY9tZXmJz+tRSm1DzYEH4ebha7cffmm607bMU=
-github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs=
github.com/kardianos/minwinsvc v1.0.2 h1:JmZKFJQrmTGa/WiW+vkJXKmfzdjabuEW4Tirj5lLdR0=
github.com/kardianos/minwinsvc v1.0.2/go.mod h1:LUZNYhNmxujx2tR7FbdxqYJ9XDDoCd3MQcl1o//FWl4=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -94,8 +90,8 @@ github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYp
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA=
github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
-github.com/webview/webview v0.0.0-20221206071508-862eb96057ff h1:pW+h72sRgm/o52LUihH14fjYukxmAqbGePUVSKOTZyQ=
-github.com/webview/webview v0.0.0-20221206071508-862eb96057ff/go.mod h1:rpXAuuHgyEJb6kXcXldlkOjU6y4x+YcASKKXJNUhh0Y=
+github.com/webview/webview v0.0.0-20210330151455-f540d88dde4e h1:z780M7mCrdt6KiICeW9SGirvQjxDlrVU+n99FO93nbI=
+github.com/webview/webview v0.0.0-20210330151455-f540d88dde4e/go.mod h1:rpXAuuHgyEJb6kXcXldlkOjU6y4x+YcASKKXJNUhh0Y=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
@@ -137,10 +133,8 @@ golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210218145245-beda7e5e158e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
diff --git a/src/core/api.go b/src/core/api.go
index b1742523..059e46a0 100644
--- a/src/core/api.go
+++ b/src/core/api.go
@@ -234,11 +234,18 @@ func (c *Core) RemovePeer(uri string, sourceInterface string) error {
}
func (c *Core) RemovePeers() error {
- c.config._peers = map[Peer]*linkInfo{}
- //for k := range c.config.InterfacePeers {
- // delete(c.config.InterfacePeers, k)
- //}
-
+ phony.Block(c, func() {
+ for peer, linkInfo := range c.config._peers {
+ if linkInfo != nil {
+ c.links.Act(nil, func() {
+ if link := c.links._links[*linkInfo]; link != nil {
+ _ = link.close()
+ }
+ })
+ }
+ delete(c.config._peers, peer)
+ }
+ })
return nil
}
diff --git a/src/core/core.go b/src/core/core.go
index a150ee0f..58b383d9 100644
--- a/src/core/core.go
+++ b/src/core/core.go
@@ -20,7 +20,7 @@ import (
// The Core object represents the Mesh node. You should create a Core
// object for each Mesh node you plan to run.
type Core struct {
- address Address
+
// This is the main data structure that holds everything else for a node
// We're going to keep our own copy of the provided config - that way we can
// guarantee that it will be covered by the mutex
diff --git a/src/defaults/defaults.go b/src/defaults/defaults.go
index ef358ed8..97482078 100644
--- a/src/defaults/defaults.go
+++ b/src/defaults/defaults.go
@@ -8,6 +8,12 @@ type NetworkDomainConfig = config.NetworkDomainConfig
var defaultConfig = "" // LDFLAGS='-X github.com/yggdrasil-network/yggdrasil-go/src/defaults.defaultConfig=/path/to/config
var defaultAdminListen = "" // LDFLAGS='-X github.com/yggdrasil-network/yggdrasil-go/src/defaults.defaultAdminListen=unix://path/to/sock'
+type defaultParameters struct {
+
+ //Network domain
+ DefaultNetworkDomain NetworkDomainConfig
+}
+
// Defines which parameters are expected by default for configuration on a
// specific platform. These values are populated in the relevant defaults_*.go
// for the platform being targeted. They must be set.
@@ -21,15 +27,23 @@ type platformDefaultParameters struct {
// Multicast interfaces
DefaultMulticastInterfaces []MulticastInterfaceConfig
- //Network domain
- DefaultNetworkDomain NetworkDomainConfig
-
// TUN
MaximumIfMTU uint64
DefaultIfMTU uint64
DefaultIfName string
}
+// Defines defaults for the all platforms.
+func define() defaultParameters {
+ return defaultParameters{
+
+ // Network domain
+ DefaultNetworkDomain: NetworkDomainConfig{
+ Prefix: "fc",
+ },
+ }
+}
+
func GetDefaults() platformDefaultParameters {
defaults := getDefaults()
if defaultConfig != "" {
@@ -56,10 +70,10 @@ func GenerateConfig() *config.NodeConfig {
cfg.InterfacePeers = map[string][]string{}
cfg.AllowedPublicKeys = []string{}
cfg.MulticastInterfaces = defaults.DefaultMulticastInterfaces
- cfg.NetworkDomain = defaults.DefaultNetworkDomain
cfg.IfName = defaults.DefaultIfName
cfg.IfMTU = defaults.DefaultIfMTU
cfg.NodeInfoPrivacy = false
+ cfg.NetworkDomain = define().DefaultNetworkDomain
return cfg
}
diff --git a/src/defaults/defaults_darwin.go b/src/defaults/defaults_darwin.go
index 670fca88..9698d2ba 100644
--- a/src/defaults/defaults_darwin.go
+++ b/src/defaults/defaults_darwin.go
@@ -19,11 +19,6 @@ func getDefaults() platformDefaultParameters {
{Regex: "bridge.*", Beacon: true, Listen: true},
},
- // Network domain
- DefaultNetworkDomain: NetworkDomainConfig{
- Prefix: "fc",
- },
-
// TUN
MaximumIfMTU: 65535,
DefaultIfMTU: 65535,
diff --git a/src/defaults/defaults_freebsd.go b/src/defaults/defaults_freebsd.go
index 2a50c25c..a0b8658b 100644
--- a/src/defaults/defaults_freebsd.go
+++ b/src/defaults/defaults_freebsd.go
@@ -18,11 +18,6 @@ func getDefaults() platformDefaultParameters {
{Regex: ".*", Beacon: true, Listen: true},
},
- // Network domain
- DefaultNetworkDomain: NetworkDomainConfig{
- Prefix: "fc",
- },
-
// TUN
MaximumIfMTU: 32767,
DefaultIfMTU: 32767,
diff --git a/src/defaults/defaults_linux.go b/src/defaults/defaults_linux.go
index 2c2690c7..8ade70c1 100644
--- a/src/defaults/defaults_linux.go
+++ b/src/defaults/defaults_linux.go
@@ -18,11 +18,6 @@ func getDefaults() platformDefaultParameters {
{Regex: ".*", Beacon: true, Listen: true},
},
- // Network domain
- DefaultNetworkDomain: NetworkDomainConfig{
- Prefix: "fc",
- },
-
// TUN
MaximumIfMTU: 65535,
DefaultIfMTU: 65535,
diff --git a/src/defaults/defaults_openbsd.go b/src/defaults/defaults_openbsd.go
index 3772d07b..a07092ad 100644
--- a/src/defaults/defaults_openbsd.go
+++ b/src/defaults/defaults_openbsd.go
@@ -18,11 +18,6 @@ func getDefaults() platformDefaultParameters {
{Regex: ".*", Beacon: true, Listen: true},
},
- // Network domain
- DefaultNetworkDomain: NetworkDomainConfig{
- Prefix: "fc",
- },
-
// TUN
MaximumIfMTU: 16384,
DefaultIfMTU: 16384,
diff --git a/src/defaults/defaults_other.go b/src/defaults/defaults_other.go
index 21c32160..53b68be4 100644
--- a/src/defaults/defaults_other.go
+++ b/src/defaults/defaults_other.go
@@ -18,11 +18,6 @@ func getDefaults() platformDefaultParameters {
{Regex: ".*", Beacon: true, Listen: true},
},
- // Network domain
- DefaultNetworkDomain: NetworkDomainConfig{
- Prefix: "fc",
- },
-
// TUN
MaximumIfMTU: 65535,
DefaultIfMTU: 65535,
diff --git a/src/defaults/defaults_windows.go b/src/defaults/defaults_windows.go
index 95a8cc80..b3545969 100644
--- a/src/defaults/defaults_windows.go
+++ b/src/defaults/defaults_windows.go
@@ -18,11 +18,6 @@ func getDefaults() platformDefaultParameters {
{Regex: ".*", Beacon: true, Listen: true},
},
- // Network domain
- DefaultNetworkDomain: NetworkDomainConfig{
- Prefix: "fc",
- },
-
// TUN
MaximumIfMTU: 65535,
DefaultIfMTU: 65535,