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
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 {
if err != nil {
return
}
+ ret = readWriter{r, w}
}
err = h.finishWriting()
if err != nil {
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,
import (
"bytes"
"io"
+ "log"
"net"
"sync"
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()
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()
}