mirror of
https://github.com/nbd-wtf/go-nostr.git
synced 2025-06-30 18:40:52 +02:00
nip46: do not allow one faulty relay to break RPC calls to other relays.
This commit is contained in:
@ -205,17 +205,25 @@ func (bunker *BunkerClient) RPC(ctx context.Context, method string, params []str
|
|||||||
|
|
||||||
respWaiter := make(chan Response)
|
respWaiter := make(chan Response)
|
||||||
bunker.listeners.Store(id, respWaiter)
|
bunker.listeners.Store(id, respWaiter)
|
||||||
hasWorked := false
|
hasWorked := make(chan struct{})
|
||||||
|
|
||||||
for _, r := range bunker.relays {
|
for _, url := range bunker.relays {
|
||||||
relay, err := bunker.pool.EnsureRelay(r)
|
go func(url string) {
|
||||||
if err == nil {
|
relay, err := bunker.pool.EnsureRelay(url)
|
||||||
hasWorked = true
|
if err == nil {
|
||||||
}
|
select {
|
||||||
relay.Publish(ctx, evt)
|
case hasWorked <- struct{}{}:
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
relay.Publish(ctx, evt)
|
||||||
|
}(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !hasWorked {
|
select {
|
||||||
|
case <-hasWorked:
|
||||||
|
// continue
|
||||||
|
case <-ctx.Done():
|
||||||
return "", fmt.Errorf("couldn't connect to any relay")
|
return "", fmt.Errorf("couldn't connect to any relay")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user