-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.go
122 lines (94 loc) · 3.03 KB
/
client.go
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package adversarylab
import (
"bufio"
"bytes"
"fmt"
"github.com/ugorji/go/codec"
"github.com/go-mangos/mangos"
"github.com/go-mangos/mangos/protocol/req"
"github.com/go-mangos/mangos/transport/tcp"
)
type Client struct {
sock mangos.Socket
}
func Connect(url string) Client {
var sock mangos.Socket
var err error
if sock, err = req.NewSocket(); err != nil {
die("can't get new req socket: %s", err.Error())
}
sock.AddTransport(tcp.NewTransport())
if err = sock.Dial(url); err != nil {
die("can't dial on req socket: %s", err.Error())
}
return Client{
sock: sock,
}
}
func (self Client) AddTrainPacket(dataset string, allowBlock bool, incoming bool, payload []byte) {
var packet TrainPacket = TrainPacket{Dataset: dataset, AllowBlock: allowBlock, Incoming: incoming, Payload: payload}
var value = NamedType{Name: "adversarylab.TrainPacket", Value: packet}
var buff = new(bytes.Buffer)
var bw = bufio.NewWriter(buff)
// var b []byte = make([]byte, 0, 2048)
var h codec.Handle = NamedTypeHandle()
// var enc *codec.Encoder = codec.NewEncoderBytes(&b, h)
var enc *codec.Encoder = codec.NewEncoder(bw, h)
var err error = enc.Encode(value)
if err != nil {
die("Error encoding packet: %s", err.Error())
}
bw.Flush()
self.request(buff.Bytes())
}
func (self Client) AddTestPacket(dataset string, incoming bool, payload []byte) {
var packet TestPacket = TestPacket{Dataset: dataset, Incoming: incoming, Payload: payload}
var value = NamedType{Name: "adversarylab.TrainPacket", Value: packet}
var buff = new(bytes.Buffer)
var bw = bufio.NewWriter(buff)
// var b []byte = make([]byte, 0, 2048)
var h codec.Handle = NamedTypeHandle()
// var enc *codec.Encoder = codec.NewEncoderBytes(&b, h)
var enc *codec.Encoder = codec.NewEncoder(bw, h)
var err error = enc.Encode(value)
if err != nil {
die("Error encoding packet: %s", err.Error())
}
bw.Flush()
self.request(buff.Bytes())
}
func (self Client) GetIncomingRule(dataset string) []byte {
var request RuleRequest = RuleRequest{Dataset: dataset, Incoming: true}
var b []byte = make([]byte, 0, 64)
var h codec.Handle = new(codec.CborHandle)
var enc *codec.Encoder = codec.NewEncoderBytes(&b, h)
var err error = enc.Encode(request)
if err != nil {
return nil
}
return self.request(b)
}
func (self Client) GetOutgoingRule(dataset string) []byte {
var request RuleRequest = RuleRequest{Dataset: dataset, Incoming: false}
var b []byte = make([]byte, 0, 64)
var h codec.Handle = new(codec.CborHandle)
var enc *codec.Encoder = codec.NewEncoderBytes(&b, h)
var err error = enc.Encode(request)
if err != nil {
return nil
}
return self.request(b)
}
func (self Client) request(data []byte) []byte {
var err error
var msg []byte
fmt.Printf("AdversaryLab client sending %d\n", len(data))
if err = self.sock.Send(data); err != nil {
die("can't send message on push socket: %s", err.Error())
}
if msg, err = self.sock.Recv(); err != nil {
die("can't receive date: %s", err.Error())
}
fmt.Printf("AdversaryLab client received response %s\n", string(msg))
return msg
}