コード例 #1
0
    def start(self):
        """
        Start TLS negotiation.

        This checks if the receiving entity requires TLS, the SSL library is
        available and uses the C{required} and C{wanted} instance variables to
        determine what to do in the various different cases.

        For example, if the SSL library is not available, and wanted and
        required by the user, it raises an exception. However if it is not
        required by both parties, initialization silently succeeds, moving
        on to the next step.
        """
        if self.wanted:
            if ssl is None:
                if self.required:
                    return defer.fail(TLSNotSupported())
                else:
                    return defer.succeed(None)
            else:
                pass
        elif self.xmlstream.features[self.feature].required:
            return defer.fail(TLSRequired())
        else:
            return defer.succeed(None)

        self._deferred = defer.Deferred()
        self.xmlstream.addOnetimeObserver("/proceed", self.onProceed)
        self.xmlstream.addOnetimeObserver("/failure", self.onFailure)
        self.xmlstream.send(domish.Element((NS_XMPP_TLS, "starttls")))
        return self._deferred
コード例 #2
0
 def resolve(self, name, timeout=(1, 3, 11, 45)):
     """Return a Deferred that will resolve a hostname.
     """
     if not name:
         # XXX - This is *less than* '::', and will screw up IPv6 servers
         return defer.succeed('0.0.0.0')
     if abstract.isIPAddress(name):
         return defer.succeed(name)
     return self.resolver.getHostByName(name, timeout)
コード例 #3
0
ファイル: base.py プロジェクト: Hetal728/SMP-ClassiCube
 def resolve(self, name, timeout = (1, 3, 11, 45)):
     """Return a Deferred that will resolve a hostname.
     """
     if not name:
         # XXX - This is *less than* '::', and will screw up IPv6 servers
         return defer.succeed('0.0.0.0')
     if abstract.isIPAddress(name):
         return defer.succeed(name)
     return self.resolver.getHostByName(name, timeout)
コード例 #4
0
 def sendGroupMessage(self, text, meta={}):
     if self.account.client is None:
         raise locals.OfflineError
     if meta and meta.get("style", None) == "emote":
         self.account.client.me(self.name, text)
         return succeed(text)
     # standard shmandard, clients don't support plain escaped newlines!
     for line in string.split(text, "\n"):
         self.account.client.say(self.name, line)
     return succeed(text)
コード例 #5
0
ファイル: ircsupport.py プロジェクト: Hetal728/SMP-ClassiCube
 def sendGroupMessage(self, text, meta={}):
     if self.account.client is None:
         raise locals.OfflineError
     if meta and meta.get("style", None) == "emote":
         self.account.client.me(self.name, text)
         return succeed(text)
     #standard shmandard, clients don't support plain escaped newlines!
     for line in string.split(text, '\n'):
         self.account.client.say(self.name, line)
     return succeed(text)
コード例 #6
0
ファイル: tocsupport.py プロジェクト: Hetal728/SMP-ClassiCube
 def sendGroupMessage(self, text, meta=None):
     if self.account.client is None:
         raise locals.OfflineError
     if meta:
         if meta.get("style", None) == "emote":
             text="* "+text+"* "
     self.account.client.chat_say(self.roomID,html(text))
     return succeed(text)
コード例 #7
0
ファイル: sip.py プロジェクト: Hetal728/SMP-ClassiCube
 def getRegistrationInfo(self, userURI):
     if userURI.host != self.domain:
         return defer.fail(LookupError("unknown domain"))
     if self.users.has_key(userURI.username):
         dc, url = self.users[userURI.username]
         return defer.succeed(Registration(int(dc.getTime() - time.time()), url))
     else:
         return defer.fail(LookupError("no such user"))
コード例 #8
0
ファイル: sip.py プロジェクト: Hetal728/SMP-ClassiCube
 def getAddress(self, userURI):
     if userURI.host != self.domain:
         return defer.fail(LookupError("unknown domain"))
     if self.users.has_key(userURI.username):
         dc, url = self.users[userURI.username]
         return defer.succeed(url)
     else:
         return defer.fail(LookupError("no such user"))
