From 96a892f8400bc60a3a4021d7783776e2315036ba Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Fri, 19 Jan 2018 19:51:03 +0100 Subject: [feat] implement bitmask.core zmq comunication --- bitmask/main.go | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 bitmask/main.go (limited to 'bitmask/main.go') diff --git a/bitmask/main.go b/bitmask/main.go new file mode 100644 index 0000000..b4607b3 --- /dev/null +++ b/bitmask/main.go @@ -0,0 +1,77 @@ +package bitmask + +import ( + "encoding/json" + "errors" + + "github.com/pebbe/zmq4" +) + +const ( + // On win should be: tcp://127.0.0.1:5001 + coreEndpoint = "ipc:///tmp/bitmask.core.sock" +) + +// Bitmask holds the bitmask client data +type Bitmask struct { + //eventsoc *zmq4.Socket + coresoc *zmq4.Socket + statusCh chan string +} + +// Init the connection to bitmask +func Init() (*Bitmask, error) { + statusCh := make(chan string) + socket, err := initCore() + if err != nil { + return nil, err + } + + b := Bitmask{socket, statusCh} + go b.fetchStatus() + return &b, nil +} + +// GetStatusCh returns a channel that will recieve VPN status changes +func (b *Bitmask) GetStatusCh() chan string { + return b.statusCh +} + +// Close the connection to bitmask +func (b *Bitmask) Close() { + b.coresoc.Close() +} + +func (b *Bitmask) send(parts ...interface{}) (map[string]interface{}, error) { + _, err := b.coresoc.SendMessage(parts...) + if err != nil { + return nil, err + } + resJSON, err := b.coresoc.RecvBytes(0) + if err != nil { + return nil, err + } + return parseResponse(resJSON) +} + +func parseResponse(resJSON []byte) (map[string]interface{}, error) { + var response struct { + Result map[string]interface{} + Error string + } + err := json.Unmarshal(resJSON, &response) + if response.Error != "" { + return nil, errors.New(response.Error) + } + return response.Result, err +} + +func initCore() (*zmq4.Socket, error) { + socket, err := zmq4.NewSocket(zmq4.REQ) + if err != nil { + return nil, err + } + + err = socket.Connect(coreEndpoint) + return socket, err +} -- cgit v1.2.3