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.
|