コード例 #9
0
ファイル: sip.py プロジェクト: Hetal728/SMP-ClassiCube
 def getAddress(self, userURI):
     if userURI.host != self.domain:
         return defer.fail(LookupError("unknown domain"))
     if self.users.has_key(userURI.username):
         dc, url = self.users[userURI.username]
         return defer.succeed(url)
     else:
         return defer.fail(LookupError("no such user"))
コード例 #10
0
ファイル: sip.py プロジェクト: Hetal728/SMP-ClassiCube
 def getRegistrationInfo(self, userURI):
     if userURI.host != self.domain:
         return defer.fail(LookupError("unknown domain"))
     if self.users.has_key(userURI.username):
         dc, url = self.users[userURI.username]
         return defer.succeed(
             Registration(int(dc.getTime() - time.time()), url))
     else:
         return defer.fail(LookupError("no such user"))
コード例 #11
0
ファイル: service.py プロジェクト: Hetal728/SMP-ClassiCube
 def setMetadata(self, meta):
     self.meta = meta
     sets = []
     for p in self.users.itervalues():
         d = defer.maybeDeferred(p.groupMetaUpdate, self, meta)
         d.addErrback(self._ebUserCall, p=p)
         sets.append(d)
     defer.DeferredList(sets).addCallback(self._cbUserCall)
     return defer.succeed(None)
コード例 #12
0
 def getHostByName(self, name, timeout=(1, 3, 11, 45)):
     try:
         address = socket.gethostbyname(name)
     except socket.error:
         msg = "address %r not found" % (name, )
         err = error.DNSLookupError(msg)
         return defer.fail(err)
     else:
         return defer.succeed(address)
コード例 #13
0
ファイル: sip.py プロジェクト: Hetal728/SMP-ClassiCube
 def _expireRegistration(self, username):
     try:
         dc, url = self.users[username]
     except KeyError:
         return defer.fail(LookupError("no such user"))
     else:
         dc.cancel()
         del self.users[username]
     return defer.succeed(Registration(0, url))
コード例 #14
0
ファイル: service.py プロジェクト: Hetal728/SMP-ClassiCube
 def lookupGroup(self, name):
     assert isinstance(name, unicode)
     name = name.lower()
     try:
         group = self.groups[name]
     except KeyError:
         return defer.fail(failure.Failure(ewords.NoSuchGroup(name)))
     else:
         return defer.succeed(group)
コード例 #15
0
ファイル: service.py プロジェクト: Hetal728/SMP-ClassiCube
 def lookupUser(self, name):
     assert isinstance(name, unicode)
     name = name.lower()
     try:
         user = self.users[name]
     except KeyError:
         return defer.fail(failure.Failure(ewords.NoSuchUser(name)))
     else:
         return defer.succeed(user)
コード例 #16
0
 def sendMessage(self, text, meta=None):
     if self.account.client is None:
         raise locals.OfflineError
     for line in string.split(text, "\n"):
         if meta and meta.get("style", None) == "emote":
             self.account.client.ctcpMakeQuery(self.name, [("ACTION", line)])
         else:
             self.account.client.msg(self.name, line)
     return succeed(text)
コード例 #17
0
ファイル: base.py プロジェクト: Hetal728/SMP-ClassiCube
 def getHostByName(self, name, timeout = (1, 3, 11, 45)):
     try:
         address = socket.gethostbyname(name)
     except socket.error:
         msg = "address %r not found" % (name,)
         err = error.DNSLookupError(msg)
         return defer.fail(err)
     else:
         return defer.succeed(address)
コード例 #18
0
ファイル: sip.py プロジェクト: Hetal728/SMP-ClassiCube
 def _expireRegistration(self, username):
     try:
         dc, url = self.users[username]
     except KeyError:
         return defer.fail(LookupError("no such user"))
     else:
         dc.cancel()
         del self.users[username]
     return defer.succeed(Registration(0, url))
コード例 #19
0
ファイル: service.py プロジェクト: Hetal728/SMP-ClassiCube
 def receive(self, sender, recipient, message):
     assert recipient is self
     receives = []
     for p in self.users.itervalues():
         if p is not sender:
             d = defer.maybeDeferred(p.receive, sender, self, message)
             d.addErrback(self._ebUserCall, p=p)
             receives.append(d)
     defer.DeferredList(receives).addCallback(self._cbUserCall)
     return defer.succeed(None)
