forked from elastic/logstash-forwarder
/
conn.go
64 lines (51 loc) · 1.31 KB
/
conn.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
package main
import (
"fmt"
"net"
"crypto/tls"
)
func (l *Lumberjack) connected() bool {
return l.conn != nil
}
func (l *Lumberjack) connect_once() (err error) {
if l.connected() { l.disconnect() }
if l.tlsconf == nil {
l.tlsconf, err = configureTLS(l.CAPath)
if err != nil {
return
}
}
l.conn, err = net.Dial("tcp", l.Addresses[0])
if err != nil { return }
l.tls = tls.Client(l.conn, l.tlsconf)
err = l.tls.Handshake()
if err != nil { return }
return
}
/* Connect to a remote lumberjack server. This blocks until the connection is
* ready. It will retry until successful. */
func (l *Lumberjack) connect() {
for !l.connected() {
err := l.connect_once()
if err != nil {
fmt.Printf("Error connecting: %s\n", err)
}
}
} /* Lumberjack#connect */
/* Disconnect from the lumberjack server */
func (l *Lumberjack) disconnect() {
if !l.connected() { return }
l.tls.Close()
l.conn.Close()
l.tls = nil
l.conn = nil
} /* Lumberjack#disconnect */
func (l *Lumberjack) publish(event map[string]string) {
if !l.connected() { l.connect() }
writeData(l.tls, 1, event)
}
func main() {
l := Lumberjack{Addresses: []string{"localhost:4000"}, CAPath: "/home/jls/projects/logstash/server.crt"}
l.publish(map[string]string{ "hello": "world"})
l.disconnect()
}