Beispiel #1
0
def init():
    """ called after reload """
    saymonitor.start()
    jabbermonitor.start()
    saymonitor.add('relay', saycb, prerelaysay, True)
    jabbermonitor.add('relay', jabbersaycb, jabberprerelaysay, True)
    return 1
Beispiel #2
0
    def _resume(self, data, reto=None):
        """ resume to server/port using nick. """

        try:
            if data['ssl']:
                self.connectwithjoin()
                return 1
        except KeyError:
            pass
        self.connecting = False  # we're already connected
        self.nick = data['nick']
        self.orignick = self.nick
        self.server = str(data['server'])
        self.port = int(data['port'])
        self.password = data['password']
        self.ipv6 = data['ipv6']
        self.ssl = data['ssl']

        # create socket
        if self.ipv6:
            rlog(1, self.name, 'resuming ipv6 socket')
            self.sock = socket.fromfd(data['fd'], socket.AF_INET6,
                                      socket.SOCK_STREAM)
            self.ipv6 = 1
        else:
            rlog(1, self.name, 'resuming ipv4 socket')
            self.sock = socket.fromfd(data['fd'], socket.AF_INET,
                                      socket.SOCK_STREAM)

        # do the connect .. set timeout to 30 sec upon connecting
        rlog(10, self.name, 'resuming to ' + self.server)
        self.sock.settimeout(30)

        # we are connected
        rlog(10, self.name, 'connection ok')
        self.stopped = 0
        # make file socket
        self.fsock = self.sock.makefile("r")
        # set blocking
        self.sock.setblocking(self.blocking)

        # set socket time out
        if self.blocking:
            socktimeout = self.cfg['socktimeout']
            if not socktimeout:
                socktimeout = 301.0
            else:
                socktimeout = float(socktimeout)
            self.sock.settimeout(socktimeout)

        # start readloop
        rlog(0, self.name, 'resuming readloop')
        start_new_thread(self._readloop, ())
        start_new_thread(self._outloop, ())

        # init
        self.reconnectcount = 0
        self.nickchanged = 0
        self.connecting = False

        # still there server?
        self._raw('PING :RESUME %s' % str(time.time()))
        self.connectok.set()
        self.connected = True
        self.reconnectcount = 0
        if reto:
            self.say(reto, 'rebooting done')
        saymonitor.start()
        return 1
Beispiel #3
0
    def _connect(self):
        """ connect to server/port using nick. """

        if self.connecting:
            rlog(10, self.name, 'already connecting')
            raise AlreadyConnecting()

        if self.connected:
            rlog(10, self.name, 'already connected')
            raise AlreadyConnected()

        self.stopped = 0
        self.connecting = True
        self.connectok.clear()
        self.connectlock.acquire()

        # create socket
        if self.ipv6:
            rlog(10, self.name, 'creating ipv6 socket')
            self.oldsock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
            self.ipv6 = 1
        else:
            rlog(10, self.name, 'creating ipv4 socket')
            self.oldsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        assert (self.oldsock)

        # optional bind
        server = self.server
        elite = self.cfg['bindhost'] or config['bindhost']
        if elite:
            try:
                self.oldsock.bind((elite, 0))
            except socket.gaierror:
                rlog(10, self.name, "can't bind to %s" % elite)
                # resolve the IRC server and pick a random server
                if not server:
                    # valid IPv6 ip?
                    try:
                        socket.inet_pton(socket.AF_INET6, self.server)
                    except socket.error:
                        pass
                    else:
                        server = self.server
                if not server:
                    # valid IPv4 ip?
                    try:
                        socket.inet_pton(socket.AF_INET, self.server)
                    except socket.error:
                        pass
                    else:
                        server = self.server
                if not server:
                    # valid hostname?
                    ips = []
                    try:
                        for item in socket.getaddrinfo(self.server, None):
                            if item[0] in [socket.AF_INET, socket.AF_INET6
                                           ] and item[1] == socket.SOCK_STREAM:
                                ip = item[4][0]
                                if ip not in ips: ips.append(ip)
                    except socket.error:
                        pass
                    else:
                        server = random.choice(ips)

        # do the connect .. set timeout to 30 sec upon connecting
        rlog(10, self.name, 'connecting to %s (%s)' % (server, self.server))
        self.oldsock.settimeout(5)
        self.oldsock.connect((server, int(self.port)))

        # we are connected
        rlog(10, self.name, 'connection ok')
        time.sleep(1)
        self.connected = True

        # make file socket
        self.fsock = self.oldsock.makefile("r")

        # set blocking
        self.oldsock.setblocking(self.blocking)
        self.fsock._sock.setblocking(self.blocking)

        # set socket time out
        if self.blocking:
            socktimeout = self.cfg['socktimeout']
            if not socktimeout:
                socktimeout = 301.0
            else:
                socktimeout = float(socktimeout)
            self.oldsock.settimeout(socktimeout)
            self.fsock._sock.settimeout(socktimeout)
        # enable ssl if set
        if self.ssl:
            rlog(10, self.name, 'ssl enabled')
            self.sock = socket.ssl(self.oldsock)
        else:
            self.sock = self.oldsock

        # try to release the outputlock
        try:
            self.outputlock.release()
        except thread.error:
            pass

        # start input and output loops
        start_new_thread(self._readloop, ())
        start_new_thread(self._outloop, ())

        # logon and start monitor
        self._logon()
        self.nickchanged = 0
        self.reconnectcount = 0
        saymonitor.start()
        return 1
