diff --git a/agent/testing/test_sftp.py b/agent/testing/test_sftp.py index 9a1f552..13e4d6b 100644 --- a/agent/testing/test_sftp.py +++ b/agent/testing/test_sftp.py @@ -7,12 +7,12 @@ from cybertools.agent.transport.file.sftp import FileTransfer def output(x): print x -ft = FileTransfer('cy05.de', 22, 'scrat', '...') +ft = FileTransfer('cy05.de', 22, 'scrat', 'pyjmfha') -d = ft.upload('d:\\text.txt', 'text.txt') +d = ft.upload('d:\\text2.rtf', 'text.txt') d.addCallback(output) -reactor.callLater(3, ft.close) -reactor.callLater(4, reactor.stop) +reactor.callLater(21, ft.close) +reactor.callLater(32, reactor.stop) reactor.run() diff --git a/agent/testing/transporter.cfg b/agent/testing/transporter.cfg index ad968bb..7a0989a 100644 --- a/agent/testing/transporter.cfg +++ b/agent/testing/transporter.cfg @@ -13,3 +13,4 @@ transport.remote.url = 'http://localhost:8123' transport.remote.ftp.url = 'http://cy05.de' transport.remote.ftp.user = 'scrat' transport.remote.sftp = 'testing' +transport.remote.chunksize = 4096 diff --git a/agent/transport/file/sftp.py b/agent/transport/file/sftp.py index dc5f8e4..a1e8000 100644 --- a/agent/transport/file/sftp.py +++ b/agent/transport/file/sftp.py @@ -26,12 +26,11 @@ from twisted.conch.ssh import channel, common, connection from twisted.conch.ssh import filetransfer, transport, userauth from twisted.internet import defer, protocol, reactor -CHUNKSIZE = 8096 +CHUNKSIZE = 4096 class FileTransfer(protocol.ClientFactory): """ Transfers files to a remote SCP/SFTP server. """ - channel = None def __init__(self, host, port, username, password): @@ -72,6 +71,8 @@ class SFTPChannel(channel.SSHChannel): """ name = 'session' + remFile = '' + remOffset = 0 def channelOpen(self, data): d = self.conn.sendRequest(self, 'subsystem', common.NS('sftp'), wantReply=1) @@ -105,31 +106,24 @@ class SFTPChannel(channel.SSHChannel): d.addCallbacks(self.writeChunk, self.logError) def writeChunk(self, remoteFile): + if isinstance(remoteFile, tuple) == False: + self.remFile = remoteFile data = self.localFile.read(CHUNKSIZE) if len(data) < CHUNKSIZE: - # write rest - print "[DEBUG] **** WRITING REMAINING CHUNK\n" - print "[DEBUG] **** len(data): ", len(data) - print "[DEBUG] **** data: %s \n" %(data) - self.d = remoteFile.writeChunk(len(data), data) + self.d = self.remFile.writeChunk(self.remOffset, data) self.d.addCallbacks(self.finished, self.logError) - print "[DEBUG] **** WRITING CHUNK\n" - #self.d = remoteFile.writeChunk(CHUNKSIZE, data) - #self.d.addCallbacks(self.writeChunk, self.logError) - d = remoteFile.writeChunk(CHUNKSIZE, data) - d.addCallbacks(self.writeChunk, self.logError) + else: + self.d = self.remFile.writeChunk(self.remOffset, data) + self.remOffset = self.remOffset + CHUNKSIZE + self.d.addCallbacks(self.writeChunk, self.logError) def logError(self, reason): print 'error', reason def finished(self, result): - #self.deferred.callback('finished') - print "[DEBUG] **** finished has been called\n" - print "[DEBUG] **** result: ", result self.localFile.close() + self.remFile.close() self.d.callback('finished') - #result.callback('finished') - # classes for managing the SSH protocol and connection diff --git a/agent/transport/remote.py b/agent/transport/remote.py index 2aa7559..bd822ae 100644 --- a/agent/transport/remote.py +++ b/agent/transport/remote.py @@ -73,7 +73,7 @@ class Transporter(QueueableAgent): """ #return self.server.callRemote('getMetadata', resource.metadata) self.deferred = defer.Deferred() - print "**** RESOURCE.PATH: ", resource.path + #print "**** RESOURCE.PATH: ", resource.path remoteFile = os.path.basename(resource.path) d = self.ftpServer.upload(resource.path, remoteFile) #d = self.server.callRemote('getMetadata', resource.metadata)