Changeset 91 in code for trunk/downstream.go


Ignore:
Timestamp:
Mar 12, 2020, 8:28:09 PM (5 years ago)
Author:
contact
Message:

Auto-save IRC networks

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r90 r91  
    22
    33import (
     4        "crypto/tls"
    45        "fmt"
    56        "io"
    67        "net"
    78        "strings"
     9        "time"
    810
    911        "golang.org/x/crypto/bcrypt"
     
    337339}
    338340
     341func sanityCheckServer(addr string) error {
     342        dialer := net.Dialer{Timeout: 30 * time.Second}
     343        conn, err := tls.DialWithDialer(&dialer, "tcp", addr, nil)
     344        if err != nil {
     345                return err
     346        }
     347        return conn.Close()
     348}
     349
    339350func (dc *downstreamConn) register() error {
    340351        username := strings.TrimPrefix(dc.username, "~")
     
    366377                network = u.getNetwork(networkName)
    367378                if network == nil {
    368                         dc.logger.Printf("failed registration: unknown network %q", networkName)
    369                         dc.SendMessage(&irc.Message{
    370                                 Prefix:  dc.srv.prefix(),
    371                                 Command: irc.ERR_PASSWDMISMATCH,
    372                                 Params:  []string{"*", fmt.Sprintf("Unknown network %q", networkName)},
    373                         })
    374                         return nil
     379                        addr := networkName
     380                        if !strings.ContainsRune(addr, ':') {
     381                                addr = addr + ":6697"
     382                        }
     383
     384                        dc.logger.Printf("trying to connect to new upstream server %q", addr)
     385                        if err := sanityCheckServer(addr); err != nil {
     386                                dc.logger.Printf("failed to connect to %q: %v", addr, err)
     387                                return ircError{&irc.Message{
     388                                        Command: irc.ERR_PASSWDMISMATCH,
     389                                        Params:  []string{"*", fmt.Sprintf("Failed to connect to %q", networkName)},
     390                                }}
     391                        }
     392
     393                        dc.logger.Printf("auto-adding network %q", networkName)
     394                        network, err = u.createNetwork(networkName, dc.nick)
     395                        if err != nil {
     396                                return err
     397                        }
    375398                }
    376399        }
Note: See TracChangeset for help on using the changeset viewer.