diff options
Diffstat (limited to 'client/client.go')
| -rw-r--r-- | client/client.go | 49 |
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, } |