コード例 #20
0
ファイル: ircsupport.py プロジェクト: Hetal728/SMP-ClassiCube
 def sendMessage(self, text, meta=None):
     if self.account.client is None:
         raise locals.OfflineError
     for line in string.split(text, '\n'):
         if meta and meta.get("style", None) == "emote":
             self.account.client.ctcpMakeQuery(self.name,
                                               [('ACTION', line)])
         else:
             self.account.client.msg(self.name, line)
     return succeed(text)
コード例 #21
0
ファイル: service.py プロジェクト: Hetal728/SMP-ClassiCube
 def add(self, user):
     assert iwords.IChatClient.providedBy(user), "%r is not a chat client" % (user,)
     if user.name not in self.users:
         additions = []
         self.users[user.name] = user
         for p in self.users.itervalues():
             if p is not user:
                 d = defer.maybeDeferred(p.userJoined, self, user)
                 d.addErrback(self._ebUserCall, p=p)
                 additions.append(d)
         defer.DeferredList(additions).addCallback(self._cbUserCall)
     return defer.succeed(None)
コード例 #22
0
ファイル: sip.py プロジェクト: Hetal728/SMP-ClassiCube
 def registerAddress(self, domainURL, logicalURL, physicalURL):
     if domainURL.host != self.domain:
         log.msg("Registration for domain we don't handle.")
         return defer.fail(RegistrationError(404))
     if logicalURL.host != self.domain:
         log.msg("Registration for domain we don't handle.")
         return defer.fail(RegistrationError(404))
     if self.users.has_key(logicalURL.username):
         dc, old = self.users[logicalURL.username]
         dc.reset(3600)
     else:
         dc = reactor.callLater(3600, self._expireRegistration, logicalURL.username)
     log.msg("Registered %s at %s" % (logicalURL.toString(), physicalURL.toString()))
     self.users[logicalURL.username] = (dc, physicalURL)
     return defer.succeed(Registration(int(dc.getTime() - time.time()), physicalURL))
コード例 #23
0
ファイル: service.py プロジェクト: Hetal728/SMP-ClassiCube
 def remove(self, user, reason=None):
     assert reason is None or isinstance(reason, unicode)
     try:
         del self.users[user.name]
     except KeyError:
         pass
     else:
         removals = []
         for p in self.users.itervalues():
             if p is not user:
                 d = defer.maybeDeferred(p.userLeft, self, user, reason)
                 d.addErrback(self._ebUserCall, p=p)
                 removals.append(d)
         defer.DeferredList(removals).addCallback(self._cbUserCall)
     return defer.succeed(None)
コード例 #24
0
    def testList(self):
        user = wFD(self._loggedInUser(u"someuser"))
        yield user
        user = user.getResult()
        user.transport.clear()

        somegroup = wFD(self.realm.createGroup(u"somegroup"))
        yield somegroup
        somegroup = somegroup.getResult()
        somegroup.size = lambda: succeed(17)
        somegroup.meta['topic'] = 'this is the topic woo'

        # Test one group
        user.write('LIST #somegroup\r\n')

        r = self._response(user)
        self.assertEquals(len(r), 2)
        resp, end = r

        self.assertEquals(resp[0], 'realmname')
        self.assertEquals(resp[1], '322')
        self.assertEquals(resp[2][0], 'someuser')
        self.assertEquals(resp[2][1], 'somegroup')
        self.assertEquals(resp[2][2], '17')
        self.assertEquals(resp[2][3], 'this is the topic woo')

        self.assertEquals(end[0], 'realmname')
        self.assertEquals(end[1], '323')
        self.assertEquals(end[2][0], 'someuser')
        self.assertEquals(end[2][1], 'End of /LIST')

        user.transport.clear()
        # Test all groups

        user.write('LIST\r\n')
        r = self._response(user)
        self.assertEquals(len(r), 2)

        fg1, end = r

        self.assertEquals(fg1[1], '322')
        self.assertEquals(fg1[2][1], 'somegroup')
        self.assertEquals(fg1[2][2], '17')
        self.assertEquals(fg1[2][3], 'this is the topic woo')

        self.assertEquals(end[1], '323')
