Skip to content

Commit

Permalink
fix review and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
whyrusleeping committed Sep 5, 2017
1 parent efba554 commit cb1cdda
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 14 deletions.
38 changes: 28 additions & 10 deletions p2p/transport/websocket/conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,25 +25,42 @@ func (c *Conn) Read(b []byte) (int, error) {
}
}

n, err := c.reader.Read(b)
if err == io.EOF {
if err := c.prepNextReader(); err != nil {
return 0, err
}
if n == 0 {
n, err = c.reader.Read(b)
for {
n, err := c.reader.Read(b)
switch err {
case io.EOF:
c.reader = nil

if n > 0 {
return n, nil
}

if err := c.prepNextReader(); err != nil {
return 0, err
}

// explicitly looping
default:
return n, err
}
}

return n, err
}

func (c *Conn) prepNextReader() error {
_, r, err := c.Conn.NextReader()
t, r, err := c.Conn.NextReader()
if err != nil {
if wserr, ok := err.(*ws.CloseError); ok {
if wserr.Code == 1000 || wserr.Code == 1005 {
return io.EOF
}
}
return err
}

if t == ws.CloseMessage {
return io.EOF
}

c.reader = r
return nil
}
Expand All @@ -61,6 +78,7 @@ func (c *Conn) Close() error {
c.done()
}

c.Conn.WriteMessage(ws.CloseMessage, nil)
return c.Conn.Close()
}

Expand Down
11 changes: 7 additions & 4 deletions p2p/transport/websocket/websocket_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package websocket

import (
"bytes"
"io/ioutil"
"testing"
"testing/iotest"

ma "github.com/multiformats/go-multiaddr"
)
Expand Down Expand Up @@ -40,13 +42,14 @@ func TestWebsocketListen(t *testing.T) {
}
defer c.Close()

buf := make([]byte, 32)
n, err := c.Read(buf)
obr := iotest.OneByteReader(c)

out, err := ioutil.ReadAll(obr)
if err != nil {
t.Fatal(err)
}

if !bytes.Equal(buf[:n], msg) {
t.Fatal("got wrong message", buf[:n], msg)
if !bytes.Equal(out, msg) {
t.Fatal("got wrong message", out, msg)
}
}

0 comments on commit cb1cdda

Please sign in to comment.