Exemple #1
0
 def parseAPI(self, handler, apitype, path):
     """ parse request/response into a WebEvent. """
     #logging.warn(dir(handler))
     #logging.warn(dir(handler.request))
     #logging.warn(request.arguments)
     #logging.warn(request.body)
     self.handler = handler
     self.request = handler.request
     self.query = self.request.query
     self.upath = path
     self.apitype = apitype
     self.userhost = tornado.escape.xhtml_escape(handler.current_user)
     if not self.userhost: raise Exception("no current user.")
     input = path
     self.isweb = True
     logging.warn("input is %s" % input)
     if not input: raise NoInput(input)
     self.txt = fromenc(input.strip(), self.bot.encoding)
     self.nick = self.userhost.split("@")[0]
     self.auth = fromenc(self.userhost)
     self.stripped = stripped(self.auth)
     self.channel = stripped(self.userhost)
     logging.debug(u'tornado - parsed - %s - %s' % (self.txt, self.userhost)) 
     self.prepare()
     return self
Exemple #2
0
 def parse(self, response, request):
     """ parse request/response into a WebEvent. """
     logging.warn("parsing %s" % request.body)
     body = getpostdata_gae(request)
     logging.warn("body is %s" % body)
     data = LazyDict(getjson().loads(body))
     self.target = data.target
     self.how = data.how
     if not self.how:
         self.how = "channel"
     input = data.cmnd
     self.isweb = True
     self.origtxt = fromenc(input.strip(), self.bot.encoding)
     self.txt = self.origtxt
     self.usercmnd = self.txt and self.txt.split()[0]
     self.groupchat = False
     self.response = response
     self.request = request
     (userhost, user, u, nick) = checkuser(response, request, self)
     self.userhost = fromenc(userhost)
     self.nick = fromenc(nick)
     self.auth = fromenc(userhost)
     self.stripped = stripped(self.auth)
     self.domain = None
     self.channel = stripped(userhost)
     logging.debug(u"web - parsed - %s - %s" % (self.txt, self.userhost))
     self.makeargs()
     return self
Exemple #3
0
 def parse(self, handler, request, path=None):
     """ parse request/response into a WebEvent. """
     self.handler = handler
     self.request = request
     self.userhost = tornado.escape.xhtml_escape(handler.current_user)
     if not self.userhost: raise Exception("no current user.")
     try: how = request.arguments['how'][0]
     except KeyError: how = "background"
     if not how: how = "background"
     self.how = how
     if self.how == "undefined": self.how = "overwrite"
     logging.warn("web - how is %s" % self.how)
     input = request.headers.get('content') or request.headers.get('cmnd')
     if not input:
         try: input = request.arguments['content'] or request.arguments['cmnd']
         except KeyError: pass
     self.isweb = True
     if not input: logging.warn("input is %s" % input) ; raise NoInput(input)
     self.txt = fromenc(input[0].strip(), self.bot.encoding)
     self.nick = self.userhost.split("@")[0]
     self.auth = fromenc(self.userhost)
     self.stripped = stripped(self.auth)
     self.channel = stripped(self.userhost)
     logging.debug(u'tornado - parsed - %s - %s' % (self.txt, self.userhost)) 
     self.prepare()
     return self
Exemple #4
0
 def parsesocket(self, handler, message):
     """ parse request/response into a WebEvent. """
     self.handler = handler
     try: data = LazyDict(json.loads(message))
     except Exception, ex: logging.error("failed to parse data: %s - %s" % (message, str(ex))) ; return self
     logging.info("incoming: %s" % message)
     self.div = data.target
     self.userhost = tornado.escape.xhtml_escape(handler.current_user)
     if not self.userhost: raise Exception("no current user.")
     self.isweb = True
     input = data.cmnd
     self.how = data.how or self.how
     logging.info("cmnd is %s - how is %s" % (input, self.how))
     self.origtxt = fromenc(input.strip(), self.bot.encoding)
     self.txt = self.origtxt
     self.usercmnd = self.txt and self.txt.split()[0]
     self.groupchat = False
     self.nick = self.userhost.split("@")[0]
     self.auth = fromenc(self.userhost)
     self.stripped = stripped(self.auth)
     self.domain = None
     self.channel = stripped(self.userhost)
     logging.debug(u'tornado - parsed - %s - %s' % (self.txt, self.userhost)) 
     self.makeargs()
     return self
