aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2015-04-22 22:25:54 +0800
committerPéter Szilágyi <peterke@gmail.com>2015-04-28 15:49:04 +0800
commit70ded4cbf06d19993d829d843a27002cf181c619 (patch)
tree44f5280ec98577a6d754d9d9e47f81f79ed278df
parente252dae499a8c682c92527262cca01af337438aa (diff)
downloadgo-tangerine-70ded4cbf06d19993d829d843a27002cf181c619.tar.gz
go-tangerine-70ded4cbf06d19993d829d843a27002cf181c619.tar.zst
go-tangerine-70ded4cbf06d19993d829d843a27002cf181c619.zip
xeth: fix un-decoded whisper RPC topic string bug
-rw-r--r--xeth/whisper.go18
1 files changed, 16 insertions, 2 deletions
diff --git a/xeth/whisper.go b/xeth/whisper.go
index 36c6ca63f..edb62c748 100644
--- a/xeth/whisper.go
+++ b/xeth/whisper.go
@@ -39,12 +39,17 @@ func (self *Whisper) HasIdentity(key string) bool {
// Post injects a message into the whisper network for distribution.
func (self *Whisper) Post(payload string, to, from string, topics []string, priority, ttl uint32) error {
+ // Decode the topic strings
+ topicsDecoded := make([][]byte, len(topics))
+ for i, topic := range topics {
+ topicsDecoded[i] = common.FromHex(topic)
+ }
// Construct the whisper message and transmission options
message := whisper.NewMessage(common.FromHex(payload))
options := whisper.Options{
To: crypto.ToECDSAPub(common.FromHex(to)),
TTL: time.Duration(ttl) * time.Second,
- Topics: whisper.NewTopicsFromStrings(topics...),
+ Topics: whisper.NewTopics(topicsDecoded...),
}
if len(from) != 0 {
if key := self.Whisper.GetIdentity(crypto.ToECDSAPub(common.FromHex(from))); key != nil {
@@ -68,10 +73,19 @@ func (self *Whisper) Post(payload string, to, from string, topics []string, prio
// Watch installs a new message handler to run in case a matching packet arrives
// from the whisper network.
func (self *Whisper) Watch(to, from string, topics [][]string, fn func(WhisperMessage)) int {
+ // Decode the topic strings
+ topicsDecoded := make([][][]byte, len(topics))
+ for i, condition := range topics {
+ topicsDecoded[i] = make([][]byte, len(condition))
+ for j, topic := range condition {
+ topicsDecoded[i][j] = common.FromHex(topic)
+ }
+ }
+ // Assemble and inject the filter into the whisper client
filter := whisper.Filter{
To: crypto.ToECDSAPub(common.FromHex(to)),
From: crypto.ToECDSAPub(common.FromHex(from)),
- Topics: whisper.NewFilterTopicsFromStrings(topics...),
+ Topics: whisper.NewFilterTopics(topicsDecoded...),
}
filter.Fn = func(message *whisper.Message) {
fn(NewWhisperMessage(message))