Newer
Older
Manish R Jain
committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package conn
import (
"bytes"
"encoding/binary"
"fmt"
"io"
"github.com/dgraph-io/dgraph/x"
)
type Query struct {
Data []byte
}
type Reply struct {
Data []byte
}
func writeHeader(rwc io.ReadWriteCloser, seq uint64,
method string, data []byte) error {
var bh bytes.Buffer
var rerr error
x.SetError(&rerr, binary.Write(&bh, binary.LittleEndian, seq))
x.SetError(&rerr, binary.Write(&bh, binary.LittleEndian, int32(len(method))))
x.SetError(&rerr, binary.Write(&bh, binary.LittleEndian, int32(len(data))))
_, err := bh.Write([]byte(method))
x.SetError(&rerr, err)
if rerr != nil {
return rerr
}
_, err = rwc.Write(bh.Bytes())
return err
}
func parseHeader(rwc io.ReadWriteCloser, seq *uint64,
method *string, plen *int32) error {
var err error
var sz int32
x.SetError(&err, binary.Read(rwc, binary.LittleEndian, seq))
x.SetError(&err, binary.Read(rwc, binary.LittleEndian, &sz))
x.SetError(&err, binary.Read(rwc, binary.LittleEndian, plen))
if err != nil {
return err
}
buf := make([]byte, sz)
n, err := rwc.Read(buf)
if err != nil {
return err
}
if n != int(sz) {
return fmt.Errorf("Expected: %v. Got: %v\n", sz, n)
}
*method = string(buf)
return nil
}