Beispiel #4
0
    def _resume(self, data, reto=None):

        """ resume to server/port using nick. """

        try:
            if data['ssl']:
                self.connectwithjoin()
                return 1
        except KeyError:
            pass
        self.connecting = False # we're already connected
        self.nick = data['nick']
        self.orignick = self.nick
        self.server = str(data['server'])
        self.port = int(data['port'])
        self.password = data['password']
        self.ipv6 = data['ipv6']
        self.ssl = data['ssl']

        # create socket
        if self.ipv6:
            rlog(1, self.name, 'resuming ipv6 socket')
            self.sock = socket.fromfd(data['fd'], socket.AF_INET6, socket.SOCK_STREAM)
            self.ipv6 = 1
        else:
            rlog(1, self.name, 'resuming ipv4 socket')
            self.sock = socket.fromfd(data['fd'], socket.AF_INET, socket.SOCK_STREAM)

        # do the connect .. set timeout to 30 sec upon connecting
        rlog(10, self.name, 'resuming to ' + self.server)
        self.sock.settimeout(30)

        # we are connected
        rlog(10, self.name, 'connection ok')
        self.stopped = 0
        # make file socket
        self.fsock = self.sock.makefile("r")
        # set blocking
        self.sock.setblocking(self.blocking)

        # set socket time out
        if self.blocking:
            socktimeout = self.cfg['socktimeout']
            if not socktimeout:
                socktimeout = 301.0
            else:
                socktimeout = float(socktimeout)
            self.sock.settimeout(socktimeout)

        # start readloop
        rlog(0, self.name, 'resuming readloop')
        start_new_thread(self._readloop, ())
        start_new_thread(self._outloop, ())

        # init 
        self.reconnectcount = 0
        self.nickchanged = 0
        self.connecting = False

        # still there server?
        self._raw('PING :RESUME %s' % str(time.time()))
        self.connectok.set()
        self.connected = True
        self.reconnectcount = 0
        if reto:
            self.say(reto, 'rebooting done')
        saymonitor.start()
        return 1
Beispiel #5
0
    def _connect(self):

        """ connect to server/port using nick. """

        if self.connecting:
            rlog(10, self.name, 'already connecting')
            raise AlreadyConnecting()

        if self.connected:
            rlog(10, self.name, 'already connected')
            raise AlreadyConnected()

        self.stopped = 0
        self.connecting = True
        self.connectok.clear()
        self.connectlock.acquire()

        # create socket
        if self.ipv6:
            rlog(10, self.name, 'creating ipv6 socket')
            self.oldsock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
            self.ipv6 = 1
        else:
            rlog(10, self.name, 'creating ipv4 socket')
            self.oldsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        assert(self.oldsock)

        # optional bind
        server = self.server
        elite = self.cfg['bindhost'] or config['bindhost']
        if elite:
            try:
                self.oldsock.bind((elite, 0))
            except socket.gaierror:
                rlog(10, self.name, "can't bind to %s" % elite)
               # resolve the IRC server and pick a random server
                if not server:
                    # valid IPv6 ip?
                    try: socket.inet_pton(socket.AF_INET6, self.server)
                    except socket.error: pass
                    else: server = self.server
                if not server:  
                    # valid IPv4 ip?
                    try: socket.inet_pton(socket.AF_INET, self.server)
                    except socket.error: pass
                    else: server = self.server
                if not server:
                    # valid hostname?
                    ips = []
                    try:
                        for item in socket.getaddrinfo(self.server, None):
                            if item[0] in [socket.AF_INET, socket.AF_INET6] and item[1] == socket.SOCK_STREAM:
                                ip = item[4][0]
                                if ip not in ips: ips.append(ip)
                    except socket.error: pass
                    else: server = random.choice(ips)

        # do the connect .. set timeout to 30 sec upon connecting
        rlog(10, self.name, 'connecting to %s (%s)' % (server, self.server))
        self.oldsock.settimeout(5)
        self.oldsock.connect((server, int(self.port)))

        # we are connected
        rlog(10, self.name, 'connection ok')
        time.sleep(1)
        self.connected = True

        # make file socket
        self.fsock = self.oldsock.makefile("r")

        # set blocking
        self.oldsock.setblocking(self.blocking)
        self.fsock._sock.setblocking(self.blocking)

        # set socket time out
        if self.blocking:
            socktimeout = self.cfg['socktimeout']
            if not socktimeout:
                socktimeout = 301.0
            else:
                socktimeout = float(socktimeout)
            self.oldsock.settimeout(socktimeout)
            self.fsock._sock.settimeout(socktimeout)
        # enable ssl if set
        if self.ssl:
            rlog(10, self.name, 'ssl enabled')
            self.sock = socket.ssl(self.oldsock) 
        else:
            self.sock = self.oldsock

        # try to release the outputlock
        try:
            self.outputlock.release()
        except thread.error:
            pass

        # start input and output loops
        start_new_thread(self._readloop, ())
        start_new_thread(self._outloop, ())

        # logon and start monitor
        self._logon()
        self.nickchanged = 0
        self.reconnectcount = 0
        saymonitor.start()
        return 1