aboutsummaryrefslogtreecommitdiff
path: root/tde
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-07-23 16:21:46 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-07-23 16:21:46 +0200
commit24d1fba7c5eee9bf8cfd4bd45dcd2127042795c2 (patch)
treea4a34d031cfa35e70cd7e365ad885e7d54a8391e /tde
parent48bfca18844c69674b865bb9c4e859108aa276a6 (diff)
Implement io.ReadWriter
Diffstat (limited to 'tde')
-rw-r--r--tde/tde.go42
1 files changed, 26 insertions, 16 deletions
diff --git a/tde/tde.go b/tde/tde.go
index 9413f09..664778d 100644
--- a/tde/tde.go
+++ b/tde/tde.go
@@ -4,36 +4,46 @@ import (
"encoding/binary"
"log"
"net"
+ "io"
)
+type TDE struct {
+ net.Conn
+}
+
var nbo = binary.BigEndian // Network Byte Order
-func Send(c net.Conn, b []byte) {
- size := int16(len(b))
- if err := binary.Write(c, nbo, size); err != nil {
- log.Fatal(err)
+func (t TDE) Write(p []byte) (n int, err error) {
+ size := int16(len(p))
+ if err := binary.Write(t.Conn, nbo, size); err != nil {
+ return 0, err
}
- if err := binary.Write(c, nbo, b); err != nil {
- log.Fatal(err)
+ if err := binary.Write(t.Conn, nbo, p); err != nil {
+ return 0, err
}
+ return int(size), nil
}
-func Recv(c net.Conn) (b []byte) {
+func (t TDE) Read(p []byte) (n int, err error) {
var size int16
- if err := binary.Read(c, nbo, &size); err != nil {
- log.Fatal(err)
+ if err := binary.Read(t.Conn, nbo, &size); err != nil {
+ return 0, err
+ }
+ if int(size) < len(p) {
+ p = p[:size]
+ err = io.EOF
}
- b = make([]byte, size)
- if err := binary.Read(c, nbo, b); err != nil {
- log.Fatal(err)
+ if err := binary.Read(t.Conn, nbo, p); err != nil {
+ return 0, err
}
- return
+ log.Println(err)
+ return int(size), err
}
-func Dial(service string) net.Conn {
+func Dial(service string) (TDE, error) {
conn, err := net.Dial("tcp", service)
if err != nil {
- log.Fatal(err)
+ return TDE{}, err
}
- return conn
+ return TDE{conn}, nil
}