diff --git a/p2p/message.go b/p2p/message.go index 845c832f0..d3b8b74d4 100644 --- a/p2p/message.go +++ b/p2p/message.go @@ -41,13 +41,6 @@ func encodePayload(params ...interface{}) []byte { return buf.Bytes() } -// Value returns the decoded RLP payload items in a message. -func (msg Msg) Value() (*ethutil.Value, error) { - var v []interface{} - err := msg.Decode(&v) - return ethutil.NewValue(v), err -} - // Decode parse the RLP content of a message into // the given value, which must be a pointer. // @@ -84,31 +77,6 @@ type MsgReadWriter interface { MsgWriter } -// MsgLoop reads messages off the given reader and -// calls the handler function for each decoded message until -// it returns an error or the peer connection is closed. -// -// If a message is larger than the given maximum size, -// MsgLoop returns an appropriate error. -func MsgLoop(r MsgReader, maxsize uint32, f func(code uint64, data *ethutil.Value) error) error { - for { - msg, err := r.ReadMsg() - if err != nil { - return err - } - if msg.Size > maxsize { - return newPeerError(errInvalidMsg, "size %d exceeds maximum size of %d", msg.Size, maxsize) - } - value, err := msg.Value() - if err != nil { - return err - } - if err := f(msg.Code, value); err != nil { - return err - } - } -} - var magicToken = []byte{34, 64, 8, 145} func writeMsg(w io.Writer, msg Msg) error { diff --git a/p2p/message_test.go b/p2p/message_test.go index 0f51f759e..7b39b061d 100644 --- a/p2p/message_test.go +++ b/p2p/message_test.go @@ -29,8 +29,7 @@ func TestEncodeDecodeMsg(t *testing.T) { if err := writeMsg(buf, msg); err != nil { t.Fatalf("encodeMsg error: %v", err) } - - t.Logf("encoded: %x", buf.Bytes()) + // t.Logf("encoded: %x", buf.Bytes()) decmsg, err := readMsg(buf) if err != nil { @@ -42,18 +41,19 @@ func TestEncodeDecodeMsg(t *testing.T) { if decmsg.Size != 5 { t.Errorf("incorrect size %d, want %d", decmsg.Size, 5) } - data, err := decmsg.Value() - if err != nil { - t.Fatalf("first payload item decode error: %v", err) + + var data struct { + I int + S string } - if v := data.Len(); v != 2 { - t.Errorf("incorrect data.Len(): got %v, expected %d", v, 1) + if err := decmsg.Decode(&data); err != nil { + t.Fatalf("Decode error: %v", err) } - if v := data.Get(0).Uint(); v != 1 { - t.Errorf("incorrect data[0]: got %v, expected %d", v, 1) + if data.I != 1 { + t.Errorf("incorrect data.I: got %v, expected %d", data.I, 1) } - if v := data.Get(1).Str(); v != "000" { - t.Errorf("incorrect data[1]: got %q, expected %q", v, "000") + if data.S != "000" { + t.Errorf("incorrect data.S: got %q, expected %q", data.S, "000") } } diff --git a/p2p/peer_test.go b/p2p/peer_test.go index 629475421..0994683a2 100644 --- a/p2p/peer_test.go +++ b/p2p/peer_test.go @@ -2,8 +2,10 @@ package p2p import ( "bufio" + "bytes" + "encoding/hex" + "io/ioutil" "net" - "reflect" "testing" "time" ) @@ -53,13 +55,13 @@ func TestPeerProtoReadMsg(t *testing.T) { if msg.Code != 2 { t.Errorf("incorrect msg code %d relayed to protocol", msg.Code) } - data, err := msg.Value() + data, err := ioutil.ReadAll(msg.Payload) if err != nil { - t.Errorf("data decoding error: %v", err) + t.Errorf("payload read error: %v", err) } - expdata := []interface{}{[]byte{0x01}, []byte{0x30, 0x30, 0x30}} - if !reflect.DeepEqual(data.Slice(), expdata) { - t.Errorf("incorrect msg data %#v", data.Slice()) + expdata, _ := hex.DecodeString("0183303030") + if !bytes.Equal(expdata, data) { + t.Errorf("incorrect msg data %x", data) } close(done) return nil