Changeset 256 for trunk

Show
Ignore:
Timestamp:
04/01/09 11:40:06 (3 years ago)
Author:
ocjhb
Message:

getting the first cdd passed, with httpserver in doctest

Location:
trunk/sandbox/jhb/oc2
Files:
3 added
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/sandbox/jhb/oc2/documentation.py

    r255 r256  
    217217 
    218218############################################################################### 
    219  
     219>>> port = 9090 
    220220>>> cdd = issuer.makeCDD('OpenCentA', 
    221221...                      'oca', 
    222222...                      [str(d) for d in [0,1,2,5,10,20]], 
    223 ...                      'http://localhost:8000', 
     223...                      'http://localhost:%s/' % port, 
    224224...                      '') 
    225225>>> issuer.getMasterPubKey().verifyContainerSignature(cdd) 
     
    270270 
    271271* fetch "currency description document" from issuer 
     272 
     273############################################################################### 
     274 
     275>>> #faked request 
     276>>> from wallet import Wallet 
     277>>> wallet = Wallet(Item()) 
     278>>> import protocols 
     279>>> serverside = protocols.GiveLatestCDD(issuer) 
     280>>> clientside = protocols.AskLatestCDD(wallet,serverside.run) 
     281>>> cdd == clientside.run() 
     282True 
     283 
     284>>> #using http 
     285>>> import transports 
     286>>> import testserver 
     287>>> transport = transports.HTTPTransport('http://localhost:%s/' % port) 
     288>>> clientside = protocols.AskLatestCDD(wallet,transport) 
     289>>> testserver.run_once(port,issuer) 
     290>>> cdd2 =  clientside.run() 
     291>>> cdd2.toString(True) == cdd.toString(True) 
     292True 
     293 
     294############################################################################### 
    272295 
    273296 
  • trunk/sandbox/jhb/oc2/issuer.py

    r255 r256  
    2525        cdd.issuer = self.storage.masterPubKey.hash() 
    2626        if not hasattr(self.storage,'cdds'): 
    27             self.storage.cdds = Item() 
    28         cddlist = getattr(self.storage.cdds,shortCurrencyId,[]) 
    29         setattr(self.storage.cdds,shortCurrencyId,cddlist) 
    30         cdd.version = len(cddlist)    
     27            self.storage.cdds = [] 
     28        cdds = self.get('cdds') 
     29        cdd.version = len(cdds)    
    3130        self.storage.masterPrivKey.signContainer(cdd) 
    32         cddlist.append(cdd) 
     31        cdds.append(cdd) 
    3332        return cdd 
    3433 
    35     def getCDD(self,shortCurrencyId,version=None): 
    36         cddlist = getattr(self.storage.cdds,shortCurrencyId,None) 
     34    def getCDD(self,version=None): 
     35        cdds = self.get('cdds') 
    3736        if version: 
    38             return cddlist[version] 
     37            return cdds[version] 
    3938        else: 
    40             return cddlist[-1] 
     39            return cdds[-1] 
    4140 
    4241    def getMasterPubKey(self): 
  • trunk/sandbox/jhb/oc2/protocols.py

    r253 r256  
     1import messages 
     2 
    13class Protocol(object): 
    24 
    3     def __init__(self): 
    4         self.digest = self.dummy 
     5    def __init__(self,transport): 
     6        self.transport = transport 
    57 
    6     def dummy(self,message): 
    7          
    8         return '' 
     8    def getResponse(self): 
     9        return self.transport.readMessage() 
    910 
     11class AskLatestCDD(Protocol): 
    1012 
     13    def __init__(self,wallet,transport): 
     14        self.transport = transport 
     15        self.wallet = wallet 
     16     
     17    def run(self,message=None): 
     18        message = messages.AskLatestCDD()   
     19        response = self.transport(message) 
     20        return response.cdd  
     21 
     22class GiveLatestCDD(Protocol): 
     23     
     24    def __init__(self,issuer): 
     25        self.issuer = issuer 
     26     
     27    def run(self,message=None): 
     28        if message: 
     29            answer = messages.GiveLatestCDD() 
     30            answer.cdd = self.issuer.getCDD() 
     31            return answer 
     32        else: 
     33            pass 
    1134 
    1235class CoinsSpendSender(Protocol): 
     
    6487 
    6588    def giveKeys(self,message): 
    66      
    67  
    68 class requestCDD(Protocol): 
    69      
    70     def __init__(self,cdd_version): 
    71         self.cdd_version = cdd_version 
     89        pass     
    7290 
    7391 
    74     def getCDD(self,message): 
    75         return '' 
    76  
    77 class giveCDD(Protocol): 
    78  
    79     def giveCDD(self,message): 
    80         return '' 
  • trunk/sandbox/jhb/oc2/testserver.py

    r254 r256  
    11import BaseHTTPServer, threading 
     2import protocols, issuer, mint, transports, urllib 
     3 
    24 
    35class Handler(BaseHTTPServer.BaseHTTPRequestHandler): 
    46 
    5     def do_GET(self): 
    6         self.send_response(200) 
     7    def do_POST(self): 
     8        #print self.server 
    79        if self.path == '/stop': 
    810            raise 'foobar' 
     11        length = self.headers.get('Content-Length') 
     12        data = self.rfile.read(int(length)) 
     13        data = urllib.unquote(data) 
     14        message = transports.createMessage(data) 
     15        if message.header == 'AskLatestCDD': 
     16            protocol = protocols.GiveLatestCDD(self.issuer) 
     17        answer = protocol.run(message) 
     18        self.send_response(200) 
    919        self.send_header("Content-type", "text/plain") 
    10         self.end_headers() 
    11         self.wfile.write('foo') 
    12          
    13 PORT = 8000 
     20        self.wfile.write('\r\n') 
     21        self.wfile.write(answer.toString(True)) 
    1422 
    15 httpd = BaseHTTPServer.HTTPServer(("", PORT), Handler) 
    16 import threading 
    17 def run_once(): 
     23 
     24def run_once(port,issuer=None): 
     25    Handler.issuer = issuer 
     26    httpd = BaseHTTPServer.HTTPServer(("", port), Handler) 
     27    import threading 
    1828    t = threading.Thread(target=httpd.handle_request)      
    1929    t.start() 
    2030 
    21  
    22 #print "serving at port", PORT 
    23 #t = threading.Thread(target=httpd.handle_request) 
    24 #t.start() 
    25 #import time 
    26 #for i in range(10): 
    27 #    time.sleep(3) 
    28 #print 'foobar' 
    29  
    30 #httpd.serve_forever() 
    31  
  • trunk/sandbox/jhb/oc2/transports.py

    r253 r256  
     1import messages,  simplejson 
     2 
     3def createMessage(data): 
     4    data = dict(simplejson.loads(str(data))) 
     5    header = data['header'] 
     6    klass = getattr(messages,header) 
     7    message = klass(data) 
     8    return message 
     9 
    110class Transport(object): 
    211 
    3     def write(self,message): 
    4         return ''         
     12    def __call__(self,message): 
     13        return '' 
    514 
    6     def handleResponse(self,message): 
    7         pass 
     15class HTTPTransport(object): 
     16     
     17    def __init__(self,url): 
     18        self.url = url 
     19      
     20    def __call__(self,message): 
     21        import urllib2, urllib 
     22        response = urllib2.urlopen(self.url,message.toString(True)) 
     23        return createMessage(response.read()) 
     24         
     25