]> Sergey Matveev's repositories - btrtrc.git/commitdiff
msg: Return usable object after handshake
authorMatt Joiner <anacrolix@gmail.com>
Thu, 12 Mar 2015 09:29:48 +0000 (20:29 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 12 Mar 2015 09:29:48 +0000 (20:29 +1100)
mse/mse.go
mse/mse_test.go

index 1d53ad21ebb201b71b590b2b04e6640f4d6ef200..a452228b47ade929516b09d704c1578cde744cff 100644 (file)
@@ -339,7 +339,12 @@ func readUntil(r io.Reader, b []byte) error {
        return nil
 }
 
-func (h *handshake) Do() (ret io.ReadWriteCloser, err error) {
+type readWriter struct {
+       io.Reader
+       io.Writer
+}
+
+func (h *handshake) Do() (ret io.ReadWriter, err error) {
        err = h.establishS()
        if err != nil {
                return
@@ -383,6 +388,7 @@ func (h *handshake) Do() (ret io.ReadWriteCloser, err error) {
                        err = fmt.Errorf("error reading crypto negotiation: %s", err)
                        return
                }
+               ret = readWriter{r, &cipherWriter{bC, h.conn}}
        } else {
                err = readUntil(h.conn, hash(req1, h.s.Bytes()))
                if err != nil {
@@ -422,6 +428,7 @@ func (h *handshake) Do() (ret io.ReadWriteCloser, err error) {
                if err != nil {
                        return
                }
+               ret = readWriter{r, w}
        }
        err = h.finishWriting()
        if err != nil {
@@ -431,7 +438,7 @@ func (h *handshake) Do() (ret io.ReadWriteCloser, err error) {
        return
 }
 
-func Handshake(rw io.ReadWriteCloser, initer bool, skey []byte) (ret io.ReadWriteCloser, err error) {
+func Handshake(rw io.ReadWriteCloser, initer bool, skey []byte) (ret io.ReadWriter, err error) {
        h := handshake{
                conn:   rw,
                initer: initer,
index 6c20fdf735b3bc0f39fa5bfe600ec94e408cf414..d26d90be2916fc1f1d674424c8381bf3c8dc16b3 100644 (file)
@@ -3,6 +3,7 @@ package mse
 import (
        "bytes"
        "io"
+       "log"
        "net"
        "sync"
 
@@ -53,7 +54,10 @@ func TestHandshake(t *testing.T) {
                        t.Fatal(err)
                        return
                }
-               a.Close()
+               a.Write([]byte("hello world"))
+               var msg [20]byte
+               n, _ := a.Read(msg[:])
+               log.Print(string(msg[:n]))
        }()
        go func() {
                defer wg.Done()
@@ -62,7 +66,10 @@ func TestHandshake(t *testing.T) {
                        t.Fatal(err)
                        return
                }
-               b.Close()
+               var msg [20]byte
+               n, _ := b.Read(msg[:])
+               log.Print(string(msg[:n]))
+               b.Write([]byte("yo dawg"))
        }()
        wg.Wait()
 }