From 7f1103089677d96fbd27348ccd97d9fed9799c27 Mon Sep 17 00:00:00 2001 From: Pedro Pombeiro Date: Thu, 12 Dec 2019 17:06:00 +0100 Subject: [PATCH] Implement AddPeer/RemovePeer on eth-node --- eth-node/bridge/geth/node.go | 23 +++++++++++++++++++ eth-node/bridge/nimbus/node.go | 14 +++++++++++ eth-node/types/node.go | 2 ++ services/shhext/service_test.go | 8 +++++++ .../status-go/eth-node/bridge/geth/node.go | 23 +++++++++++++++++++ .../status-go/eth-node/types/node.go | 2 ++ 6 files changed, 72 insertions(+) diff --git a/eth-node/bridge/geth/node.go b/eth-node/bridge/geth/node.go index 727df926f..c07043b39 100644 --- a/eth-node/bridge/geth/node.go +++ b/eth-node/bridge/geth/node.go @@ -2,6 +2,7 @@ package gethbridge import ( "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p/enode" gethens "github.com/status-im/status-go/eth-node/bridge/geth/ens" "github.com/status-im/status-go/eth-node/types" enstypes "github.com/status-im/status-go/eth-node/types/ens" @@ -43,3 +44,25 @@ func (w *gethNodeWrapper) GetWhisper(ctx interface{}) (types.Whisper, error) { return NewGethWhisperWrapper(nativeWhisper), nil } + +func (w *gethNodeWrapper) AddPeer(url string) error { + parsedNode, err := enode.ParseV4(url) + if err != nil { + return err + } + + w.stack.Server().AddPeer(parsedNode) + + return nil +} + +func (w *gethNodeWrapper) RemovePeer(url string) error { + parsedNode, err := enode.ParseV4(url) + if err != nil { + return err + } + + w.stack.Server().RemovePeer(parsedNode) + + return nil +} diff --git a/eth-node/bridge/nimbus/node.go b/eth-node/bridge/nimbus/node.go index 22ff0fe59..d168c107c 100644 --- a/eth-node/bridge/nimbus/node.go +++ b/eth-node/bridge/nimbus/node.go @@ -61,3 +61,17 @@ func (w *nimbusNodeWrapper) NewENSVerifier(_ *zap.Logger) enstypes.ENSVerifier { func (w *nimbusNodeWrapper) GetWhisper(ctx interface{}) (types.Whisper, error) { return w.w, nil } + +func (w *nimbusNodeWrapper) AddPeer(url string) error { + urlC := C.CString(url) + defer C.free(unsafe.Pointer(urlC)) + if !C.nimbus_add_peer(urlC) { + return fmt.Errorf("failed to add peer: %s", url) + } + + return nil +} + +func (w *nimbusNodeWrapper) RemovePeer(url string) error { + panic("TODO: RemovePeer") +} diff --git a/eth-node/types/node.go b/eth-node/types/node.go index bd0b888b3..4568258fb 100644 --- a/eth-node/types/node.go +++ b/eth-node/types/node.go @@ -18,4 +18,6 @@ func (n EnodeID) String() string { type Node interface { NewENSVerifier(logger *zap.Logger) enstypes.ENSVerifier GetWhisper(ctx interface{}) (Whisper, error) + AddPeer(url string) error + RemovePeer(url string) error } diff --git a/services/shhext/service_test.go b/services/shhext/service_test.go index 85e4616cb..855854092 100644 --- a/services/shhext/service_test.go +++ b/services/shhext/service_test.go @@ -401,6 +401,14 @@ func (w *testNodeWrapper) GetWhisper(_ interface{}) (types.Whisper, error) { return w.w, nil } +func (w *testNodeWrapper) AddPeer(url string) error { + panic("not implemented") +} + +func (w *testNodeWrapper) RemovePeer(url string) error { + panic("not implemented") +} + type WhisperNodeMockSuite struct { suite.Suite diff --git a/vendor/github.com/status-im/status-go/eth-node/bridge/geth/node.go b/vendor/github.com/status-im/status-go/eth-node/bridge/geth/node.go index 727df926f..c07043b39 100644 --- a/vendor/github.com/status-im/status-go/eth-node/bridge/geth/node.go +++ b/vendor/github.com/status-im/status-go/eth-node/bridge/geth/node.go @@ -2,6 +2,7 @@ package gethbridge import ( "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p/enode" gethens "github.com/status-im/status-go/eth-node/bridge/geth/ens" "github.com/status-im/status-go/eth-node/types" enstypes "github.com/status-im/status-go/eth-node/types/ens" @@ -43,3 +44,25 @@ func (w *gethNodeWrapper) GetWhisper(ctx interface{}) (types.Whisper, error) { return NewGethWhisperWrapper(nativeWhisper), nil } + +func (w *gethNodeWrapper) AddPeer(url string) error { + parsedNode, err := enode.ParseV4(url) + if err != nil { + return err + } + + w.stack.Server().AddPeer(parsedNode) + + return nil +} + +func (w *gethNodeWrapper) RemovePeer(url string) error { + parsedNode, err := enode.ParseV4(url) + if err != nil { + return err + } + + w.stack.Server().RemovePeer(parsedNode) + + return nil +} diff --git a/vendor/github.com/status-im/status-go/eth-node/types/node.go b/vendor/github.com/status-im/status-go/eth-node/types/node.go index bd0b888b3..4568258fb 100644 --- a/vendor/github.com/status-im/status-go/eth-node/types/node.go +++ b/vendor/github.com/status-im/status-go/eth-node/types/node.go @@ -18,4 +18,6 @@ func (n EnodeID) String() string { type Node interface { NewENSVerifier(logger *zap.Logger) enstypes.ENSVerifier GetWhisper(ctx interface{}) (Whisper, error) + AddPeer(url string) error + RemovePeer(url string) error }