Exemple #5
0
 def parse(self, handler, request):
     """ parse request/response into a WebEvent. """
     #logging.warn(dir(handler))
     #logging.warn(dir(request))
     #logging.warn(request.arguments)
     #logging.warn(request.body)
     self.handler = handler
     self.request = request
     self.userhost = tornado.escape.xhtml_escape(handler.current_user)
     if not self.userhost: raise Exception("no current user.")
     try: how = request.arguments['how'][0]
     except KeyError: how = "background"
     if not how: how = "background"
     self.how = how
     if self.how == "undefined": self.how = "overwrite"
     logging.warn("web - how is %s" % self.how)
     #self.webchan = request.headers.get('webchan')
     #input = request.headers.get('content') or request.headers.get('cmnd')
     if not input:
         try: input = request.arguments['content'] or request.arguments['cmnd']
         except KeyError: pass
     self.isweb = True
     logging.warn("input is %s" % input)
     self.origtxt = fromenc(input[0].strip(), self.bot.encoding)
     self.txt = self.origtxt
     self.usercmnd = self.txt and self.txt.split()[0]
     self.groupchat = False
     self.nick = self.userhost.split("@")[0]
     self.auth = fromenc(self.userhost)
     self.stripped = stripped(self.auth)
     self.domain = None
     self.channel = stripped(self.userhost)
     logging.debug(u'tornado - parsed - %s - %s' % (self.txt, self.userhost)) 
     self.makeargs()
     return self
Exemple #6
0
 def parse(self, handler, request, path=None):
     """ parse request/response into a WebEvent. """
     self.handler = handler
     self.request = request
     self.userhost = tornado.escape.xhtml_escape(handler.current_user)
     if not self.userhost: raise Exception("no current user.")
     try: how = request.arguments['how'][0]
     except KeyError: how = "background"
     if not how: how = "background"
     self.how = how
     if self.how == "undefined": self.how = "overwrite"
     logging.warn("web - how is %s" % self.how)
     input = request.headers.get('content') or request.headers.get('cmnd')
     if not input:
         try: input = request.arguments['content'] or request.arguments['cmnd']
         except KeyError: pass
     self.isweb = True
     if not input: logging.warn("input is %s" % input) ; raise NoInput(input)
     self.txt = fromenc(input[0].strip(), self.bot.encoding)
     self.nick = self.userhost.split("@")[0]
     self.auth = fromenc(self.userhost)
     self.stripped = stripped(self.auth)
     self.channel = stripped(self.userhost)
     logging.debug(u'tornado - parsed - %s - %s' % (self.txt, self.userhost)) 
     self.prepare()
     return self
Exemple #7
0
 def parseAPI(self, handler, apitype, path):
     """ parse request/response into a WebEvent. """
     #logging.warn(dir(handler))
     #logging.warn(dir(handler.request))
     #logging.warn(request.arguments)
     #logging.warn(request.body)
     self.handler = handler
     self.request = handler.request
     self.query = self.request.query
     self.upath = path
     self.apitype = apitype
     self.userhost = tornado.escape.xhtml_escape(handler.current_user)
     if not self.userhost: raise Exception("no current user.")
     input = path
     self.isweb = True
     logging.warn("input is %s" % input)
     if not input: raise NoInput(input)
     self.txt = fromenc(input.strip(), self.bot.encoding)
     self.nick = self.userhost.split("@")[0]
     self.auth = fromenc(self.userhost)
     self.stripped = stripped(self.auth)
     self.channel = stripped(self.userhost)
     logging.debug(u'tornado - parsed - %s - %s' % (self.txt, self.userhost)) 
     self.prepare()
     return self
