--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/extras/fileserver/fctool Tue Feb 16 10:07:05 2010 +0530
@@ -0,0 +1,133 @@
+#!/usr/bin/env python
+#
+# A simple command line client for the simple file transfer server
+# for Series 60 Python environment.
+#
+# Copyright (c) 2005 Nokia Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import sys
+import os
+import fileclient
+import binascii
+
+color=1
+
+if color:
+ colormap={'red': '\033[31;1m',
+ 'green': '\033[32;1m',
+ 'blue': '\033[34;1m',
+ 'yellow': '\033[33;1m',
+ 'cyan': '\033[36;1m',
+ 'magenta': '\033[35;1m',
+ 'white': '\033[37;1m',
+ }
+ coloroff='\033[0m'
+ def colorize(color,text):
+ return colormap[color]+text+coloroff
+else:
+ def colorize(color,text):
+ return text
+
+def cmd_download(client,remotefile,localfile=None):
+ client.download(remotefile,localfile)
+ print "Downloaded file from "+remotefile+"."
+
+def cmd_upload(client,remotefile,localfile=None):
+ client.upload(remotefile,localfile)
+ print "Uploaded file to "+remotefile+"."
+
+def cmd_get(client,remotefile):
+ print "File contents: "+client.get(remotefile)
+
+def cmd_put(client,remotefile,content):
+ client.put(remotefile,content)
+ print "Data uploaded to file "+remotefile
+
+def cmd_eval(client,expression):
+ print "Result: "+repr(client.eval(expression))
+
+def cmd_exec(client,*expression):
+ client.exec_(' '.join(expression))
+
+def cmd_killserver(client):
+ client.killserver()
+ print "Sent quit command to server."
+
+def syncfiles(client,files):
+ """Update the given files on the remote host to the same
+ versions as on the local filesystem. The argument files is
+ a list of (localfile,remotefile) tuples."""
+ print "Obtaining remote checksums..."
+ #client.exec_('import sync')
+ (localfiles,remotefiles)=zip(*files)
+ remotesums=client.eval('file_checksums('+repr(remotefiles)+')')
+ print "Remote checksums: "+repr(remotesums)
+ localsums=map(file_checksum,localfiles)
+ for ((localfile,remotefile),localsum) in zip(files,localsums):
+ if localsum != remotesums[remotefile]:
+ print colorize('green',"Checksum mismatch for file "+remotefile+" - uploading...")
+ client.upload(remotefile,localfile)
+ else:
+ print colorize('white',"Checksum of "+remotefile+" matches - not uploading.")
+
+def cmd_syncdir(client,remotedir,localdir):
+ files=filter(lambda x: os.path.isfile(os.path.join(localdir,x)),os.listdir(localdir))
+ print "Synchronizing files: "+' '.join(files)
+ filelist=[(os.path.join(localdir,x),
+ os.path.join(remotedir,x)) for x in files]
+ syncfiles(client,filelist)
+
+def cmd_syncfiles(client,remotedir,*localfiles):
+ localfiles=filter(os.path.isfile,localfiles)
+ files=[]
+ for k in localfiles:
+ files.append((k,os.path.join(remotedir,os.path.basename(k))))
+ syncfiles(client,files)
+def cmd_ping(client):
+ print "Probing server..."
+ result=client.eval('2+2')
+ if result==4:
+ print "The server is alive and well."
+ else:
+ print "The server is down."
+def file_checksum(filename):
+ f=open(filename,'rb')
+ checksum = binascii.crc32(f.read())
+ f.close()
+ return checksum
+
+if len(sys.argv)<2:
+ print "Usage: fctool [-v] command [args]"
+ sys.exit()
+
+if sys.argv[1]=='-v':
+ verbose=1
+ del sys.argv[1]
+else:
+ verbose=0
+
+cmd=sys.argv[1]
+args=sys.argv[2:]
+
+try:
+ cmdfunc=globals()['cmd_'+cmd]
+except:
+ raise "Unknown command "+cmd
+
+#print "Executing command: "+cmd+str(tuple(args))
+
+client=fileclient.connect('/dev/ttyS4',verbose)
+
+cmdfunc(client,*args)