summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/lrstanley/girc/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/lrstanley/girc/client.go')
-rw-r--r--vendor/github.com/lrstanley/girc/client.go61
1 files changed, 40 insertions, 21 deletions
diff --git a/vendor/github.com/lrstanley/girc/client.go b/vendor/github.com/lrstanley/girc/client.go
index 1a4d4ac2..403a7aec 100644
--- a/vendor/github.com/lrstanley/girc/client.go
+++ b/vendor/github.com/lrstanley/girc/client.go
@@ -191,18 +191,6 @@ func (conf *Config) isValid() error {
// connected.
var ErrNotConnected = errors.New("client is not connected to server")
-// ErrDisconnected is called when Config.Retries is less than 1, and we
-// non-intentionally disconnected from the server.
-var ErrDisconnected = errors.New("unexpectedly disconnected")
-
-// ErrInvalidTarget should be returned if the target which you are
-// attempting to send an event to is invalid or doesn't match RFC spec.
-type ErrInvalidTarget struct {
- Target string
-}
-
-func (e *ErrInvalidTarget) Error() string { return "invalid target: " + e.Target }
-
// New creates a new IRC client with the specified server, name and config.
func New(config Config) *Client {
c := &Client{
@@ -253,6 +241,37 @@ func (c *Client) String() string {
)
}
+// TLSConnectionState returns the TLS connection state from tls.Conn{}, which
+// is useful to return needed TLS fingerprint info, certificates, verify cert
+// expiration dates, etc. Will only return an error if the underlying
+// connection wasn't established using TLS (see ErrConnNotTLS), or if the
+// client isn't connected.
+func (c *Client) TLSConnectionState() (*tls.ConnectionState, error) {
+ c.mu.RLock()
+ defer c.mu.RUnlock()
+ if c.conn == nil {
+ return nil, ErrNotConnected
+ }
+
+ c.conn.mu.RLock()
+ defer c.conn.mu.RUnlock()
+
+ if !c.conn.connected {
+ return nil, ErrNotConnected
+ }
+
+ if tlsConn, ok := c.conn.sock.(*tls.Conn); ok {
+ cs := tlsConn.ConnectionState()
+ return &cs, nil
+ }
+
+ return nil, ErrConnNotTLS
+}
+
+// ErrConnNotTLS is returned when Client.TLSConnectionState() is called, and
+// the connection to the server wasn't made with TLS.
+var ErrConnNotTLS = errors.New("underlying connection is not tls")
+
// Close closes the network connection to the server, and sends a STOPPED
// event. This should cause Connect() to return with nil. This should be
// safe to call multiple times. See Connect()'s documentation on how
@@ -387,7 +406,7 @@ func (c *Client) ConnSince() (since *time.Duration, err error) {
}
// IsConnected returns true if the client is connected to the server.
-func (c *Client) IsConnected() (connected bool) {
+func (c *Client) IsConnected() bool {
c.mu.RLock()
if c.conn == nil {
c.mu.RUnlock()
@@ -395,7 +414,7 @@ func (c *Client) IsConnected() (connected bool) {
}
c.conn.mu.RLock()
- connected = c.conn.connected
+ connected := c.conn.connected
c.conn.mu.RUnlock()
c.mu.RUnlock()
@@ -562,30 +581,30 @@ func (c *Client) NetworkName() (name string) {
// supplied this information during connection. May be empty if the server
// does not support RPL_MYINFO. Will panic if used when tracking has been
// disabled.
-func (c *Client) ServerVersion() (version string) {
+func (c *Client) ServerVersion() string {
c.panicIfNotTracking()
- version, _ = c.GetServerOption("VERSION")
+ version, _ := c.GetServerOption("VERSION")
return version
}
// ServerMOTD returns the servers message of the day, if the server has sent
// it upon connect. Will panic if used when tracking has been disabled.
-func (c *Client) ServerMOTD() (motd string) {
+func (c *Client) ServerMOTD() string {
c.panicIfNotTracking()
c.state.RLock()
- motd = c.state.motd
+ motd := c.state.motd
c.state.RUnlock()
return motd
}
-// Lag is the latency between the server and the client. This is measured by
-// determining the difference in time between when we ping the server, and
+// Latency is the latency between the server and the client. This is measured
+// by determining the difference in time between when we ping the server, and
// when we receive a pong.
-func (c *Client) Lag() time.Duration {
+func (c *Client) Latency() time.Duration {
c.mu.RLock()
c.conn.mu.RLock()
delta := c.conn.lastPong.Sub(c.conn.lastPing)