Exemple #8
0
 def doevent(self, event):
     """ dispatch an event. """
     time.sleep(0.01)
     if not self.cfg:
         raise Exception(
             "eventbase - cfg is not set .. can't handle event.")
         return
     if not event: raise NoEventProvided()
     self.ecounter += 1
     if event.userhost in self.state['ignore']:
         logging.warn("%s - ignoring %s" % (self.cfg.name, event.userhost))
         return
     try:
         if event.isremote():
             self.doremote(event)
             return
         if event.type == "groupchat" and event.fromm in self.ids:
             logging.debug("%s - receiving groupchat from self (%s)" %
                           (self.cfg.name, event.fromm))
             return
         event.txt = self.inputmorphs.do(fromenc(event.txt, self.encoding),
                                         event)
     except UnicodeDecodeError:
         logging.warn("%s - got decode error in input .. ingoring" %
                      self.cfg.name)
         return
     event.bind(self, noraise=True)
     try:
         logging.debug("%s - event dump: %s" %
                       (self.cfg.name, event.dump()))
     except:
         pass
     self.status = "callback"
     starttime = time.time()
     if self.closed:
         if self.gatekeeper.isblocked(event.origin):
             logging.warn("%s is blocked" % event.origin)
             return
     if event.status == "done":
         logging.warn("%s - event is done .. ignoring" % self.cfg.name)
         return
     if event.msg or event.isdcc: event.speed = 2
     if event.channelchanged:
         cmnds.dispatch(self, event)
         return
     e1 = cpy(event)
     first_callbacks.check(self, e1)
     if not e1.stop:
         callbacks.check(self, e1)
         if not e1.stop: last_callbacks.check(self, e1)
     event.callbackdone = True
     waiter.check(self, event)
     #mainsink.put(5, self, event)
     self.lastiter = time.time()
     self.benice()
     return event
Exemple #9
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
Exemple #10
0
 def parsesocket(self, handler, message):
     """ parse request/response into a WebEvent. """
     self.handler = handler
     try: data = LazyDict(json.loads(message))
     except Exception, ex: logging.error("failed to parse data: %s - %s" % (message, str(ex))) ; return self
     logging.info("incoming: %s" % message)
     self.div = data.target
     self.userhost = tornado.escape.xhtml_escape(handler.current_user)
     if not self.userhost: raise Exception("no current user.")
     self.isweb = True
     input = data.cmnd
     self.how = data.how or self.how
     logging.warn("cmnd is %s - how is %s" % (input, self.how))
     self.txt = fromenc(input.strip(), self.bot.encoding)
     self.nick = self.userhost.split("@")[0]
     self.auth = fromenc(self.userhost)
     self.stripped = stripped(self.auth)
     self.channel = stripped(self.userhost)
     logging.debug(u'tornado - parsed - %s - %s' % (self.txt, self.userhost)) 
     self.prepare()
     return self
Exemple #11
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
Exemple #12
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
Exemple #13
0
 def doevent(self, event):
     """ dispatch an event. """
     if not event: raise NoEventProvided()
     if event.isremote():
         self.doremote(event)
         return
     event.txt = self.inputmorphs.do(fromenc(event.txt, self.encoding))
     msg = "%s - %s - %s - %s" % (self.name, event.auth, event.how,
                                  event.cbtype)
     if event.cbtype in ['NOTICE']:
         logging.warn("%s - %s - %s" % (self.name, event.nick, event.txt))
     else:
         try:
             int(event.cbtype)
             logging.debug("======== start handling local event ========")
             logging.debug(msg)
         except (ValueError, TypeError):
             if event.cbtype in ['PING', 'PRESENCE'
                                 ] or event.how == "background":
                 logging.debug(
                     "======== start handling local event ========")
                 logging.debug(msg)
             else:
                 logging.info(
                     "======== start handling local event ========")
                 logging.info(msg)
     logging.debug(event.dump())
     event.prepare(self)
     self.status = "callback"
     starttime = time.time()
     if self.closed:
         if self.gatekeeper.isblocked(event.origin): return
     if event.status == "done":
         logging.debug("%s - event is done .. ignoring" % self.name)
         return
     self.reloadcheck(event)
     if event.msg or event.isdcc: event.speed = 2
     e1 = cpy(event)
     first_callbacks.check(self, e1)
     if not e1.stop:
         callbacks.check(self, e1)
         if not e1.stop: last_callbacks.check(self, e1)
     event.callbackdone = True
     if not self.isgae:
         import asyncore
         asyncore.loop()
     return event
