Skip to content

Commit 4babb82

Browse files
committed
Merge branch 'yggdrasil-v0.4.4-fixes-develop' into develop
2 parents b5ca9b4 + 853d335 commit 4babb82

File tree

4 files changed

+68
-78
lines changed

4 files changed

+68
-78
lines changed

cmd/mesh/main.go

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"os/signal"
1515
"regexp"
1616
"strings"
17+
"sync"
1718
"syscall"
1819

1920
"golang.org/x/text/encoding/unicode"
@@ -189,9 +190,7 @@ func getArgs() yggArgs {
189190
}
190191
}
191192

192-
// The main function is responsible for configuring and starting RiV-mesh.
193-
func run(args yggArgs, ctx context.Context, done chan struct{}) {
194-
defer close(done)
193+
func run(args yggArgs, ctx context.Context) {
195194
// Create a new logger that logs output to stdout.
196195
var logger *log.Logger
197196
switch args.logto {
@@ -299,7 +298,10 @@ func run(args yggArgs, ctx context.Context, done chan struct{}) {
299298
if err != nil {
300299
panic(err)
301300
}
302-
options := []core.SetupOption{}
301+
options := []core.SetupOption{
302+
core.NodeInfo(cfg.NodeInfo),
303+
core.NodeInfoPrivacy(cfg.NodeInfoPrivacy),
304+
}
303305
for _, addr := range cfg.Listen {
304306
options = append(options, core.ListenAddress(addr))
305307
}
@@ -379,14 +381,10 @@ func run(args yggArgs, ctx context.Context, done chan struct{}) {
379381
logger.Infof("Your IPv6 subnet is %s", subnet.String())
380382
// Start HTTP server
381383
n.admin.StartHttpServer(cfg)
382-
// Catch interrupts from the operating system to exit gracefully.
384+
// Block until we are told to shut down.
383385
<-ctx.Done()
384-
// Capture the service being stopped on Windows.
385-
minwinsvc.SetOnExit(n.shutdown)
386-
n.shutdown()
387-
}
388386

389-
func (n *node) shutdown() {
387+
// Shut down the node.
390388
_ = n.admin.Stop()
391389
_ = n.multicast.Stop()
392390
_ = n.tun.Stop()
@@ -395,24 +393,19 @@ func (n *node) shutdown() {
395393

396394
func main() {
397395
args := getArgs()
398-
hup := make(chan os.Signal, 1)
399-
//signal.Notify(hup, os.Interrupt, syscall.SIGHUP)
400-
term := make(chan os.Signal, 1)
401-
signal.Notify(term, os.Interrupt, syscall.SIGTERM)
402-
for {
403-
done := make(chan struct{})
404-
ctx, cancel := context.WithCancel(context.Background())
405-
go run(args, ctx, done)
406-
select {
407-
case <-hup:
408-
cancel()
409-
<-done
410-
case <-term:
411-
cancel()
412-
<-done
413-
return
414-
case <-done:
415-
return
416-
}
417-
}
396+
397+
// Catch interrupts from the operating system to exit gracefully.
398+
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
399+
400+
// Capture the service being stopped on Windows.
401+
minwinsvc.SetOnExit(cancel)
402+
403+
// Start the node, block and then wait for it to shut down.
404+
var wg sync.WaitGroup
405+
wg.Add(1)
406+
go func() {
407+
defer wg.Done()
408+
run(args, ctx)
409+
}()
410+
wg.Wait()
418411
}

go.mod

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ require (
99
github.com/gologme/log v1.2.0
1010
github.com/hashicorp/go-syslog v1.0.0
1111
github.com/hjson/hjson-go v3.1.0+incompatible
12-
github.com/kardianos/minwinsvc v1.0.0
12+
github.com/kardianos/minwinsvc v1.0.2
1313
github.com/mitchellh/mapstructure v1.4.1
1414
github.com/vishvananda/netlink v1.1.0
15+
1516
github.com/webview/webview v0.0.0-20210330151455-f540d88dde4e
16-
golang.org/x/mobile v0.0.0-20220928052126-fa6bcb076835
17-
golang.org/x/net v0.0.0-20220722155237-a158d28d115b
18-
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f
19-
golang.org/x/text v0.3.8-0.20211004125949-5bd84dd9b33b
17+
golang.org/x/mobile v0.0.0-20221012134814-c746ac228303
18+
golang.org/x/net v0.0.0-20221014081412-f15817d10f9b
19+
golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43
20+
golang.org/x/text v0.3.8
2021
golang.zx2c4.com/wireguard v0.0.0-20211017052713-f87e87af0d9a
2122
golang.zx2c4.com/wireguard/windows v0.4.12
2223
)
@@ -25,7 +26,7 @@ require (
2526
github.com/mattn/go-colorable v0.1.8 // indirect
2627
github.com/rivo/uniseg v0.2.0 // indirect
2728
github.com/vikulin/sctp v0.0.0-20221009200520-ae0f2830e422 // indirect
28-
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
29+
golang.org/x/crypto v0.0.0-20221012134737-56aed061732a // indirect
2930
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
3031
golang.org/x/tools v0.1.12 // indirect
3132
)

go.sum

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8t
1919
github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio=
2020
github.com/kardianos/minwinsvc v1.0.0 h1:+JfAi8IBJna0jY2dJGZqi7o15z13JelFIklJCAENALA=
2121
github.com/kardianos/minwinsvc v1.0.0/go.mod h1:Bgd0oc+D0Qo3bBytmNtyRKVlp85dAloLKhfxanPFFRc=
22+
github.com/kardianos/minwinsvc v1.0.2 h1:JmZKFJQrmTGa/WiW+vkJXKmfzdjabuEW4Tirj5lLdR0=
23+
github.com/kardianos/minwinsvc v1.0.2/go.mod h1:LUZNYhNmxujx2tR7FbdxqYJ9XDDoCd3MQcl1o//FWl4=
2224
github.com/lxn/walk v0.0.0-20210112085537-c389da54e794/go.mod h1:E23UucZGqpuUANJooIbHWCufXvOcT6E7Stq81gU+CSQ=
2325
github.com/lxn/win v0.0.0-20210218163916-a377121e959e/go.mod h1:KxxjdtRkfNoYDCUP5ryK7XJJNTnpC8atvtmTheChOtk=
2426
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
@@ -72,14 +74,16 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
7274
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
7375
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
7476
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
77+
golang.org/x/crypto v0.0.0-20221012134737-56aed061732a h1:NmSIgad6KjE6VvHciPZuNRTKxGhlPfD6OA87W/PLkqg=
78+
golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
7579
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4=
7680
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
7781
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
7882
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
7983
golang.org/x/mobile v0.0.0-20220722155234-aaac322e2105 h1:3vUV5x5+3LfQbgk7paCM6INOaJG9xXQbn79xoNkwfIk=
8084
golang.org/x/mobile v0.0.0-20220722155234-aaac322e2105/go.mod h1:pe2sM7Uk+2Su1y7u/6Z8KJ24D7lepUjFZbhFOrmDfuQ=
81-
golang.org/x/mobile v0.0.0-20220928052126-fa6bcb076835 h1:v6yt1xSu+4xV0fPEmB8s2BHdOaoU0SSZrVQzj6pRvqk=
82-
golang.org/x/mobile v0.0.0-20220928052126-fa6bcb076835/go.mod h1:M32cGdzp91A8Ex9qQtyZinr19EYxzkFqDjW2oyHzTDQ=
85+
golang.org/x/mobile v0.0.0-20221012134814-c746ac228303 h1:K4fp1rDuJBz0FCPAWzIJwnzwNEM7S6yobdZzMrZ/Zws=
86+
golang.org/x/mobile v0.0.0-20221012134814-c746ac228303/go.mod h1:M32cGdzp91A8Ex9qQtyZinr19EYxzkFqDjW2oyHzTDQ=
8387
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
8488
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
8589
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
@@ -93,6 +97,8 @@ golang.org/x/net v0.0.0-20210927181540-4e4d966f7476/go.mod h1:9nx3DQGgdP8bBQD5qx
9397
golang.org/x/net v0.0.0-20211011170408-caeb26a5c8c0/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
9498
golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
9599
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
100+
golang.org/x/net v0.0.0-20221014081412-f15817d10f9b h1:tvrvnPFcdzp294diPnrdZZZ8XUt2Tyj7svb7X52iDuU=
101+
golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
96102
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
97103
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
98104
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -115,6 +121,10 @@ golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBc
115121
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
116122
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
117123
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
124+
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg=
125+
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
126+
golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43 h1:OK7RB6t2WQX54srQQYSXMW8dF5C6/8+oA/s5QBmmto4=
127+
golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
118128
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
119129
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
120130
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -123,6 +133,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
123133
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
124134
golang.org/x/text v0.3.8-0.20211004125949-5bd84dd9b33b h1:NXqSWXSRUSCaFuvitrWtU169I3876zRTalMRbfd6LL0=
125135
golang.org/x/text v0.3.8-0.20211004125949-5bd84dd9b33b/go.mod h1:EFNZuWvGYxIRUEX+K8UmCFwYmZjqcrnq15ZuVldZkZ0=
136+
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
137+
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
126138
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
127139
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
128140
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=

src/core/nodeinfo.go

Lines changed: 24 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"errors"
77
"fmt"
88
"runtime"
9-
"strings"
109
"time"
1110

1211
iwt "github.com/Arceliar/ironwood/types"
@@ -17,18 +16,15 @@ import (
1716
"github.com/RiV-chain/RiV-mesh/src/version"
1817
)
1918

20-
// NodeInfoPayload represents a RequestNodeInfo response, in bytes.
21-
type NodeInfoPayload []byte
22-
2319
type nodeinfo struct {
2420
phony.Inbox
2521
proto *protoHandler
26-
myNodeInfo NodeInfoPayload
22+
myNodeInfo json.RawMessage
2723
callbacks map[keyArray]nodeinfoCallback
2824
}
2925

3026
type nodeinfoCallback struct {
31-
call func(nodeinfo NodeInfoPayload)
27+
call func(nodeinfo json.RawMessage)
3228
created time.Time
3329
}
3430

@@ -57,75 +53,63 @@ func (m *nodeinfo) _cleanup() {
5753
})
5854
}
5955

60-
func (m *nodeinfo) _addCallback(sender keyArray, call func(nodeinfo NodeInfoPayload)) {
56+
func (m *nodeinfo) _addCallback(sender keyArray, call func(nodeinfo json.RawMessage)) {
6157
m.callbacks[sender] = nodeinfoCallback{
6258
created: time.Now(),
6359
call: call,
6460
}
6561
}
6662

6763
// Handles the callback, if there is one
68-
func (m *nodeinfo) _callback(sender keyArray, nodeinfo NodeInfoPayload) {
64+
func (m *nodeinfo) _callback(sender keyArray, nodeinfo json.RawMessage) {
6965
if callback, ok := m.callbacks[sender]; ok {
7066
callback.call(nodeinfo)
7167
delete(m.callbacks, sender)
7268
}
7369
}
7470

75-
func (m *nodeinfo) _getNodeInfo() NodeInfoPayload {
71+
func (m *nodeinfo) _getNodeInfo() json.RawMessage {
7672
return m.myNodeInfo
7773
}
7874

7975
// Set the current node's nodeinfo
80-
func (m *nodeinfo) setNodeInfo(given interface{}, privacy bool) (err error) {
76+
func (m *nodeinfo) setNodeInfo(given map[string]interface{}, privacy bool) (err error) {
8177
phony.Block(m, func() {
8278
err = m._setNodeInfo(given, privacy)
8379
})
8480
return
8581
}
8682

87-
func (m *nodeinfo) _setNodeInfo(given interface{}, privacy bool) error {
88-
defaults := map[string]interface{}{
89-
"buildname": version.BuildName(),
90-
"buildversion": version.BuildVersion(),
91-
"buildplatform": runtime.GOOS,
92-
"buildarch": runtime.GOARCH,
83+
func (m *nodeinfo) _setNodeInfo(given map[string]interface{}, privacy bool) error {
84+
newnodeinfo := make(map[string]interface{}, len(given))
85+
for k, v := range given {
86+
newnodeinfo[k] = v
9387
}
94-
newnodeinfo := make(map[string]interface{})
9588
if !privacy {
96-
for k, v := range defaults {
97-
newnodeinfo[k] = v
98-
}
99-
}
100-
if nodeinfomap, ok := given.(map[string]interface{}); ok {
101-
for key, value := range nodeinfomap {
102-
if _, ok := defaults[key]; ok {
103-
if strvalue, strok := value.(string); strok && strings.EqualFold(strvalue, "null") || value == nil {
104-
delete(newnodeinfo, key)
105-
}
106-
continue
107-
}
108-
newnodeinfo[key] = value
109-
}
89+
newnodeinfo["buildname"] = version.BuildName()
90+
newnodeinfo["buildversion"] = version.BuildVersion()
91+
newnodeinfo["buildplatform"] = runtime.GOOS
92+
newnodeinfo["buildarch"] = runtime.GOARCH
11093
}
11194
newjson, err := json.Marshal(newnodeinfo)
112-
if err == nil {
113-
if len(newjson) > 16384 {
114-
return errors.New("NodeInfo exceeds max length of 16384 bytes")
115-
}
95+
switch {
96+
case err != nil:
97+
return fmt.Errorf("NodeInfo marshalling failed: %w", err)
98+
case len(newjson) > 16384:
99+
return fmt.Errorf("NodeInfo exceeds max length of 16384 bytes")
100+
default:
116101
m.myNodeInfo = newjson
117102
return nil
118103
}
119-
return err
120104
}
121105

122-
func (m *nodeinfo) sendReq(from phony.Actor, key keyArray, callback func(nodeinfo NodeInfoPayload)) {
106+
func (m *nodeinfo) sendReq(from phony.Actor, key keyArray, callback func(nodeinfo json.RawMessage)) {
123107
m.Act(from, func() {
124108
m._sendReq(key, callback)
125109
})
126110
}
127111

128-
func (m *nodeinfo) _sendReq(key keyArray, callback func(nodeinfo NodeInfoPayload)) {
112+
func (m *nodeinfo) _sendReq(key keyArray, callback func(nodeinfo json.RawMessage)) {
129113
if callback != nil {
130114
m._addCallback(key, callback)
131115
}
@@ -138,7 +122,7 @@ func (m *nodeinfo) handleReq(from phony.Actor, key keyArray) {
138122
})
139123
}
140124

141-
func (m *nodeinfo) handleRes(from phony.Actor, key keyArray, info NodeInfoPayload) {
125+
func (m *nodeinfo) handleRes(from phony.Actor, key keyArray, info json.RawMessage) {
142126
m.Act(from, func() {
143127
m._callback(key, info)
144128
})
@@ -172,7 +156,7 @@ func (m *nodeinfo) nodeInfoAdminHandler(in json.RawMessage) (interface{}, error)
172156
}
173157
copy(key[:], kbs)
174158
ch := make(chan []byte, 1)
175-
m.sendReq(nil, key, func(info NodeInfoPayload) {
159+
m.sendReq(nil, key, func(info json.RawMessage) {
176160
ch <- info
177161
})
178162
timer := time.NewTimer(6 * time.Second)

0 commit comments

Comments
 (0)