node: don't use callback

Signed-off-by: tmelhao <tmelhao@gmail.com>
This commit is contained in:
tmelhao 2024-03-17 13:46:10 +00:00
parent 18fd7a8d48
commit c2c309d798

View file

@ -55,38 +55,58 @@ type adminAPI struct {
// AddPeer requests connecting to a remote node, and also maintaining the new // AddPeer requests connecting to a remote node, and also maintaining the new
// connection at all times, even reconnecting if it is lost. // connection at all times, even reconnecting if it is lost.
func (api *adminAPI) AddPeer(url string) (bool, error) { func (api *adminAPI) AddPeer(url string) (bool, error) {
return api.handlePeer(url, func(server *p2p.Server, node *enode.Node) { server.AddPeer(node) }) server, node, err := api.checkServerAndParseURL(url)
if err != nil {
return false, err
}
server.AddPeer(node)
return true, nil
} }
// RemovePeer disconnects from a remote node if the connection exists // RemovePeer disconnects from a remote node if the connection exists
func (api *adminAPI) RemovePeer(url string) (bool, error) { func (api *adminAPI) RemovePeer(url string) (bool, error) {
return api.handlePeer(url, func(server *p2p.Server, node *enode.Node) { server.RemovePeer(node) }) server, node, err := api.checkServerAndParseURL(url)
if err != nil {
return false, err
}
server.RemovePeer(node)
return true, nil
} }
// AddTrustedPeer allows a remote node to always connect, even if slots are full // AddTrustedPeer allows a remote node to always connect, even if slots are full
func (api *adminAPI) AddTrustedPeer(url string) (bool, error) { func (api *adminAPI) AddTrustedPeer(url string) (bool, error) {
return api.handlePeer(url, func(server *p2p.Server, node *enode.Node) { server.AddTrustedPeer(node) }) server, node, err := api.checkServerAndParseURL(url)
if err != nil {
return false, err
}
server.AddTrustedPeer(node)
return true, nil
} }
// RemoveTrustedPeer removes a remote node from the trusted peer set, but it // RemoveTrustedPeer removes a remote node from the trusted peer set, but it
// does not disconnect it automatically. // does not disconnect it automatically.
func (api *adminAPI) RemoveTrustedPeer(url string) (bool, error) { func (api *adminAPI) RemoveTrustedPeer(url string) (bool, error) {
return api.handlePeer(url, func(server *p2p.Server, node *enode.Node) { server.RemoveTrustedPeer(node) }) server, node, err := api.checkServerAndParseURL(url)
if err != nil {
return false, err
}
server.RemoveTrustedPeer(node)
return true, nil
} }
// handlePeer trys to add or remove a peer with the given handler // checkServerAndParseURL checks if the server is running and parses the enode URL
func (api *adminAPI) handlePeer(url string, handler func(*p2p.Server, *enode.Node)) (bool, error) { func (api *adminAPI) checkServerAndParseURL(url string) (*p2p.Server, *enode.Node, error) {
// Make sure the server is running, fail otherwise // Make sure the server is running, fail otherwise
server := api.node.Server() server := api.node.Server()
if server == nil { if server == nil {
return false, ErrNodeStopped return nil, nil, ErrNodeStopped
} }
// Try to parse the url as an enode node
node, err := enode.Parse(enode.ValidSchemes, url) node, err := enode.Parse(enode.ValidSchemes, url)
if err != nil { if err != nil {
return false, fmt.Errorf("invalid enode: %v", err) return nil, nil, fmt.Errorf("invalid enode: %v", err)
} }
handler(server, node) return server, node, nil
return true, nil
} }
// PeerEvents creates an RPC subscription which receives peer events from the // PeerEvents creates an RPC subscription which receives peer events from the