aboutsummaryrefslogtreecommitdiffstats
path: root/whisper
diff options
context:
space:
mode:
Diffstat (limited to 'whisper')
-rw-r--r--whisper/whisperv6/filter.go15
-rw-r--r--whisper/whisperv6/filter_test.go12
2 files changed, 10 insertions, 17 deletions
diff --git a/whisper/whisperv6/filter.go b/whisper/whisperv6/filter.go
index d7b71795d..e4171f85c 100644
--- a/whisper/whisperv6/filter.go
+++ b/whisper/whisperv6/filter.go
@@ -43,9 +43,10 @@ type Filter struct {
// Filters represents a collection of filters
type Filters struct {
- watchers map[string]*Filter
- topicMatcher map[TopicType]map[*Filter]struct{}
- allTopicsMatcher map[*Filter]struct{}
+ watchers map[string]*Filter
+
+ topicMatcher map[TopicType]map[*Filter]struct{} // map a topic to the filters that are interested in being notified when a message matches that topic
+ allTopicsMatcher map[*Filter]struct{} // list all the filters that will be notified of a new message, no matter what its topic is
whisper *Whisper
mutex sync.RWMutex
@@ -106,7 +107,9 @@ func (fs *Filters) Uninstall(id string) bool {
return false
}
-// addTopicMatcher adds a filter to the topic matchers
+// addTopicMatcher adds a filter to the topic matchers.
+// If the filter's Topics array is empty, it will be tried on every topic.
+// Otherwise, it will be tried on the topics specified.
func (fs *Filters) addTopicMatcher(watcher *Filter) {
if len(watcher.Topics) == 0 {
fs.allTopicsMatcher[watcher] = struct{}{}
@@ -133,10 +136,10 @@ func (fs *Filters) removeFromTopicMatchers(watcher *Filter) {
// match a specific topic
func (fs *Filters) getWatchersByTopic(topic TopicType) []*Filter {
res := make([]*Filter, 0, len(fs.allTopicsMatcher))
- for watcher, _ := range fs.allTopicsMatcher {
+ for watcher := range fs.allTopicsMatcher {
res = append(res, watcher)
}
- for watcher, _ := range fs.topicMatcher[topic] {
+ for watcher := range fs.topicMatcher[topic] {
res = append(res, watcher)
}
return res
diff --git a/whisper/whisperv6/filter_test.go b/whisper/whisperv6/filter_test.go
index 491e137bd..0bb7986c3 100644
--- a/whisper/whisperv6/filter_test.go
+++ b/whisper/whisperv6/filter_test.go
@@ -313,16 +313,6 @@ func TestMatchEnvelope(t *testing.T) {
if err != nil {
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
}
- match := fsym.MatchEnvelope(env)
- if !match {
- // topic mismatch should have no affect, as topics are handled by topic matchers
- t.Fatalf("failed MatchEnvelope symmetric with seed %d.", seed)
- }
- match = fasym.MatchEnvelope(env)
- if !match {
- // topic mismatch should have no affect, as topics are handled by topic matchers
- t.Fatalf("failed MatchEnvelope asymmetric with seed %d.", seed)
- }
// encrypt symmetrically
i := mrand.Int() % 4
@@ -338,7 +328,7 @@ func TestMatchEnvelope(t *testing.T) {
}
// symmetric + matching topic: match
- match = fsym.MatchEnvelope(env)
+ match := fsym.MatchEnvelope(env)
if !match {
t.Fatalf("failed MatchEnvelope() symmetric with seed %d.", seed)
}