def init(): """ called after reload """ saymonitor.start() jabbermonitor.start() saymonitor.add('relay', saycb, prerelaysay, True) jabbermonitor.add('relay', jabbersaycb, jabberprerelaysay, True) return 1
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
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
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