def _raw(self, stanza): """ output a xml stanza to the socket. """ if self.stopped or self.failure: logging.info("%s - bot is stopped .. not sending" % self.cfg.name) ; return try: stanza = stanza.strip() if not stanza: logging.debug("%s - no stanze provided. called from: %s" % (self.cfg.name, whichmodule())) return what = jabberstrip(stanza, allowed=["\n", ]) what = toenc(what) if not what.endswith('>') or not what.startswith('<'): logging.error('%s - invalid stanza: %s' % (self.cfg.name, what)) return start = what[:3] if start in ['<st', '<me', '<pr', '<iq', "<au", "<re", "<fa", "<ab"]: if start == "<pr": logging.info(u"> %s" % what) else: logging.info(u"> %s" % what) if not self.connection: self.sock.send(what) else: try: self.connection.send(what + u"\r\n") except AttributeError: try: self.connection.write(what) except AttributeError: self.sock.send(what) else: logging.error('%s - invalid stanza: %s' % (self.cfg.name, what)) if self.cfg.sleeptime: time.sleep(self.cfg.sleeptime) else: time.sleep(0.01) except socket.error, ex: if 'Broken pipe' in str(ex): logging.debug('%s - core - broken pipe .. ignoring' % self.cfg.name) return self.error = str(ex) handle_exception()
def _raw(self, stanza): """ output a xml stanza to the socket. """ if not self.connection: return time.sleep(0.01) try: stanza = stanza.strip() if not stanza: logging.debug("%s - no stanze provided. called from: %s" % (self.name, whichmodule())) return what = jabberstrip(stanza) what = toenc(stanza) logging.debug("%s - out - %s" % (self.name, what)) if not what.endswith('>') or not what.startswith('<'): logging.error('%s - invalid stanza: %s' % (self.name, what)) return if what.startswith('<stream') or what.startswith('<message') or what.startswith('<presence') or what.startswith('<iq'): logging.debug(u"%s - sxmpp - out - %s" % (self.name, what)) try: self.connection.send(what + u"\r\n") except AttributeError: self.connection.write(what) else: logging.error('%s - invalid stanza: %s' % (self.name, what)) except socket.error, ex: if 'Broken pipe' in str(ex): logging.debug('%s - core - broken pipe .. ignoring' % self.name) return self.error = str(ex) handle_exception()
def _raw(self, stanza): """ output a xml stanza to the socket. """ if not self.connection: return time.sleep(0.01) try: stanza = stanza.strip() if not stanza: logging.debug("%s - no stanze provided. called from: %s" % (self.name, whichmodule())) return what = jabberstrip(stanza) what = toenc(stanza) logging.debug("%s - out - %s" % (self.name, what)) if not what.endswith('>') or not what.startswith('<'): logging.error('%s - invalid stanza: %s' % (self.name, what)) return if what.startswith('<stream') or what.startswith( '<message') or what.startswith( '<presence') or what.startswith('<iq'): logging.debug(u"%s - sxmpp - out - %s" % (self.name, what)) try: self.connection.send(what + u"\r\n") except AttributeError: self.connection.write(what) else: logging.error('%s - invalid stanza: %s' % (self.name, what)) except socket.error, ex: if 'Broken pipe' in str(ex): logging.debug('%s - core - broken pipe .. ignoring' % self.name) return self.error = str(ex) handle_exception()
def _readloop(self): """ proces all incoming data. """ logging.debug('%s - starting readloop' % self.name) self.prevbuffer = "" self.buffer = "" self.error = "" data = "" while not self.stopped: time.sleep(0.001) try: data = jabberstrip(fromenc(self.connection.read())) logging.debug(u"%s - incoming: %s" % (self.name, data)) if data.endswith("</stream:stream>"): logging.error("%s - end of stream detected" % self.name) self.error = "streamend" self.disconnectHandler( Exception('remote %s disconnected' % self.host)) break if data == "": logging.error('%s - remote disconnected' % self.name) self.error = 'disconnected' self.disconnectHandler( Exception('remote %s disconnected' % self.host)) break if True: self.buffer = u"%s%s" % (self.buffer, data) #splitted = self.buffer.split(">") #lastitem = splitted[-1] handlers = self.handlers.keys() handlers.append("/") for handler in handlers: target = "%s>" % handler index = self.buffer.find(target) if index != -1: try: if self.loop_one(self.buffer[:index + len(target)]): self.buffer = self.buffer[index + 1 + len(target):] else: self.buffer = "" break except: handle_exception() except xml.parsers.expat.ExpatError, ex: logging.error("%s - %s - %s" % (self.name, str(ex), data)) self.buffer = "" self.error = str(ex) self.disconnectHandler(ex) break except Exception, ex: handle_exception() self.error = str(ex) self.disconnectHandler(ex) break
def _readloop(self): """ proces all incoming data. """ logging.debug('%s - starting readloop' % self.name) self.prevbuffer = "" self.buffer = "" self.error = "" data = "" while not self.stopped: time.sleep(0.001) try: data = jabberstrip(fromenc(self.connection.read())) logging.debug(u"%s - incoming: %s" % (self.name, data)) if data.endswith("</stream:stream>"): logging.error("%s - end of stream detected" % self.name) self.error = "streamend" self.disconnectHandler(Exception('remote %s disconnected' % self.host)) break if data == "": logging.error('%s - remote disconnected' % self.name) self.error = 'disconnected' self.disconnectHandler(Exception('remote %s disconnected' % self.host)) break if True: self.buffer = u"%s%s" % (self.buffer, data) #splitted = self.buffer.split(">") #lastitem = splitted[-1] handlers = self.handlers.keys() handlers.append("/") for handler in handlers: target = "%s>" % handler index = self.buffer.find(target) if index != -1: try: if self.loop_one(self.buffer[:index+len(target)]): self.buffer = self.buffer[index+1+len(target):] else: self.buffer = "" break except: handle_exception() except xml.parsers.expat.ExpatError, ex: logging.error("%s - %s - %s" % (self.name, str(ex), data)) self.buffer = "" self.error = str(ex) self.disconnectHandler(ex) break except Exception, ex: handle_exception() self.error = str(ex) self.disconnectHandler(ex) break
def _readloop(self): """ proces all incoming data. """ logging.debug('%s - starting readloop' % self.cfg.name) self.prevbuffer = u"" self.buffer = u"" self.error = u"" data = u"" while not self.stopped and not self.stopreadloop: try: data = jabberstrip(fromenc(self.connection.read()), allowed=["\n", ]) if self.stopped or self.stopreadloop: break logging.info(u"< %s (%s)" % (data, len(data))) if data.endswith("</stream:stream>"): logging.error("%s - end of stream detected" % self.cfg.name) self.error = "streamend" self.disconnectHandler(Exception('remote %s disconnected' % self.cfg.host)) break if data == "": logging.error('%s - remote disconnected' % self.cfg.name) self.error = 'disconnected' self.disconnectHandler(Exception('remote %s disconnected' % self.cfg.host)) break if True: self.buffer = u"%s%s" % (self.buffer, data) handlers = self.handlers.keys() handlers.append("/") for handler in handlers: target = u"%s>" % handler index = self.buffer.find(target) if index != -1: try: if self.loop_one(self.buffer[:index+len(target)]): self.buffer = self.buffer[index+1+len(target):] else: self.buffer = u"" break except: handle_exception() except AttributeError, ex: logging.error(u"%s - connection disappeared: %s" % (self.cfg.name, str(ex))) self.buffer = u"" self.error = str(ex) self.disconnectHandler(ex) break except xml.parsers.expat.ExpatError, ex: logging.error(u"%s - %s - %s" % (self.cfg.name, str(ex), data)) self.buffer = u"" self.error = str(ex) self.disconnectHandler(ex) break