summaryrefslogtreecommitdiff
path: root/src/nslcd_proto/io.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2015-09-18 17:45:34 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2015-09-18 17:45:34 -0400
commit3ecd3c8e3d6643986960d6266d71643df8f7c22e (patch)
treea1efd756838023645373b39bdfa34eb0ba81681b /src/nslcd_proto/io.go
parentaecb837a5cf531d83aebe7666f400d56fa3ab1ed (diff)
Massive documentation and copyright clean-up.
Diffstat (limited to 'src/nslcd_proto/io.go')
-rw-r--r--src/nslcd_proto/io.go144
1 files changed, 0 insertions, 144 deletions
diff --git a/src/nslcd_proto/io.go b/src/nslcd_proto/io.go
deleted file mode 100644
index a6ff582..0000000
--- a/src/nslcd_proto/io.go
+++ /dev/null
@@ -1,144 +0,0 @@
-package nslcd_proto
-
-import (
- "encoding/binary"
- "fmt"
- "io"
- "net"
- "reflect"
- "syscall"
-)
-
-type NslcdObject interface {
- NslcdWrite(fd io.Writer)
-}
-type NslcdObjectPtr interface {
- NslcdRead(fd io.Reader)
-}
-
-func write(fd io.Writer, data interface{}) {
- switch data := data.(type) {
- // basic data types
- case NslcdObject:
- data.NslcdWrite(fd)
- case []byte:
- _, err := fd.Write(data)
- if err != nil {
- panic(err)
- }
- case int32:
- err := binary.Write(fd, binary.BigEndian, data)
- if err != nil {
- panic(err)
- }
- // composite datatypes
- case string:
- write(fd, int32(len(data)))
- write(fd, []byte(data))
- case []string:
- write(fd, int32(len(data)))
- for _, item := range data {
- write(fd, item)
- }
- case net.IP:
- var af int32 = -1
- switch len(data) {
- case net.IPv4len:
- af = syscall.AF_INET
- case net.IPv6len:
- af = syscall.AF_INET6
- }
- var bytes []byte
- if af < 0 {
- bytes = make([]byte, 0)
- } else {
- bytes = data
- }
- write(fd, af)
- write(fd, int32(len(bytes)))
- write(fd, bytes)
- case []net.IP:
- write(fd, int32(len(data)))
- for _, item := range data {
- write(fd, item)
- }
- default:
- v := reflect.ValueOf(data)
- switch v.Kind() {
- case reflect.Struct:
- for i, n := 0, v.NumField(); i < n; i++ {
- write(fd, v.Field(i).Interface())
- }
- default:
- panic(fmt.Sprintf("Invalid structure to write NSLCD protocol data from: %T ( %#v )", data, data))
- }
- }
-}
-
-func read(fd io.Reader, data interface{}) {
- switch data := data.(type) {
- // basic data types
- case NslcdObjectPtr:
- data.NslcdRead(fd)
- case *[]byte:
- _, err := fd.Read(*data)
- if err != nil {
- panic(err)
- }
- case *int32:
- err := binary.Read(fd, binary.BigEndian, data)
- if err != nil {
- panic(err)
- }
- // composite datatypes
- case *string:
- var len int32
- read(fd, &len)
- buf := make([]byte, len)
- read(fd, &buf)
- *data = string(buf)
- case *[]string:
- var num int32
- read(fd, &num)
- *data = make([]string, num)
- for i := 0; i < int(num); i++ {
- read(fd, &((*data)[i]))
- }
- case *net.IP:
- var af int32
- read(fd, &af)
- var _len int32
- switch af {
- case syscall.AF_INET:
- _len = net.IPv4len
- case syscall.AF_INET6:
- _len = net.IPv6len
- default:
- panic(NslcdError(fmt.Sprintf("incorrect address family specified: %d", af)))
- }
- var len int32
- read(fd, &len)
- if len != _len {
- panic(NslcdError(fmt.Sprintf("address length incorrect: %d", len)))
- }
- buf := make([]byte, len)
- read(fd, &buf)
- *data = buf
- case *[]net.IP:
- var num int32
- read(fd, &num)
- *data = make([]net.IP, num)
- for i := 0; i < int(num); i++ {
- read(fd, &((*data)[i]))
- }
- default:
- p := reflect.ValueOf(data)
- v := reflect.Indirect(p)
- if p == v || v.Kind() != reflect.Struct {
- panic(fmt.Sprintf("The argument to nslcd_proto.read() must be a pointer: %T ( %#v )", data, data))
- }
- for i, n := 0, v.NumField(); i < n; i++ {
- read(fd, v.Field(i).Addr().Interface())
- }
- }
-}