@cryptotaxi247 / kubo / commits / f1d232ac0

make swarm wrap all its messages with a type, filter these later

Jeromy committed Aug 17, 2014 at 16:05 UTC f1d232ac0fb2d5352e57005a6f4582885d84cfbb
2 files changed +50 -6
swarm/swarm.go
+36 -2
@@ -262,8 +262,14 @@ func (s *Swarm) fanOut() {
262 continue
263 }
264
265 + wrapped, err := Wrap(msg.Data, PBWrapper_DHT_MESSAGE)
266 + if err != nil {
267 + s.Error(err)
268 + continue
269 + }
270 +
271 // queue it in the connection's buffer
266 - conn.Outgoing.MsgChan <- msg.Data
272 + conn.Outgoing.MsgChan <- wrapped
273 }
274 }
275 }
@@ -288,8 +294,14 @@ func (s *Swarm) fanIn(conn *Conn) {
294 goto out
295 }
296
297 + wrapper, err := Unwrap(data)
298 + if err != nil {
299 + s.Error(err)
300 + continue
301 + }
302 +
303 // wrap it for consumers.
292 - msg := &Message{Peer: conn.Peer, Data: data}
304 + msg := &Message{Peer: conn.Peer, Data: wrapper.GetMessage()}
305 s.Chan.Incoming <- msg
306 }
307 }
@@ -399,4 +411,26 @@ func (s *Swarm) GetChan() *Chan {
411 return s.Chan
412 }
413
414 +func Wrap(data []byte, typ PBWrapper_MessageType) ([]byte, error) {
415 + wrapper := new(PBWrapper)
416 + wrapper.Message = data
417 + wrapper.Type = &typ
418 + b, err := proto.Marshal(wrapper)
419 + if err != nil {
420 + return nil, err
421 + }
422 + return b, nil
423 +}
424 +
425 +func Unwrap(data []byte) (*PBWrapper, error) {
426 + mes := new(PBWrapper)
427 + err := proto.Unmarshal(data, mes)
428 + if err != nil {
429 + return nil, err
430 + }
431 +
432 + return mes, nil
433 +}
434 +
435 +// Temporary to ensure that the Swarm always matches the Network interface as we are changing it
436 var _ Network = &Swarm{}
swarm/swarm_test.go
+14 -4
@@ -14,7 +14,7 @@ func pingListen(listener *net.TCPListener, peer *peer.Peer) {
14 for {
15 c, err := listener.Accept()
16 if err == nil {
17 - fmt.Println("accepeted")
17 + fmt.Println("accepted")
18 go pong(c, peer)
19 }
20 }
@@ -29,11 +29,21 @@ func pong(c net.Conn, peer *peer.Peer) {
29 fmt.Printf("error %v\n", err)
30 return
31 }
32 - if string(data[:n]) != "ping" {
33 - fmt.Printf("error: didn't receive ping: '%v'\n", data[:n])
32 + b, err := Unwrap(data[:n])
33 + if err != nil {
34 + fmt.Printf("error %v\n", err)
35 + return
36 + }
37 + if string(b.GetMessage()) != "ping" {
38 + fmt.Printf("error: didn't receive ping: '%v'\n", b.GetMessage())
39 + return
40 + }
41 + data, err = Wrap([]byte("pong"), PBWrapper_DHT_MESSAGE)
42 + if err != nil {
43 + fmt.Printf("error %v\n", err)
44 return
45 }
36 - err = mrw.WriteMsg([]byte("pong"))
46 + err = mrw.WriteMsg(data)
47 if err != nil {
48 fmt.Printf("error %v\n", err)
49 return