コード例 #25
0
    def initializeStream(self):
        """
        Perform stream initialization procedures.

        An L{XmlStream} holds a list of initializer objects in its
        C{initializers} attribute. This method calls these initializers in
        order and dispatches the C{STREAM_AUTHD_EVENT} event when the list has
        been successfully processed. Otherwise it dispatches the
        C{INIT_FAILED_EVENT} event with the failure.

        Initializers may return the special L{Reset} object to halt the
        initialization processing. It signals that the current initializer was
        successfully processed, but that the XML Stream has been reset. An
        example is the TLSInitiatingInitializer.
        """

        def remove_first(result):
            self.xmlstream.initializers.pop(0)

            return result

        def do_next(result):
            """
            Take the first initializer and process it.

            On success, the initializer is removed from the list and
            then next initializer will be tried.
            """

            if result is Reset:
                return None

            try:
                init = self.xmlstream.initializers[0]
            except IndexError:
                self.xmlstream.dispatch(self.xmlstream, STREAM_AUTHD_EVENT)
                return None
            else:
                d = defer.maybeDeferred(init.initialize)
                d.addCallback(remove_first)
                d.addCallback(do_next)
                return d

        d = defer.succeed(None)
        d.addCallback(do_next)
        d.addErrback(self.xmlstream.dispatch, INIT_FAILED_EVENT)
コード例 #26
0
    def testList(self):
        user = wFD(self._loggedInUser(u"someuser"))
        yield user
        user = user.getResult()
        user.transport.clear()

        somegroup = wFD(self.realm.createGroup(u"somegroup"))
        yield somegroup
        somegroup = somegroup.getResult()
        somegroup.size = lambda: succeed(17)
        somegroup.meta['topic'] = 'this is the topic woo'

        # Test one group
        user.write('LIST #somegroup\r\n')

        r = self._response(user)
        self.assertEquals(len(r), 2)
        resp, end = r

        self.assertEquals(resp[0], 'realmname')
        self.assertEquals(resp[1], '322')
        self.assertEquals(resp[2][0], 'someuser')
        self.assertEquals(resp[2][1], 'somegroup')
        self.assertEquals(resp[2][2], '17')
        self.assertEquals(resp[2][3], 'this is the topic woo')

        self.assertEquals(end[0], 'realmname')
        self.assertEquals(end[1], '323')
        self.assertEquals(end[2][0], 'someuser')
        self.assertEquals(end[2][1], 'End of /LIST')

        user.transport.clear()
        # Test all groups

        user.write('LIST\r\n')
        r = self._response(user)
        self.assertEquals(len(r), 2)

        fg1, end = r

        self.assertEquals(fg1[1], '322')
        self.assertEquals(fg1[2][1], 'somegroup')
        self.assertEquals(fg1[2][2], '17')
        self.assertEquals(fg1[2][3], 'this is the topic woo')

        self.assertEquals(end[1], '323')
コード例 #27
0
ファイル: sip.py プロジェクト: Hetal728/SMP-ClassiCube
 def registerAddress(self, domainURL, logicalURL, physicalURL):
     if domainURL.host != self.domain:
         log.msg("Registration for domain we don't handle.")
         return defer.fail(RegistrationError(404))
     if logicalURL.host != self.domain:
         log.msg("Registration for domain we don't handle.")
         return defer.fail(RegistrationError(404))
     if self.users.has_key(logicalURL.username):
         dc, old = self.users[logicalURL.username]
         dc.reset(3600)
     else:
         dc = reactor.callLater(3600, self._expireRegistration,
                                logicalURL.username)
     log.msg("Registered %s at %s" %
             (logicalURL.toString(), physicalURL.toString()))
     self.users[logicalURL.username] = (dc, physicalURL)
     return defer.succeed(
         Registration(int(dc.getTime() - time.time()), physicalURL))
