1. added multipath protocol and schema suport

2. added SCTP protocol and schema support
3. added set of NAS models support (Asustor, ReadyNAS, Drobo, QNAP, WD, Synology, Terramaster)
4. moved to fc00::/7 private segment
5. added Windows, MacOS and Linux UI for peers edit and current status
This commit is contained in:
vadym 2022-10-27 22:03:37 +03:00
parent cfa293d189
commit d8a4000141
198 changed files with 8589 additions and 697 deletions

30
src/admin/addpeers.go Normal file
View file

@ -0,0 +1,30 @@
package admin
import (
"fmt"
)
type AddPeersRequest struct {
Uri string `json:"uri"`
Intf string `json:"intf"`
}
type AddPeersResponse struct {
List []string `json:"list"`
}
func (a *AdminSocket) addPeersHandler(req *AddPeersRequest, res *AddPeersResponse) error {
// Set sane defaults
err:=a.core.AddPeer(req.Uri, req.Intf)
if err != nil {
fmt.Println("adding peer error %s", err)
return err
} else {
fmt.Println("added peer %s", req.Uri)
res.List = append(res.List, req.Uri)
}
return nil
}

View file

@ -6,13 +6,15 @@ import (
"fmt"
"net"
"net/url"
"net/http"
"os"
"sort"
"strings"
"time"
"github.com/yggdrasil-network/yggdrasil-go/src/core"
"github.com/RiV-chain/RiV-mesh/src/config"
"github.com/RiV-chain/RiV-mesh/src/core"
)
// TODO: Add authentication
@ -201,12 +203,84 @@ 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{}
fmt.Println("json addpeers request %s", string(in[:]))
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
})
//_ = a.AddHandler("getNodeInfo", []string{"key"}, t.proto.nodeinfo.nodeInfoAdminHandler)
//_ = a.AddHandler("debug_remoteGetSelf", []string{"key"}, t.proto.getSelfHandler)
//_ = a.AddHandler("debug_remoteGetPeers", []string{"key"}, t.proto.getPeersHandler)
//_ = a.AddHandler("debug_remoteGetDHT", []string{"key"}, t.proto.getDHTHandler)
}
// Start runs http server
func (a *AdminSocket) StartHttpServer(nc *config.NodeConfig) {
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){
fmt.Fprintf(w, "Following methods are allowed: getself, getpeers. litening"+u.Host)
})
http.HandleFunc("/api/getself", func(w http.ResponseWriter, r *http.Request){
w.Header().Add("Content-Type", "application/json")
req := &GetSelfRequest{}
res := &GetSelfResponse{}
if err := a.getSelfHandler(req, res); err != nil {
http.Error(w, err.Error(), 503)
}
b, err := json.Marshal(res)
if err != nil {
http.Error(w, err.Error(), 503)
}
fmt.Fprintf(w, string(b[:]))
})
http.HandleFunc("/api/getpeers", func(w http.ResponseWriter, r *http.Request){
w.Header().Add("Content-Type", "application/json")
req := &GetPeersRequest{}
res := &GetPeersResponse{}
if err := a.getPeersHandler(req, res); err != nil {
http.Error(w, err.Error(), 503)
}
b, err := json.Marshal(res)
if err != nil {
http.Error(w, err.Error(), 503)
}
fmt.Fprintf(w, string(b[:]))
})
http.Handle("/", http.FileServer(http.Dir(nc.WwwRoot)))
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)
}
go func() {
a.log.Errorln(http.Serve(l, nil))
}()
}
}
// IsStarted returns true if the module has been started.
func (a *AdminSocket) IsStarted() bool {
select {
@ -327,7 +401,6 @@ func (a *AdminSocket) handleRequest(conn net.Conn) {
var buf json.RawMessage
var req AdminSocketRequest
var resp AdminSocketResponse
req.Arguments = []byte("{}")
if err := func() error {
if err = decoder.Decode(&buf); err != nil {
return fmt.Errorf("Failed to find request")

View file

@ -6,7 +6,7 @@ import (
"sort"
"strings"
"github.com/yggdrasil-network/yggdrasil-go/src/address"
"github.com/RiV-chain/RiV-mesh/src/address"
)
type GetDHTRequest struct{}

View file

@ -6,7 +6,7 @@ import (
"sort"
"strings"
"github.com/yggdrasil-network/yggdrasil-go/src/address"
"github.com/RiV-chain/RiV-mesh/src/address"
)
type GetPathsRequest struct {

View file

@ -5,7 +5,7 @@ import (
"net"
"sort"
"github.com/yggdrasil-network/yggdrasil-go/src/address"
"github.com/RiV-chain/RiV-mesh/src/address"
)
type GetPeersRequest struct {

View file

@ -3,7 +3,7 @@ package admin
import (
"encoding/hex"
"github.com/yggdrasil-network/yggdrasil-go/src/version"
"github.com/RiV-chain/RiV-mesh/src/version"
)
type GetSelfRequest struct{}

View file

@ -6,7 +6,7 @@ import (
"sort"
"strings"
"github.com/yggdrasil-network/yggdrasil-go/src/address"
"github.com/RiV-chain/RiV-mesh/src/address"
)
type GetSessionsRequest struct{}