SF.net SVN: fclient: [191] trunk/sandbox/fcp/fcp2_0_client.py
Status: Pre-Alpha
Brought to you by:
jurner
From: <ju...@us...> - 2008-02-08 23:40:27
|
Revision: 191 http://fclient.svn.sourceforge.net/fclient/?rev=191&view=rev Author: jurner Date: 2008-02-08 15:40:33 -0800 (Fri, 08 Feb 2008) Log Message: ----------- what a bitch to implement .. Modified Paths: -------------- trunk/sandbox/fcp/fcp2_0_client.py Modified: trunk/sandbox/fcp/fcp2_0_client.py =================================================================== --- trunk/sandbox/fcp/fcp2_0_client.py 2008-02-08 18:54:35 UTC (rev 190) +++ trunk/sandbox/fcp/fcp2_0_client.py 2008-02-08 23:40:33 UTC (rev 191) @@ -870,8 +870,11 @@ if initialRequest is None: return False + code = msg['Code'] + if code == consts.FetchError.Canceled: + return False + # check if it is one of our requests for key information - code = msg['Code'] if code == consts.FetchError.TooBig and initialRequest['FcRequestType'] == consts.RequestType.GetKeyInfo: initialRequest['FcMetadataContentType'] = msg.get('ExpectedMetadata.ContentType', '') initialRequest['FcDataLength'] = msg.get('ExpectedDataLength', -1) @@ -958,9 +961,13 @@ elif msg.name == consts.Message.PersistentRequestRemoved: if initialRequest is None: return False - #TODO: notify user? - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Removed - self._finalizeRequest(msg, initialRequest, None) + + initialRequest['FcRequestStatus'] |= (consts.RequestStatus.Removed | + consts.RequestStatus.Completed | + consts.RequestStatus.RemovedFromQueue + ) + + del self._requests[requestIdentifier] return True @@ -1026,6 +1033,11 @@ elif msg.name == consts.Message.PutFailed: if initialRequest is None: return False + + code = msg['Code'] + if code == consts.InsertError.Canceled: + return False + initialRequest['FcRequestStatus'] |= consts.RequestStatus.Error initialRequest['FcErrorMessage'] = msg self._finalizeRequest(msg, initialRequest, self.events.RequestFailed) @@ -1853,17 +1865,23 @@ def removeRequest(self, requestIdentifier): """Removes a request @param requestIdentifier: (str) identifier of the request to remove - - @note: you can use this method to remove get / put requests . All attempts to remove other requests will fail """ initialRequest = self._requests[requestIdentifier] initialRequest['FcRequestStatus'] |= consts.RequestStatus.Removed if initialRequest['FcRequestType'] & (consts.RequestType.MaskGet | consts.RequestType.MaskPut): - self.sendMessage( - consts.Message.RemovePersistentRequest, - Global=False, - Identifier=requestIdentifier, - ) + + # remove Persistence.Connection emidiately + if initialRequest['Persistence'] == consts.Persistence.Connection: + initialRequest['FcRequestStatus'] |= (consts.RequestStatus.Completed | + consts.RequestStatus.RemovedFromQueue + ) + del self._requests[requestIdentifier] + else: + self.sendMessage( + consts.Message.RemovePersistentRequest, + Global=False, + Identifier=requestIdentifier, + ) else: del self._requests[requestIdentifier] @@ -1871,36 +1889,37 @@ # werong. Maybe a ProtocolError.NoSuchIdentifier ??? - def resendRequest(self, requestMessage): + def resendRequest(self, request): """Resends a request - @param requestMessage: (L{fcp2_0_message.Message}) + @param request: (L{fcp2_0_message.Message}) @return: (str) request identifier - @note: you can use this method to resend get / put request, genarate keypair requests or - plugin messages. All attempts to resend other requests will fail - @note: the request passed is not removed in the call. Use L{removeRequest} if necessary + @note: you can use this method to resend get / put requests.All attempts to resend other requests + will fail + @note: the request passed removed in the call if necessary. Except for FcInitTime is reseet, but + otherwise it is left unchanged """ - requestType = requestMessage.get('FcRequestType', None) - if requestType is None: + requestType = request.get('FcRequestType', consts.RequestType.Null) + if not requestType & (consts.RequestType.MaskGet | consts.RequestType.MaskPut): raise ValueError('Can not resend request: %s' % requestMessage.name) - - if requestType & (consts.RequestType.MaskGet | consts.RequestType.MaskPut): - self._registerRequest( - requestMessage, - requestType, - filenameCollision=requestMessage['FcFilenameCollision'] & consts.FilenameCollision.MaskHandle, - #initTime=time.time(), # TODO: reset init time or not? - persistentUserData=requestMessage['FcPersistentUserData'], - userData=requestMessage['FcUserData'], - ) - elif requestType & (consts.RequestType.MaskGenerateKeypair | onsts.RequestType.MaskPlugin): - self._registerRequest(requestMessage, requestType) - else: - raise ValueError('Should not have ended here') + + # remove and cancel request + oldIdentifier = request['Identifier'] + self._registerRequest( + request, + requestType, + filenameCollision=request['FcFilenameCollision'] & consts.FilenameCollision.MaskHandle, + #initTime=time.time(), # TODO: reset init time or not? + persistentUserData=request['FcPersistentUserData'], + userData=request['FcUserData'], + ) + + if oldIdentifier in self._requests: + self.removeRequest(oldIdentifier) + + self.sendMessageEx(request) + return request['Identifier'] - self.sendMessageEx(msg) - return requestMessage['Identifier'] - ######################################################## ## ## Peer related methods @@ -2207,10 +2226,12 @@ def testUskPutData(): def cb(event, request): insertURI = request['FcPrivateKey'] - identifier = c.uskPutData( + myIdentifier = c.uskPutData( 'foo', insertURI + 'foo/0/', + persistence=consts.Persistence.Reboot, ) + c.removeRequest(myIdentifier) c.events.KeypairGenerated += cb c.generateKeypair(keypairType=consts.KeyType.USK) @@ -2219,10 +2240,10 @@ #'foo1', #'USK@dkbB9DSr6R2WWs0MFsB9BJvN2cRjNxSboanDQNMJVNc,uIi9-1JrCLZ~6MLa8UrxQCMLptu~PzL59hAtorUIStw,AQECAAE/foo/0/', #) - c.run() + #c.run() - #for i in xrange(500): - # c.next() + for i in xrange(700): + c.next() #testUskPutData() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |