# upload to ftp server
ftp_filepath = nil
+ @trans = FileTransfer.new(ip, port, username, passwd, @log)
for attempt in ATTEMPTS
- ftp_filepath = FileTransfer.putfile(ip, port, username, passwd, src_file, @log)
+ ftp_filepath = @trans.putfile( src_file )
if !ftp_filepath.nil? then break;
else @log.info "Server is the #{attempt} upload attempt fails" end
end
req.puts "UPLOADED,#{ftp_filepath}"
elsif cmd == "SUCC" then
@log.info "Client downloaded file successfully"
- FileTransfer.cleandir(ip, port, username, passwd, ftp_filepath, @log)
+ @trans.cleandir( ftp_filepath )
@log.info "Cleaned temporary dir on FTP server: #{ftp_filepath}"
break
elsif cmd == "ERROR" then
# download from ftp server
dst_filepath = nil
+ @trans = FileTransfer.new(ip, port, username, passwd, @log)
for attempt in ATTEMPTS
- dst_filepath = FileTransfer.getfile(ip, port, username, passwd, filepath, dst_file, @log)
+ dst_filepath = @trans.getfile( filepath, dst_file )
if not dst_filepath.nil? then break
else
@log.warn "Server is the #{attempt} download attempt fails"
@log.info "Server already has cached file"
elsif line.strip == "NOT_CACHED" then
@log.info "Server doest not have cached file"
+
ftp_filepath = nil
+ @trans = FileTransfer.new(ip, port, username, passwd, @log)
for attempt in ATTEMPTS
- ftp_filepath = FileTransfer.putfile(ip, port, username, passwd, src_file, @log)
+ ftp_filepath = @trans.putfile( src_file )
if !ftp_filepath.nil? then break;
else @log.info "Client is the #{attempt} upload attempt fails" end
end
send "UPLOADED,#{ip},#{port},#{ftp_filepath},#{username},#{passwd}"
elsif line.strip == "SUCC" then
@log.info "Server downloaded file sucessfully"
- FileTransfer.cleandir(ip, port, username, passwd, ftp_filepath, @log)
+ @trans.cleandir( ftp_filepath )
@log.info "Client cleaned temporary dir on ftp server: #{ftp_filepath}"
elsif line.strip == "ERROR" then
@log.error "Server failed to download the file. Please check server log"
ftp_filepath = tok[1].strip
@log.info "Server uploaded file sucessfully"
dst_filepath = nil
+ @trans = FileTransfer.new(ip, port, username, passwd, @log)
for attempt in ATTEMPTS
- dst_filepath = FileTransfer.getfile(ip, port, username, passwd, ftp_filepath, dst_file, @log)
+ dst_filepath = @trans.getfile( ftp_filepath, dst_file )
if not dst_filepath.nil? then break
else
@log.warn "Client is the #{attempt} download attempt fails"
require 'socket'
+require 'log'
class FileTransfer
+ def initialize(ip, port, username, passwd, logger)
+ @ip = ip
+ @port = port
+ @username = username
+ @passwd = passwd
+ if not logger.nil? then
+ @log = logger
+ else
+ @log = DummyLog.new
+ end
+ end
+
- def FileTransfer.putfile(ip, port, username, passwd, bpath, logger)
+ def putfile( bpath )
filename = File.basename(bpath)
uniqdir = Utils.create_uniq_name
ftp_filepath = File.join(uniqdir, filename)
begin
ftp = Net::FTP.new
- if port.nil? or port == "" then
- ftp.connect(ip)
+ if @port.nil? or @port == "" then
+ ftp.connect(@ip)
else
- ftp.connect(ip, port)
+ ftp.connect(@ip, @port)
end
- logger.info "[FTP log] Connected FTP server (#{ip}:#{port})"
- ftp.login(username, passwd)
+ @log.info "[FTP log] Connected FTP server (#{@ip}:#{@port})"
+ ftp.login(@username, @passwd)
ftp.binary = true
ftp.passive = true
ftp.mkdir(uniqdir)
ftp.chdir(uniqdir)
ftp.put(bpath)
- logger.info "[FTP log] Put a file"
- logger.info "[FTP log] from \"#{bpath}\" to \"#{ftp_filepath}\""
+ @log.info "[FTP log] Put a file"
+ @log.info "[FTP log] from \"#{bpath}\" to \"#{ftp_filepath}\""
files = ftp.list(filename)
if files.empty? then
- logger.error "[FTP log] Failed to upload file (#{filename} does not exist)"
+ @log.error "[FTP log] Failed to upload file (#{filename} does not exist)"
return nil
end
ftp.quit
- logger.info "[FTP log] Disconnected FTP server"
+ @log.info "[FTP log] Disconnected FTP server"
rescue => e
- logger.error "[FTP log] Exception"
- logger.error e.message
- logger.error e.backtrace.inspect
+ @log.error "[FTP log] Exception"
+ @log.error e.message
+ @log.error e.backtrace.inspect
return nil
end
return ftp_filepath
end
- def FileTransfer.getfile(ip, port, username, passwd, bpath, target, logger)
+ def getfile( bpath, target )
dirname = File.dirname(bpath)
filename = File.basename(bpath)
begin
ftp = Net::FTP.new
- if port.nil? or port == "" then
- ftp.connect(ip)
+ if @port.nil? or @port == "" then
+ ftp.connect(@ip)
else
- ftp.connect(ip, port)
+ ftp.connect(@ip, @port)
end
- logger.info "[FTP log] Connected FTP server (#{ip}:#{port})"
- ftp.login(username, passwd)
+ @log.info "[FTP log] Connected FTP server (#{@ip}:#{@port})"
+ ftp.login(@username, @passwd)
ftp.binary = true
ftp.passive = true
ftp.chdir(dirname)
ftp.get(filename, dst_file)
- logger.info "[FTP log] Get a file"
- logger.info "[FTP log] from \"#{bpath}\" to \"#{dst_file}\""
+ @log.info "[FTP log] Get a file"
+ @log.info "[FTP log] from \"#{bpath}\" to \"#{dst_file}\""
ftp.quit
- logger.info "[FTP log] Disconnected FTP server"
+ @log.info "[FTP log] Disconnected FTP server"
rescue => e
- logger.error "[FTP log] Exception"
- logger.error e.message
- logger.error e.backtrace.inspect
+ @log.error "[FTP log] Exception"
+ @log.error e.message
+ @log.error e.backtrace.inspect
return nil
end
if not File.exist? dst_file then
- logger.error "[FTP log] Failed to download file (#{dst_file} does not exist)"
+ @log.error "[FTP log] Failed to download file (#{dst_file} does not exist)"
return nil
end
return bpath
end
- def FileTransfer.cleandir(ip, port, username, passwd, path, logger)
+ def cleandir(path)
dirname = File.dirname(path)
begin
ftp = Net::FTP.new
- if port.nil? or port == "" then
- ftp.connect(ip)
+ if @port.nil? or @port == "" then
+ ftp.connect(@ip)
else
- ftp.connect(ip, port)
+ ftp.connect(@ip, @port)
end
- logger.info "[FTP log] Connected FTP server (#{ip}:#{port})"
- ftp.login(username, passwd)
+ @log.info "[FTP log] Connected FTP server (#{@ip}:#{@port})"
+ ftp.login(@username, @passwd)
old_dir = ftp.pwd
ftp.chdir(dirname)
list = ftp.ls
end
ftp.chdir(old_dir)
ftp.rmdir(dirname)
- logger.info "[FTP log] Clean dir (#{dirname})"
+ @log.info "[FTP log] Clean dir (#{dirname})"
ftp.quit
- logger.info "[FTP log] Disconnected FTP server"
+ @log.info "[FTP log] Disconnected FTP server"
rescue => e
- logger.error "[FTP log] Exception"
- logger.error e.message
- logger.error e.backtrace.inspect
+ @log.error "[FTP log] Exception"
+ @log.error e.message
+ @log.error e.backtrace.inspect
return nil
end