fclient-commit Mailing List for fclient (Page 33)
Status: Pre-Alpha
Brought to you by:
jurner
You can subscribe to this list here.
| 2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(23) |
Nov
(54) |
Dec
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 |
Jan
(17) |
Feb
(209) |
Mar
(63) |
Apr
(31) |
May
(7) |
Jun
(39) |
Jul
(390) |
Aug
(122) |
Sep
(6) |
Oct
|
Nov
|
Dec
|
|
From: <ju...@us...> - 2008-02-06 11:13:23
|
Revision: 162
http://fclient.svn.sourceforge.net/fclient/?rev=162&view=rev
Author: jurner
Date: 2008-02-06 03:13:27 -0800 (Wed, 06 Feb 2008)
Log Message:
-----------
adapt
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_consts.py
Modified: trunk/sandbox/fcp/fcp2_0_consts.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_consts.py 2008-02-06 11:13:03 UTC (rev 161)
+++ trunk/sandbox/fcp/fcp2_0_consts.py 2008-02-06 11:13:27 UTC (rev 162)
@@ -333,7 +333,7 @@
PutDiskDir = 0x10
PutComplexDir = 0x20
- GenerateSSKKeypair = GenerateKeypair = 0x1000
+ GenerateSSKKeypair = 0x1000
GenerateUSKKeypair = 0x2000
PluginInfo = 0x2000000
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-06 11:13:02
|
Revision: 161
http://fclient.svn.sourceforge.net/fclient/?rev=161&view=rev
Author: jurner
Date: 2008-02-06 03:13:03 -0800 (Wed, 06 Feb 2008)
Log Message:
-----------
kicked out identifier prefixes. Use FcRequestType now
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_params.py
Modified: trunk/sandbox/fcp/fcp2_0_params.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_params.py 2008-02-06 11:12:36 UTC (rev 160)
+++ trunk/sandbox/fcp/fcp2_0_params.py 2008-02-06 11:13:03 UTC (rev 161)
@@ -60,7 +60,7 @@
MAGIC = '{8a7808d0-3934-465a-b1b4-b7150ed109a5}' # magic string to identify our requests
FcParams = (
- ('FcType', validateInt),
+ ('FcRequestType', validateInt),
('FcInitTime', validateFloat), # can not take it from uuid cos requests may be resend multiple times
('FcFilenameCollision', validateInt),
('FcPersistentUserData', validateString),
@@ -132,19 +132,16 @@
-def newUuid(prefix=None, uuids=None):
+def newUuid(uuids=None):
"""Creates a new unique identifier
- @param prefix: (str) identifier prefix or None
@param uuids: if desired any iterable containing uuids to enshure the identifier is unique in the iterable
@return: (str) uuid
"""
- if prefix is None:
- prefix = ''
- uuid_ = prefix + uuid.uuid_time()
+ uuid_ = uuid.uuid_time()
if uuids is not None:
while uuid_ in uuids:
- uuid_ = prefix + uuid_time()
+ uuid_ = uuid_time()
return uuid_
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-06 11:12:38
|
Revision: 160
http://fclient.svn.sourceforge.net/fclient/?rev=160&view=rev
Author: jurner
Date: 2008-02-06 03:12:36 -0800 (Wed, 06 Feb 2008)
Log Message:
-----------
kicked out identifier prefixes. Use FcRequestType now
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-06 10:54:42 UTC (rev 159)
+++ trunk/sandbox/fcp/fcp2_0_client.py 2008-02-06 11:12:36 UTC (rev 160)
@@ -249,11 +249,6 @@
ExpectedFcpVersion = 2.0
ExpectedNodeBuild = 1107
- IdentifierPrefixRequest = 'request:'
- IdentifierPrefixGenerateSSK = 'ssk:'
- IdentifierPrefixGenerateUSK = 'usk:'
- IdentifierPrefixPluginMessage = 'plugin:'
-
consts = consts
Config = Config
Message = Message
@@ -305,7 +300,7 @@
msg.params.update({
# persistent params that will go into identifier
- 'FcType': msgType, # identifies sub message types
+ 'FcRequestType': msgType, # identifies sub message types
'FcInitTime': initTime, # when was the request started?
'FcFilenameCollision': filenameCollision, # handle fielanem collisions?
'FcPersistentUserData': persistentUserData, # any user defined persistent data
@@ -359,7 +354,7 @@
@return: (str) uuid
@note: the identifier returned is unique to the client but may not be unique to the node
"""
- identifier = self.FcParams.newUuid(prefix=self.IdentifierPrefixRequest, uuids=self._requests)
+ identifier = self.FcParams.newUuid(uuids=self._requests)
# add additional params to msg
msg = self._addFcParamsToRequest(
@@ -612,23 +607,18 @@
##
####################################################
if msg.name == consts.Message.IdentifierCollision:
- if initialRequest is not None:
- # resend request with new identifier
-
- #TODO: just an assumption that pugin related messages my end up here
- if initialRequest.name in (consts.Message.GetPluginInfo, consts.Message.FCPPlugin):
- identifierPrefix = self.IdentifierPrefixPluginMessage
- else:
- identifierPrefix = self.IdentifierPrefixRequest
+ if initialRequest is None:
+ return False
- newIdentifier = self.FcParams.newUuid(prefix=identifierPrefix, uuids=self._requests)
- self._requests[newIdentifier] = initialRequest
- del self._requests[requestIdentifier]
- initialRequest['Identifier'] = newIdentifier
- initialRequest['FcModified'] = {consts.RequestModified.Identifier: requestIdentifier}
- self.events.RequestModified(initialRequest)
- self.sendMessageEx(initialRequest)
- return True
+ # resend request with new identifier
+ newIdentifier = self.FcParams.newUuid(uuids=self._requests)
+ self._requests[newIdentifier] = initialRequest
+ del self._requests[requestIdentifier]
+ initialRequest['Identifier'] = newIdentifier
+ initialRequest['FcModified'] = {consts.RequestModified.Identifier: requestIdentifier}
+ self.events.RequestModified(initialRequest)
+ self.sendMessageEx(initialRequest)
+ return True
elif msg.name == consts.Message.ProtocolError:
@@ -877,7 +867,7 @@
initialRequest['FcDataLength'] = msg.get('DataLength', '')
# except from GetData all requests are complete here. Next GetData will run through AllData...
- if initialRequest['FcType'] != consts.RequestType.GetData:
+ if initialRequest['FcRequestType'] != consts.RequestType.GetData:
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
initialRequest['FcStatus'] |= consts.RequestStatus.Removed
@@ -901,7 +891,7 @@
# check if it is one of our requests for key information
code = msg['Code']
- if code == consts.FetchError.TooBig and initialRequest['FcType'] == consts.RequestType.GetKeyInfo:
+ if code == consts.FetchError.TooBig and initialRequest['FcRequestType'] == consts.RequestType.GetKeyInfo:
initialRequest['FcStatus'] |= consts.RequestStatus.Success
initialRequest['FcMetadataContentType'] = msg.get('ExpectedMetadata.ContentType', '')
initialRequest['FcDataLength'] = msg.get('ExpectedDataLength', -1)
@@ -1025,11 +1015,11 @@
return True
# determine initial message name
- if restoredRequest['FcType'] == consts.RequestType.Put:
+ if restoredRequest['FcRequestType'] == consts.RequestType.Put:
restoredRequest.name = consts.Message.ClientPut
- elif restoredRequest['FcType'] == consts.RequestType.PutDiskDir:
+ elif restoredRequest['FcRequestType'] == consts.RequestType.PutDiskDir:
restoredRequest.name = consts.Message.ClientPutDiskDir
- elif restoredRequest['FcType'] == consts.RequestType.PutComplexDir:
+ elif restoredRequest['FcRequestType'] == consts.RequestType.PutComplexDir:
restoredRequest.name = consts.Message.ClientPutComplexDir
# restore request
@@ -1200,20 +1190,16 @@
insertURI = self.Uri(msg['InsertURI']).uri
requestURI = self.Uri(msg['RequestURI']).uri
- createUSK = True if requestIdentifier.startswith(self.IdentifierPrefixGenerateUSK) else False
- if createUSK:
+ if initialRequest['FcRequestType'] == consts.RequestType.GenerateUSKKeypair:
insertURI = insertURI.replace(consts.KeyType.SSK, consts.KeyType.USK, 1)
requestURI = requestURI.replace(consts.KeyType.SSK, consts.KeyType.USK, 1)
- keyType = consts.KeyType.USK
- else:
- keyType = consts.KeyType.SSK
-
+
initialRequest['InsertURI'] = insertURI
initialRequest['RequestURI'] = requestURI
- initialRequest['FcKeyType'] = keyType
initialRequest['FcStatus'] |= consts.RequestStatus.Success | consts.RequestStatus.Removed
self.events.KeypairGenerated(initialRequest)
+ # notify listeners
initialRequest['FcStatus'] |= consts.RequestStatus.Completed
del self._requests[requestIdentifier]
return True
@@ -2048,12 +2034,12 @@
@param detailed: (bool) If True, detailed information is returned
@return: (str) request identifier
"""
- identifier = self.FcParam.newUuid(prefix=self.IdentifierPrefixPluginMessage, uuids=self._requests)
+ identifier = self.FcParam.newUuid(uuids=self._requests)
msg = self.Message(
consts.Message.GetPluginInfo,
FcModified={},
FcStatus=consts.RequestStatus.Pending,
- FcType=consts.RequestType.PluginInfo,
+ FcRequestType=consts.RequestType.PluginInfo,
Identifier=identifier,
PluginName=pluginName,
Detailed=detailed,
@@ -2070,12 +2056,12 @@
@param data: (str) data to pass along with the messaage or None
@return: (str) request identifier
"""
- identifier = self.FcParam.newUuid(prefix=self.IdentifierPrefixPluginMessage, uuids=self._requests)
+ identifier = self.FcParam.newUuid(uuids=self._requests)
msg = self.Message(
consts.Message.GetPluginInfo,
FcModified={},
FcStatus=consts.RequestStatus.Pending,
- FcType=consts.RequestType.PluginMessage,
+ FcRequestType=consts.RequestType.PluginMessage,
Identifier=identifier,
PluginName=pluginName,
**params
@@ -2093,7 +2079,6 @@
## others
##
##########################################################
- #TODO: kick out request prefix (use FcType instead)
def generateKeypair(self, keypairType=consts.KeyType.SSK):
"""
@param keypairType: type of keypair to generate (either L{consts.KeyType.SSK} or L{consts.KeyType.SSK})
@@ -2104,13 +2089,13 @@
if keypairType not in (consts.KeyType.SSK, consts.KeyType.USK):
raise ValueError('keypairType must be %s or %s' % (consts.KeyType.SSK, consts.KeyType.USK))
- prefix = self.IdentifierPrefixGenerateSSK if keypairType == consts.KeyType.SSK else self.IdentifierPrefixGenerateUSK
- identifier = self.FcParams.newUuid(prefix=prefix, uuids=self._requests)
+ requestType = consts.RequestType.GenerateSSKKeypair if keypairType == consts.KeyType.SSK else consts.RequestType.GenerateUSKKeypair
+ identifier = self.FcParams.newUuid(uuids=self._requests)
msg = self.Message(
consts.Message.GenerateSSK,
FcModified={},
FcStatus=consts.RequestStatus.Pending,
- FcType=consts.RequestType.GenerateKeypair,
+ FcRequestType=requestType,
Identifier=identifier,
)
self._requests[identifier] = msg
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-06 10:54:38
|
Revision: 159
http://fclient.svn.sourceforge.net/fclient/?rev=159&view=rev
Author: jurner
Date: 2008-02-06 02:54:42 -0800 (Wed, 06 Feb 2008)
Log Message:
-----------
adapt
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_params.py
Modified: trunk/sandbox/fcp/fcp2_0_params.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_params.py 2008-02-06 10:54:27 UTC (rev 158)
+++ trunk/sandbox/fcp/fcp2_0_params.py 2008-02-06 10:54:42 UTC (rev 159)
@@ -60,7 +60,7 @@
MAGIC = '{8a7808d0-3934-465a-b1b4-b7150ed109a5}' # magic string to identify our requests
FcParams = (
- ('FcSubType', validateInt),
+ ('FcType', validateInt),
('FcInitTime', validateFloat), # can not take it from uuid cos requests may be resend multiple times
('FcFilenameCollision', validateInt),
('FcPersistentUserData', validateString),
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-06 10:54:21
|
Revision: 158
http://fclient.svn.sourceforge.net/fclient/?rev=158&view=rev
Author: jurner
Date: 2008-02-06 02:54:27 -0800 (Wed, 06 Feb 2008)
Log Message:
-----------
more fine grained status and type flags for requests
Modified Paths:
--------------
trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py
Modified: trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py
===================================================================
--- trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py 2008-02-06 10:54:05 UTC (rev 157)
+++ trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py 2008-02-06 10:54:27 UTC (rev 158)
@@ -2,6 +2,7 @@
from __future__ import with_statement
import os, sys
+import copy
import socket
import tempfile
import time
@@ -60,6 +61,8 @@
self.messages.append(self.fcpClient.Message.fromSocket(s))
def _captureEventsFromClient(self, event, msg):
+ # have to copy message here, to get exact state
+ msg = copy.deepcopy(msg)
self.events.append( (event, msg) )
def connectClient(self):
@@ -536,17 +539,24 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete | consts.RequestStatus.Removed),
+ ('FcStatus', consts.RequestStatus.Pending |
+ consts.RequestStatus.Started |
+ consts.RequestStatus.Success |
+ consts.RequestStatus.Removed),
data=data
)
self.failIf(myIdentifier in allRequests)
+ self.failUnless(myRequest['FcStatus'] & consts.RequestStatus.Completed)
self.assertHasNextEvent(None)
# cheat a bit to test peristence == Forever (client should not remove request)
allRequests[myIdentifier] =myRequest
myRequest['Persistence'] = consts.Persistence.Forever
- myRequest['FcStatus'] &= ~(consts.RequestStatus.Complete | consts.RequestStatus.Removed)
+ myRequest['FcStatus'] &= ~(consts.RequestStatus.Success |
+ consts.RequestStatus.Removed |
+ consts.RequestStatus.Completed
+ )
self.sendResponseMessage(
'AllData',
data=data,
@@ -559,16 +569,16 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete),
+ ('FcStatus', consts.RequestStatus.Pending |
+ consts.RequestStatus.Started |
+ consts.RequestStatus.Success),
data=data
)
self.failUnless(myIdentifier in allRequests)
+ self.failUnless(myRequest['FcStatus'] & consts.RequestStatus.Completed)
self.assertHasNextEvent(None)
-
-
-
def testGetData_Failure(self):
# request a arbitrary file
@@ -604,8 +614,12 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestFailed,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Error | consts.RequestStatus.Removed)
+ ('FcStatus', consts.RequestStatus.Pending |
+ consts.RequestStatus.Started |
+ consts.RequestStatus.Error |
+ consts.RequestStatus.Removed)
)
+ self.failUnless(myRequest['FcStatus'] & consts.RequestStatus.Completed)
self.assertHasNextEvent(None)
#return
@@ -614,7 +628,9 @@
allRequests[myIdentifier] =myRequest
myRequest['Persistence'] = consts.Persistence.Forever
- myRequest['FcStatus'] &= ~(consts.RequestStatus.Error | consts.RequestStatus.Removed)
+ myRequest['FcStatus'] &= ~(consts.RequestStatus.Error |
+ consts.RequestStatus.Removed |
+ consts.RequestStatus.Completed)
self.sendResponseMessage(
'GetFailed',
Code='28', # All data not found
@@ -627,9 +643,13 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestFailed,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Error),
+ ('FcStatus', consts.RequestStatus.Pending |
+ consts.RequestStatus.Started |
+ consts.RequestStatus.Error
+ ),
)
self.failUnless(myIdentifier in allRequests)
+ self.failUnless(myRequest['FcStatus'] & consts.RequestStatus.Completed)
self.assertHasNextEvent(None)
@@ -673,9 +693,10 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete | consts.RequestStatus.Removed)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Success | consts.RequestStatus.Removed)
)
self.failIf(myIdentifier in allRequests)
+ self.failUnless(myRequest['FcStatus'] & consts.RequestStatus.Completed)
self.assertHasNextEvent(None)
@@ -718,10 +739,10 @@
('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Error | consts.RequestStatus.Removed)
)
self.failIf(myIdentifier in allRequests)
+ self.failUnless(myRequest['FcStatus'] & consts.RequestStatus.Completed)
self.assertHasNextEvent(None)
+
-
-
def testGetKeyInfo_Success(self):
# request a arbitrary uri
@@ -762,13 +783,14 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Success)
)
self.failIf(myIdentifier not in allRequests)
+ self.failUnless(myRequest['FcStatus'] & consts.RequestStatus.Completed)
self.assertHasNextEvent(None)
# test specdial case where ProtocolError.TooBig is handled as success
- myRequest['FcStatus'] &= ~(consts.RequestStatus.Complete)
+ myRequest['FcStatus'] &= ~(consts.RequestStatus.Success)
self.sendResponseMessage(
'GetFailed',
Code='21', # Too big
@@ -779,8 +801,13 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete)
+ ('FcStatus', consts.RequestStatus.Pending |
+ consts.RequestStatus.Started |
+ consts.RequestStatus.Success |
+ consts.RequestStatus.Completed
+ )
)
+ self.failUnless(myRequest['FcStatus'] & consts.RequestStatus.Completed)
self.assertHasNextEvent(None)
# cheat a bit to test persistence == Connection
@@ -826,6 +853,7 @@
consts.Message.ClientGet,
('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Error | consts.RequestStatus.Removed)
)
+ self.failUnless(myRequest['FcStatus'] & consts.RequestStatus.Completed)
self.assertHasNextEvent(None)
#***********************************************************************************
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-06 10:54:02
|
Revision: 157
http://fclient.svn.sourceforge.net/fclient/?rev=157&view=rev
Author: jurner
Date: 2008-02-06 02:54:05 -0800 (Wed, 06 Feb 2008)
Log Message:
-----------
more fine grained status and type flags for requests
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-06 10:52:05 UTC (rev 156)
+++ trunk/sandbox/fcp/fcp2_0_client.py 2008-02-06 10:54:05 UTC (rev 157)
@@ -294,7 +294,7 @@
def _addFcParamsToRequest(self,
msg,
userData,
- msgSubType,
+ msgType,
initTime,
persistentUserData,
filenameCollision,
@@ -305,7 +305,7 @@
msg.params.update({
# persistent params that will go into identifier
- 'FcSubType': msgSubType, # identifies sub message types
+ 'FcType': msgType, # identifies sub message types
'FcInitTime': initTime, # when was the request started?
'FcFilenameCollision': filenameCollision, # handle fielanem collisions?
'FcPersistentUserData': persistentUserData, # any user defined persistent data
@@ -343,7 +343,7 @@
def _registerRequest(self,
msg,
userData,
- msgSubType,
+ msgType,
initTime,
persistentUserData,
filenameCollision=consts.FilenameCollision.HandleNever,
@@ -351,7 +351,7 @@
"""Registers a message
@param msg: message to register for track keeping
@param userData: any user defined data
- @param msgSubType: one of the message sub type consts
+ @param msgType: one of the message sub type consts
@param initTime: (python time)
@param persistentUserData: (str) user defined persistent data
@param filenameCollision: (bool)
@@ -365,7 +365,7 @@
msg = self._addFcParamsToRequest(
msg,
userData,
- msgSubType,
+ msgType,
initTime,
persistentUserData,
filenameCollision,
@@ -701,35 +701,40 @@
# handle plugin related request failures
elif code == consts.ProtocolError.NoSuchPlugin:
if initialRequest.name == consts.Message.PluginInfo:
+ initialRequest['FcStatus'] |= consts.RequestStatus.Error | consts.RequestStatus.Success | consts.RequestStatus.Removed
+ self.events.PluginInfoFailed(initialRequest)
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
del self._requests[requestIdentifier]
- initialRequest['FcStatus'] |= consts.RequestStatus.Error | consts.RequestStatus.Complete | consts.RequestStatus.Removed
- self.events.PluginInfoFailed(initialRequest)
return True
elif initialRequest.name == consts.Message.FCPPluginMessage:
+ initialRequest['FcStatus'] |= consts.RequestStatus.Error | consts.RequestStatus.Success | consts.RequestStatus.Removed
+ self.events.PluginMessageFailed(initialRequest)
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
del self._requests[requestIdentifier]
- initialRequest['FcStatus'] |= consts.RequestStatus.Error | consts.RequestStatus.Complete | consts.RequestStatus.Removed
- self.events.PluginMessageFailed(initialRequest)
return True
elif code == consts.ProtocolError.AccessDenied:
if initialRequest.name == consts.Message.PluginInfo:
+ self.events.PluginInfoFailed(initialRequest)
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
del self._requests[requestIdentifier]
- self.events.PluginInfoFailed(initialRequest)
return True
# TODO: just a guess that FCPPluginMessage can trigger an AccessDenied error
elif initialRequest.name == consts.Message.FCPPluginMessage:
+ self.events.PluginMessageFailed(initialRequest)
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
del self._requests[requestIdentifier]
- self.events.PluginMessageFailed(initialRequest)
return True
# only requests should get through to here
# NOTE: Fcp already removed the request
- del self._requests[requestIdentifier]
initialRequest['FcErrorMessage'] = msg
- initialRequest['FcStatus'] = consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed
+ initialRequest['FcStatus'] = consts.RequestStatus.Success | consts.RequestStatus.Error | consts.RequestStatus.Removed
self.events.RequestFailed(initialRequest)
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
+ del self._requests[requestIdentifier]
return True
@@ -809,11 +814,14 @@
if testFailed:
#TODO: check if errorMsg gives reasonable feedback
-
- del self._requests[initialRequest['Identifier']]
initialRequest['FcStatus'] = consts.RequestStatus.Error | consts.RequestStatus.Removed
initialRequest['FcErrorMessage'] = initialRequest['FcTestDDA']['ErrorMsg']
+
+ # notify listeners
self.events.ProtocolError(initialRequest)
+ # the node removed the request in any case (ProtocolError) so do we...
+ initialRequest['FcStatus'] = consts.RequestStatus.Completed
+ del self._requests[initialRequest['Identifier']]
return True
@@ -846,30 +854,40 @@
if initialRequest is None:
return False
- initialRequest['FcStatus'] |= consts.RequestStatus.Complete
+ initialRequest['FcStatus'] |= consts.RequestStatus.Success
+ initialRequest.data = msg.data
+
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
initialRequest['FcStatus'] |= consts.RequestStatus.Removed
+
+ # notify listeners
+ self.events.RequestCompleted(initialRequest)
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
+ if initialRequest['FcStatus'] & consts.RequestStatus.Removed:
del self._requests[requestIdentifier]
-
- initialRequest.data = msg.data
- self.events.RequestCompleted(initialRequest)
return True
elif msg.name == consts.Message.DataFound:
if initialRequest is None:
return False
- initialRequest['FcStatus'] |= consts.RequestStatus.Complete
+ initialRequest['FcStatus'] |= consts.RequestStatus.Success
initialRequest['FcMetadataContentType'] = msg.get('Metadata.ContentType', '')
initialRequest['FcDataLength'] = msg.get('DataLength', '')
- if initialRequest['FcSubType'] != consts.RequestSubType.GetData:
-
+
+ # except from GetData all requests are complete here. Next GetData will run through AllData...
+ if initialRequest['FcType'] != consts.RequestType.GetData:
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
initialRequest['FcStatus'] |= consts.RequestStatus.Removed
+
+ # notify listeners
+ self.events.RequestCompleted(initialRequest)
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
+ if initialRequest['FcStatus'] & consts.RequestStatus.Removed:
del self._requests[requestIdentifier]
- self.events.RequestCompleted(initialRequest)
+
return True
@@ -880,12 +898,11 @@
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
initialRequest['FcStatus'] |= consts.RequestStatus.Removed
- del self._requests[requestIdentifier]
-
+
# check if it is one of our requests for key information
code = msg['Code']
- if code == consts.FetchError.TooBig and initialRequest['FcSubType'] == consts.RequestSubType.GetKeyInfo:
- initialRequest['FcStatus'] |= consts.RequestStatus.Complete
+ if code == consts.FetchError.TooBig and initialRequest['FcType'] == consts.RequestType.GetKeyInfo:
+ initialRequest['FcStatus'] |= consts.RequestStatus.Success
initialRequest['FcMetadataContentType'] = msg.get('ExpectedMetadata.ContentType', '')
initialRequest['FcDataLength'] = msg.get('ExpectedDataLength', -1)
self.events.RequestCompleted(initialRequest)
@@ -893,6 +910,10 @@
initialRequest['FcErrorMessage'] = msg
initialRequest['FcStatus'] |= consts.RequestStatus.Error
self.events.RequestFailed(initialRequest)
+
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
+ if initialRequest['FcStatus'] & consts.RequestStatus.Removed:
+ del self._requests[requestIdentifier]
return True
@@ -1004,11 +1025,11 @@
return True
# determine initial message name
- if restoredRequest['FcSubType'] == consts.RequestSubType.Put:
+ if restoredRequest['FcType'] == consts.RequestType.Put:
restoredRequest.name = consts.Message.ClientPut
- elif restoredRequest['FcSubType'] == consts.RequestSubType.PutDiskDir:
+ elif restoredRequest['FcType'] == consts.RequestType.PutDiskDir:
restoredRequest.name = consts.Message.ClientPutDiskDir
- elif restoredRequest['FcSubType'] == consts.RequestSubType.PutComplexDir:
+ elif restoredRequest['FcType'] == consts.RequestType.PutComplexDir:
restoredRequest.name = consts.Message.ClientPutComplexDir
# restore request
@@ -1034,14 +1055,18 @@
return False
initialRequest['FcStatus'] |= consts.RequestStatus.Error
+ initialRequest['FcErrorMessage'] = msg
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
initialRequest['FcStatus'] |= consts.RequestStatus.Removed
del self._requests[requestIdentifier]
- initialRequest['FcErrorMessage'] = msg
+ # notify listeners
self.events.RequestFailed(initialRequest)
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
+ if initialRequest['FcStatus'] & consts.RequestStatus.Removed:
+ del self._requests[requestIdentifier]
return True
@@ -1061,14 +1086,16 @@
# TODO: StartupTime and CompletionTime are passed, but
# as long as no corrosponding params are passed in DataFound
# we ignore them
- initialRequest['FcStatus'] |= consts.RequestStatus.Complete
-
+ initialRequest['FcStatus'] |= consts.RequestStatus.Success
+ initialRequest['URI'] = msg['URI']
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
initialRequest['FcStatus'] |= consts.RequestStatus.Removed
+
+ # notify listeners
+ self.events.RequestCompleted(initialRequest)
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
+ if initialRequest['FcStatus'] & consts.RequestStatus.Removed:
del self._requests[requestIdentifier]
-
- initialRequest['URI'] = msg['URI']
- self.events.RequestCompleted(initialRequest)
return True
@@ -1130,18 +1157,24 @@
if initialRequest is None:
return False
+ initialRequest['FcStatus'] |= consts.RequestStatus.Success | consts.RequestStatus.Removed
+
+ # notify listeners
+ self.events.PluginInfo(msg)
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
del self._pluginRequests[requestIdentifier]
- initialRequest['FcStatus'] |= consts.RequestStatus.Completed
- self.events.PluginInfo(msg)
return True
elif msg.name == consts.Message.FCPPluginReply:
if initialRequest is None:
return False
+ initialRequest['FcStatus'] |= consts.RequestStatus.Success | consts.RequestStatus.Removed
+
+ # notify listeners
+ self.events.PluginMessage(msg)
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
del self._requests[requestIdentifier]
- initialRequest['FcStatus'] |= consts.RequestStatus.Completed
- self.events.PluginMessage(msg)
return True
####################################################
@@ -1160,27 +1193,29 @@
elif msg.name == consts.Message.SSKKeypair:
- if requestIdentifier not in self._requests:
+ if initialRequest is None:
return False
- del self._requests[requestIdentifier]
#TODO:no idea if the node may pass uris with prefixes like 'freenet:'... strip it anyways
insertURI = self.Uri(msg['InsertURI']).uri
requestURI = self.Uri(msg['RequestURI']).uri
createUSK = True if requestIdentifier.startswith(self.IdentifierPrefixGenerateUSK) else False
if createUSK:
- insertURI = requestURI.replace(consts.KeyType.SSK, consts.KeyType.USK, 1)
+ insertURI = insertURI.replace(consts.KeyType.SSK, consts.KeyType.USK, 1)
requestURI = requestURI.replace(consts.KeyType.SSK, consts.KeyType.USK, 1)
keyType = consts.KeyType.USK
else:
keyType = consts.KeyType.SSK
- msg['InsertURI'] = insertURI
- msg['RequestURI'] = requestURI
- msg['FcKeyType'] = keyType
- msg['FcStatus'] |= consts.RequestStatus.Completed
- self.events.KeypairGenerated(msg)
+ initialRequest['InsertURI'] = insertURI
+ initialRequest['RequestURI'] = requestURI
+ initialRequest['FcKeyType'] = keyType
+ initialRequest['FcStatus'] |= consts.RequestStatus.Success | consts.RequestStatus.Removed
+ self.events.KeypairGenerated(initialRequest)
+
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
+ del self._requests[requestIdentifier]
return True
elif msg.name == consts.Message.SubscribedUSKUpdate:
@@ -1233,17 +1268,14 @@
#n += 1
#if n > 50: break
- # check if we have running requests
-
- # assert no requests has completed
- status = consts.RequestStatus.Null
+ # check if we have running requests. Assert False
+ haveRunningRequests = False
for request in self._requests.values():
- tmp_status = request.params.get('FcStatus', consts.RequestStatus.Null)
- if not tmp_status & consts.RequestStatus.MaskProcessed:
- status = consts.RequestStatus.Started
+ if not request.params['FcStatus'] & consts.RequestStatus.Completed:
+ haveRunningRequests = True
break
- if status == consts.RequestStatus.Null:
+ if not haveRunningRequests:
self._log.info(consts.LogMessages.AllRequestsCompleted)
break
@@ -1353,7 +1385,7 @@
):
"""Requests a key from the node
@param uri: (str) uri of the file to request (may contain prefixes like 'freenet:' or 'http://')
- @param messageSubType: (L{consts.RequestSubType}) sub type of the message
+ @param messageSubType: (L{consts.RequestType}) sub type of the message
@param userData: any non persistent data to associate to the request or None
@param persistentUserData: any string to associate to the request as persistent data or None
@param filenameCollision: what to do if the disk target alreaady exists. One of the FilenameCollision.* consts
@@ -1426,7 +1458,7 @@
"""
return self.clientGet(
uri,
- consts.RequestSubType.GetData,
+ consts.RequestType.GetData,
userData,
persistentUserData,
consts.FilenameCollision.HandleNever,
@@ -1495,7 +1527,7 @@
"""
return self.clientGet(
uri,
- consts.RequestSubType.GetFile,
+ consts.RequestType.GetFile,
userData,
persistentUserData,
filenameCollision,
@@ -1556,7 +1588,7 @@
# how to retrieve meta info about a key? ...idea is to provoke a GetFailed (TooBig)
return self.clientGet(
uri,
- consts.RequestSubType.GetKeyInfo,
+ consts.RequestType.GetKeyInfo,
userData,
persistentUserData,
consts.FilenameCollision.HandleNever,
@@ -1648,10 +1680,9 @@
persistentUserData='',
):
""""""
-
return self.clientPut(
consts.KeyType.CHK,
- consts.RequestSubType.Put,
+ consts.RequestType.Put,
userData,
persistentUserData,
data,
@@ -1692,7 +1723,7 @@
):
return self.clientPut(
consts.KeyType.CHK,
- consts.RequestSubType.Put,
+ consts.RequestType.Put,
userData,
persistentUserData,
None,
@@ -1752,8 +1783,44 @@
## USK ClientPut related methods
##
########################################################
- def uskPutData(self):
- pass
+ def uskPutData(self,
+ data,
+ insertURI,
+
+ contentType=None,
+ dontCompress=None,
+ maxRetries=None,
+ persistence=consts.Persistence.Connection,
+ priorityClass=consts.Priority.Medium,
+ targetFilename=None,
+
+ userData=None,
+ persistentUserData=''
+
+
+ ):
+ return self.clientPut(
+ insertURI,
+ #insertURI + 'foo/0/',
+ consts.RequestType.Put,
+ userData,
+ persistentUserData,
+ data,
+
+ # fcp params
+ ContentType=contentType,
+ DataLength=len(data),
+ #EarlyEncode='false',
+ #GetCHKOnly='false',
+ Global=False,
+ Identifier=None,
+ MaxRetries=maxRetries,
+ DontCompress=dontCompress,
+ Persistence=persistence,
+ TargetFilename=targetFilename,
+ UploadFrom=consts.UploadFrom.Direct,
+ Verbosity=consts.Verbosity.ReportProgress | consts.Verbosity.ReportCompression,
+ )
def uskPutDir(self):
pass
@@ -1986,6 +2053,7 @@
consts.Message.GetPluginInfo,
FcModified={},
FcStatus=consts.RequestStatus.Pending,
+ FcType=consts.RequestType.PluginInfo,
Identifier=identifier,
PluginName=pluginName,
Detailed=detailed,
@@ -2007,6 +2075,7 @@
consts.Message.GetPluginInfo,
FcModified={},
FcStatus=consts.RequestStatus.Pending,
+ FcType=consts.RequestType.PluginMessage,
Identifier=identifier,
PluginName=pluginName,
**params
@@ -2024,6 +2093,7 @@
## others
##
##########################################################
+ #TODO: kick out request prefix (use FcType instead)
def generateKeypair(self, keypairType=consts.KeyType.SSK):
"""
@param keypairType: type of keypair to generate (either L{consts.KeyType.SSK} or L{consts.KeyType.SSK})
@@ -2040,6 +2110,7 @@
consts.Message.GenerateSSK,
FcModified={},
FcStatus=consts.RequestStatus.Pending,
+ FcType=consts.RequestType.GenerateKeypair,
Identifier=identifier,
)
self._requests[identifier] = msg
@@ -2058,8 +2129,7 @@
nodeHello = c.connect()
if nodeHello is not None:
-
-
+
#for i in xrange(10):
# c.next()
@@ -2088,9 +2158,7 @@
# c.next()
#testGetData()
-
-
-
+
def testGetFile():
filename = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test.jpg')
print filename
@@ -2152,8 +2220,7 @@
# c.next()
#testChkPutData()
-
-
+
def testChkPutFile():
fpath = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test.jpg')
@@ -2171,7 +2238,30 @@
#testChkPutFile()
+ def testUskPutData():
+ def cb(event, request):
+ insertURI = request['InsertURI']
+ identifier = c.uskPutData(
+ 'foo',
+ insertURI + 'foo/0/',
+ )
+
+ c.events.KeypairGenerated += cb
+ c.generateKeypair(keypairType=consts.KeyType.USK)
+
+ #identifier = c.uskPutData(
+ #'foo1',
+ #'USK@dkbB9DSr6R2WWs0MFsB9BJvN2cRjNxSboanDQNMJVNc,uIi9-1JrCLZ~6MLa8UrxQCMLptu~PzL59hAtorUIStw,AQECAAE/foo/0/',
+ #)
+ c.run()
+
+ #for i in xrange(500):
+ # c.next()
+
+ #testUskPutData()
+
+
def testConfigData():
from fcp2_0_config import Config
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-06 10:52:03
|
Revision: 156
http://fclient.svn.sourceforge.net/fclient/?rev=156&view=rev
Author: jurner
Date: 2008-02-06 02:52:05 -0800 (Wed, 06 Feb 2008)
Log Message:
-----------
more fine grained status and type flags for requests
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_consts.py
Modified: trunk/sandbox/fcp/fcp2_0_consts.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_consts.py 2008-02-05 16:00:48 UTC (rev 155)
+++ trunk/sandbox/fcp/fcp2_0_consts.py 2008-02-06 10:52:05 UTC (rev 156)
@@ -298,9 +298,11 @@
@cvar Started: the request has started
@cvar Compressing: the request is about to be compressed
@cvar Compressed: compressing is completed
- @cvar Complete: the request has completed successfuly
+ @cvar Success: the request has completed successfuly
@cvar Error: the request has completed with an error
- @cvar Removed: the request is no longer present in the client (and on the nodes queue)
+ @cvar Completed: processing of the request is completed
+ @cvar Removed: the request is no longer present in the nodes queue. The client will remove the request
+ from its own queue as soon as all event listeners have been notified.
@cvar MaskProcessed: bitmask checking if a request is completely processed (either
successfuly completed or completed with an error or removed)
@@ -313,25 +315,31 @@
Started = 0x2
Compressing = 0x4
Compressed = 0x8
- Complete = 0x10
+ Success = 0x10
Error = 0x20
- Removed = 0x40
-
- MaskProcessed = Complete | Error | Removed
+
+ Completed =0x10000000
+ Removed = 0x2000000
+
-
-class RequestSubType:
- """Consts indicating the subtype of a message"""
+class RequestType:
+ """Consts indicating the type of a request"""
Null = 0
- GetData = 1
- GetFile = 2
- GetKeyInfo = 3
- Put = 4
- PutDiskDir = 5
- PutComplexDir = 6
+ GetData = 0x1
+ GetFile = 0x2
+ GetKeyInfo = 0x4
+ Put = 0x8
+ PutDiskDir = 0x10
+ PutComplexDir = 0x20
+ GenerateSSKKeypair = GenerateKeypair = 0x1000
+ GenerateUSKKeypair = 0x2000
+
+ PluginInfo = 0x2000000
+ PluginMessage = 0x4000000
+
#TODO: no idea how fcp handles strings as in <Peer volatile.status=CONNECTED>
# all I could find in the sources where these constants as in PEER_NODE_STATUS_CONNECTED
# in --> freenet/node/PeerManager.java
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 16:00:52
|
Revision: 155
http://fclient.svn.sourceforge.net/fclient/?rev=155&view=rev
Author: jurner
Date: 2008-02-05 08:00:48 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
added request compression events
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_events.py
Modified: trunk/sandbox/fcp/fcp2_0_events.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_events.py 2008-02-05 16:00:15 UTC (rev 154)
+++ trunk/sandbox/fcp/fcp2_0_events.py 2008-02-05 16:00:48 UTC (rev 155)
@@ -68,6 +68,12 @@
class RequestCompleted(events.Event):
"""A request has been completed"""
+ class RequestCompressionStarted(events.Event):
+ """Compressing of a request has started"""
+
+ class RequestCompressionFinished(events.Event):
+ """Compressing of a request is finished"""
+
class RequestFailed(events.Event):
"""A request failed"""
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 16:00:10
|
Revision: 154
http://fclient.svn.sourceforge.net/fclient/?rev=154&view=rev
Author: jurner
Date: 2008-02-05 08:00:15 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
adapt to request status flag changes
Modified Paths:
--------------
trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py
Modified: trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py
===================================================================
--- trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py 2008-02-05 15:59:49 UTC (rev 153)
+++ trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py 2008-02-05 16:00:15 UTC (rev 154)
@@ -604,7 +604,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestFailed,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Error | consts.RequestStatus.Removed)
)
self.assertHasNextEvent(None)
@@ -627,7 +627,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestFailed,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete | consts.RequestStatus.Error),
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Error),
)
self.failUnless(myIdentifier in allRequests)
self.assertHasNextEvent(None)
@@ -715,7 +715,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestFailed,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Error | consts.RequestStatus.Removed)
)
self.failIf(myIdentifier in allRequests)
self.assertHasNextEvent(None)
@@ -824,7 +824,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestFailed,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Error | consts.RequestStatus.Removed)
)
self.assertHasNextEvent(None)
@@ -906,7 +906,7 @@
# status of our request should be set to removed emidiately, but it should
# not be removed from the client
- self.assertEqual(myRequest['FcStatus'], consts.RequestStatus.Removed)
+ self.assertEqual(myRequest['FcStatus'], consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Removed)
self.failUnless(myIdentifier in self.fcpClient.getRequests())
# client schould send a RemovePersistentRequest
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 15:59:43
|
Revision: 153
http://fclient.svn.sourceforge.net/fclient/?rev=153&view=rev
Author: jurner
Date: 2008-02-05 07:59:49 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
adapt to request status flag changes
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_consts.py
Modified: trunk/sandbox/fcp/fcp2_0_consts.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_consts.py 2008-02-05 15:58:32 UTC (rev 152)
+++ trunk/sandbox/fcp/fcp2_0_consts.py 2008-02-05 15:59:49 UTC (rev 153)
@@ -166,7 +166,7 @@
@cvar HandleNever: don't handle filename collisions
@cvar HandleRename: rename file on collisions
@cvar MaskHandle: bitmask indicating if collisions are hadled or not
- @cvar CollisonHandled: if this bit is set, a collision has been handled
+ @cvar CollisonHandled: if this bit is set, a collision has actually been handled
"""
HandleNever = 0x0
HandleRename = 0x1
@@ -187,8 +187,6 @@
TypesAll = (SSK, KSK, CHK, USK, SVK)
-
-
class LogMessages:
"""Strings used for log infos"""
@@ -275,14 +273,13 @@
UnknownNodeIdentifier = 'UnknownNodeIdentifier'
UnknownPeerNoteType = 'UnknownPeerNoteType'
URIGenerated = 'URIGenerated'
-
-
+
# client s (internal use only)
ClientSocketTimeout = 1
ClientSocketDied = 2
ClientDisconnected = 3
- ClientRequestMessages = (
+ ClientKeyRequestMessages = (
ClientGet,
ClientPut,
ClientPutDiskDir,
@@ -294,30 +291,35 @@
)
-
class RequestStatus:
"""Request status flags
@cvar Null: no status
@cvar Pending: the request is not started yet
+ @cvar Started: the request has started
@cvar Compressing: the request is about to be compressed
@cvar Compressed: compressing is completed
- @cvar Complete: the request is completed
- @cvar Error: an error occured while processing ther request
+ @cvar Complete: the request has completed successfuly
+ @cvar Error: the request has completed with an error
@cvar Removed: the request is no longer present in the client (and on the nodes queue)
+ @cvar MaskProcessed: bitmask checking if a request is completely processed (either
+ successfuly completed or completed with an error or removed)
+
@note: the FcStatus member of the params dict of a request should contain one or more
of the bitflags it picked up while running through the client.
"""
Null = 0x0
Pending = 0x1
- Compressing = 0x2
- Compressed = 0x4
- Started = 0x8
+ Started = 0x2
+ Compressing = 0x4
+ Compressed = 0x8
Complete = 0x10
Error = 0x20
Removed = 0x40
-
+
+ MaskProcessed = Complete | Error | Removed
+
class RequestSubType:
"""Consts indicating the subtype of a message"""
@@ -330,7 +332,6 @@
PutComplexDir = 6
-
#TODO: no idea how fcp handles strings as in <Peer volatile.status=CONNECTED>
# all I could find in the sources where these constants as in PEER_NODE_STATUS_CONNECTED
# in --> freenet/node/PeerManager.java
@@ -349,10 +350,12 @@
ConnError = 12
Disconnecting = 13
+
class PeerNoteType:
"""All known peer note types"""
Private = '1'
+
class Persistence:
Connection = 'connection'
Reboot = 'reboot'
@@ -384,7 +387,6 @@
PriorityClass = 0x2
-
class ReturnType:
Direct = 'direct'
Disk = 'disk'
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 15:59:03
|
Revision: 152
http://fclient.svn.sourceforge.net/fclient/?rev=152&view=rev
Author: jurner
Date: 2008-02-05 07:58:32 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
another comb-over status flags
on error or remove RequestStatus.Comnplete should not be set
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-05 15:21:54 UTC (rev 151)
+++ trunk/sandbox/fcp/fcp2_0_client.py 2008-02-05 15:58:32 UTC (rev 152)
@@ -702,10 +702,12 @@
elif code == consts.ProtocolError.NoSuchPlugin:
if initialRequest.name == consts.Message.PluginInfo:
del self._requests[requestIdentifier]
+ initialRequest['FcStatus'] |= consts.RequestStatus.Error | consts.RequestStatus.Complete | consts.RequestStatus.Removed
self.events.PluginInfoFailed(initialRequest)
return True
elif initialRequest.name == consts.Message.FCPPluginMessage:
del self._requests[requestIdentifier]
+ initialRequest['FcStatus'] |= consts.RequestStatus.Error | consts.RequestStatus.Complete | consts.RequestStatus.Removed
self.events.PluginMessageFailed(initialRequest)
return True
@@ -889,7 +891,7 @@
self.events.RequestCompleted(initialRequest)
else:
initialRequest['FcErrorMessage'] = msg
- initialRequest['FcStatus'] |= consts.RequestStatus.Complete | consts.RequestStatus.Error
+ initialRequest['FcStatus'] |= consts.RequestStatus.Error
self.events.RequestFailed(initialRequest)
return True
@@ -1031,7 +1033,7 @@
if initialRequest is None:
return False
- initialRequest['FcStatus'] |= consts.RequestStatus.Complete | consts.RequestStatus.Error
+ initialRequest['FcStatus'] |= consts.RequestStatus.Error
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
@@ -1129,6 +1131,7 @@
return False
del self._pluginRequests[requestIdentifier]
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
self.events.PluginInfo(msg)
return True
@@ -1137,6 +1140,7 @@
return False
del self._requests[requestIdentifier]
+ initialRequest['FcStatus'] |= consts.RequestStatus.Completed
self.events.PluginMessage(msg)
return True
@@ -1163,8 +1167,7 @@
#TODO:no idea if the node may pass uris with prefixes like 'freenet:'... strip it anyways
insertURI = self.Uri(msg['InsertURI']).uri
requestURI = self.Uri(msg['RequestURI']).uri
-
-
+
createUSK = True if requestIdentifier.startswith(self.IdentifierPrefixGenerateUSK) else False
if createUSK:
insertURI = requestURI.replace(consts.KeyType.SSK, consts.KeyType.USK, 1)
@@ -1176,6 +1179,7 @@
msg['InsertURI'] = insertURI
msg['RequestURI'] = requestURI
msg['FcKeyType'] = keyType
+ msg['FcStatus'] |= consts.RequestStatus.Completed
self.events.KeypairGenerated(msg)
return True
@@ -1231,15 +1235,15 @@
# check if we have running requests
- # assert all requests have completed
- status = consts.RequestStatus.Complete
+ # assert no requests has completed
+ status = consts.RequestStatus.Null
for request in self._requests.values():
tmp_status = request.params.get('FcStatus', consts.RequestStatus.Null)
- if not tmp_status & consts.RequestStatus.Complete:
- status = consts.RequestStatus.Null
+ if not tmp_status & consts.RequestStatus.MaskProcessed:
+ status = consts.RequestStatus.Started
break
- if status == consts.RequestStatus.Complete:
+ if status == consts.RequestStatus.Null:
self._log.info(consts.LogMessages.AllRequestsCompleted)
break
@@ -1574,7 +1578,7 @@
#TODO: persists until connection is closed... can this request be removed?
- # Anyway. It is not listed in consts.Message.ClientRequestMessages,
+ # Anyway. It is not listed in consts.Message.ClientKeyRequestMessages,
# so any attempts will fail (wink)
def subscribeUSK(self, uri, dontPoll=True):
"""Asks the node to notify the client when an USK is updated
@@ -1787,12 +1791,12 @@
@param persistentUserData: (str) persistent user data or None
@param priorityClass: (L{consts.Priority}) new priority or None
- @note: you can use this method to modify requests as listed in L{consts.Message.ClientRequestMessages}.
+ @note: you can use this method to modify requests as listed in L{consts.Message.ClientKeyRequestMessages}.
All attempts to modify other requests will fail
@note: a RequestModified event is triggered as soon as the request has actually been modified
"""
initialRequest = self._requests[requestIdentifier]
- if initialRequest.name not in consts.Message.ClientRequestMessages:
+ if initialRequest.name not in consts.Message.ClientKeyRequestMessages:
raise ValueError('Can not modify request: %s' % initialRequest.name)
msg = self.Message(
@@ -1813,14 +1817,14 @@
"""Removes a request
@param requestIdentifier: (str) identifier of the request to remove
- @note: you can use this method to remove requests as listed in L{consts.Message.ClientRequestMessages}
+ @note: you can use this method to remove requests as listed in L{consts.Message.ClientKeyRequestMessages}
or L{consts.Message.ClientPluginMessages}. All attempts to remove other requests will fail
- @note: if the request is one the requests listed in L{consts.Message.ClientRequestMessages}
+ @note: if the request is one the requests listed in L{consts.Message.ClientKeyRequestMessages}
a RequestRemoved event is triggered as soon as the request has actually been removed
"""
initialRequest = self._requests[requestIdentifier]
- if initialRequest.name in consts.Message.ClientRequestMessages:
- initialRequest['FcStatus'] = consts.RequestStatus.Removed
+ initialRequest['FcStatus'] |= consts.RequestStatus.Removed
+ if initialRequest.name in consts.Message.ClientKeyRequestMessages:
self.sendMessage(
consts.Message.RemovePersistentRequest,
Global=False,
@@ -1838,11 +1842,11 @@
@param requestMessage: (L{fcp2_0_message.Message})
@return: (str) request identifier
- @note: you can use this method to resend requests as listed in L{consts.Message.ClientRequestMessages}
+ @note: you can use this method to resend requests as listed in L{consts.Message.ClientKeyRequestMessages}
or L{consts.Message.ClientPluginMessages}. All attempts to resend other requests will fail
@note: the request passed is not removed in the call. Use L{removeRequest} if necessary
"""
- if requestMessage.name in consts.Message.ClientRequestMessages:
+ if requestMessage.name in consts.Message.ClientKeyRequestMessages:
self._registerRequest(
requestMessage,
requestMessage['FcUserData'],
@@ -1981,6 +1985,7 @@
msg = self.Message(
consts.Message.GetPluginInfo,
FcModified={},
+ FcStatus=consts.RequestStatus.Pending,
Identifier=identifier,
PluginName=pluginName,
Detailed=detailed,
@@ -2001,6 +2006,7 @@
msg = self.Message(
consts.Message.GetPluginInfo,
FcModified={},
+ FcStatus=consts.RequestStatus.Pending,
Identifier=identifier,
PluginName=pluginName,
**params
@@ -2033,6 +2039,7 @@
msg = self.Message(
consts.Message.GenerateSSK,
FcModified={},
+ FcStatus=consts.RequestStatus.Pending,
Identifier=identifier,
)
self._requests[identifier] = msg
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 15:21:55
|
Revision: 151
http://fclient.svn.sourceforge.net/fclient/?rev=151&view=rev
Author: jurner
Date: 2008-02-05 07:21:54 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
adapt to request status flags changes
Modified Paths:
--------------
trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py
Modified: trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py
===================================================================
--- trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py 2008-02-05 15:21:08 UTC (rev 150)
+++ trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py 2008-02-05 15:21:54 UTC (rev 151)
@@ -478,7 +478,8 @@
myIdentifier = self.fcpClient.getData(
'arbitrary-uri',
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
+ myRequest = self.fcpClient.getRequest(myIdentifier)
+ allRequests = self.fcpClient.getRequests()
# respond to the file request
self.sendResponseMessage(
@@ -489,7 +490,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestStarted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Started)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started)
)
self.assertHasNextEvent(None)
@@ -530,15 +531,44 @@
Global='false',
DataLength=len(data),
)
+
+ # client should complete and remove the request
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Complete | consts.RequestStatus.Removed),
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete | consts.RequestStatus.Removed),
data=data
)
+ self.failIf(myIdentifier in allRequests)
self.assertHasNextEvent(None)
-
+
+ # cheat a bit to test peristence == Forever (client should not remove request)
+ allRequests[myIdentifier] =myRequest
+ myRequest['Persistence'] = consts.Persistence.Forever
+ myRequest['FcStatus'] &= ~(consts.RequestStatus.Complete | consts.RequestStatus.Removed)
+ self.sendResponseMessage(
+ 'AllData',
+ data=data,
+ Identifier=myIdentifier,
+ Global='false',
+ DataLength=len(data),
+ )
+
+ # client should complete but not remove the request
+ self.assertHasNextEvent(
+ self.fcpClient.events.RequestCompleted,
+ consts.Message.ClientGet,
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete),
+ data=data
+ )
+ self.failUnless(myIdentifier in allRequests)
+ self.assertHasNextEvent(None)
+
+
+
+
+
def testGetData_Failure(self):
# request a arbitrary file
@@ -546,6 +576,7 @@
'arbitrary-uri',
)
myRequest = self.fcpClient.getRequest(myIdentifier)
+ allRequests = self.fcpClient.getRequests()
# respond to the file request
self.sendResponseMessage(
@@ -556,7 +587,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestStarted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Started)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started)
)
self.assertHasNextEvent(None)
@@ -568,14 +599,40 @@
Global='false',
# blah.. more here
)
+
+ # client should complete request and remove it
self.assertHasNextEvent(
self.fcpClient.events.RequestFailed,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed)
)
self.assertHasNextEvent(None)
+ #return
+
+ # cheat a bit to test peristence == Forever (client should not remove request)
+
+ allRequests[myIdentifier] =myRequest
+ myRequest['Persistence'] = consts.Persistence.Forever
+ myRequest['FcStatus'] &= ~(consts.RequestStatus.Error | consts.RequestStatus.Removed)
+ self.sendResponseMessage(
+ 'GetFailed',
+ Code='28', # All data not found
+ Identifier=myIdentifier,
+ Global='false',
+ # blah.. more here
+ )
+
+ # client should complete but not remove the request
+ self.assertHasNextEvent(
+ self.fcpClient.events.RequestFailed,
+ consts.Message.ClientGet,
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete | consts.RequestStatus.Error),
+ )
+ self.failUnless(myIdentifier in allRequests)
+ self.assertHasNextEvent(None)
+
def testGetFile_Success(self):
# request a arbitrary file
@@ -584,6 +641,8 @@
'arbitryry.txt'
)
myRequest = self.fcpClient.getRequest(myIdentifier)
+ allRequests = self.fcpClient.getRequests()
+
self.assertHasNextMessage(consts.Message.ClientGet)
# respond to the file request
@@ -595,7 +654,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestStarted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Started)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started)
)
self.assertHasNextEvent(None)
@@ -614,8 +673,9 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Complete | consts.RequestStatus.Removed)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete | consts.RequestStatus.Removed)
)
+ self.failIf(myIdentifier in allRequests)
self.assertHasNextEvent(None)
@@ -627,6 +687,8 @@
'arbitryry.txt'
)
myRequest = self.fcpClient.getRequest(myIdentifier)
+ allRequests = self.fcpClient.getRequests()
+
self.assertHasNextMessage(consts.Message.ClientGet)
# respond to the file request
@@ -638,7 +700,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestStarted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Started)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started)
)
self.assertHasNextEvent(None)
@@ -653,8 +715,9 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestFailed,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed)
)
+ self.failIf(myIdentifier in allRequests)
self.assertHasNextEvent(None)
@@ -667,6 +730,8 @@
persistence=consts.Persistence.Forever, # cheat a bit, so we can test multiple cases
)
myRequest = self.fcpClient.getRequest(myIdentifier)
+ allRequests = self.fcpClient.getRequests()
+
self.assertHasNextMessage(consts.Message.ClientGet)
# respond to the file request
@@ -678,7 +743,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestStarted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Started)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started)
)
self.assertHasNextEvent(None)
@@ -697,11 +762,13 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Complete | consts.RequestStatus.Removed)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete)
)
+ self.failIf(myIdentifier not in allRequests)
self.assertHasNextEvent(None)
# test specdial case where ProtocolError.TooBig is handled as success
+ myRequest['FcStatus'] &= ~(consts.RequestStatus.Complete)
self.sendResponseMessage(
'GetFailed',
Code='21', # Too big
@@ -712,11 +779,18 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Complete)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete)
)
self.assertHasNextEvent(None)
+
+ # cheat a bit to test persistence == Connection
+ myRequest['Persistence'] = consts.Persistence.Connection
+ myRequest['FcStatus'] = consts.RequestStatus.Started
+
+ ###########################################
+ ###########################################
-
+
def testGetKeyInfo_Failure(self):
# request a arbitrary file
@@ -735,7 +809,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestStarted,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Started)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started)
)
self.assertHasNextEvent(None)
@@ -750,7 +824,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestFailed,
consts.Message.ClientGet,
- ('FcStatus', consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed)
+ ('FcStatus', consts.RequestStatus.Pending | consts.RequestStatus.Started | consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed)
)
self.assertHasNextEvent(None)
@@ -892,12 +966,12 @@
'arbitryry.txt'
)
myRequest = self.fcpClient.getRequest(myIdentifier)
- identifier = myRequest['Identifier']
-
+ allRequests = self.fcpClient.getRequests()
+
self.fcpClient.removeRequest(myIdentifier)
self.sendResponseMessage(
'PersistentRequestRemoved',
- Identifier=identifier,
+ Identifier=myIdentifier,
)
self.messages = []
self.events = []
@@ -905,7 +979,7 @@
# throw a PersistentGet at the client with the identifier we hacked
self.sendResponseMessage(
'PersistentGet',
- Identifier=identifier,
+ Identifier=myIdentifier,
Global='false',
ReturnType='disk',
Verbosity='1',
@@ -918,9 +992,11 @@
msg = self.assertHasNextEvent(
self.fcpClient.events.RequestRestored,
consts.Message.ClientGet,
- ('Identifier', myIdentifier)
+ ('Identifier', myIdentifier),
+ ('FcStatus', consts.RequestStatus.Started), # no RequestStatus.Pending flag should be set here
)
+ self.failUnless(myIdentifier in allRequests)
self.assertHasNextEvent(None)
#***********************************************************************************
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 15:21:02
|
Revision: 150
http://fclient.svn.sourceforge.net/fclient/?rev=150&view=rev
Author: jurner
Date: 2008-02-05 07:21:08 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
another comb-over the request status flags
requests now pick up one after the other in the run through the client
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-05 15:19:28 UTC (rev 149)
+++ trunk/sandbox/fcp/fcp2_0_client.py 2008-02-05 15:21:08 UTC (rev 150)
@@ -311,7 +311,7 @@
'FcPersistentUserData': persistentUserData, # any user defined persistent data
# non persistent params
- 'FcStatus': consts.RequestStatus.Pending,
+ 'FcStatus': consts.RequestStatus.Null,
'FcErrorMessage': None, # did an error occur?
'FcUserData': userData, # any user defined runtime data here
@@ -372,6 +372,7 @@
)
msg['ClientToken'] = self.FcParams.messageToParams(msg)
+ msg['FcStatus'] |= consts.RequestStatus.Pending
msg['Identifier'] = identifier
self._requests[identifier] = msg
@@ -394,7 +395,7 @@
fcParams[self.FcParams.IPersistentUserData],
fcParams[self.FcParams.IFilenameCollision],
)
-
+
#FIX: remove Started param from PersistentGet / Put
if msg.name == consts.Message.PersistentGet:
del msg.params['Started']
@@ -843,7 +844,7 @@
if initialRequest is None:
return False
- initialRequest['FcStatus'] = consts.RequestStatus.Complete
+ initialRequest['FcStatus'] |= consts.RequestStatus.Complete
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
initialRequest['FcStatus'] |= consts.RequestStatus.Removed
@@ -857,13 +858,14 @@
if initialRequest is None:
return False
- initialRequest['FcStatus'] = consts.RequestStatus.Complete
+ initialRequest['FcStatus'] |= consts.RequestStatus.Complete
initialRequest['FcMetadataContentType'] = msg.get('Metadata.ContentType', '')
initialRequest['FcDataLength'] = msg.get('DataLength', '')
if initialRequest['FcSubType'] != consts.RequestSubType.GetData:
- initialRequest['FcStatus'] |= consts.RequestStatus.Removed
+
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
+ initialRequest['FcStatus'] |= consts.RequestStatus.Removed
del self._requests[requestIdentifier]
self.events.RequestCompleted(initialRequest)
return True
@@ -873,11 +875,9 @@
if initialRequest is None:
return False
- initialRequest['FcStatus'] = consts.RequestStatus.Null
-
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
- initialRequest['FcStatus'] = consts.RequestStatus.Removed
+ initialRequest['FcStatus'] |= consts.RequestStatus.Removed
del self._requests[requestIdentifier]
# check if it is one of our requests for key information
@@ -915,13 +915,13 @@
# restore request
self._requests[requestIdentifier] = restoredRequest
- restoredRequest['FcStatus'] = consts.RequestStatus.Started
+ restoredRequest['FcStatus'] |= consts.RequestStatus.Started
self.events.RequestRestored(restoredRequest)
return True
# known request... filter out multiple PersistentGets
- if initialRequest['FcStatus'] == consts.RequestStatus.Pending:
- initialRequest['FcStatus'] = consts.RequestStatus.Started
+ if not initialRequest['FcStatus'] & consts.RequestStatus.Started:
+ initialRequest['FcStatus'] |= consts.RequestStatus.Started
#TODO: update initialRequest with params from PersistentGet?
@@ -930,48 +930,7 @@
return True
- elif msg.name == consts.Message.PersistentPut:
-
- # unknown request... try to restore it
- if initialRequest is None:
- restoredRequest = self._restorePersistentRequestFromNode(msg)
-
- # not one of our requests... so cancel it
- if restoredRequest is None or CancelPersistentRequests:
- self.sendMessage(
- consts.Message.RemovePersistentRequest,
- Identifier=msg['Identifier'],
- Global=msg['Global'],
- )
- return True
-
- # determine initial message name
- if restoredRequest['FcSubType'] == consts.RequestSubType.Put:
- restoredRequest.name = consts.Message.ClientPut
- elif restoredRequest['FcSubType'] == consts.RequestSubType.PutDiskDir:
- restoredRequest.name = consts.Message.ClientPutDiskDir
- elif restoredRequest['FcSubType'] == consts.RequestSubType.PutComplexDir:
- restoredRequest.name = consts.Message.ClientPutComplexDir
-
- # restore request
- self._requests[requestIdentifier] = restoredRequest
- restoredRequest['FcStatus'] = consts.RequestStatus.Started
- self.events.RequestRestored(restoredRequest)
- return True
-
- # known request... filter out multiple PersistentGets
- if initialRequest['FcStatus'] == consts.RequestStatus.Pending:
- initialRequest['FcStatus'] = consts.RequestStatus.Started
-
- #TODO: update initialRequest with params from PersistentPut?
- #TODO: update initialRequest with params from PersistentPut?
-
- self.events.RequestStarted(initialRequest)
- return True
-
- return True
-
elif msg.name == consts.Message.PersistentRequestModified:
if initialRequest is None:
return False
@@ -1007,7 +966,8 @@
if initialRequest is None:
return False
- #TODO: notify user ???
+ #TODO: notify user ?
+ initialRequest['FcStatus'] |= consts.RequestStatus.Removed
del self._requests[requestIdentifier]
return True
@@ -1026,17 +986,52 @@
## put related
- elif msg.name == consts.Message.URIGenerated:
+ elif msg.name == consts.Message.PersistentPut:
+
+ # unknown request... try to restore it
if initialRequest is None:
- return False
- initialRequest['URI'] = msg['URI']
+ restoredRequest = self._restorePersistentRequestFromNode(msg)
+
+ # not one of our requests... so cancel it
+ if restoredRequest is None or CancelPersistentRequests:
+ self.sendMessage(
+ consts.Message.RemovePersistentRequest,
+ Identifier=msg['Identifier'],
+ Global=msg['Global'],
+ )
+ return True
+
+ # determine initial message name
+ if restoredRequest['FcSubType'] == consts.RequestSubType.Put:
+ restoredRequest.name = consts.Message.ClientPut
+ elif restoredRequest['FcSubType'] == consts.RequestSubType.PutDiskDir:
+ restoredRequest.name = consts.Message.ClientPutDiskDir
+ elif restoredRequest['FcSubType'] == consts.RequestSubType.PutComplexDir:
+ restoredRequest.name = consts.Message.ClientPutComplexDir
+
+ # restore request
+ self._requests[requestIdentifier] = restoredRequest
+ restoredRequest['FcStatus'] = consts.RequestStatus.Started
+ self.events.RequestRestored(restoredRequest)
+ return True
+
+ # known request... filter out multiple PersistentGets
+ if not initialRequest['FcStatus'] & consts.RequestStatus.Started:
+ initialRequest['FcStatus'] |= consts.RequestStatus.Started
+
+ #TODO: update initialRequest with params from PersistentPut?
+
+ self.events.RequestStarted(initialRequest)
+ return True
+
return True
+
elif msg.name == consts.Message.PutFailed:
if initialRequest is None:
return False
- initialRequest['FcStatus'] = consts.RequestStatus.Complete | consts.RequestStatus.Error
+ initialRequest['FcStatus'] |= consts.RequestStatus.Complete | consts.RequestStatus.Error
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
@@ -1064,7 +1059,7 @@
# TODO: StartupTime and CompletionTime are passed, but
# as long as no corrosponding params are passed in DataFound
# we ignore them
- initialRequest['FcStatus'] = consts.RequestStatus.Complete
+ initialRequest['FcStatus'] |= consts.RequestStatus.Complete
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
initialRequest['FcStatus'] |= consts.RequestStatus.Removed
@@ -1075,6 +1070,26 @@
return True
+ elif msg.name == consts.Message.URIGenerated:
+ if initialRequest is None:
+ return False
+ initialRequest['URI'] = msg['URI']
+ return True
+
+ elif msg.name == consts.Message.FinishedCompression:
+ if initialRequest is None:
+ return False
+ initialRequest['FcStatus'] |= consts.RequestStatus.Compressed
+ self.events.RequestCompressionFinished(initialRequest)
+ return True
+
+ elif msg.name == consts.Message.StartedCompression:
+ if initialRequest is None:
+ return False
+ initialRequest['FcStatus'] |= consts.RequestStatus.Compressing
+ self.events.RequestCompressionStarted(initialRequest)
+ return True
+
####################################################
##
## Peer related messages
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 15:19:27
|
Revision: 149
http://fclient.svn.sourceforge.net/fclient/?rev=149&view=rev
Author: jurner
Date: 2008-02-05 07:19:28 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
docs
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_consts.py
Modified: trunk/sandbox/fcp/fcp2_0_consts.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_consts.py 2008-02-05 12:27:53 UTC (rev 148)
+++ trunk/sandbox/fcp/fcp2_0_consts.py 2008-02-05 15:19:28 UTC (rev 149)
@@ -296,20 +296,31 @@
class RequestStatus:
+ """Request status flags
+ @cvar Null: no status
+ @cvar Pending: the request is not started yet
+ @cvar Compressing: the request is about to be compressed
+ @cvar Compressed: compressing is completed
+ @cvar Complete: the request is completed
+ @cvar Error: an error occured while processing ther request
+ @cvar Removed: the request is no longer present in the client (and on the nodes queue)
+
+ @note: the FcStatus member of the params dict of a request should contain one or more
+ of the bitflags it picked up while running through the client.
+ """
Null = 0x0
Pending = 0x1
Compressing = 0x2
- Started = 0x4
- Complete = 0x8
- Error = 0x10
- Removed = 0x20
- RestoreFailed = 0x40
+ Compressed = 0x4
+ Started = 0x8
+ Complete = 0x10
+ Error = 0x20
+ Removed = 0x40
+
-
class RequestSubType:
"""Consts indicating the subtype of a message"""
- # some additional consts
Null = 0
GetData = 1
GetFile = 2
@@ -362,6 +373,9 @@
@cvar Identifier: the identifier has been moodified
@cvar PersistentUserData: thepersistent user data has been modified
@cvar PriorityClass: the priority class has been modified
+
+ @note: the FcModified member of the params dict of a request may contain
+ one or more of the bitflags
"""
Null = 0x0
Filename = 0x8
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 12:27:51
|
Revision: 148
http://fclient.svn.sourceforge.net/fclient/?rev=148&view=rev
Author: jurner
Date: 2008-02-05 04:27:53 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
adapt
Modified Paths:
--------------
trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py
Modified: trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py
===================================================================
--- trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py 2008-02-05 12:27:18 UTC (rev 147)
+++ trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py 2008-02-05 12:27:53 UTC (rev 148)
@@ -64,7 +64,7 @@
def connectClient(self):
"""Connects to the client"""
- enum = self.fcpClient.connect(duration=0.2, timeout=0.1)
+ enum = self.fcpClient.iterConnect(duration=0.2, timeout=0.1)
msg = enum.next()
self.failIf(msg is not None)
#NOTE: have to send directly via socket here (our sendResponseMessage
@@ -198,8 +198,7 @@
# conect all events
self.events = [] # events received from the client
- for eventName in self.fcpClient.Events._events_:
- event = getattr(self.fcpClient.events, eventName)
+ for event in self.fcpClient.events:
event += self._captureEventsFromClient
# capture all messages the client sent
@@ -210,8 +209,7 @@
fcp2_0_client.socket = self.oldSocketModule
# disconnect all events
- for eventName in self.fcpClient.Events._events_:
- event = getattr(self.fcpClient.events, eventName)
+ for event in self.fcpClient.events:
event -= self._captureEventsFromClient
# clean up tmpfiles
for fpath in self.tmpfiles: os.remove(fpath)
@@ -245,8 +243,30 @@
self.failUnless(self.socket.closed)
- def testConnect_Failure(self):
+
+ def testConnect(self):
+ nodeHello = self.fcpClient.connect(duration=0.2, timeout=0.1)
+ self.failIf(nodeHello is not None)
+ self.socket.sendResponseMessage(
+ 'NodeHello',
+ FCPVersion='2.0',
+ Node='Fred',
+ Version=str(self.fcpClient.ExpectedFcpVersion),
+ Revision='999999999999',
+ Build='9999999999',
+ ExRevision='9999999999',
+ Testnet='false',
+ CompressionCodecs='1',
+ ConnectionIdentifier='any',
+ NodeLanguage='en',
+ )
+ nodeHello = self.fcpClient.connect(duration=0.2, timeout=0.1)
+ self.failIf(nodeHello is None)
+
+
+ def testIterConnect_Failure(self):
+
# simulate a failed connection attempt
enum = self.fcpClient.connect(duration=0.2, timeout=0.1)
t0 = time.time()
@@ -274,10 +294,10 @@
self.failUnless(self.socket.closed)
- def testConnect_Success(self):
+ def testIterConnect_Success(self):
# simulate a successful connection attempt
- enum = self.fcpClient.connect(duration=0.2, timeout=0.1)
+ enum = self.fcpClient.iterConnect(duration=0.2, timeout=0.1)
msg = enum.next()
self.failIf(msg is not None)
@@ -394,7 +414,7 @@
def testVersionMismatch(self):
# cheat a bit and reconnect client
- enum = self.fcpClient.connect(duration=0.2, timeout=0.1)
+ enum = self.fcpClient.iterConnect(duration=0.2, timeout=0.1)
msg = enum.next()
self.failIf(msg is not None)
@@ -449,7 +469,7 @@
self.failUnless(self.fcpClient.getRequests() )
myRequest = self.fcpClient.getRequest(myIdentifier)
self.assertEqual(myIdentifier, myRequest['Identifier'])
- self.assertEqual(myRequest['FcStatus'], consts.MessageStatus.Pending)
+ self.assertEqual(myRequest['FcStatus'], consts.RequestStatus.Pending)
def testGetData_Success(self):
@@ -469,7 +489,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestStarted,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Started)
+ ('FcStatus', consts.RequestStatus.Started)
)
self.assertHasNextEvent(None)
@@ -513,7 +533,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Complete),
+ ('FcStatus', consts.RequestStatus.Complete | consts.RequestStatus.Removed),
data=data
)
self.assertHasNextEvent(None)
@@ -536,7 +556,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestStarted,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Started)
+ ('FcStatus', consts.RequestStatus.Started)
)
self.assertHasNextEvent(None)
@@ -551,7 +571,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestFailed,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Error)
+ ('FcStatus', consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed)
)
self.assertHasNextEvent(None)
@@ -575,7 +595,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestStarted,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Started)
+ ('FcStatus', consts.RequestStatus.Started)
)
self.assertHasNextEvent(None)
@@ -594,7 +614,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Complete)
+ ('FcStatus', consts.RequestStatus.Complete | consts.RequestStatus.Removed)
)
self.assertHasNextEvent(None)
@@ -618,7 +638,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestStarted,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Started)
+ ('FcStatus', consts.RequestStatus.Started)
)
self.assertHasNextEvent(None)
@@ -633,7 +653,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestFailed,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Error)
+ ('FcStatus', consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed)
)
self.assertHasNextEvent(None)
@@ -658,7 +678,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestStarted,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Started)
+ ('FcStatus', consts.RequestStatus.Started)
)
self.assertHasNextEvent(None)
@@ -677,7 +697,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Complete)
+ ('FcStatus', consts.RequestStatus.Complete | consts.RequestStatus.Removed)
)
self.assertHasNextEvent(None)
@@ -692,7 +712,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Complete)
+ ('FcStatus', consts.RequestStatus.Complete)
)
self.assertHasNextEvent(None)
@@ -715,7 +735,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestStarted,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Started)
+ ('FcStatus', consts.RequestStatus.Started)
)
self.assertHasNextEvent(None)
@@ -730,7 +750,7 @@
self.assertHasNextEvent(
self.fcpClient.events.RequestFailed,
consts.Message.ClientGet,
- ('FcStatus', consts.MessageStatus.Error)
+ ('FcStatus', consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed)
)
self.assertHasNextEvent(None)
@@ -812,7 +832,7 @@
# status of our request should be set to removed emidiately, but it should
# not be removed from the client
- self.assertEqual(myRequest['FcStatus'], consts.MessageStatus.Removed)
+ self.assertEqual(myRequest['FcStatus'], consts.RequestStatus.Removed)
self.failUnless(myIdentifier in self.fcpClient.getRequests())
# client schould send a RemovePersistentRequest
@@ -873,7 +893,7 @@
)
myRequest = self.fcpClient.getRequest(myIdentifier)
identifier = myRequest['Identifier']
-
+
self.fcpClient.removeRequest(myIdentifier)
self.sendResponseMessage(
'PersistentRequestRemoved',
@@ -895,7 +915,7 @@
)
# check if the client restored the request
- self.assertHasNextEvent(
+ msg = self.assertHasNextEvent(
self.fcpClient.events.RequestRestored,
consts.Message.ClientGet,
('Identifier', myIdentifier)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 12:27:14
|
Revision: 147
http://fclient.svn.sourceforge.net/fclient/?rev=147&view=rev
Author: jurner
Date: 2008-02-05 04:27:18 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
fix: added modified dict to all requests
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-05 12:26:13 UTC (rev 146)
+++ trunk/sandbox/fcp/fcp2_0_client.py 2008-02-05 12:27:18 UTC (rev 147)
@@ -596,7 +596,7 @@
@return: True if the message was handled, False otherwise
"""
- CancelPersistentRequests = 1 # for testing... if True, cancels all PersistentRequests
+ CancelPersistentRequests = 0 # for testing... if True, cancels all PersistentRequests
if msg.name == consts.Message.ClientSocketTimeout:
return True
@@ -614,7 +614,13 @@
if initialRequest is not None:
# resend request with new identifier
- newIdentifier = self.FcParams.newUuid(uuids=self._requests)
+ #TODO: just an assumption that pugin related messages my end up here
+ if initialRequest.name in (consts.Message.GetPluginInfo, consts.Message.FCPPlugin):
+ identifierPrefix = self.IdentifierPrefixPluginMessage
+ else:
+ identifierPrefix = self.IdentifierPrefixRequest
+
+ newIdentifier = self.FcParams.newUuid(prefix=identifierPrefix, uuids=self._requests)
self._requests[newIdentifier] = initialRequest
del self._requests[requestIdentifier]
initialRequest['Identifier'] = newIdentifier
@@ -1959,6 +1965,7 @@
identifier = self.FcParam.newUuid(prefix=self.IdentifierPrefixPluginMessage, uuids=self._requests)
msg = self.Message(
consts.Message.GetPluginInfo,
+ FcModified={},
Identifier=identifier,
PluginName=pluginName,
Detailed=detailed,
@@ -1978,6 +1985,7 @@
identifier = self.FcParam.newUuid(prefix=self.IdentifierPrefixPluginMessage, uuids=self._requests)
msg = self.Message(
consts.Message.GetPluginInfo,
+ FcModified={},
Identifier=identifier,
PluginName=pluginName,
**params
@@ -2009,6 +2017,7 @@
identifier = self.FcParams.newUuid(prefix=prefix, uuids=self._requests)
msg = self.Message(
consts.Message.GenerateSSK,
+ FcModified={},
Identifier=identifier,
)
self._requests[identifier] = msg
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 12:26:08
|
Revision: 146
http://fclient.svn.sourceforge.net/fclient/?rev=146&view=rev
Author: jurner
Date: 2008-02-05 04:26:13 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
...
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_consts.py
Modified: trunk/sandbox/fcp/fcp2_0_consts.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_consts.py 2008-02-05 12:11:06 UTC (rev 145)
+++ trunk/sandbox/fcp/fcp2_0_consts.py 2008-02-05 12:26:13 UTC (rev 146)
@@ -363,6 +363,7 @@
@cvar PersistentUserData: thepersistent user data has been modified
@cvar PriorityClass: the priority class has been modified
"""
+ Null = 0x0
Filename = 0x8
Identifier = 0x4
PersistentUserData = 0x1
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 12:11:05
|
Revision: 145
http://fclient.svn.sourceforge.net/fclient/?rev=145&view=rev
Author: jurner
Date: 2008-02-05 04:11:06 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
added prefix param
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_params.py
Modified: trunk/sandbox/fcp/fcp2_0_params.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_params.py 2008-02-05 12:10:33 UTC (rev 144)
+++ trunk/sandbox/fcp/fcp2_0_params.py 2008-02-05 12:11:06 UTC (rev 145)
@@ -132,16 +132,19 @@
-def newUuid(uuids=None):
+def newUuid(prefix=None, uuids=None):
"""Creates a new unique identifier
+ @param prefix: (str) identifier prefix or None
@param uuids: if desired any iterable containing uuids to enshure the identifier is unique in the iterable
@return: (str) uuid
"""
- uuid_ = uuid.uuid_time()
+ if prefix is None:
+ prefix = ''
+ uuid_ = prefix + uuid.uuid_time()
if uuids is not None:
while uuid_ in uuids:
- uuid_ = uuid_time()
+ uuid_ = prefix + uuid_time()
return uuid_
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 12:10:28
|
Revision: 144
http://fclient.svn.sourceforge.net/fclient/?rev=144&view=rev
Author: jurner
Date: 2008-02-05 04:10:33 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
beautifications
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_events.py
Modified: trunk/sandbox/fcp/fcp2_0_events.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_events.py 2008-02-05 12:10:05 UTC (rev 143)
+++ trunk/sandbox/fcp/fcp2_0_events.py 2008-02-05 12:10:33 UTC (rev 144)
@@ -63,7 +63,7 @@
#TODO: not used currently
class ProtocolError(events.Event):
- """A protocol error was encountered"""
+ """A protocol error occured"""
class RequestCompleted(events.Event):
"""A request has been completed"""
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 12:10:03
|
Revision: 143
http://fclient.svn.sourceforge.net/fclient/?rev=143&view=rev
Author: jurner
Date: 2008-02-05 04:10:05 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
beautifications
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_consts.py
Modified: trunk/sandbox/fcp/fcp2_0_consts.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_consts.py 2008-02-05 12:09:32 UTC (rev 142)
+++ trunk/sandbox/fcp/fcp2_0_consts.py 2008-02-05 12:10:05 UTC (rev 143)
@@ -204,7 +204,7 @@
KeyboardInterrupt = 'keyboard interrupt' # kick out
SocketDied = 'socket died'
-
+ AllRequestsCompleted = 'All requests completed'
class Message:
@@ -295,7 +295,7 @@
-class MessageStatus:
+class RequestStatus:
Null = 0x0
Pending = 0x1
Compressing = 0x2
@@ -306,7 +306,7 @@
RestoreFailed = 0x40
-class MessageSubType:
+class RequestSubType:
"""Consts indicating the subtype of a message"""
# some additional consts
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 12:09:29
|
Revision: 142
http://fclient.svn.sourceforge.net/fclient/?rev=142&view=rev
Author: jurner
Date: 2008-02-05 04:09:32 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
added iterConnect and run methods
++ some fixes
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-05 12:08:45 UTC (rev 141)
+++ trunk/sandbox/fcp/fcp2_0_client.py 2008-02-05 12:09:32 UTC (rev 142)
@@ -8,7 +8,58 @@
@note: The client implementation never uses or watches the global queue. No implementation
should ever do so. Global is evil.
+
+
+Sample code, request data of a freenet key::
+
+ client = FcpClient()
+ nodeHello = client.connect()
+ if nodeHello is None:
+ pass
+ # something went wrong ..could not connect to the freenet node
+ else:
+ # request data associated to a freenet key
+ myRequestIdentifier = client.getData('CHK@ABCDE.......')
+ myRequest = c.getRequest(myIdentifier)
+ c.run()
+ print myRequest.data
+
+Usually you would connect handlers to client events to do processing or handle errors::
+
+ def handleSuccess(event, request):
+ print 'Here is the data:', request.data
+
+ def handleFailure(event, request):
+ print 'Too bad, something went wrong'
+
+ client.events.RequestCompleted += handleSuccess
+ client.events.RequestFailed += handleFailure
+
+ client.getData('CHK@ABCDE.......')
+ c.run()
+
+
+Instead of calling run() you may run the client step by step::
+
+ client.getData('CHK@ABCDE.......')
+ for i in xrange(50):
+ client.next()
+
+You may disconnect event handlers aswell::
+
+ client.events.RequestCompleted -= handleSuccess
+ client.events.RequestFailed -= handleFailure
+
+
+Multiple event handlers may be connected / disconnected at once::
+
+ client.events += (
+ (client.events.RequestCompleted, handleSuccess),
+ (client.events.RequestFailed, handleFailure)
+ )
+
+
"""
@@ -115,7 +166,6 @@
import fcp2_0_params as FcParams
from fcp2_0_requests import Upload
from fcp2_0_uri import Uri
-
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
@@ -199,6 +249,11 @@
ExpectedFcpVersion = 2.0
ExpectedNodeBuild = 1107
+ IdentifierPrefixRequest = 'request:'
+ IdentifierPrefixGenerateSSK = 'ssk:'
+ IdentifierPrefixGenerateUSK = 'usk:'
+ IdentifierPrefixPluginMessage = 'plugin:'
+
consts = consts
Config = Config
Message = Message
@@ -219,7 +274,6 @@
"""
self._connectionName = self.setConnectionName(connectionName)
self._ddaTests = [] # currently running DDA tests (request0, ... requestN)
- self._sskRequests = [] # currently pending ssk requests (identifier1... identiferN)
self._requests = {} # currently running requests (requestIdentifier --> request)
self._log = logging.getLogger(self.__class__.__name__)
@@ -257,7 +311,7 @@
'FcPersistentUserData': persistentUserData, # any user defined persistent data
# non persistent params
- 'FcStatus': consts.MessageStatus.Pending,
+ 'FcStatus': consts.RequestStatus.Pending,
'FcErrorMessage': None, # did an error occur?
'FcUserData': userData, # any user defined runtime data here
@@ -305,7 +359,7 @@
@return: (str) uuid
@note: the identifier returned is unique to the client but may not be unique to the node
"""
- identifier = self.FcParams.newUuid(uuids=self._requests)
+ identifier = self.FcParams.newUuid(prefix=self.IdentifierPrefixRequest, uuids=self._requests)
# add additional params to msg
msg = self._addFcParamsToRequest(
@@ -372,14 +426,29 @@
saveRemoveFile(initialRequest['FcTestDDA']['TmpFile'])
self._ddaTests = []
- self._sskRequests = []
self._requests = {}
def closeFreenet(self):
"""Shuts down the freenet node"""
self.sendMessage(consts.Message.Shutdown)
+
def connect(self, host=DefaultFcpHost, port=DefaultFcpPort, duration=20, timeout=0.5):
+ """Connects to the freenet node
+ @param host: (str) host of th node
+ @param port: (int) port of the node
+ @param duration: (int) how many seconds try to connect before giving up
+ @param timeout: (int) how much time to wait before another attempt to connect
+
+ @return: (L{fcp2_0_message.Message}) NodeHello or None if no connection could be established
+ """
+ nodeHello = None
+ for nodeHello in self.iterConnect(host=host, port=port, duration=duration, timeout=timeout):
+ pass
+ return nodeHello
+
+
+ def iterConnect(self, host=DefaultFcpHost, port=DefaultFcpPort, duration=20, timeout=0.5):
"""Iterator to stablish a connection to a freenet node
@param host: (str) host of th node
@param port: (int) port of the node
@@ -527,7 +596,7 @@
@return: True if the message was handled, False otherwise
"""
- CancelPersistentRequests = 0 # for testing... if True, cancels all PersistentRequests
+ CancelPersistentRequests = 1 # for testing... if True, cancels all PersistentRequests
if msg.name == consts.Message.ClientSocketTimeout:
return True
@@ -650,7 +719,7 @@
# NOTE: Fcp already removed the request
del self._requests[requestIdentifier]
initialRequest['FcErrorMessage'] = msg
- initialRequest['FcStatus'] = consts.MessageStatus.Error | consts.MessageStatus.Removed
+ initialRequest['FcStatus'] = consts.RequestStatus.Complete | consts.RequestStatus.Error | consts.RequestStatus.Removed
self.events.RequestFailed(initialRequest)
return True
@@ -733,7 +802,7 @@
#TODO: check if errorMsg gives reasonable feedback
del self._requests[initialRequest['Identifier']]
- initialRequest['FcStatus'] = consts.MessageStatus.Error | consts.MessageStatus.Removed
+ initialRequest['FcStatus'] = consts.RequestStatus.Error | consts.RequestStatus.Removed
initialRequest['FcErrorMessage'] = initialRequest['FcTestDDA']['ErrorMsg']
self.events.ProtocolError(initialRequest)
return True
@@ -768,10 +837,10 @@
if initialRequest is None:
return False
- initialRequest['FcStatus'] = consts.MessageStatus.Complete
+ initialRequest['FcStatus'] = consts.RequestStatus.Complete
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
- initialRequest['FcStatus'] |= consts.MessageStatus.Removed
+ initialRequest['FcStatus'] |= consts.RequestStatus.Removed
del self._requests[requestIdentifier]
initialRequest.data = msg.data
@@ -782,11 +851,11 @@
if initialRequest is None:
return False
- initialRequest['FcStatus'] = consts.MessageStatus.Complete
+ initialRequest['FcStatus'] = consts.RequestStatus.Complete
initialRequest['FcMetadataContentType'] = msg.get('Metadata.ContentType', '')
initialRequest['FcDataLength'] = msg.get('DataLength', '')
- if initialRequest['FcSubType'] != consts.MessageSubType.GetData:
- initialRequest['FcStatus'] |= consts.MessageStatus.Removed
+ if initialRequest['FcSubType'] != consts.RequestSubType.GetData:
+ initialRequest['FcStatus'] |= consts.RequestStatus.Removed
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
del self._requests[requestIdentifier]
@@ -798,23 +867,23 @@
if initialRequest is None:
return False
- initialRequest['FcStatus'] = consts.MessageStatus.Null
+ initialRequest['FcStatus'] = consts.RequestStatus.Null
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
- initialRequest['FcStatus'] = consts.MessageStatus.Removed
+ initialRequest['FcStatus'] = consts.RequestStatus.Removed
del self._requests[requestIdentifier]
# check if it is one of our requests for key information
code = msg['Code']
- if code == consts.FetchError.TooBig and initialRequest['FcSubType'] == consts.MessageSubType.GetKeyInfo:
- initialRequest['FcStatus'] |= consts.MessageStatus.Complete
+ if code == consts.FetchError.TooBig and initialRequest['FcSubType'] == consts.RequestSubType.GetKeyInfo:
+ initialRequest['FcStatus'] |= consts.RequestStatus.Complete
initialRequest['FcMetadataContentType'] = msg.get('ExpectedMetadata.ContentType', '')
initialRequest['FcDataLength'] = msg.get('ExpectedDataLength', -1)
self.events.RequestCompleted(initialRequest)
else:
initialRequest['FcErrorMessage'] = msg
- initialRequest['FcStatus'] |= consts.MessageStatus.Error
+ initialRequest['FcStatus'] |= consts.RequestStatus.Complete | consts.RequestStatus.Error
self.events.RequestFailed(initialRequest)
return True
@@ -840,13 +909,13 @@
# restore request
self._requests[requestIdentifier] = restoredRequest
- restoredRequest['FcStatus'] = consts.MessageStatus.Started
+ restoredRequest['FcStatus'] = consts.RequestStatus.Started
self.events.RequestRestored(restoredRequest)
return True
# known request... filter out multiple PersistentGets
- if initialRequest['FcStatus'] == consts.MessageStatus.Pending:
- initialRequest['FcStatus'] = consts.MessageStatus.Started
+ if initialRequest['FcStatus'] == consts.RequestStatus.Pending:
+ initialRequest['FcStatus'] = consts.RequestStatus.Started
#TODO: update initialRequest with params from PersistentGet?
@@ -871,22 +940,22 @@
return True
# determine initial message name
- if restoredRequest['FcSubType'] == consts.MessageSubType.Put:
+ if restoredRequest['FcSubType'] == consts.RequestSubType.Put:
restoredRequest.name = consts.Message.ClientPut
- elif restoredRequest['FcSubType'] == consts.MessageSubType.PutDiskDir:
+ elif restoredRequest['FcSubType'] == consts.RequestSubType.PutDiskDir:
restoredRequest.name = consts.Message.ClientPutDiskDir
- elif restoredRequest['FcSubType'] == consts.MessageSubType.PutComplexDir:
+ elif restoredRequest['FcSubType'] == consts.RequestSubType.PutComplexDir:
restoredRequest.name = consts.Message.ClientPutComplexDir
# restore request
self._requests[requestIdentifier] = restoredRequest
- restoredRequest['FcStatus'] = consts.MessageStatus.Started
+ restoredRequest['FcStatus'] = consts.RequestStatus.Started
self.events.RequestRestored(restoredRequest)
return True
# known request... filter out multiple PersistentGets
- if initialRequest['FcStatus'] == consts.MessageStatus.Pending:
- initialRequest['FcStatus'] = consts.MessageStatus.Started
+ if initialRequest['FcStatus'] == consts.RequestStatus.Pending:
+ initialRequest['FcStatus'] = consts.RequestStatus.Started
#TODO: update initialRequest with params from PersistentPut?
#TODO: update initialRequest with params from PersistentPut?
@@ -961,11 +1030,11 @@
if initialRequest is None:
return False
- initialRequest['FcStatus'] = consts.MessageStatus.Error
+ initialRequest['FcStatus'] = consts.RequestStatus.Complete | consts.RequestStatus.Error
# Fcp removes requests from queue with Persistence.Connection.. so do we
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
- initialRequest['FcStatus'] |= consts.MessageStatus.Removed
+ initialRequest['FcStatus'] |= consts.RequestStatus.Removed
del self._requests[requestIdentifier]
initialRequest['FcErrorMessage'] = msg
@@ -989,10 +1058,10 @@
# TODO: StartupTime and CompletionTime are passed, but
# as long as no corrosponding params are passed in DataFound
# we ignore them
- initialRequest['FcStatus'] = consts.MessageStatus.Complete
+ initialRequest['FcStatus'] = consts.RequestStatus.Complete
if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
- initialRequest['FcStatus'] |= consts.MessageStatus.Removed
+ initialRequest['FcStatus'] |= consts.RequestStatus.Removed
del self._requests[requestIdentifier]
initialRequest['URI'] = msg['URI']
@@ -1038,7 +1107,7 @@
if initialRequest is None:
return False
- self._pluginRequests[requestIdentifier]
+ del self._pluginRequests[requestIdentifier]
self.events.PluginInfo(msg)
return True
@@ -1066,17 +1135,22 @@
elif msg.name == consts.Message.SSKKeypair:
- if requestIdentifier not in self._sskRequests:
+ if requestIdentifier not in self._requests:
return False
- self._sskRequests.remove(requestIdentifier)
+ del self._requests[requestIdentifier]
#TODO:no idea if the node may pass uris with prefixes like 'freenet:'... strip it anyways
insertURI = self.Uri(msg['InsertURI']).uri
requestURI = self.Uri(msg['RequestURI']).uri
- keyType = consts.KeyType.USK if requestIdentifier.startswith(consts.KeyType.USK) else consts.KeyType.SSK
- if keyType == consts.KeyType.USK:
+
+
+ createUSK = True if requestIdentifier.startswith(self.IdentifierPrefixGenerateUSK) else False
+ if createUSK:
insertURI = requestURI.replace(consts.KeyType.SSK, consts.KeyType.USK, 1)
requestURI = requestURI.replace(consts.KeyType.SSK, consts.KeyType.USK, 1)
+ keyType = consts.KeyType.USK
+ else:
+ keyType = consts.KeyType.SSK
msg['InsertURI'] = insertURI
msg['RequestURI'] = requestURI
@@ -1099,9 +1173,12 @@
def next(self, dispatch=True):
"""Pumps the next message waiting
@param dispatch: if True the message is dispatched to L{handleMessage}
+ @note: use this method to run the client step by step. If you want to run the
+ client unconditionally use L{run}
"""
msg = self.Message.fromSocket(self._socket)
if msg.name == consts.Message.ClientSocketDied:
+ self._log.info(consts.LogMessages.SocketDied)
if dispatch:
msg = self.Message(
consts.Message.ClientDisconnected,
@@ -1121,6 +1198,40 @@
return msg
+ def run(self):
+ """Runs the client unconditionally untill all requests have completed
+ @note: a KeyboardInterrupt will stop the client
+ """
+
+ #n = 0
+ while True:
+ #n += 1
+ #if n > 50: break
+
+ # check if we have running requests
+
+ # assert all requests have completed
+ status = consts.RequestStatus.Complete
+ for request in self._requests.values():
+ tmp_status = request.params.get('FcStatus', consts.RequestStatus.Null)
+ if not tmp_status & consts.RequestStatus.Complete:
+ status = consts.RequestStatus.Null
+ break
+
+ if status == consts.RequestStatus.Complete:
+ self._log.info(consts.LogMessages.AllRequestsCompleted)
+ break
+
+ try:
+ msg = self.next()
+ except KeyboardInterrupt:
+ self._log.info(consts.LogMessages.KeyboardInterrupt)
+ break
+
+ if msg.name == consts.Message.ClientSocketDied:
+ break
+
+
def sendMessage(self, name, data=None, **params):
"""Sends a message to freenet
@param name: name of the message to send
@@ -1217,7 +1328,7 @@
):
"""Requests a key from the node
@param uri: (str) uri of the file to request (may contain prefixes like 'freenet:' or 'http://')
- @param messageSubType: (L{consts.MessageSubType}) sub type of the message
+ @param messageSubType: (L{consts.RequestSubType}) sub type of the message
@param userData: any non persistent data to associate to the request or None
@param persistentUserData: any string to associate to the request as persistent data or None
@param filenameCollision: what to do if the disk target alreaady exists. One of the FilenameCollision.* consts
@@ -1290,7 +1401,7 @@
"""
return self.clientGet(
uri,
- consts.MessageSubType.GetData,
+ consts.RequestSubType.GetData,
userData,
persistentUserData,
consts.FilenameCollision.HandleNever,
@@ -1359,7 +1470,7 @@
"""
return self.clientGet(
uri,
- consts.MessageSubType.GetFile,
+ consts.RequestSubType.GetFile,
userData,
persistentUserData,
filenameCollision,
@@ -1420,7 +1531,7 @@
# how to retrieve meta info about a key? ...idea is to provoke a GetFailed (TooBig)
return self.clientGet(
uri,
- consts.MessageSubType.GetKeyInfo,
+ consts.RequestSubType.GetKeyInfo,
userData,
persistentUserData,
consts.FilenameCollision.HandleNever,
@@ -1461,40 +1572,9 @@
########################################################
##
- ## ClientPut related methods
+ ## CHK ClientPut related methods
##
########################################################
- def putUpload(self, upload, userData=None, persistentUserData=''):
-
- msg = upload.getMessage(self.Message)
- if msg is None:
- raise ValueError('Nothing to upload')
-
- # determine SubType
- if msg.name == consts.Message.ClientPut:
- messageSubType = consts.MessageSubType.Put
- elif msg.name == consts.Message.ClientPutDiskDir:
- messageSubType = consts.MessageSubType.PutDiskDir
- else:
- messageSubType = consts.MessageSubType.PutComplexDir
-
- self._registerRequest(
- msg,
- userData,
- messageSubType,
- time.time(),
- persistentUserData,
- #filenameCollision=filenameCollision,
- )
-
- if upload.keyType in (consts.KeyType.SSK, consts.KeyType.USK):
- msg['FcInsertUri'] = upload.privateKey
- #NOTE: the caller may use the 'FcInsertUri' member to store the private key
-
- self.sendMessageEx(msg)
- return msg['Identifier']
-
-
def clientPut(self,
uri,
messageSubType,
@@ -1506,7 +1586,7 @@
msg = self.Message(consts.Message.ClientPut, URI=uri)
for paramName, value in messageParams.items():
if value is not None:
- if param == 'ContentType':
+ if paramName == 'ContentType':
param = 'Metadata.ContentType'
msg[paramName] = value
if data is not None:
@@ -1529,7 +1609,7 @@
#CHK
- def putData(self,
+ def chkPutData(self,
data,
contentType=None,
@@ -1546,7 +1626,7 @@
return self.clientPut(
consts.KeyType.CHK,
- consts.MessageSubType.Put,
+ consts.RequestSubType.Put,
userData,
persistentUserData,
data,
@@ -1566,7 +1646,12 @@
Verbosity=consts.Verbosity.ReportProgress | consts.Verbosity.ReportCompression,
)
- def putFile(self,
+ def chkPutDir(self):
+
+ pass
+
+
+ def chkPutFile(self,
filename,
contentType=None,
@@ -1581,8 +1666,8 @@
):
return self.clientPut(
- concts.KeyType.CHK,
- consts.MessageSubType.Put,
+ consts.KeyType.CHK,
+ consts.RequestSubType.Put,
userData,
persistentUserData,
None,
@@ -1602,9 +1687,61 @@
Verbosity=consts.Verbosity.ReportProgress | consts.Verbosity.ReportCompression,
)
+
+ def chkPutMultiple(self,
+ items,
+ defaultName=None,
+ ):
+
+ msg = self.Message(
+ consts.PutComplexDir,
+ URI=consts.KeyType.CHK
+
+ )
+
+ for n, item in enumerate(items):
+
+ for paramName, value in item.items():
+ pass
+
+ ########################################################
+ ##
+ ## SSK ClientPut related methods
+ ##
+ ########################################################
+ def sskPutData(self):
+ pass
+
+ def sskPutDir(self):
+ pass
+ def sskPutFile(self):
+ pass
+
+
+ def sskPutMultiple(self):
+ pass
+
########################################################
##
+ ## USK ClientPut related methods
+ ##
+ ########################################################
+ def uskPutData(self):
+ pass
+
+ def uskPutDir(self):
+ pass
+
+ def uskPutFile(self):
+ pass
+
+
+ def uskPutMultiple(self):
+ pass
+
+ ########################################################
+ ##
## request related methods
##
########################################################
@@ -1662,7 +1799,7 @@
"""
initialRequest = self._requests[requestIdentifier]
if initialRequest.name in consts.Message.ClientRequestMessages:
- initialRequest['FcStatus'] = consts.MessageStatus.Removed
+ initialRequest['FcStatus'] = consts.RequestStatus.Removed
self.sendMessage(
consts.Message.RemovePersistentRequest,
Global=False,
@@ -1813,15 +1950,13 @@
## plugins
##
##########################################################
- #TODO: curently it is just a guess the a plugin may respond with a IdentifierCollision. To make
- # shure we register plugin related stuff as request
def getPluginInfo(self, pluginName, detailed=False):
"""Requests information about a plugin
@param pluginName: (str) name of the plugin to request info for
@param detailed: (bool) If True, detailed information is returned
@return: (str) request identifier
"""
- identifier = self.FcParam.newUuid(uuids=self._requests)
+ identifier = self.FcParam.newUuid(prefix=self.IdentifierPrefixPluginMessage, uuids=self._requests)
msg = self.Message(
consts.Message.GetPluginInfo,
Identifier=identifier,
@@ -1840,7 +1975,7 @@
@param data: (str) data to pass along with the messaage or None
@return: (str) request identifier
"""
- identifier = self.FcParam.newUuid(uuids=self._requests)
+ identifier = self.FcParam.newUuid(prefix=self.IdentifierPrefixPluginMessage, uuids=self._requests)
msg = self.Message(
consts.Message.GetPluginInfo,
Identifier=identifier,
@@ -1855,9 +1990,6 @@
self.sendMessageEx(msg)
return identifier
-
-
-
##########################################################
##
## others
@@ -1873,12 +2005,14 @@
if keypairType not in (consts.KeyType.SSK, consts.KeyType.USK):
raise ValueError('keypairType must be %s or %s' % (consts.KeyType.SSK, consts.KeyType.USK))
- identifier = keypairType + self.FcParams.newUuid(self._sskRequests)
- self._sskRequests.append(identifier)
- self.sendMessage(
- consts.Message.GenerateSSK,
- Identifier=identifier,
- )
+ prefix = self.IdentifierPrefixGenerateSSK if keypairType == consts.KeyType.SSK else self.IdentifierPrefixGenerateUSK
+ identifier = self.FcParams.newUuid(prefix=prefix, uuids=self._requests)
+ msg = self.Message(
+ consts.Message.GenerateSSK,
+ Identifier=identifier,
+ )
+ self._requests[identifier] = msg
+ self.sendMessageEx(msg)
return identifier
@@ -1891,7 +2025,7 @@
debugVerbosity=consts.DebugVerbosity.Debug
)
- for nodeHello in c.connect(): pass
+ nodeHello = c.connect()
if nodeHello is not None:
@@ -1901,16 +2035,22 @@
def testGetData():
def cb(event, request):
- print request['FcData']
- c.events.RequestCompleted += cb
+ pass
+ #print request.data
+ #c.modifyRequest(request['Identifier'], persistentUserData='foo')
+
+ c.events.RequestCompleted += cb
+ c.events.RequestFailed += cb
identifier = c.getData(
'CHK@q4~2soHTd9SOINIoXmg~dn7LNUAOYzN1tHNHT3j4c9E,gcVRtoglEhgqN-DJolXPqJ4yX1f~1gBGh89HNWlFMWQ,AAIC--8/snow_002%20%2810%29.jpg',
+ #persistence=consts.Persistence.Forever,
#binaryBlob=True,
)
- for i in xrange(50):
- c.next()
+ c.run()
+ #for i in xrange(50):
+ # c.next()
#c.removeRequest(identifier)
#for i in xrange(5):
@@ -1967,17 +2107,12 @@
#testGetKeyInfo()
- def testPutData():
- myIdentifier = c.putData(
+ def testChkPutData():
+ myIdentifier = c.chkPutData(
'test123',
#persistence=c.Persistence.Reboot,
)
- #u = c.Upload(c.consts.KeyType.USK, privateKey='USK@eeqMkAamPTUz983Sfr4Ce-ckPUwFgpuTwB~wce0BK3E,rMfH3jUrLRz23fltO-LGEEjnni9DwNKlPzWzaDqOTe8,AQACAAE/')
- #u.addData('foo/0/', 'test1234')
- #u.addData('bar', 'test12345678')
- #u.addData('baz', 'test12345678')
- #c.putUpload(u)
for i in xrange(500):
c.next()
@@ -1985,26 +2120,24 @@
#for i in xrange(5):
# c.next()
- #testPutData()
+ #testChkPutData()
- def testPutFile():
+ def testChkPutFile():
fpath = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test.jpg')
- #identifier = c.putFile(
- # fpath,
- # )
- u = c.Upload(c.consts.KeyType.CHK)
- u.addFile('', fpath)
- c.putUpload(u)
+ identifier = c.chkPutFile(
+ fpath,
+ )
+
- for i in xrange(1000):
+ for i in xrange(500):
c.next()
#c.removeRequest(identifier)
#for i in xrange(5):
# c.next()
- #testPutFile()
+ #testChkPutFile()
@@ -2040,7 +2173,7 @@
for i in xrange(10):
c.next()
- testConfigData()
+ #testConfigData()
@@ -2067,8 +2200,11 @@
c.events.KeypairGenerated += cb
c.generateKeypair('SSK@')
c.generateKeypair('USK@')
- for i in xrange(10):
- c.next()
+
+
+ c.run()
+ #for i in xrange(10):
+ # c.next()
#testGenerateKeypair()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-05 12:08:41
|
Revision: 141
http://fclient.svn.sourceforge.net/fclient/?rev=141&view=rev
Author: jurner
Date: 2008-02-05 04:08:45 -0800 (Tue, 05 Feb 2008)
Log Message:
-----------
...
Modified Paths:
--------------
trunk/sandbox/fcp/__init__.py
Modified: trunk/sandbox/fcp/__init__.py
===================================================================
--- trunk/sandbox/fcp/__init__.py 2008-02-04 11:55:35 UTC (rev 140)
+++ trunk/sandbox/fcp/__init__.py 2008-02-05 12:08:45 UTC (rev 141)
@@ -6,6 +6,12 @@
__author__ = 'Juergen Urner'
__copyright__ = '(c) 2008 - Juergen Urner'
-__email__ = 'jue...@go...'
+__email__ = 'jue...@ar...'
__licence__ = 'Mit'
-__version__ = '0.1'
\ No newline at end of file
+__version__ = '0.1'
+
+#****************************************************************************************
+#
+#****************************************************************************************
+def getFcpClient():
+ pass
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-04 11:55:31
|
Revision: 140
http://fclient.svn.sourceforge.net/fclient/?rev=140&view=rev
Author: jurner
Date: 2008-02-04 03:55:35 -0800 (Mon, 04 Feb 2008)
Log Message:
-----------
separated events
Added Paths:
-----------
trunk/sandbox/fcp/fcp2_0_events.py
Added: trunk/sandbox/fcp/fcp2_0_events.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_events.py (rev 0)
+++ trunk/sandbox/fcp/fcp2_0_events.py 2008-02-04 11:55:35 UTC (rev 140)
@@ -0,0 +1,93 @@
+"""Fcp events
+
+"""
+
+
+from fcp_lib import events
+import fcp2_0_consts as consts
+#*******************************************************************************
+#
+#*******************************************************************************
+class Events(events.Events):
+ """All events the client may trigger"""
+
+ class ConfigData(events.Event):
+ """Config data has arrived as requested or some value of the config has changed"""
+
+ class ClientConnected(events.Event):
+ """The client is now connected to the node"""
+
+ class ClientDisconnected(events.Event):
+ """The client has disconnected from the node"""
+
+ class EndListPeers(events.Event):
+ """"""
+
+ class Idle(events.Event):
+ """Client is idele currently"""
+
+ class KeypairGenerated(events.Event):
+ """A public / private keypair has been generated"""
+
+
+ class NodeData(events.Event):
+ """Node data has arrived as requested or some value of the node has changed"""
+
+ class Peer(events.Event):
+ """Information about a peer has arrived as requested or some value of a peer has changed
+ """
+
+ class PeerRemoved(events.Event):
+ """A peer has been removed"""
+
+ class EndListPeerNotes(events.Event):
+ """Listing of peer notes is done"""
+
+ class PeerNote(events.Event):
+ """A peer note has arrived"""
+
+ class PeerUnknown(events.Event):
+ """Unknown peer"""
+
+ class PluginInfo(events.Event):
+ """Plugin info has arrived"""
+
+ class PluginInfoFailed(events.Event):
+ """Request for plugin info failed"""
+
+ class PluginMessage(events.Event):
+ """A message from a plugin has arrived"""
+
+ class PluginMessageFailed(events.Event):
+ """Sending of a plugin message failed"""
+
+ #TODO: not used currently
+ class ProtocolError(events.Event):
+ """A protocol error was encountered"""
+
+ class RequestCompleted(events.Event):
+ """A request has been completed"""
+
+ class RequestFailed(events.Event):
+ """A request failed"""
+
+ class RequestFetchable(events.Event):
+ """An upload is fetchable"""
+
+ class RequestModified(events.Event):
+ """A request has been modified"""
+
+ class RequestProgress(events.Event):
+ """A request has made some progress"""
+
+ class RequestRestored(events.Event):
+ """A request has been restored"""
+
+ class RequestStarted(events.Event):
+ """A request has been started"""
+
+ class USKUpdated(events.Event):
+ """An update of an Usk has arrived"""
+
+
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-04 11:55:01
|
Revision: 139
http://fclient.svn.sourceforge.net/fclient/?rev=139&view=rev
Author: jurner
Date: 2008-02-04 03:55:00 -0800 (Mon, 04 Feb 2008)
Log Message:
-----------
fixes
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_requests.py
Modified: trunk/sandbox/fcp/fcp2_0_requests.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_requests.py 2008-02-04 11:53:43 UTC (rev 138)
+++ trunk/sandbox/fcp/fcp2_0_requests.py 2008-02-04 11:55:00 UTC (rev 139)
@@ -7,6 +7,13 @@
class Upload(object):
"""Wrapper class to represent a freenet upload
+ @ivar directoryAdded: (bool) True if the upload contains a directory, False otherwise
+ @ivar items: (list) of dicts containing paramaters for each upload
+ @ivar keyType: L{consts.KeyType} the type of key to upload
+ @ivar params: (dict) request parameters
+ @ivar privateKey: (str) private keey (required for SSK or USK uploads)
+ @ivar targetNames: (list) of names already in use (for multi-uploads)
+
@note: you can upload one or more items of any kind (data, files, redirects), except from directories
wich have to be the only item to upload
"""
@@ -39,10 +46,14 @@
@param privateKey: (str) privateKey if keyType is SSK or USK
"""
-
if keyType not in consts.KeyType.TypesAll:
raise ValueError('Invalid key type: %r' % keyType)
-
+ if keyType in (consts.KeyType.SSK, consts.KeyType.USK) and privateKey is None:
+ raise ValueError('For %s a public key is required' % keyType)
+ elif keyType in (consts.KeyType.CHK, consts.KeyType.KSK) and privateKey is not None:
+ raise ValueError('For %s no public key is required' % keyType)
+
+ self.directoryAdded = False
self.items = []
self.keyType = keyType
self.params = {
@@ -53,27 +64,26 @@
'PriorityClass': priorityClass,
}
self.privateKey = privateKey
- self._directoryAdded = False
- self._targetNames = [] # record to check if names are unique (assert order is arbitrary)
+ self.targetNames = [] # record to check if names are unique (assert order is arbitrary)
def _addItem(self, **params):
"""Private method to add an upload item"""
- if self._directoryAdded:
+ if self.directoryAdded:
raise ValueError('A directory has already been added, no other items allowed')
- if itemType == self.ItemTypeDirectory:
- if self._directoryAdded:
+ if params['FcItemType'] == self.ItemTypeDirectory:
+ if self.directoryAdded:
raise ValueError('An item has already been added, no additional directory allowed')
else:
- self._directoryAdded = True
+ self.directoryAdded = True
name = params['Name']
- if name in self._targetNames:
+ if name in self.targetNames:
raise ValueError('Target name already exists: %r' % name)
self.targetNames.append(name)
- self.iotems.append(params)
+ self.items.append(params)
def addData(self, name, data, contentType=None):
@@ -88,14 +98,15 @@
ContentType=contentType,
DataLength=len(data),
Name=name,
- UploadFrom=self.UploadFrom.Direct
+ UploadFrom=consts.UploadFrom.Direct
)
- def addDirectory(name, directory, allowUnreadableFiles=False):
+ def addDirectory(name, directory, allowUnreadableFiles=False, defaultName=None):
"""Adds a directory to be uploaded
@param name: target name
@param directory: (abspath) of the directory to be uploaded
+ @param defaultName: (for SSKs and USKs, the file to display when the key is requested)
@note: if you add a directory, every attempt to add anything else will fail
"""
@@ -103,7 +114,8 @@
FcItemType=self.ItemTypeDirectory,
AllowUnreadableFiles=allowUnreadableFiles,
Filename=directory,
- Name=name,
+ Name=name,
+ DefaultName=defaultName,
)
@@ -118,7 +130,7 @@
ContentType=contentType,
Filename=filename,
Name=name,
- UploadFrom=self.UploadFrom.Disk,
+ UploadFrom=consts.UploadFrom.Disk,
)
@@ -133,7 +145,7 @@
DataLength=len(data),
Name=name,
TargetURI=redirect,
- UploadFrom=self.UploadFrom.Redirect
+ UploadFrom=consts.UploadFrom.Redirect
)
@@ -142,91 +154,88 @@
@param messageClass: (L{fcp2_0_message.Message}) class to fill in
@return: (L{fcp2_0_message.Message}) instance
"""
- if self.keyType in (consts.KeyType.SSK, consts.KeyType.USK) and self.privateKey is None:
- raise ValueError('For %s a public key is required' % self.keyType)
- elif self.keyType in (consts.KeyType.CHK, consts.KeyType.KSK) and self.privateKey is not None:
- raise ValueError('For %s no public key is required' % self.keyType)
-
-
n = len(self.items)
if n == 0:
return None
- elif n == 1 and self.itemTypes[0] == self.ItemTypeDirectory:
- msg = messageClass(messageClass.MessageClientPutDiskDir, **self.params)
+ elif n == 1 and self.items[0]['FcItemType'] == self.ItemTypeDirectory:
+ msg = messageClass(consts.Message.ClientPutDiskDir)
params = self.items[0]
+ targetName = params.pop('Name')
for param, value in params.items():
if value is None:
continue
if param.startswith(self.ReservedParamPrefix):
continue
-
- if param == 'Name':
- param = 'TargetFilename'
- elif param == 'ContentType':
- param = 'Metadata.ContentType'
msg[param] = value
elif n == 1:
- msg = messageClass(messageClass.MessageClientPut, **self.params)
+ msg = messageClass(consts.Message.ClientPut)
params = self.items[0]
+ targetFilename = params.pop('Name')
for param, value in params.items():
if value is None:
continue
if param.startswith(self.ReservedParamPrefix):
continue
- if param == 'Name':
- param = 'TargetFilename'
- elif param == 'ContentType':
+ if param == 'ContentType':
param = 'Metadata.ContentType'
msg[param] = value
- if params['FcItemType'] == self.ItemTypeData:
- msg.data = params['FcData']
+ if params['FcItemType'] == self.ItemTypeData:
+ msg.data = params['FcData']
+ if self.keyType == consts.Keytype.CHK:
+ msg['TargetFilename'] = targetFilename
+
#TODO: USK@s allowed for complex dirs?
else:
#NOTE: for simplicity we take the first item as default item and its name
# as TargetName if that causes any problems, pass it twice
- msg = messageClass(messageClass.MessageClientPutComplexDir, **self.params)
+ msg = messageClass(consts.Message.ClientPutComplexDir)
msg.data = ''
- defaultName = temParams[0]['Name']
- msg['DefaultName'] = defaultName
- params = {'TargetFilename': defaultName}
+ header = self.items.pop(0)
+ targetFilename = header['Name']
+ msg['DefaultName'] = self.items[0]['Name']
+ k = 0
for itemParams in self.items:
- k = 0
for param, value in itemParams.items():
if value is None:
continue
if param.startswith(self.ReservedParamPrefix):
if param == 'FcData':
- msg.data += data
+ msg.data += value
continue
if param == 'ContentType':
param = 'Metadata.ContentType'
param = 'Files.%s.%s' % (k, param)
msg[param] = value
- k += 1
+ k += 1
- if not msg.data:
- msg.data = None
+ if not msg.data:
+ msg.data = None
- # set some defaults
- msg['Global'] = consts.FcpFalse
- msg['Verbosity'] = consts.Verbosity.ReportProgress | consts.Verbosity.ReportCompression
- # compose URI
- if self.KeyType == consts.KeyType.CHK:
- msg['URI'] == consts.KeyType.CHK
- elif self.KeyType == consts.KeyType.KSK:
- msg['URI'] == consts.KeyType.KSK + '/' + params.pop('TargetFilename')
- elif self.KeyType == consts.KeyType.SSK:
- msg['URI'] == consts.KeyType.SSK + self.privateKey + '/' + params.pop('TargetFilename')
- elif self.KeyType == consts.KeyType.USK:
- msg['URI'] == consts.KeyType.USH + self.privateKey + '/' + params.pop('TargetFilename')
-
- return msg
+ # determine Uri
+ if self.keyType == consts.KeyType.CHK:
+ msg['URI'] = consts.KeyType.CHK
+ elif self.keyType == consts.KeyType.KSK:
+ msg['URI'] = consts.KeyType.KSK + '/' + targetFilename
+ elif self.keyType == consts.KeyType.SSK:
+ msg['URI'] = self.privateKey + targetFilename
+ elif self.keyType == consts.KeyType.USK:
+ msg['URI'] = self.privateKey + targetFilename
+
+ # set params and some defaults
+ msg['Global'] = False
+ msg['Verbosity'] = consts.Verbosity.ReportProgress | consts.Verbosity.ReportCompression
+ for param, value in self.params.items():
+ if value is None:
+ continue
+ msg[param] = value
+
+ return msg
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-02-04 11:54:33
|
Revision: 138
http://fclient.svn.sourceforge.net/fclient/?rev=138&view=rev
Author: jurner
Date: 2008-02-04 03:53:43 -0800 (Mon, 04 Feb 2008)
Log Message:
-----------
fixes
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_types.py
Modified: trunk/sandbox/fcp/fcp2_0_types.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_types.py 2008-02-04 11:53:08 UTC (rev 137)
+++ trunk/sandbox/fcp/fcp2_0_types.py 2008-02-04 11:53:43 UTC (rev 138)
@@ -561,12 +561,13 @@
'Global': FcpTypeBool,
'IgnoreDS': FcpTypeBool,
'DSOnly': FcpTypeBool,
+ 'MaxRetries': FcpTypeInt,
'MaxSize': FcpTypeInt,
'MaxTempSize': FcpTypeInt,
'Verbosity': FcpTypeInt,
},
'ClientHello': {
- 'ExpectedVersion': FcpTypeInt,
+ 'ExpectedVersion': FcpTypeFloat,
},
'ClientPut': {
'BinaryBlob': FcpTypeBool,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|