コード例 #28
0
 def sync(self):
     """Commit changes to database."""
     if self.syncing:
         raise ValueError, "sync already in progress"
     comandMap = {
         INSERT: self.reflector.insertRowSQL,
         UPDATE: self.reflector.updateRowSQL,
         DELETE: self.reflector.deleteRowSQL,
     }
     sqlCommands = []
     for kind, obj in self.commands:
         sqlCommands.append(comandMap[kind](obj))
     self.commands = []
     if sqlCommands:
         self.syncing = 1
         d = self.reflector.dbpool.runInteraction(self._sync, self.latestIndex, sqlCommands)
         d.addCallback(self._syncDone)
         return d
     else:
         return defer.succeed(1)
コード例 #29
0
ファイル: rowjournal.py プロジェクト: Hetal728/SMP-ClassiCube
 def sync(self):
     """Commit changes to database."""
     if self.syncing:
         raise ValueError, "sync already in progress"
     comandMap = {
         INSERT: self.reflector.insertRowSQL,
         UPDATE: self.reflector.updateRowSQL,
         DELETE: self.reflector.deleteRowSQL
     }
     sqlCommands = []
     for kind, obj in self.commands:
         sqlCommands.append(comandMap[kind](obj))
     self.commands = []
     if sqlCommands:
         self.syncing = 1
         d = self.reflector.dbpool.runInteraction(self._sync,
                                                  self.latestIndex,
                                                  sqlCommands)
         d.addCallback(self._syncDone)
         return d
     else:
         return defer.succeed(1)
コード例 #30
0
ファイル: loopback.py プロジェクト: Hetal728/SMP-ClassiCube
def _loopbackAsyncBody(server, serverToClient, client, clientToServer,
                       pumpPolicy):
    """
    Transfer bytes from the output queue of each protocol to the input of the other.

    @param server: The protocol instance representing the server-side of this
    connection.

    @param serverToClient: The L{_LoopbackQueue} holding the server's output.

    @param client: The protocol instance representing the client-side of this
    connection.

    @param clientToServer: The L{_LoopbackQueue} holding the client's output.

    @param pumpPolicy: See L{loopbackAsync}.

    @return: A L{Deferred} which fires when the connection has been closed and
        both sides have received notification of this.
    """
    def pump(source, q, target):
        sent = False
        if q:
            pumpPolicy(q, target)
            sent = True
        if sent and not q:
            # A write buffer has now been emptied.  Give any producer on that
            # side an opportunity to produce more data.
            source.transport._pollProducer()

        return sent

    while 1:
        disconnect = clientSent = serverSent = False

        # Deliver the data which has been written.
        serverSent = pump(server, serverToClient, client)
        clientSent = pump(client, clientToServer, server)

        if not clientSent and not serverSent:
            # Neither side wrote any data.  Wait for some new data to be added
            # before trying to do anything further.
            d = defer.Deferred()
            clientToServer._notificationDeferred = d
            serverToClient._notificationDeferred = d
            d.addCallback(
                _loopbackAsyncContinue,
                server, serverToClient, client, clientToServer, pumpPolicy)
            return d
        if serverToClient.disconnect:
            # The server wants to drop the connection.  Flush any remaining
            # data it has.
            disconnect = True
            pump(server, serverToClient, client)
        elif clientToServer.disconnect:
            # The client wants to drop the connection.  Flush any remaining
            # data it has.
            disconnect = True
            pump(client, clientToServer, server)
        if disconnect:
            # Someone wanted to disconnect, so okay, the connection is gone.
            server.connectionLost(failure.Failure(main.CONNECTION_DONE))
            client.connectionLost(failure.Failure(main.CONNECTION_DONE))
            return defer.succeed(None)
コード例 #31
0
 def spawnChild():
     d = succeed(None)
     d.addCallback(lambda dummy: utils.getProcessOutput(
         sys.executable, ['-c', source] + args, reactor=reactor))
     d.addCallback(processFinished)
     d.addBoth(shutdown)
コード例 #32
0
 def get(self, key):
     return defer.succeed(self.data.get(key))
コード例 #33
0
ファイル: postfix.py プロジェクト: Hetal728/SMP-ClassiCube
 def get(self, key):
     return defer.succeed(self.data.get(key))
コード例 #34
0
 def listenClass(self, port, klass, *args):
     serv = reactor.listenTCP(port, klass(*args))
     return defer.succeed(serv.getHost()[1:])
