summaryrefslogtreecommitdiffstats
path: root/client/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'client/client.go')
-rw-r--r--client/client.go49
1 files changed, 32 insertions, 17 deletions
diff --git a/client/client.go b/client/client.go
index b07bc27..ac8ef67 100644
--- a/client/client.go
+++ b/client/client.go
@@ -1,6 +1,7 @@
package client
import (
+ "crypto/tls"
"errors"
"io"
"net"
@@ -14,38 +15,52 @@ type Handler interface {
HandleError(err error)
}
+type Config struct {
+ Addr string
+ User string
+ Pass string
+ Tls bool
+ TlsInsecure bool
+}
+
type Client struct {
h Handler
+ cfg Config
conn net.Conn
-
- addr string
- uname string
- pass string
}
-func NewClient(handler Handler, addr, uname, pass string) *Client {
+func NewClient(handler Handler, cfg Config) *Client {
return &Client{
- h: handler,
- addr: addr,
- uname: uname,
- pass: pass,
+ h: handler,
+ cfg: cfg,
}
}
func (c *Client) Connect() error {
var err error
- c.conn, err = net.Dial("tcp", c.addr)
- if err != nil {
- return err
+
+ if c.cfg.Tls {
+ c.conn, err = tls.Dial("tcp", c.cfg.Addr, &tls.Config{
+ InsecureSkipVerify: c.cfg.TlsInsecure,
+ })
+ if err != nil {
+ return err
+ }
+ defer c.conn.Close()
+ } else {
+ c.conn, err = net.Dial("tcp", c.cfg.Addr)
+ if err != nil {
+ return err
+ }
+ defer c.conn.Close()
}
- defer c.conn.Close()
hs := core.Handshake{0, 1, core.ConnTypeUser}
if err := core.Send(c.conn, hs); err != nil {
return err
}
- auth := core.UserAuth{c.uname, c.pass}
+ auth := core.UserAuth{Name: c.cfg.User, Pass: c.cfg.Pass}
if err := core.Send(c.conn, auth); err != nil {
return err
}
@@ -56,7 +71,7 @@ func (c *Client) Connect() error {
func (c *Client) SendMessage(target, content string) error {
msg := core.Message{
- Source: c.uname + "@" + c.addr,
+ Source: c.cfg.User + "@" + c.cfg.Addr,
Target: target,
Content: content,
}
@@ -66,7 +81,7 @@ func (c *Client) SendMessage(target, content string) error {
func (c *Client) Join(channel string) error {
umod := core.Usermode{
- UserAddr: c.uname + "@" + c.addr,
+ UserAddr: c.cfg.User + "@" + c.cfg.Addr,
ChannelName: channel,
Mode: core.UsermodeInChannel,
}
@@ -76,7 +91,7 @@ func (c *Client) Join(channel string) error {
func (c *Client) Leave(channel string) error {
umod := core.Usermode{
- UserAddr: c.uname + "@" + c.addr,
+ UserAddr: c.cfg.User + "@" + c.cfg.Addr,
ChannelName: channel,
Mode: core.UsermodeNone,
}