symbian-qemu-0.9.1-12/python-2.6.1/Demo/pdist/README
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 Filesystem, RCS and CVS client and server classes
       
     2 =================================================
       
     3 
       
     4 *** See the security warning at the end of this file! ***
       
     5 
       
     6 This directory contains various modules and classes that support
       
     7 remote file system operations.
       
     8 
       
     9 CVS stuff
       
    10 ---------
       
    11 
       
    12 rcvs			Script to put in your bin directory
       
    13 rcvs.py			Remote CVS client command line interface
       
    14 
       
    15 cvslib.py		CVS admin files classes (used by rrcs)
       
    16 cvslock.py		CVS locking algorithms
       
    17 
       
    18 RCS stuff
       
    19 ---------
       
    20 
       
    21 rrcs			Script to put in your bin directory
       
    22 rrcs.py			Remote RCS client command line interface
       
    23 
       
    24 rcsclient.py		Return an RCSProxyClient instance
       
    25 			(has reasonable default server/port/directory)
       
    26 
       
    27 RCSProxy.py		RCS proxy and server classes (on top of rcslib.py)
       
    28 
       
    29 rcslib.py		Local-only RCS base class (affects stdout &
       
    30 			local work files)
       
    31 
       
    32 FSProxy stuff
       
    33 -------------
       
    34 
       
    35 sumtree.py		Old demo for FSProxy
       
    36 cmptree.py		First FSProxy client (used to sync from the Mac)
       
    37 FSProxy.py		Filesystem interface classes
       
    38 
       
    39 Generic client/server stuff
       
    40 ---------------------------
       
    41 
       
    42 client.py		Client class
       
    43 server.py		Server class
       
    44 
       
    45 security.py		Security mix-in class (not very secure I think)
       
    46 
       
    47 Other generic stuff
       
    48 -------------------
       
    49 
       
    50 cmdfw.py		CommandFrameWork class
       
    51 			(used by rcvs, should be used by rrcs as well)
       
    52 
       
    53 
       
    54 Client/Server operation
       
    55 -----------------------
       
    56 
       
    57 The Client and Server classes implement a simple-minded RPC protocol,
       
    58 using Python's pickle module to transfer arguments, return values and
       
    59 exceptions with the most generality.  The Server class is instantiated
       
    60 with a port number on which it should listen for requests; the Client
       
    61 class is instantiated with a host name and a port number where it
       
    62 should connect to.  Once a client is connected, a TCP connection is
       
    63 maintained between client and server.
       
    64 
       
    65 The Server class currently handles only one connection at a time;
       
    66 however it could be rewritten to allow various modes of operations,
       
    67 using multiple threads or processes or the select() system call as
       
    68 desired to serve multiple clients simultaneously (when using select(),
       
    69 still handling one request at a time).  This would not require
       
    70 rewriting of the Client class.  It may also be possible to adapt the
       
    71 code to use UDP instead of TCP, but then both classes will have to be
       
    72 rewritten (and unless extensive acknowlegements and request serial
       
    73 numbers are used, the server should handle duplicate requests, so its
       
    74 semantics should be idempotent -- shrudder).
       
    75 
       
    76 Even though the FSProxy and RCSProxy modules define client classes,
       
    77 the client class is fully generic -- what methods it supports is
       
    78 determined entirely by the server.  The server class, however, must be
       
    79 derived from.  This is generally done as follows:
       
    80 
       
    81 	from server import Server
       
    82 	from client import Client
       
    83 
       
    84 	# Define a class that performs the operations locally
       
    85 	class MyClassLocal:
       
    86 		def __init__(self): ...
       
    87 		def _close(self): ...
       
    88 
       
    89 	# Derive a server class using multiple inheritance
       
    90 	class MyClassServer(MyClassLocal, Server):
       
    91 		def __init__(self, address):
       
    92 			# Must initialize MyClassLocal as well as Server
       
    93 			MyClassLocal.__init__(self)
       
    94 			Server.__init__(self, address)
       
    95 		def _close(self):
       
    96 			Server._close()
       
    97 			MyClassLocal._close()
       
    98 
       
    99 	# A dummy client class
       
   100 	class MyClassClient(Client): pass
       
   101 
       
   102 Note that because MyClassLocal isn't used in the definition of
       
   103 MyClassClient, it would actually be better to place it in a separate
       
   104 module so the definition of MyClassLocal isn't executed when we only
       
   105 instantiate a client.
       
   106 
       
   107 The modules client and server should probably be renamed to Client and
       
   108 Server in order to match the class names.
       
   109 
       
   110 
       
   111 *** Security warning: this version requires that you have a file
       
   112 $HOME/.python_keyfile at the server and client side containing two
       
   113 comma- separated numbers.  The security system at the moment makes no
       
   114 guarantees of actuallng being secure -- however it requires that the
       
   115 key file exists and contains the same numbers at both ends for this to
       
   116 work.  (You can specify an alternative keyfile in $PYTHON_KEYFILE).
       
   117 Have a look at the Security class in security.py for details;
       
   118 basically, if the key file contains (x, y), then the security server
       
   119 class chooses a random number z (the challenge) in the range
       
   120 10..100000 and the client must be able to produce pow(z, x, y)
       
   121 (i.e. z**x mod y).