コード例 #35
0
ファイル: service.py プロジェクト: Hetal728/SMP-ClassiCube
 def itergroups(self):
     return defer.succeed(self.groups.itervalues())
コード例 #36
0
ファイル: service.py プロジェクト: Hetal728/SMP-ClassiCube
 def addUser(self, user):
     if user.name in self.users:
         return defer.fail(failure.Failure(ewords.DuplicateUser()))
     self.users[user.name] = user
     return defer.succeed(user)
コード例 #37
0
ファイル: service.py プロジェクト: Hetal728/SMP-ClassiCube
 def addGroup(self, group):
     if group.name in self.groups:
         return defer.fail(failure.Failure(ewords.DuplicateGroup()))
     self.groups[group.name] = group
     return defer.succeed(group)
コード例 #38
0
ファイル: service.py プロジェクト: Hetal728/SMP-ClassiCube
 def size(self):
     return defer.succeed(len(self.users))
コード例 #39
0
ファイル: test_tcp.py プロジェクト: Hetal728/SMP-ClassiCube
 def getHostByName(self, name, timeout):
     try:
         return succeed(self.names[name])
     except KeyError:
         return fail(DNSLookupError("FakeResolver couldn't find " + name))
コード例 #40
0
 def start(self):
     return defer.succeed(None)
コード例 #41
0
def _loopbackAsyncBody(server, serverToClient, client, clientToServer,
                       pumpPolicy):
    """
    Transfer bytes from the output queue of each protocol to the input of the other.

    @param server: The protocol instance representing the server-side of this
    connection.

    @param serverToClient: The L{_LoopbackQueue} holding the server's output.

    @param client: The protocol instance representing the client-side of this
    connection.

    @param clientToServer: The L{_LoopbackQueue} holding the client's output.

    @param pumpPolicy: See L{loopbackAsync}.

    @return: A L{Deferred} which fires when the connection has been closed and
        both sides have received notification of this.
    """
    def pump(source, q, target):
        sent = False
        if q:
            pumpPolicy(q, target)
            sent = True
        if sent and not q:
            # A write buffer has now been emptied.  Give any producer on that
            # side an opportunity to produce more data.
            source.transport._pollProducer()

        return sent

    while 1:
        disconnect = clientSent = serverSent = False

        # Deliver the data which has been written.
        serverSent = pump(server, serverToClient, client)
        clientSent = pump(client, clientToServer, server)

        if not clientSent and not serverSent:
            # Neither side wrote any data.  Wait for some new data to be added
            # before trying to do anything further.
            d = defer.Deferred()
            clientToServer._notificationDeferred = d
            serverToClient._notificationDeferred = d
            d.addCallback(_loopbackAsyncContinue, server, serverToClient,
                          client, clientToServer, pumpPolicy)
            return d
        if serverToClient.disconnect:
            # The server wants to drop the connection.  Flush any remaining
            # data it has.
            disconnect = True
            pump(server, serverToClient, client)
        elif clientToServer.disconnect:
            # The client wants to drop the connection.  Flush any remaining
            # data it has.
            disconnect = True
            pump(client, clientToServer, server)
        if disconnect:
            # Someone wanted to disconnect, so okay, the connection is gone.
            server.connectionLost(failure.Failure(main.CONNECTION_DONE))
            client.connectionLost(failure.Failure(main.CONNECTION_DONE))
            return defer.succeed(None)
コード例 #42
0
ファイル: socks.py プロジェクト: Hetal728/SMP-ClassiCube
 def listenClass(self, port, klass, *args):
     serv = reactor.listenTCP(port, klass(*args))
     return defer.succeed(serv.getHost()[1:])
コード例 #43
0
ファイル: picklelog.py プロジェクト: Hetal728/SMP-ClassiCube
 def logCommand(self, command, time):
     """Log a command."""
     self.currentIndex += 1
     self.db[str(self.currentIndex)] = (time, command)
     return defer.succeed(1)
コード例 #44
0
 def spawnChild():
     d = succeed(None)
     d.addCallback(lambda dummy: utils.getProcessOutput(
         sys.executable, ['-c', source] + args, reactor=reactor))
     d.addCallback(processFinished)
     d.addBoth(shutdown)