node: rm duplicate code

Signed-off-by: tmelhao <tmelhao@gmail.com>
This commit is contained in:
tmelhao 2024-03-17 07:59:59 +00:00
parent ba2dd9385c
commit 18fd7a8d48

View file

@ -55,54 +55,27 @@ 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) {
// Make sure the server is running, fail otherwise return api.handlePeer(url, func(server *p2p.Server, node *enode.Node) { server.AddPeer(node) })
server := api.node.Server()
if server == nil {
return false, ErrNodeStopped
}
// Try to add the url as a static peer and return
node, err := enode.Parse(enode.ValidSchemes, url)
if err != nil {
return false, fmt.Errorf("invalid enode: %v", 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) {
// Make sure the server is running, fail otherwise return api.handlePeer(url, func(server *p2p.Server, node *enode.Node) { server.RemovePeer(node) })
server := api.node.Server()
if server == nil {
return false, ErrNodeStopped
}
// Try to remove the url as a static peer and return
node, err := enode.Parse(enode.ValidSchemes, url)
if err != nil {
return false, fmt.Errorf("invalid enode: %v", 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) {
// Make sure the server is running, fail otherwise return api.handlePeer(url, func(server *p2p.Server, node *enode.Node) { server.AddTrustedPeer(node) })
server := api.node.Server()
if server == nil {
return false, ErrNodeStopped
}
node, err := enode.Parse(enode.ValidSchemes, url)
if err != nil {
return false, fmt.Errorf("invalid enode: %v", 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) })
}
// handlePeer trys to add or remove a peer with the given handler
func (api *adminAPI) handlePeer(url string, handler func(*p2p.Server, *enode.Node)) (bool, 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 {
@ -112,7 +85,7 @@ func (api *adminAPI) RemoveTrustedPeer(url string) (bool, error) {
if err != nil { if err != nil {
return false, fmt.Errorf("invalid enode: %v", err) return false, fmt.Errorf("invalid enode: %v", err)
} }
server.RemoveTrustedPeer(node) handler(server, node)
return true, nil return true, nil
} }