@cryptotaxi247 / kubo / commits / add0f3f93

feat(net:message) get net package from e2430ae4279

fix(net:msg) use vendored imports

Brian Tiger Chow committed Sep 12, 2014 at 18:11 UTC add0f3f935eda8fa1da2277d94629c434ec29ac9
6 files changed +72 -58
net/message/message.go
+27 -13
@@ -6,38 +6,52 @@ import (
6 proto "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/goprotobuf/proto"
7 )
8
9 -// Message represents a packet of information sent to or received from a
9 +type NetMessage interface {
10 + Peer() *peer.Peer
11 + Data() []byte
12 +}
13 +
14 +func New(p *peer.Peer, data []byte) NetMessage {
15 + return &message{peer: p, data: data}
16 +}
17 +
18 +// message represents a packet of information sent to or received from a
19 // particular Peer.
11 -type Message struct {
20 +type message struct {
21 // To or from, depending on direction.
13 - Peer *peer.Peer
22 + peer *peer.Peer
23
24 // Opaque data
16 - Data []byte
25 + data []byte
26 +}
27 +
28 +func (m *message) Peer() *peer.Peer {
29 + return m.peer
30 +}
31 +
32 +func (m *message) Data() []byte {
33 + return m.data
34 }
35
36 // FromObject creates a message from a protobuf-marshallable message.
20 -func FromObject(p *peer.Peer, data proto.Message) (*Message, error) {
37 +func FromObject(p *peer.Peer, data proto.Message) (NetMessage, error) {
38 bytes, err := proto.Marshal(data)
39 if err != nil {
40 return nil, err
41 }
25 - return &Message{
26 - Peer: p,
27 - Data: bytes,
28 - }, nil
42 + return New(p, bytes), nil
43 }
44
45 // Pipe objects represent a bi-directional message channel.
46 type Pipe struct {
33 - Incoming chan *Message
34 - Outgoing chan *Message
47 + Incoming chan NetMessage
48 + Outgoing chan NetMessage
49 }
50
51 // NewPipe constructs a pipe with channels of a given buffer size.
52 func NewPipe(bufsize int) *Pipe {
53 return &Pipe{
40 - Incoming: make(chan *Message, bufsize),
41 - Outgoing: make(chan *Message, bufsize),
54 + Incoming: make(chan NetMessage, bufsize),
55 + Outgoing: make(chan NetMessage, bufsize),
56 }
57 }
net/mux/mux.go
+6 -6
@@ -87,15 +87,15 @@ func (m *Muxer) handleIncomingMessages(ctx context.Context) {
87 }
88
89 // handleIncomingMessage routes message to the appropriate protocol.
90 -func (m *Muxer) handleIncomingMessage(ctx context.Context, m1 *msg.Message) {
90 +func (m *Muxer) handleIncomingMessage(ctx context.Context, m1 msg.NetMessage) {
91
92 - data, pid, err := unwrapData(m1.Data)
92 + data, pid, err := unwrapData(m1.Data())
93 if err != nil {
94 u.PErr("muxer de-serializing error: %v\n", err)
95 return
96 }
97
98 - m2 := &msg.Message{Peer: m1.Peer, Data: data}
98 + m2 := msg.New(m1.Peer(), data)
99 proto, found := m.Protocols[pid]
100 if !found {
101 u.PErr("muxer unknown protocol %v\n", pid)
@@ -125,14 +125,14 @@ func (m *Muxer) handleOutgoingMessages(ctx context.Context, pid ProtocolID, prot
125 }
126
127 // handleOutgoingMessage wraps out a message and sends it out the
128 -func (m *Muxer) handleOutgoingMessage(ctx context.Context, pid ProtocolID, m1 *msg.Message) {
129 - data, err := wrapData(m1.Data, pid)
128 +func (m *Muxer) handleOutgoingMessage(ctx context.Context, pid ProtocolID, m1 msg.NetMessage) {
129 + data, err := wrapData(m1.Data(), pid)
130 if err != nil {
131 u.PErr("muxer serializing error: %v\n", err)
132 return
133 }
134
135 - m2 := &msg.Message{Peer: m1.Peer, Data: data}
135 + m2 := msg.New(m1.Peer(), data)
136 select {
137 case m.GetPipe().Outgoing <- m2:
138 case <-ctx.Done():
net/mux/mux_test.go
+17 -17
@@ -32,14 +32,14 @@ func newPeer(t *testing.T, id string) *peer.Peer {
32 return &peer.Peer{ID: peer.ID(mh)}
33 }
34
35 -func testMsg(t *testing.T, m *msg.Message, data []byte) {
36 - if !bytes.Equal(data, m.Data) {
37 - t.Errorf("Data does not match: %v != %v", data, m.Data)
35 +func testMsg(t *testing.T, m msg.NetMessage, data []byte) {
36 + if !bytes.Equal(data, m.Data()) {
37 + t.Errorf("Data does not match: %v != %v", data, m.Data())
38 }
39 }
40
41 -func testWrappedMsg(t *testing.T, m *msg.Message, pid ProtocolID, data []byte) {
42 - data2, pid2, err := unwrapData(m.Data)
41 +func testWrappedMsg(t *testing.T, m msg.NetMessage, pid ProtocolID, data []byte) {
42 + data2, pid2, err := unwrapData(m.Data())
43 if err != nil {
44 t.Error(err)
45 }
@@ -76,7 +76,7 @@ func TestSimpleMuxer(t *testing.T) {
76
77 // test outgoing p1
78 for _, s := range []string{"foo", "bar", "baz"} {
79 - p1.Outgoing <- &msg.Message{Peer: peer1, Data: []byte(s)}
79 + p1.Outgoing <- msg.New(peer1, []byte(s))
80 testWrappedMsg(t, <-mux1.Outgoing, pid1, []byte(s))
81 }
82
@@ -86,13 +86,13 @@ func TestSimpleMuxer(t *testing.T) {
86 if err != nil {
87 t.Error(err)
88 }
89 - mux1.Incoming <- &msg.Message{Peer: peer1, Data: d}
89 + mux1.Incoming <- msg.New(peer1, d)
90 testMsg(t, <-p1.Incoming, []byte(s))
91 }
92
93 // test outgoing p2
94 for _, s := range []string{"foo", "bar", "baz"} {
95 - p2.Outgoing <- &msg.Message{Peer: peer1, Data: []byte(s)}
95 + p2.Outgoing <- msg.New(peer1, []byte(s))
96 testWrappedMsg(t, <-mux1.Outgoing, pid2, []byte(s))
97 }
98
@@ -102,7 +102,7 @@ func TestSimpleMuxer(t *testing.T) {
102 if err != nil {
103 t.Error(err)
104 }
105 - mux1.Incoming <- &msg.Message{Peer: peer1, Data: d}
105 + mux1.Incoming <- msg.New(peer1, d)
106 testMsg(t, <-p2.Incoming, []byte(s))
107 }
108 }
@@ -139,7 +139,7 @@ func TestSimultMuxer(t *testing.T) {
139 for i := 0; i < size; i++ {
140 <-limiter
141 s := fmt.Sprintf("proto %v out %v", pid, i)
142 - m := &msg.Message{Peer: peer1, Data: []byte(s)}
142 + m := msg.New(peer1, []byte(s))
143 mux1.Protocols[pid].GetPipe().Outgoing <- m
144 counts[pid][0][0]++
145 u.DOut("sent %v\n", s)
@@ -156,7 +156,7 @@ func TestSimultMuxer(t *testing.T) {
156 t.Error(err)
157 }
158
159 - m := &msg.Message{Peer: peer1, Data: d}
159 + m := msg.New(peer1, d)
160 mux1.Incoming <- m
161 counts[pid][1][0]++
162 u.DOut("sent %v\n", s)
@@ -167,7 +167,7 @@ func TestSimultMuxer(t *testing.T) {
167 for {
168 select {
169 case m := <-mux1.Outgoing:
170 - data, pid, err := unwrapData(m.Data)
170 + data, pid, err := unwrapData(m.Data())
171 if err != nil {
172 t.Error(err)
173 }
@@ -186,7 +186,7 @@ func TestSimultMuxer(t *testing.T) {
186 select {
187 case m := <-mux1.Protocols[pid].GetPipe().Incoming:
188 counts[pid][0][1]++
189 - u.DOut("got %v\n", string(m.Data))
189 + u.DOut("got %v\n", string(m.Data()))
190 case <-ctx.Done():
191 return
192 }
@@ -239,7 +239,7 @@ func TestStopping(t *testing.T) {
239
240 // test outgoing p1
241 for _, s := range []string{"foo", "bar", "baz"} {
242 - p1.Outgoing <- &msg.Message{Peer: peer1, Data: []byte(s)}
242 + p1.Outgoing <- msg.New(peer1, []byte(s))
243 testWrappedMsg(t, <-mux1.Outgoing, pid1, []byte(s))
244 }
245
@@ -249,7 +249,7 @@ func TestStopping(t *testing.T) {
249 if err != nil {
250 t.Error(err)
251 }
252 - mux1.Incoming <- &msg.Message{Peer: peer1, Data: d}
252 + mux1.Incoming <- msg.New(peer1, d)
253 testMsg(t, <-p1.Incoming, []byte(s))
254 }
255
@@ -260,7 +260,7 @@ func TestStopping(t *testing.T) {
260
261 // test outgoing p1
262 for _, s := range []string{"foo", "bar", "baz"} {
263 - p1.Outgoing <- &msg.Message{Peer: peer1, Data: []byte(s)}
263 + p1.Outgoing <- msg.New(peer1, []byte(s))
264 select {
265 case <-mux1.Outgoing:
266 t.Error("should not have received anything.")
@@ -274,7 +274,7 @@ func TestStopping(t *testing.T) {
274 if err != nil {
275 t.Error(err)
276 }
277 - mux1.Incoming <- &msg.Message{Peer: peer1, Data: d}
277 + mux1.Incoming <- msg.New(peer1, d)
278 select {
279 case <-p1.Incoming:
280 t.Error("should not have received anything.")
net/service/request.go
+2 -2
@@ -75,7 +75,7 @@ type Request struct {
75 PeerID peer.ID
76
77 // Response is the channel of incoming responses.
78 - Response chan *msg.Message
78 + Response chan msg.NetMessage
79 }
80
81 // NewRequest creates a request for given peer.ID
@@ -88,7 +88,7 @@ func NewRequest(pid peer.ID) (*Request, error) {
88 return &Request{
89 ID: id,
90 PeerID: pid,
91 - Response: make(chan *msg.Message, 1),
91 + Response: make(chan msg.NetMessage, 1),
92 }, nil
93 }
94
net/service/service.go
+10 -10
@@ -16,7 +16,7 @@ type Handler interface {
16
17 // HandleMessage receives an incoming message, and potentially returns
18 // a response message to send back.
19 - HandleMessage(context.Context, *msg.Message) (*msg.Message, error)
19 + HandleMessage(context.Context, msg.NetMessage) (msg.NetMessage, error)
20 }
21
22 // Service is a networking component that protocols can use to multiplex
@@ -74,16 +74,16 @@ func (s *Service) GetPipe() *msg.Pipe {
74 }
75
76 // SendMessage sends a message out
77 -func (s *Service) SendMessage(ctx context.Context, m *msg.Message, rid RequestID) error {
77 +func (s *Service) SendMessage(ctx context.Context, m msg.NetMessage, rid RequestID) error {
78
79 // serialize ServiceMessage wrapper
80 - data, err := wrapData(m.Data, rid)
80 + data, err := wrapData(m.Data(), rid)
81 if err != nil {
82 return err
83 }
84
85 // send message
86 - m2 := &msg.Message{Peer: m.Peer, Data: data}
86 + m2 := msg.New(m.Peer(), data)
87 select {
88 case s.Outgoing <- m2:
89 case <-ctx.Done():
@@ -94,10 +94,10 @@ func (s *Service) SendMessage(ctx context.Context, m *msg.Message, rid RequestID
94 }
95
96 // SendRequest sends a request message out and awaits a response.
97 -func (s *Service) SendRequest(ctx context.Context, m *msg.Message) (*msg.Message, error) {
97 +func (s *Service) SendRequest(ctx context.Context, m msg.NetMessage) (msg.NetMessage, error) {
98
99 // create a request
100 - r, err := NewRequest(m.Peer.ID)
100 + r, err := NewRequest(m.Peer().ID)
101 if err != nil {
102 return nil, err
103 }
@@ -150,14 +150,14 @@ func (s *Service) handleIncomingMessages(ctx context.Context) {
150 }
151 }
152
153 -func (s *Service) handleIncomingMessage(ctx context.Context, m *msg.Message) {
153 +func (s *Service) handleIncomingMessage(ctx context.Context, m msg.NetMessage) {
154
155 // unwrap the incoming message
156 - data, rid, err := unwrapData(m.Data)
156 + data, rid, err := unwrapData(m.Data())
157 if err != nil {
158 u.PErr("de-serializing error: %v\n", err)
159 }
160 - m2 := &msg.Message{Peer: m.Peer, Data: data}
160 + m2 := msg.New(m.Peer(), data)
161
162 // if it's a request (or has no RequestID), handle it
163 if rid == nil || rid.IsRequest() {
@@ -182,7 +182,7 @@ func (s *Service) handleIncomingMessage(ctx context.Context, m *msg.Message) {
182 u.PErr("RequestID should identify a response here.\n")
183 }
184
185 - key := RequestKey(m.Peer.ID, RequestID(rid))
185 + key := RequestKey(m.Peer().ID, RequestID(rid))
186 s.RequestsLock.RLock()
187 r, found := s.Requests[key]
188 s.RequestsLock.RUnlock()
net/service/service_test.go
+10 -10
@@ -15,15 +15,15 @@ import (
15 // ReverseHandler reverses all Data it receives and sends it back.
16 type ReverseHandler struct{}
17
18 -func (t *ReverseHandler) HandleMessage(ctx context.Context, m *msg.Message) (
19 - *msg.Message, error) {
18 +func (t *ReverseHandler) HandleMessage(ctx context.Context, m msg.NetMessage) (
19 + msg.NetMessage, error) {
20
21 - d := m.Data
21 + d := m.Data()
22 for i, j := 0, len(d)-1; i < j; i, j = i+1, j-1 {
23 d[i], d[j] = d[j], d[i]
24 }
25
26 - return &msg.Message{Peer: m.Peer, Data: d}, nil
26 + return msg.New(m.Peer(), d), nil
27 }
28
29 func newPeer(t *testing.T, id string) *peer.Peer {
@@ -47,11 +47,11 @@ func TestServiceHandler(t *testing.T) {
47 t.Error(err)
48 }
49
50 - m1 := &msg.Message{Peer: peer1, Data: d}
50 + m1 := msg.New(peer1, d)
51 s.Incoming <- m1
52 m2 := <-s.Outgoing
53
54 - d, rid, err := unwrapData(m2.Data)
54 + d, rid, err := unwrapData(m2.Data())
55 if err != nil {
56 t.Error(err)
57 }
@@ -85,14 +85,14 @@ func TestServiceRequest(t *testing.T) {
85 }
86 }()
87
88 - m1 := &msg.Message{Peer: peer1, Data: []byte("beep")}
88 + m1 := msg.New(peer1, []byte("beep"))
89 m2, err := s1.SendRequest(ctx, m1)
90 if err != nil {
91 t.Error(err)
92 }
93
94 - if !bytes.Equal(m2.Data, []byte("peeb")) {
95 - t.Errorf("service handler data incorrect: %v != %v", m2.Data, "oof")
94 + if !bytes.Equal(m2.Data(), []byte("peeb")) {
95 + t.Errorf("service handler data incorrect: %v != %v", m2.Data(), "oof")
96 }
97 }
98
@@ -117,7 +117,7 @@ func TestServiceRequestTimeout(t *testing.T) {
117 }
118 }()
119
120 - m1 := &msg.Message{Peer: peer1, Data: []byte("beep")}
120 + m1 := msg.New(peer1, []byte("beep"))
121 m2, err := s1.SendRequest(ctx, m1)
122 if err == nil || m2 != nil {
123 t.Error("should've timed out")