예제 #1
0
 def process_line_data(self, data, raw_line):
     if "ack" in data:
         if data["ack"] == 1:
             self.process_ack(data["uid_conversation"])
         else:
             log.info("Un-ack received: {message!r}",
                      message=raw_line.rstrip())
     if "to" in data:
         uid_to = data["to"]
         clients = self.factory.clients.get(uid_to)
         if clients:
             uid_conversation = str(uuid.uuid4())
             self.factory.waiting_acks[uid_conversation] = {
                 "clients": clients,
                 "channel": self
             }
             data = self.serializer.dumps({
                 'uid_to':
                 uid_to,
                 'uid_conversation':
                 uid_conversation
             })
             for client in clients:
                 try:
                     client.sendLine(data)
                 except Exception, e:
                     log.failure("{message!r}", message=e.message)
                     client.transport.loseConnection()
             callback = reactor.callLater(1.7, PubProtocol.no_ack_timeout,
                                          self.factory, self,
                                          uid_conversation, uid_to)
             self.factory.conversation_callbacks[
                 uid_conversation] = callback
         else:
             self.send_uid_no_registered()
예제 #2
0
    def lineReceived(self, line):
        log.debug("{line!r}", line=line)
        try:
            data = self.serializer.loads(line.rstrip())
            self.process_line_data(data, line)

        except Exception, e:
            log.failure("{message!r}", message=e.message)
            log.error("{line!r}", line=line)
예제 #3
0
 def lineReceived(self, line):
     try:
         data = self.serializer.loads(line.rstrip())
         for each in self._unsupported_messages():
             if each in data:
                 log.error("Unsupported message {message!r}",
                           message=line.rstrip())
                 self.transport.abortConnection()
         self.process_line_data(data, line)
     except Exception, e:
         log.failure(e.message)
         self.transport.abortConnection()
예제 #4
0
 def no_ack_timeout(cls, factory, channel, uid_conversation, uid_to):
     if uid_conversation in factory.waiting_acks:
         log.warn('No ack for %s to %s' % (uid_conversation, uid_to))
         data = {'ack': 0, 'error': 'time out, unable to contact'}
         channel.sendLine(factory.serializer.dumps(data))
         clients = factory.waiting_acks[uid_conversation]["clients"]
         for client in clients:
             log.warn('UIDS for this client: %s' % client.uids)
             if len(client.uids) == 1:
                 try:
                     log.warn(
                         'Aborting connection because the only uid it had is not responding %s'
                         % (uid_conversation, ))
                     client.transport.abortConnection()
                 except Exception, e:
                     log.failure("{message!r}", message=e.message)
             client.uids.remove(uid_to)
         del factory.clients[uid_to]
예제 #5
0
 def new_message(self, data):
     if "uid_to" in data:
         uid_to = data["uid_to"]
         clients = self.clients.get(uid_to)
         uid_conversation = data['uid_conversation']
         if clients:
             self.waiting_acks[uid_conversation] = {
                 "clients": clients,
                 "channel": self.subscriber
             }
             data = self.serializer.dumps({
                 'uid_to':
                 uid_to,
                 'uid_conversation':
                 uid_conversation
             })
             for client in clients:
                 try:
                     log.debug(
                         'Going to send message for uid %s in conversation %s'
                         % (
                             uid_to,
                             uid_conversation,
                         ))
                     client.sendLine(data)
                 except Exception, e:
                     log.failure("ERROR in new_message: {message!r}",
                                 message=e.message)
                     client.transport.loseConnection()
             callback = reactor.callLater(1.7,
                                          BrokerPubProtocol.no_ack_timeout,
                                          self, self.subscriber,
                                          uid_conversation, uid_to)
             self.conversation_callbacks[uid_conversation] = callback
         else:
             self.send_uid_no_registered()
예제 #6
0
파일: mail.py 프로젝트: Moscarda/leap_mail
 def insert_doc(_, mbox_uuid, doc_id):
     d = self.mbox_indexer.get_uid_from_doc_id(mbox_uuid, doc_id)
     d.addCallback(insert_conditionally, mbox_uuid, doc_id)
     d.addErrback(lambda err: log.failure(err))
     d.addCallback(log_result)
     return d
예제 #7
0
 def insert_doc(_, mbox_uuid, doc_id):
     d = self.mbox_indexer.get_uid_from_doc_id(mbox_uuid, doc_id)
     d.addCallback(insert_conditionally, mbox_uuid, doc_id)
     d.addErrback(lambda err: log.failure(err))
     d.addCallback(log_result)
     return d