Fixed whisper messages

* Whisper protocol wasn't properly suppling envelope slices
* Message history wasn't properly propagated
* Added 'Messages' method, filtering any current envelope with the
  supplied filter.
This commit is contained in:
obscuren
2015-01-13 13:36:44 +01:00
parent 1e5353824a
commit e3cad04dec
6 changed files with 58 additions and 34 deletions

View File

@ -126,18 +126,20 @@ func (self *Whisper) Watch(opts Filter) int {
})
}
func (self *Whisper) Trigger(id int) {
func (self *Whisper) Messages(id int) (messages []*Message) {
filter := self.filters.Get(id)
if filter != nil {
for _, e := range self.messages {
if msg, key := self.open(e); msg != nil {
f := createFilter(msg, e.Topics, key)
if self.filters.Match(filter, f) {
self.filters.Notify(f, msg)
messages = append(messages, msg)
}
}
}
}
return
}
// Main handler for passing whisper messages to whisper peer objects
@ -158,17 +160,19 @@ func (self *Whisper) msgHandler(peer *p2p.Peer, ws p2p.MsgReadWriter) error {
return err
}
envelope, err := NewEnvelopeFromReader(msg.Payload)
if err != nil {
var envelopes []*Envelope
if err := msg.Decode(&envelopes); err != nil {
peer.Infoln(err)
continue
}
if err := self.add(envelope); err != nil {
// TODO Punish peer here. Invalid envelope.
peer.Infoln(err)
for _, envelope := range envelopes {
if err := self.add(envelope); err != nil {
// TODO Punish peer here. Invalid envelope.
peer.Infoln(err)
}
wpeer.addKnown(envelope)
}
wpeer.addKnown(envelope)
}
}
@ -192,6 +196,8 @@ func (self *Whisper) add(envelope *Envelope) error {
go self.postEvent(envelope)
}
wlogger.DebugDetailln("added whisper message")
return nil
}