forked from cerc-io/plugeth
les: allow either full enode strings or raw hex ids in the API (#22423)
This commit is contained in:
parent
6d9707a458
commit
91726e8aad
51
les/api.go
51
les/api.go
@ -49,6 +49,18 @@ func NewPrivateLightServerAPI(server *LesServer) *PrivateLightServerAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// parseNode parses either an enode address a raw hex node id
|
||||||
|
func parseNode(node string) (enode.ID, error) {
|
||||||
|
if id, err := enode.ParseID(node); err == nil {
|
||||||
|
return id, nil
|
||||||
|
}
|
||||||
|
if node, err := enode.Parse(enode.ValidSchemes, node); err == nil {
|
||||||
|
return node.ID(), nil
|
||||||
|
} else {
|
||||||
|
return enode.ID{}, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ServerInfo returns global server parameters
|
// ServerInfo returns global server parameters
|
||||||
func (api *PrivateLightServerAPI) ServerInfo() map[string]interface{} {
|
func (api *PrivateLightServerAPI) ServerInfo() map[string]interface{} {
|
||||||
res := make(map[string]interface{})
|
res := make(map[string]interface{})
|
||||||
@ -59,7 +71,14 @@ func (api *PrivateLightServerAPI) ServerInfo() map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ClientInfo returns information about clients listed in the ids list or matching the given tags
|
// ClientInfo returns information about clients listed in the ids list or matching the given tags
|
||||||
func (api *PrivateLightServerAPI) ClientInfo(ids []enode.ID) map[enode.ID]map[string]interface{} {
|
func (api *PrivateLightServerAPI) ClientInfo(nodes []string) map[enode.ID]map[string]interface{} {
|
||||||
|
var ids []enode.ID
|
||||||
|
for _, node := range nodes {
|
||||||
|
if id, err := parseNode(node); err == nil {
|
||||||
|
ids = append(ids, id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
res := make(map[enode.ID]map[string]interface{})
|
res := make(map[enode.ID]map[string]interface{})
|
||||||
api.server.clientPool.forClients(ids, func(client *clientInfo) {
|
api.server.clientPool.forClients(ids, func(client *clientInfo) {
|
||||||
res[client.node.ID()] = api.clientInfo(client)
|
res[client.node.ID()] = api.clientInfo(client)
|
||||||
@ -159,8 +178,18 @@ func (api *PrivateLightServerAPI) setParams(params map[string]interface{}, clien
|
|||||||
|
|
||||||
// SetClientParams sets client parameters for all clients listed in the ids list
|
// SetClientParams sets client parameters for all clients listed in the ids list
|
||||||
// or all connected clients if the list is empty
|
// or all connected clients if the list is empty
|
||||||
func (api *PrivateLightServerAPI) SetClientParams(ids []enode.ID, params map[string]interface{}) error {
|
func (api *PrivateLightServerAPI) SetClientParams(nodes []string, params map[string]interface{}) error {
|
||||||
var err error
|
var (
|
||||||
|
ids []enode.ID
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
for _, node := range nodes {
|
||||||
|
if id, err := parseNode(node); err != nil {
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
ids = append(ids, id)
|
||||||
|
}
|
||||||
|
}
|
||||||
api.server.clientPool.forClients(ids, func(client *clientInfo) {
|
api.server.clientPool.forClients(ids, func(client *clientInfo) {
|
||||||
if client.connected {
|
if client.connected {
|
||||||
posFactors, negFactors := client.balance.GetPriceFactors()
|
posFactors, negFactors := client.balance.GetPriceFactors()
|
||||||
@ -201,7 +230,11 @@ func (api *PrivateLightServerAPI) SetConnectedBias(bias time.Duration) error {
|
|||||||
|
|
||||||
// AddBalance adds the given amount to the balance of a client if possible and returns
|
// AddBalance adds the given amount to the balance of a client if possible and returns
|
||||||
// the balance before and after the operation
|
// the balance before and after the operation
|
||||||
func (api *PrivateLightServerAPI) AddBalance(id enode.ID, amount int64) (balance [2]uint64, err error) {
|
func (api *PrivateLightServerAPI) AddBalance(node string, amount int64) (balance [2]uint64, err error) {
|
||||||
|
var id enode.ID
|
||||||
|
if id, err = parseNode(node); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
api.server.clientPool.forClients([]enode.ID{id}, func(c *clientInfo) {
|
api.server.clientPool.forClients([]enode.ID{id}, func(c *clientInfo) {
|
||||||
balance[0], balance[1], err = c.balance.AddBalance(amount)
|
balance[0], balance[1], err = c.balance.AddBalance(amount)
|
||||||
})
|
})
|
||||||
@ -297,8 +330,14 @@ func NewPrivateDebugAPI(server *LesServer) *PrivateDebugAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FreezeClient forces a temporary client freeze which normally happens when the server is overloaded
|
// FreezeClient forces a temporary client freeze which normally happens when the server is overloaded
|
||||||
func (api *PrivateDebugAPI) FreezeClient(id enode.ID) error {
|
func (api *PrivateDebugAPI) FreezeClient(node string) error {
|
||||||
var err error
|
var (
|
||||||
|
id enode.ID
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
if id, err = parseNode(node); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
api.server.clientPool.forClients([]enode.ID{id}, func(c *clientInfo) {
|
api.server.clientPool.forClients([]enode.ID{id}, func(c *clientInfo) {
|
||||||
if c.connected {
|
if c.connected {
|
||||||
c.peer.freeze()
|
c.peer.freeze()
|
||||||
|
Loading…
Reference in New Issue
Block a user