|
|
@ -61,32 +61,9 @@ func NewPublicWhisperAPI(w *Whisper) *PublicWhisperAPI { |
|
|
|
w: w, |
|
|
|
w: w, |
|
|
|
lastUsed: make(map[string]time.Time), |
|
|
|
lastUsed: make(map[string]time.Time), |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
go api.run() |
|
|
|
|
|
|
|
return api |
|
|
|
return api |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// run the api event loop.
|
|
|
|
|
|
|
|
// this loop deletes filter that have not been used within filterTimeout
|
|
|
|
|
|
|
|
func (api *PublicWhisperAPI) run() { |
|
|
|
|
|
|
|
timeout := time.NewTicker(2 * time.Minute) |
|
|
|
|
|
|
|
for { |
|
|
|
|
|
|
|
<-timeout.C |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
api.mu.Lock() |
|
|
|
|
|
|
|
for id, lastUsed := range api.lastUsed { |
|
|
|
|
|
|
|
if time.Since(lastUsed).Seconds() >= filterTimeout { |
|
|
|
|
|
|
|
delete(api.lastUsed, id) |
|
|
|
|
|
|
|
if err := api.w.Unsubscribe(id); err != nil { |
|
|
|
|
|
|
|
log.Error("could not unsubscribe whisper filter", "error", err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
log.Debug("delete whisper filter (timeout)", "id", id) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
api.mu.Unlock() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Version returns the Whisper sub-protocol version.
|
|
|
|
// Version returns the Whisper sub-protocol version.
|
|
|
|
func (api *PublicWhisperAPI) Version(ctx context.Context) string { |
|
|
|
func (api *PublicWhisperAPI) Version(ctx context.Context) string { |
|
|
|
return ProtocolVersionStr |
|
|
|
return ProtocolVersionStr |
|
|
@ -219,7 +196,8 @@ func (api *PublicWhisperAPI) DeleteSymKey(ctx context.Context, id string) bool { |
|
|
|
return api.w.DeleteSymKey(id) |
|
|
|
return api.w.DeleteSymKey(id) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// MakeLightClient turns the node into light client, which does not forward any incoming messages.
|
|
|
|
// MakeLightClient turns the node into light client, which does not forward
|
|
|
|
|
|
|
|
// any incoming messages, and sends only messages originated in this node.
|
|
|
|
func (api *PublicWhisperAPI) MakeLightClient(ctx context.Context) bool { |
|
|
|
func (api *PublicWhisperAPI) MakeLightClient(ctx context.Context) bool { |
|
|
|
api.w.lightClient = true |
|
|
|
api.w.lightClient = true |
|
|
|
return api.w.lightClient |
|
|
|
return api.w.lightClient |
|
|
|