Exemple #14
0
 def doevent(self, event):
     """ dispatch an event. """ 
     time.sleep(0.01)
     if not self.cfg: raise Exception("eventbase - cfg is not set .. can't handle event.") ; return
     if not event: raise NoEventProvided()
     try:
         if event.isremote(): self.doremote(event) ; return
         if event.type == "groupchat" and event.fromm in self.ids:
             logging.warn("%s - receiving groupchat from self (%s)" % (self.cfg.name, event.fromm))
             return
         event.txt = self.inputmorphs.do(fromenc(event.txt, self.encoding), event)
     except UnicodeDecodeError: logging.warn("%s - got decode error in input .. ingoring" % self.cfg.name) ; return
     logtxt = "%s - %s ======== start handling local event ======== %s" % (self.cfg.name, event.cbtype, event.userhost)
     if event.cbtype in ['NOTICE']: logging.warn("%s - %s - %s" % (self.cfg.name, event.nick, event.txt))
     else:
         try:
             int(event.cbtype)
             logging.debug(logtxt)
         except (ValueError, TypeError):
             if event.cbtype in ['PING', 'PRESENCE'] or event.how == "background": 
                 logging.debug(logtxt)
             else: logging.info(logtxt)
     event.bind(self)
     try: logging.debug("%s - event dump: %s" % (self.cfg.name, event.dump()))
     except: pass
     self.status = "callback"
     starttime = time.time()
     if self.closed:
         if self.gatekeeper.isblocked(event.origin): return
     if event.status == "done":
         logging.debug("%s - event is done .. ignoring" % self.cfg.name)
         return
     self.reloadcheck(event)
     if event.msg or event.isdcc: event.speed = 2
     e1 = event
     first_callbacks.check(self, e1)
     if not e1.stop: 
         callbacks.check(self, e1)
         if not e1.stop: last_callbacks.check(self, e1)
     event.callbackdone = True
     waiter.check(self, event)
     #self.benice(event)
     return event
Exemple #15
0
 def doevent(self, event):
     """ dispatch an event. """ 
     time.sleep(0.01)
     if not self.cfg: raise Exception("eventbase - cfg is not set .. can't handle event.") ; return
     if not event: raise NoEventProvided()
     self.ecounter += 1
     if event.userhost in self.state['ignore']: logging.warn("%s - ignoring %s" % (self.cfg.name, event.userhost)) ; return
     try:
         if event.isremote(): self.doremote(event) ; return
         if event.type == "groupchat" and event.fromm in self.ids:
             logging.debug("%s - receiving groupchat from self (%s)" % (self.cfg.name, event.fromm))
             return
         event.txt = self.inputmorphs.do(fromenc(event.txt, self.encoding), event)
     except UnicodeDecodeError: logging.warn("%s - got decode error in input .. ingoring" % self.cfg.name) ; return
     event.bind(self, noraise=True)
     try: logging.debug("%s - event dump: %s" % (self.cfg.name, event.dump()))
     except: pass
     self.status = "callback"
     starttime = time.time()
     if self.closed:
         if self.gatekeeper.isblocked(event.origin):
             logging.warn("%s is blocked" % event.origin) ; return
     if event.status == "done":
         logging.warn("%s - event is done .. ignoring" % self.cfg.name)
         return
     if event.msg or event.isdcc: event.speed = 2
     if event.channelchanged: cmnds.dispatch(self, event) ; return
     e1 = cpy(event)
     first_callbacks.check(self, e1)
     if not e1.stop: 
         callbacks.check(self, e1)
         if not e1.stop: last_callbacks.check(self, e1)
     event.callbackdone = True
     waiter.check(self, event)
     #mainsink.put(5, self, event)
     self.lastiter = time.time()
     self.benice()
     return event
