aboutsummaryrefslogtreecommitdiff
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
parent48bfca18844c69674b865bb9c4e859108aa276a6 (diff)
Implement io.ReadWriter
-rw-r--r--misc/main.go17
-rw-r--r--tde/tde.go42
2 files changed, 35 insertions, 24 deletions
diff --git a/misc/main.go b/misc/main.go
index 4639621..dcf9b98 100644
--- a/misc/main.go
+++ b/misc/main.go
@@ -5,7 +5,7 @@ import (
"flag"
"fmt"
"log"
- "net"
+ "io/ioutil"
"dim13.org/asn1/tde"
)
@@ -24,6 +24,7 @@ import (
*/
var service = flag.String("service", "192.168.240.20:33333", "PBX CTI Service")
+var conn tde.TDE
func init() {
flag.Parse()
@@ -207,29 +208,29 @@ func dump(b []byte) {
fmt.Println(hex.Dump(b))
}
-func Ask(c net.Conn, out []byte) []byte {
+func Ask(c tde.TDE, out []byte) []byte {
log.Println("Ask")
dump(out)
- tde.Send(c, out)
- in := tde.Recv(c)
+ c.Write(out)
+ in, _ := ioutil.ReadAll(c)
log.Printf("Packet length: 0x%.2X\n", len(in))
dump(in)
return in
}
-func Status(c net.Conn) {
+func Status(c tde.TDE) {
log.Println("Status")
- in := tde.Recv(c)
+ in, _ := ioutil.ReadAll(c)
log.Printf("Packet length: 0x%.2X\n", len(in))
dump(in)
out := status
out[4] = in[4]
dump(out)
- tde.Send(c, out)
+ c.Write(out)
}
func main() {
- conn := tde.Dial(*service)
+ conn, _ = tde.Dial(*service)
defer conn.Close()
Ask(conn, associate)
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
}