Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
 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()
Ejemplo n.º 3
0
 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()
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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