Exemple #16
0
 def doevent(self, event):
     """ dispatch an event. """
     if not event: raise NoEventProvided()
     if event.isremote(): self.doremote(event) ; return
     event.txt = self.inputmorphs.do(fromenc(event.txt, self.encoding))
     msg = "%s - %s - %s - %s" % (self.name, event.auth, event.how, event.cbtype)
     if event.cbtype in ['NOTICE']: logging.warn("%s - %s - %s" % (self.name, event.nick, event.txt))
     else:
         try:
             int(event.cbtype)
             logging.debug("======== start handling local event ========")
             logging.debug(msg)
         except (ValueError, TypeError):
             if event.cbtype in ['PING', 'PRESENCE'] or event.how == "background": 
                 logging.debug("======== start handling local event ========")
                 logging.debug(msg)
             else: logging.info("======== start handling local event ========") ; logging.info(msg)
     logging.debug(event.dump())
     event.prepare(self)
     self.status = "callback"
     starttime = time.time()
     if self.closed:
         if self.gatekeeper.isblocked(event.origin): return
     if event.status == "done":
         logging.debug("%s - event is done .. ignoring" % self.name)
         return
     self.reloadcheck(event)
     if event.msg or event.isdcc: event.speed = 2
     e1 = cpy(event)
     first_callbacks.check(self, e1)
     if not e1.stop: 
         callbacks.check(self, e1)
         if not e1.stop: last_callbacks.check(self, e1)
     event.callbackdone = True
     if not self.isgae: import asyncore ; asyncore.loop()
     return event
Exemple #17
0
 if not input:
     try:
         input = request.params.getone(
             'content') or request.params.getone('cmnd')
     except KeyError:
         input = ""
     except Exception, ex:
         input = ""
         handle_exception()
     if not input:
         try:
             input = request.GET['content'] or request.GET['cmnd']
         except KeyError:
             pass
 self.isweb = True
 self.origtxt = fromenc(input.strip(), self.bot.encoding)
 self.txt = self.origtxt
 self.usercmnd = self.txt and self.txt.split()[0]
 self.groupchat = False
 self.response = response
 self.request = request
 (userhost, user, u, nick) = checkuser(response, request, self)
 self.userhost = fromenc(userhost)
 self.nick = fromenc(nick)
 self.auth = fromenc(userhost)
 self.stripped = stripped(self.auth)
 self.domain = None
 self.channel = stripped(userhost)
 logging.debug(u'web - parsed - %s - %s' % (self.txt, self.userhost))
 self.makeargs()
 return self
Exemple #18
0
 self.how = how
 if self.how == "undefined": self.how = "normal"
 logging.warn("web - how is %s" % self.how)
 self.webchan = request.get('webchan')
 input = request.get('content') or request.get('cmnd')
 if not input:
     try: input = request.params.getone('content') or request.params.getone('cmnd')
     except KeyError: input = ""
     except Exception, ex:
         input = ""
         handle_exception()
     if not input:
         try: input = request.GET['content'] or request.GET['cmnd']
         except KeyError: pass
 self.isweb = True
 self.origtxt = fromenc(input.strip(), self.bot.encoding)
 self.txt = self.origtxt
 self.usercmnd = self.txt and self.txt.split()[0]
 self.groupchat = False
 self.response = response
 self.request = request
 (userhost, user, u, nick) = checkuser(response, request, self)
 self.userhost = fromenc(userhost)
 self.nick = fromenc(nick)
 self.auth = fromenc(userhost)
 self.stripped = stripped(self.auth)
 self.domain = None
 self.channel = stripped(userhost)
 logging.debug(u'web - parsed - %s - %s' % (self.txt, self.userhost)) 
 self.makeargs()
 return self
