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")