••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
diff --git a/contrib/ui/nas-netgear-os6/package/DEBIAN/postinst b/contrib/ui/nas-netgear-os6/package/DEBIAN/postinst
index 37ab51c3..d56dc904 100755
--- a/contrib/ui/nas-netgear-os6/package/DEBIAN/postinst
+++ b/contrib/ui/nas-netgear-os6/package/DEBIAN/postinst
@@ -54,8 +54,8 @@ fi
chmod 755 /etc/mesh.conf
if command -v systemctl >/dev/null; then
systemctl daemon-reload || echo -n "daemon not reloaded!"
- systemctl enable mesh || echo -n "systemctl enable failed!"
- systemctl restart mesh || echo -n "systemctl restart failed!"
+ systemctl enable fvapp-mesh || echo -n "systemctl enable failed!"
+ systemctl restart fvapp-mesh || echo -n "systemctl restart failed!"
fi
exit 0
diff --git a/go.mod b/go.mod
index 6b5c8383..dae581ec 100644
--- a/go.mod
+++ b/go.mod
@@ -21,8 +21,10 @@ require (
golang.zx2c4.com/wireguard/windows v0.4.12
)
+require gerace.dev/zipfs v0.2.0
+
require (
- github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 // indirect
+ github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815
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
@@ -33,11 +35,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/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-20210330151455-f540d88dde4e
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 4c41cad8..8e39951c 100644
--- a/go.sum
+++ b/go.sum
@@ -1,3 +1,5 @@
+gerace.dev/zipfs v0.2.0 h1:3U1GsasLdxGVhf7lCYbccsH4mpuSpMpLOy37GmfT+KY=
+gerace.dev/zipfs v0.2.0/go.mod h1:L6cxA6m8uVfWDawsBHnki/J6Gos5uSlu/6RJZhafrfQ=
github.com/Arceliar/ironwood v0.0.0-20221115123222-ec61cea2f439 h1:eOW6/XIs06TnUn9GPCnfv71CQZw8edP3u3mH3lZt6iM=
github.com/Arceliar/ironwood v0.0.0-20221115123222-ec61cea2f439/go.mod h1:RP72rucOFm5udrnEzTmIWLRVGQiV/fSUAQXJ0RST/nk=
github.com/Arceliar/phony v0.0.0-20210209235338-dde1a8dca979 h1:WndgpSW13S32VLQ3ugUxx2EnnWmgba1kCqPkd4Gk1yQ=
@@ -79,6 +81,7 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
@@ -173,6 +176,7 @@ golang.zx2c4.com/wireguard/windows v0.4.12 h1:CUmbdWKVNzTSsVb4yUAiEwL3KsabdJkEPd
golang.zx2c4.com/wireguard/windows v0.4.12/go.mod h1:PW4y+d9oY83XU9rRwRwrJDwEMuhVjMxu2gfD1cfzS7w=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/src/admin/addpeers.go b/src/admin/addpeers.go
index 0f184277..c61d07bc 100644
--- a/src/admin/addpeers.go
+++ b/src/admin/addpeers.go
@@ -1,14 +1,12 @@
package admin
import (
-
"fmt"
-
)
type AddPeersRequest struct {
- Uri string `json:"uri"`
- Intf string `json:"intf"`
+ Uri string `json:"uri"`
+ Intf string `json:"intf"`
}
type AddPeersResponse struct {
@@ -17,12 +15,12 @@ type AddPeersResponse struct {
func (a *AdminSocket) addPeersHandler(req *AddPeersRequest, res *AddPeersResponse) error {
// Set sane defaults
- err:=a.core.AddPeer(req.Uri, req.Intf)
+ err := a.core.AddPeer(req.Uri, req.Intf)
if err != nil {
- fmt.Println("adding peer error %s", err)
+ fmt.Printf("adding peer error %s\n", err)
return err
} else {
- fmt.Println("added peer %s", req.Uri)
+ fmt.Printf("added peer %s\n", req.Uri)
res.List = append(res.List, req.Uri)
}
diff --git a/src/admin/admin.go b/src/admin/admin.go
index 6cfb3201..8ec9f2ca 100644
--- a/src/admin/admin.go
+++ b/src/admin/admin.go
@@ -5,14 +5,17 @@ import (
"errors"
"fmt"
"net"
- "net/url"
"net/http"
+ "net/url"
"os"
"sort"
+ "archive/zip"
"strings"
"time"
+ "gerace.dev/zipfs"
+
"github.com/RiV-chain/RiV-mesh/src/config"
"github.com/RiV-chain/RiV-mesh/src/core"
)
@@ -203,26 +206,26 @@ func (a *AdminSocket) SetupAdminHandlers() {
return res, nil
},
)
- _ = a.AddHandler("addPeers", "Add peers to this node", []string{"uri", "[interface]"}, func(in json.RawMessage) (interface{}, error) {
- req := &AddPeersRequest{}
- res := &AddPeersResponse{}
+ _ = a.AddHandler("addPeers", "Add peers to this node", []string{"uri", "[interface]"}, func(in json.RawMessage) (interface{}, error) {
+ req := &AddPeersRequest{}
+ res := &AddPeersResponse{}
- fmt.Println("json addpeers request %s", string(in[:]))
+ fmt.Println("json addpeers request %s", string(in[:]))
- if err := json.Unmarshal(in, &req); err != nil {
- return nil, err
- }
+ if err := json.Unmarshal(in, &req); err != nil {
+ return nil, err
+ }
- if err := a.addPeersHandler(req, res); err != nil {
- return nil, err
- }
- return res, nil
- })
- _ = a.AddHandler("removePeers", "Remove all peers from this node", []string{}, func(in json.RawMessage) (interface{}, error) {
- a.core.RemovePeers()
- res := &AddPeersResponse{}
- return res, nil
- })
+ if err := a.addPeersHandler(req, res); err != nil {
+ return nil, err
+ }
+ return res, nil
+ })
+ _ = a.AddHandler("removePeers", "Remove all peers from this node", []string{}, func(in json.RawMessage) (interface{}, error) {
+ a.core.RemovePeers()
+ res := &AddPeersResponse{}
+ return res, nil
+ })
//_ = a.AddHandler("getNodeInfo", []string{"key"}, t.proto.nodeinfo.nodeInfoAdminHandler)
//_ = a.AddHandler("debug_remoteGetSelf", []string{"key"}, t.proto.getSelfHandler)
@@ -232,16 +235,16 @@ func (a *AdminSocket) SetupAdminHandlers() {
// Start runs http server
func (a *AdminSocket) StartHttpServer(nc *config.NodeConfig) {
- if nc.HttpAddress != "none" && nc.HttpAddress != "" && nc.WwwRoot != "none" && nc.WwwRoot != ""{
+ if nc.HttpAddress != "none" && nc.HttpAddress != "" && nc.WwwRoot != "none" && nc.WwwRoot != "" {
u, err := url.Parse(nc.HttpAddress)
if err != nil {
a.log.Errorln("An error occurred parsing http address:", err)
return
}
- http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request){
+ http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Following methods are allowed: getself, getpeers. litening"+u.Host)
})
- http.HandleFunc("/api/getself", func(w http.ResponseWriter, r *http.Request){
+ http.HandleFunc("/api/getself", func(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Content-Type", "application/json")
req := &GetSelfRequest{}
res := &GetSelfResponse{}
@@ -252,9 +255,9 @@ func (a *AdminSocket) StartHttpServer(nc *config.NodeConfig) {
if err != nil {
http.Error(w, err.Error(), 503)
}
- fmt.Fprintf(w, string(b[:]))
+ fmt.Fprint(w, string(b[:]))
})
- http.HandleFunc("/api/getpeers", func(w http.ResponseWriter, r *http.Request){
+ http.HandleFunc("/api/getpeers", func(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Content-Type", "application/json")
req := &GetPeersRequest{}
res := &GetPeersResponse{}
@@ -266,14 +269,27 @@ func (a *AdminSocket) StartHttpServer(nc *config.NodeConfig) {
if err != nil {
http.Error(w, err.Error(), 503)
}
- fmt.Fprintf(w, string(b[:]))
+ fmt.Fprint(w, string(b[:]))
})
- http.Handle("/", http.FileServer(http.Dir(nc.WwwRoot)))
+ var docFs = ""
+ pakReader, err := zip.OpenReader(nc.WwwRoot)
+ if err == nil {
+ defer pakReader.Close()
+ fs, err := zipfs.NewZipFileSystem(&pakReader.Reader, zipfs.ServeIndexForMissing())
+ if err == nil {
+ http.Handle("/", http.FileServer(fs))
+ docFs = "zipfs"
+ }
+ }
+ if docFs == "" {
+ http.Handle("/", http.FileServer(http.Dir(nc.WwwRoot)))
+ docFs = "local fs"
+ }
l, e := net.Listen("tcp4", u.Host)
if e != nil {
a.log.Errorln("%s\n", e)
} else {
- a.log.Infof("Http server listening on %s\n", u.Host)
+ a.log.Infof("Http server is listening on %s and is supplied from %s %s\n", nc.HttpAddress, docFs, nc.WwwRoot)
}
go func() {
a.log.Errorln(http.Serve(l, nil))
diff --git a/src/admin/getdht.go b/src/admin/getdht.go
index 71248a2f..bf9e97bb 100644
--- a/src/admin/getdht.go
+++ b/src/admin/getdht.go
@@ -5,7 +5,6 @@ import (
"net"
"sort"
"strings"
-
//"github.com/RiV-chain/RiV-mesh/src/address"
)
diff --git a/src/admin/getpaths.go b/src/admin/getpaths.go
index 45760db5..fe845685 100644
--- a/src/admin/getpaths.go
+++ b/src/admin/getpaths.go
@@ -5,7 +5,6 @@ import (
"net"
"sort"
"strings"
-
//"github.com/RiV-chain/RiV-mesh/src/address"
)
diff --git a/src/admin/getpeers.go b/src/admin/getpeers.go
index fc2426e4..6c8691c8 100644
--- a/src/admin/getpeers.go
+++ b/src/admin/getpeers.go
@@ -4,7 +4,6 @@ import (
"encoding/hex"
"net"
"sort"
-
//"github.com/RiV-chain/RiV-mesh/src/address"
)
diff --git a/src/admin/getsessions.go b/src/admin/getsessions.go
index a5ae0d1b..07babca5 100644
--- a/src/admin/getsessions.go
+++ b/src/admin/getsessions.go
@@ -5,7 +5,6 @@ import (
"net"
"sort"
"strings"
-
//"github.com/RiV-chain/RiV-mesh/src/address"
)
diff --git a/src/core/core.go b/src/core/core.go
index 58b383d9..67a4fb55 100644
--- a/src/core/core.go
+++ b/src/core/core.go
@@ -20,7 +20,6 @@ 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 {
-
// 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/core/link_mpath.go b/src/core/link_mpath.go
index 3b394381..40923425 100644
--- a/src/core/link_mpath.go
+++ b/src/core/link_mpath.go
@@ -49,12 +49,14 @@ func (l *linkMPATH) dial(url *url.URL, options linkOptions, sintf string) error
}
func (l *linkMPATH) listen(url *url.URL, sintf string) (*Listener, error) {
- hostport := url.Host
- if sintf != "" {
- if host, port, err := net.SplitHostPort(hostport); err == nil {
- hostport = fmt.Sprintf("[%s%%%s]:%s", host, sintf, port)
+ /*
+ hostport := url.Host
+ if sintf != "" {
+ if host, port, err := net.SplitHostPort(hostport); err == nil {
+ hostport = fmt.Sprintf("[%s%%%s]:%s", host, sintf, port)
+ }
}
- }
+ */
_, cancel := context.WithCancel(l.core.ctx)
listener, err := l.listenFor(url, sintf)
if err != nil {
@@ -106,6 +108,8 @@ func (l *linkMPATH) handler(dial *linkDial, name string, info linkInfo, conn net
}
// Returns the address of the listener.
+//
+//nolint:unused
func (l *linkMPATH) getAddr() *net.TCPAddr {
// TODO: Fix this, because this will currently only give a single address
// to multicast.go, which obviously is not great, but right now multicast.go
diff --git a/src/core/link_mpath_linux.go b/src/core/link_mpath_linux.go
index 29f43b54..cc950aae 100644
--- a/src/core/link_mpath_linux.go
+++ b/src/core/link_mpath_linux.go
@@ -31,6 +31,7 @@ func (t *linkMPATH) tcpContext(network, address string, c syscall.RawConn) error
return nil
}
+//nolint:unused
func (t *linkMPATH) getControl(sintf string) func(string, string, syscall.RawConn) error {
return func(network, address string, c syscall.RawConn) error {
var err error
diff --git a/src/core/link_sctp_linux.go b/src/core/link_sctp_linux.go
index d26743aa..4f934ecf 100644
--- a/src/core/link_sctp_linux.go
+++ b/src/core/link_sctp_linux.go
@@ -55,6 +55,9 @@ func (l *linkSCTP) dial(url *url.URL, options linkOptions, sintf string) error {
return err
}
err = conn.(*sctp.SCTPConn).Connect(raddress)
+ if err != nil {
+ return err
+ }
//conn.(*sctp.SCTPConn).SetWriteBuffer(324288)
//conn.(*sctp.SCTPConn).SetReadBuffer(324288)
//wbuf, _ := conn.(*sctp.SCTPConn).GetWriteBuffer()
@@ -62,7 +65,10 @@ func (l *linkSCTP) dial(url *url.URL, options linkOptions, sintf string) error {
//l.core.log.Printf("Read buffer %d", rbuf)
//l.core.log.Printf("Write buffer %d", wbuf)
- conn.(*sctp.SCTPConn).SetEvents(sctp.SCTP_EVENT_DATA_IO)
+ err = conn.(*sctp.SCTPConn).SetEvents(sctp.SCTP_EVENT_DATA_IO)
+ if err != nil {
+ return err
+ }
dial := &linkDial{
url: url,
sintf: sintf,
@@ -72,12 +78,14 @@ func (l *linkSCTP) dial(url *url.URL, options linkOptions, sintf string) error {
func (l *linkSCTP) listen(url *url.URL, sintf string) (*Listener, error) {
//_, cancel := context.WithCancel(l.core.ctx)
- hostport := url.Host
- if sintf != "" {
- if host, port, err := net.SplitHostPort(hostport); err == nil {
- hostport = fmt.Sprintf("[%s%%%s]:%s", host, sintf, port)
+ /*
+ hostport := url.Host
+ if sintf != "" {
+ if host, port, err := net.SplitHostPort(hostport); err == nil {
+ hostport = fmt.Sprintf("[%s%%%s]:%s", host, sintf, port)
+ }
}
- }
+ */
addr := l.getAddress(url.Host)
listener, err := sctp.NewSCTPListener(addr, sctp.InitMsg{NumOstreams: 2, MaxInstreams: 2, MaxAttempts: 2, MaxInitTimeout: 5}, sctp.OneToOne, false)
@@ -85,7 +93,10 @@ func (l *linkSCTP) listen(url *url.URL, sintf string) (*Listener, error) {
//cancel()
return nil, err
}
- listener.SetEvents(sctp.SCTP_EVENT_DATA_IO)
+ err = listener.SetEvents(sctp.SCTP_EVENT_DATA_IO)
+ if err != nil {
+ return nil, err
+ }
entry := &Listener{
Listener: listener,
closed: make(chan struct{}),
@@ -142,6 +153,8 @@ func (l *linkSCTP) handler(dial *linkDial, name string, info linkInfo, conn net.
}
// Returns the address of the listener.
+//
+//nolint:unused
func (l *linkSCTP) getAddr() *net.TCPAddr {
// TODO: Fix this, because this will currently only give a single address
// to multicast.go, which obviously is not great, but right now multicast.go
@@ -155,7 +168,7 @@ func (l *linkSCTP) getAddr() *net.TCPAddr {
return addr
}
-//SCTP infrastructure
+// SCTP infrastructure
func (l *linkSCTP) getAddress(host string) *sctp.SCTPAddr {
//sctp supports multihoming but current implementation reuires only one path
diff --git a/src/core/link_tcp.go b/src/core/link_tcp.go
index 74f72e00..714ea9d9 100644
--- a/src/core/link_tcp.go
+++ b/src/core/link_tcp.go
@@ -186,7 +186,6 @@ func (l *linkTCP) dialerFor(dst *net.TCPAddr, sintf string) (*net.Dialer, error)
return dialer, nil
}
-
func tcpIDFor(local net.Addr, remoteAddr *net.TCPAddr) string {
if localAddr, ok := local.(*net.TCPAddr); ok && localAddr.IP.Equal(remoteAddr.IP) {
// Nodes running on the same host — include both the IP and port.
diff --git a/src/core/proto.go b/src/core/proto.go
index 76ad4b25..5694c339 100644
--- a/src/core/proto.go
+++ b/src/core/proto.go
@@ -11,7 +11,6 @@ import (
iwt "github.com/Arceliar/ironwood/types"
"github.com/Arceliar/phony"
-
//"github.com/RiV-chain/RiV-mesh/src/address"
)
diff --git a/src/multicast/multicast_darwin.go b/src/multicast/multicast_darwin.go
index 7c2579d4..22cf3998 100644
--- a/src/multicast/multicast_darwin.go
+++ b/src/multicast/multicast_darwin.go
@@ -4,7 +4,6 @@
package multicast
-
import (
"syscall"
diff --git a/src/multicast/multicast_unix.go b/src/multicast/multicast_unix.go
index 60477740..4247d7d1 100644
--- a/src/multicast/multicast_unix.go
+++ b/src/multicast/multicast_unix.go
@@ -20,10 +20,10 @@ func (m *Multicast) multicastReuse(network string, address string, c syscall.Raw
var reuseaddr error
control = c.Control(func(fd uintptr) {
- // Previously we used SO_REUSEPORT here, but that meant that machines running
- // RiV-mesh nodes as different users would inevitably fail with EADDRINUSE.
- // The behaviour for multicast is similar with both, so we'll use SO_REUSEADDR
- // instead.
+ // Previously we used SO_REUSEPORT here, but that meant that machines running
+ // RiV-mesh nodes as different users would inevitably fail with EADDRINUSE.
+ // The behaviour for multicast is similar with both, so we'll use SO_REUSEADDR
+ // instead.
if reuseaddr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEADDR, 1); reuseaddr != nil {
fmt.Fprintf(os.Stderr, "Failed to set SO_REUSEADDR on socket: %s\n", reuseaddr)
}
diff --git a/src/tun/tun.go b/src/tun/tun.go
index dc572b6e..92451e0d 100644
--- a/src/tun/tun.go
+++ b/src/tun/tun.go
@@ -94,8 +94,8 @@ func MaximumMTU() uint64 {
func New(core *core.Core, log core.Logger, opts ...SetupOption) (*TunAdapter, error) {
tun := &TunAdapter{
core: core,
- rwc: ipv6rwc.NewReadWriteCloser(core),
- log: log,
+ rwc: ipv6rwc.NewReadWriteCloser(core),
+ log: log,
}
for _, opt := range opts {
tun._applyOption(opt)
diff --git a/src/tun/tun_windows.go b/src/tun/tun_windows.go
index 11726375..7ffa8721 100644
--- a/src/tun/tun_windows.go
+++ b/src/tun/tun_windows.go
@@ -6,9 +6,9 @@ package tun
import (
"bytes"
"errors"
- "time"
"log"
"net"
+ "time"
"github.com/RiV-chain/RiV-mesh/src/defaults"
"golang.org/x/sys/windows"
@@ -43,7 +43,7 @@ func (tun *TunAdapter) setup(ifname string, addr string, mtu uint64) error {
if i > 8 {
return err
} else {
- time.Sleep(time.Duration(2 * i) * time.Second)
+ time.Sleep(time.Duration(2*i) * time.Second)
}
} else {
break