Exemple #19
0
 def _readloop(self):
     """ loop on the socketfile. """
     self.stopreadloop = False
     self.stopped = False
     doreconnect = True
     timeout = 1
     logging.info('%s - starting readloop' % self.name)
     prevtxt = ""
     while not self.stopped and not self.stopreadloop and self.sock and self.fsock:
         try:
             time.sleep(0.01)
             if self.cfg.has_key('ssl') and self.cfg['ssl']:
                 intxt = inputmorphs.do(self.sock.read()).split('\n')
             else:
                 intxt = inputmorphs.do(self.fsock.readline()).split('\n')
             if self.stopreadloop or self.stopped:
                 doreconnect = 0
                 break
             if not intxt or not intxt[0]:
                 doreconnect = 1
                 break
             if prevtxt:
                 intxt[0] = prevtxt + intxt[0]
                 prevtxt = ""
             if intxt[-1] != '':
                 prevtxt = intxt[-1]
                 intxt = intxt[:-1]
             for r in intxt:
                 try:
                     r = strippedtxt(r.rstrip(), ["\001", "\002", "\003"])
                     rr = unicode(fromenc(r.rstrip(), self.encoding))
                 except UnicodeDecodeError:
                     logging.warn("%s - decode error - ignoring" %
                                  self.name)
                     continue
                 if not rr: continue
                 res = rr
                 logging.debug(u"%s - %s" % (self.name, res))
                 try:
                     ievent = IrcEvent().parse(self, res)
                 except Exception, ex:
                     handle_exception()
                     continue
                 if ievent:
                     self.handle_ievent(ievent)
                 timeout = 1
         except UnicodeError:
             handle_exception()
             continue
         except socket.timeout:
             if self.stopped or self.stopreadloop: break
             timeout += 1
             if timeout > 2:
                 doreconnect = 1
                 logging.warn('%s - no pong received' % self.name)
                 break
             logging.debug("%s - socket timeout" % self.name)
             pingsend = self.ping()
             if not pingsend:
                 doreconnect = 1
                 break
             continue
         except socket.sslerror, ex:
             if self.stopped or self.stopreadloop: break
             if not 'timed out' in str(ex):
                 handle_exception()
                 doreconnect = 1
                 break
             timeout += 1
             if timeout > 2:
                 doreconnect = 1
                 logging.warn('%s - no pong received' % self.name)
                 break
             logging.error("%s - socket timeout" % self.name)
             pingsend = self.ping()
             if not pingsend:
                 doreconnect = 1
                 break
             continue
         except IOError, ex:
             if self.blocking and 'temporarily' in str(ex):
                 time.sleep(0.5)
                 continue
             if not self.stopped:
                 logging.error('%s - connecting error: %s' %
                               (self.name, str(ex)))
                 handle_exception()
                 doreconnect = 1
             break
