Exemplo n.º 1
0
    def ftp_RETR(self, path):
        if self.dtpInstance is None:
            raise BadCmdSequenceError('PORT or PASV required before RETR')
        try:
            newsegs = toSegments(self.workingDirectory, path)
        except InvalidPath:
            return defer.fail(FileNotFoundError(path))
        # XXX For now, just disable the timeout.  Later we'll want to
        # leave it active and have the DTP connection reset it
        # periodically.
        self.setTimeout(None)
        # Put it back later
        # And away she goes
        if not self.binary:
            consumer = ASCIIConsumerWrapper(self.dtpInstance)
        else:
            consumer = self.dtpInstance
        pth = '/'.join(newsegs)
        restore_dir = tmpfile.make_dir('restore', prefix=('_'.join(newsegs) + '_'))
        ret = api.file_download_start(pth, restore_dir, wait_result=True)
        d = Deferred()
        d.addCallback(self._cbReadOpened, consumer)
        d.addErrback(self._ebReadOpened, newsegs)
        d.addBoth(self._enableTimeoutLater)
        if isinstance(ret, dict):
#             if ret['status'] != 'OK':
#                 return defer.fail(FileNotFoundError(path))
            self._cbRestoreDone(ret, newsegs, d)
            return d
        ret.addCallback(self._cbRestoreDone, newsegs, d)
        ret.addErrback(lambda err: lg.exc(err))
        return d
Exemplo n.º 2
0
 def _startConsumer(self, consumer):
     if not self.binary:
         consumer = ASCIIConsumerWrapper(consumer)
     d = self.dtpInstance.registerConsumer(consumer)
     if self.dtpInstance.isConnected:
         self.reply(DATA_CNX_ALREADY_OPEN_START_XFR)
     else:
         self.reply(FILE_STATUS_OK_OPEN_DATA_CNX)
     return d
Exemplo n.º 3
0
        def cbConsumer(cons):
            if not self.binary:
                cons = ASCIIConsumerWrapper(cons)
                print "cons", cons

            d = self.dtpInstance.registerConsumer(cons)
            print "dtpinstance", d

            if self.dtpInstance.isConnected:
                print "reply : DATA_CNX_ALREADY_OPEN_START_XFR", DATA_CNX_ALREADY_OPEN_START_XFR
                self.reply(DATA_CNX_ALREADY_OPEN_START_XFR)
            else:
                print "DATA_CNX_ALREADY_OPEN_START_XFR", DATA_CNX_ALREADY_OPEN_START_XFR
                self.reply(FILE_STATUS_OK_OPEN_DATA_CNX)

            return d