Exemple #20
0
 def _readloop(self):
     """ loop on the socketfile. """
     self.stopreadloop = False
     self.stopped = False
     doreconnect = True
     timeout = 1
     logging.debug('%s - starting readloop' % self.cfg.name)
     prevtxt = ""
     while not self.stopped and not self.stopreadloop and self.sock and self.fsock:
         try:
             time.sleep(0.01)
             if self.cfg.has_key('ssl') and self.cfg['ssl']: intxt = inputmorphs.do(self.sock.read()).split('\n')
             else: intxt = inputmorphs.do(self.fsock.readline()).split('\n')
             if self.stopreadloop or self.stopped:
                 doreconnect = 0
                 break
             if intxt == ["",]:
                 logging.error("remote disconnected")
                 doreconnect = 1
                 break
             if prevtxt:
                 intxt[0] = prevtxt + intxt[0]
                 prevtxt = ""
             if intxt[-1] != '':
                 prevtxt = intxt[-1]
                 intxt = intxt[:-1]
             for r in intxt:
                 if not r: continue
                 
                 try:
                     r = strippedtxt(r.rstrip(), ["\001", "\002", "\003"]) 
                     rr = unicode(fromenc(r.rstrip(), self.encoding))
                 except UnicodeDecodeError: 
                     if not r: logging.warn("decode error - ignoring (%s)" % self.cfg.name) ; continue
                     rr = r
                 if not rr: continue
                 res = rr
                 try:
                     ievent = IrcEvent().parse(self, res)
                 except Exception, ex:
                     handle_exception()
                     continue
                 try:
                     if int(ievent.cmnd) > 400: logging.error(u"< %s (%s)" % (res, self.cfg.name))
                     elif int(ievent.cmnd) >= 300: logging.info(u"< %s (%s)" % (res, self.cfg.name))
                 except ValueError:
                     if not res.startswith("PING") and not res.startswith("NOTICE"): logging.warn(u"< %s (%s)" % (res, self.cfg.name))
                     else: logging.info(u"< %s (%s)" % (res, self.cfg.name))
                 if ievent: self.handle_ievent(ievent)
                 timeout = 1
         except UnicodeError:
             handle_exception()
             continue
         except socket.timeout, ex:
             logging.warn("socket timeout (%s)" % self.cfg.name)
             self.error = str(ex)
             if self.stopped or self.stopreadloop: break
             timeout += 1
             if timeout > 2:
                 doreconnect = 1
                 logging.warn('no pong received (%s)' % self.cfg.name)
                 break
             pingsend = self.ping()
             if not pingsend:
                 doreconnect = 1
                 break
             continue
         except socket.sslerror, ex:
             self.error = str(ex)
             if self.stopped or self.stopreadloop: break
             if not 'timed out' in str(ex):
                 handle_exception()
                 doreconnect = 1
                 break
             timeout += 1
             if timeout > 2:
                 doreconnect = 1
                 logging.warn('no pong received (%s)' % self.cfg.name)
                 break
             logging.warn("socket timeout (%s)" % self.cfg.name)
             pingsend = self.ping()
             if not pingsend:
                 doreconnect = 1
                 break
             continue
Exemple #21
0
    def _readloop(self):
        """ loop on the socketfile. """
        self.stopreadloop = False
        self.stopped = False
        doreconnect = True
        timeout = 1
        logging.debug('%s - starting readloop' % self.cfg.name)
        prevtxt = ""
        while not self.stopped and not self.stopreadloop and self.sock and self.fsock:
            try:
                time.sleep(0.01)
                if self.cfg.has_key('ssl') and self.cfg['ssl']:
                    intxt = inputmorphs.do(self.sock.read()).split('\n')
                else:
                    intxt = inputmorphs.do(self.fsock.readline()).split('\n')
                if self.stopreadloop or self.stopped:
                    doreconnect = 0
                    break
                if intxt == [
                        "",
                ]:
                    logging.error("remote disconnected")
                    doreconnect = 1
                    break
                if prevtxt:
                    intxt[0] = prevtxt + intxt[0]
                    prevtxt = ""
                if intxt[-1] != '':
                    prevtxt = intxt[-1]
                    intxt = intxt[:-1]
                for r in intxt:
                    if not r: continue

                    try:
                        r = strippedtxt(r.rstrip(), ["\001", "\002", "\003"])
                        rr = unicode(fromenc(r.rstrip(), self.encoding))
                    except UnicodeDecodeError:
                        if not r:
                            logging.warn("decode error - ignoring (%s)" %
                                         self.cfg.name)
                            continue
                        rr = r
                    if not rr: continue
                    res = rr
                    try:
                        ievent = IrcEvent().parse(self, res)
                    except Exception, ex:
                        handle_exception()
                        continue
                    try:
                        if int(ievent.cmnd) > 400:
                            logging.error(u"< %s (%s)" % (res, self.cfg.name))
                        elif int(ievent.cmnd) >= 300:
                            logging.info(u"< %s (%s)" % (res, self.cfg.name))
                    except ValueError:
                        if not res.startswith("PING") and not res.startswith(
                                "NOTICE"):
                            logging.warn(u"< %s (%s)" % (res, self.cfg.name))
                        else:
                            logging.info(u"< %s (%s)" % (res, self.cfg.name))
                    if ievent: self.handle_ievent(ievent)
                    timeout = 1
            except UnicodeError:
                handle_exception()
                continue
            except socket.timeout, ex:
                logging.warn("socket timeout (%s)" % self.cfg.name)
                self.error = str(ex)
                if self.stopped or self.stopreadloop: break
                timeout += 1
                if timeout > 2:
                    doreconnect = 1
                    logging.warn('no pong received (%s)' % self.cfg.name)
                    break
                pingsend = self.ping()
                if not pingsend:
                    doreconnect = 1
                    break
                continue
            except socket.sslerror, ex:
                self.error = str(ex)
                if self.stopped or self.stopreadloop: break
                if not 'timed out' in str(ex):
                    handle_exception()
                    doreconnect = 1
                    break
                timeout += 1
                if timeout > 2:
                    doreconnect = 1
                    logging.warn('no pong received (%s)' % self.cfg.name)
                    break
                logging.warn("socket timeout (%s)" % self.cfg.name)
                pingsend = self.ping()
                if not pingsend:
                    doreconnect = 1
                    break
                continue
Exemple #22
0
    def _readloop(self):
        """ loop on the socketfile. """
        self.stopreadloop = False
        self.stopped = False
        doreconnect = True
        timeout = 1
        logging.warn('%s - starting readloop' % self.cfg.name)
        prevtxt = ""
        while not self.stopped and not self.stopreadloop and self.sock and self.fsock:
            try:
                time.sleep(0.01)
                if self.cfg.has_key('ssl') and self.cfg['ssl']: intxt = inputmorphs.do(self.sock.read()).split('\n')
                #else: intxt = inputmorphs.do(self.fsock.readline()).split('\n')
		else:
                    try: [i, o, e] = select.select([self.sock], [], [])
                    except socket.error: doreconnect = False ; break
                    if i: intxt = inputmorphs.do(self.sock.recv(600)).split('\n')
                    if self.stopreadloop or self.stopped:
                        doreconnect = 0
                        break
                    if not i: time.sleep(0.1) ; continue
                if not intxt:
                    doreconnect = 1
                    break
                if prevtxt:
                    intxt[0] = prevtxt + intxt[0]
                    prevtxt = ""
                if intxt[-1] != '':
                    prevtxt = intxt[-1]
                    intxt = intxt[:-1]
                for r in intxt:
                    if not r: continue
                    try:
                        r = strippedtxt(r.rstrip(), ["\001", "\002", "\003"]) 
                        rr = unicode(fromenc(r.rstrip(), self.encoding))
                    except UnicodeDecodeError:
                        logging.warn("%s - decode error - ignoring" % self.cfg.name)
                        continue
                    if not rr: continue
                    res = rr
                    logging.info(u"%s - %s" % (self.cfg.name, res))
                    try:
                        ievent = IrcEvent().parse(self, res)
                    except Exception, ex:
                        handle_exception()
                        continue
                    if ievent:
                        self.handle_ievent(ievent)
                    timeout = 1
            except UnicodeError:
                handle_exception()
                continue
            #except socket.SSLError, ex: logging.error("%s - ssl error: %s" % (self.cfg.name, str(ex))) ; break
            except socket.timeout, ex:
                logging.debug("%s - socket timeout" % self.cfg.name)
                self.error = str(ex)
                if self.stopped or self.stopreadloop: break
                timeout += 1
                if timeout > 2:
                    doreconnect = 1
                    logging.warn('%s - no pong received' % self.cfg.name)
                    break
                pingsend = self.ping()
                if not pingsend:
                    doreconnect = 1
                    break
                continue
            except socket.sslerror, ex:
                self.error = str(ex)
                if self.stopped or self.stopreadloop: break
                if not 'timed out' in str(ex):
                    handle_exception()
                    doreconnect = 1
                    break
                timeout += 1
                if timeout > 2:
                    doreconnect = 1
                    logging.warn('%s - no pong received' % self.cfg.name)
                    break
                logging.error("%s - socket timeout" % self.cfg.name)
                pingsend = self.ping()
                if not pingsend:
                    doreconnect = 1
                    break
                continue