Thread: SF.net SVN: fclient: [316] trunk/sandbox/fcp2/message.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <ju...@us...> - 2008-03-06 12:05:18
|
Revision: 316
http://fclient.svn.sourceforge.net/fclient/?rev=316&view=rev
Author: jurner
Date: 2008-03-06 04:05:25 -0800 (Thu, 06 Mar 2008)
Log Message:
-----------
reead, write methods have gone. Use iohandler
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-03-06 12:01:06 UTC (rev 315)
+++ trunk/sandbox/fcp2/message.py 2008-03-06 12:05:25 UTC (rev 316)
@@ -60,105 +60,6 @@
self.params = params
- @classmethod
- def bytesFromSocket(clss, socketObj, n):
- """Reads n bytes from socket
- @param socketObj: socket to read bytes from
- @param n: (int) number of bytes to read
- @return: (tuple) (error-message, bytes-read). If no error was encountered, error-message will be None
- """
- error = p = None
- try:
- p = socketObj.recv(n)
- if not p:
- p = None
- raise socket.error('Socket shut down by node')
- except socket.timeout, d: # nothing in the queue
- error = clss(consts.Message.ClientSocketTimeout)
- except socket.error, d:
- error = clss(consts.Message.ClientSocketDied, Exception=socket.error, Details=d)
- return error, p
-
-
- @classmethod
- def fromSocket(clss, socketObj):
- """Reads a message from a socket
- @param socketObj: socket to read a message from
- @return: (Message) next message from the socket. If the socket dies
- unexpectedly a L{consts.Message.ClientSocketDied} message is returned containing the parameters
- 'Exception' and 'Details'. If the socket times out a L{consts.Message.ClientSocketTimeout} message is returned.
-
- @note: SocketObj can be any object that supports a sockets recv() and sendall() methods
- and raises the appropriate socket errors
- """
-
- msg = clss(None)
- buf = []
- paramTypes = None
-
- #TODO: to buffer or not to buffer?
- while True:
-
- # get next line from socket
- error, p = clss.bytesFromSocket(socketObj, 1)
- if error:
- return error
-
- if p != '\n':
- buf.append(p)
- continue
- #TODO: check if '\r\n' is allowed in freenet client protocol
- else:
- if buf and buf[-1] == '\r':
- del buf[-1]
-
- line = ''.join(buf)
- buf = []
-
-
- #NOTE: messages carying data may end with 'EndMessage' or 'Data'.
- # This is a bit messed up in Fcp. We assume here all messages from the
- # node end with Data if data is passed. Alternative would be to check for both
- # and rely on the 'DataLength' member to indicate if data is included. This
- # should work for all messages except 'DataFound'
- if line == 'EndMessage':
- break
-
- # first line == message name
- if msg.name is None:
- msg.name = line
- paramTypes = types.MessageParamTypes.get(line, None)
-
-
- # get data member
- elif line == 'Data':
- remaining = int(msg.params['DataLength'])
- msg.data = ''
- while remaining > 0:
- error, p = clss.bytesFromSocket(socketObj, remaining)
- if error:
- return error
- remaining -= len(p)
- msg.data += p
- break
-
- # get next paramater
- else:
- head, sep, tail = line.partition('=')
-
- # covert fcp to python value if necessary
- if paramTypes is not None:
- paramType = paramTypes.get(head, None)
- if paramType is not None:
- tail = paramType.fcpToPython(tail)
-
- msg.params[head] = tail
- # TODO: errorchek params?
- #if not sep: pass
-
- return msg
-
-
def get(self, name, default=None):
"""Returns the message parameter 'name' or 'default' """
return self.params.get(name, default)
@@ -199,13 +100,6 @@
return '\n'.join(out)
- def send(self, socketObj):
- """Dumps the message to a socket
- @param socketObj: socket to dump the message to
- """
- socketObj.sendall(self.toString())
-
-
def toString(self):
"""Returns the message as formated string ready to be send"""
out = [self.name, ]
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ju...@us...> - 2008-03-06 18:25:48
|
Revision: 328
http://fclient.svn.sourceforge.net/fclient/?rev=328&view=rev
Author: jurner
Date: 2008-03-06 10:25:54 -0800 (Thu, 06 Mar 2008)
Log Message:
-----------
docs
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-03-06 18:25:35 UTC (rev 327)
+++ trunk/sandbox/fcp2/message.py 2008-03-06 18:25:54 UTC (rev 328)
@@ -39,9 +39,9 @@
msg.send(mySocket)
- @ivar data: data carried along with the message or None
- @ivar name: message name
- @ivar params: message params
+ @ivar data: (bytes) data carried along with the message or None
+ @ivar name: (str) message name
+ @ivar params: (dict) message params
"""
# we add a few private params...
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-07 09:54:26
|
Revision: 333
http://fclient.svn.sourceforge.net/fclient/?rev=333&view=rev
Author: jUrner
Date: 2008-03-07 01:54:27 -0800 (Fri, 07 Mar 2008)
Log Message:
-----------
adapt to Fc prefix has gone
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-03-07 09:54:21 UTC (rev 332)
+++ trunk/sandbox/fcp2/message.py 2008-03-07 09:54:27 UTC (rev 333)
@@ -23,6 +23,12 @@
#********************************************************************************
#
#********************************************************************************
+class PrivateParamName(str):
+ """Helper class to mark a message parameter as private to the package"""
+
+#********************************************************************************
+#
+#********************************************************************************
class Message(object):
"""Class wrapping a Fcp message
@@ -44,10 +50,14 @@
@ivar params: (dict) message params
"""
- # we add a few private params...
- ParamPrefixPrivate = 'Fc' # params prefixed with this are skipped when generating the message
+ @classmethod
+ def privateParamName(klass, name):
+ """Returns a message param name that is marked as being private to the package
+ @return: (L{PrivateParamName])
+ """
+ return PrivateParamName(name)
-
+
def __init__(self, name, data=None, **params):
"""
@param name: messge name
@@ -81,7 +91,7 @@
paramTypes = types.MessageParamTypes.get(self.name, None)
for param, value in self.params.items():
- if param.startswith(self.ParamPrefixPrivate):
+ if isinstance(param, PrivateParamName):
continue
# convert python to fcp value if necessary
@@ -106,7 +116,7 @@
paramTypes = types.MessageParamTypes.get(self.name, None)
for param, value in self.params.items():
- if param.startswith(self.ParamPrefixPrivate):
+ if isinstance(param, PrivateParamName):
continue
# convert python to fcp value if necessary
@@ -125,6 +135,4 @@
return '\n'.join(out)
-
-
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-08 11:05:17
|
Revision: 335
http://fclient.svn.sourceforge.net/fclient/?rev=335&view=rev
Author: jUrner
Date: 2008-03-08 03:05:00 -0800 (Sat, 08 Mar 2008)
Log Message:
-----------
moved all message related stuff to message.py
All messages are defined here now
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-03-07 09:55:12 UTC (rev 334)
+++ trunk/sandbox/fcp2/message.py 2008-03-08 11:05:00 UTC (rev 335)
@@ -23,13 +23,28 @@
#********************************************************************************
#
#********************************************************************************
-class PrivateParamName(str):
- """Helper class to mark a message parameter as private to the package"""
+class PrivateParam(str):
+ """Helper class to mark a message parameter as PrivateParam to the package"""
#********************************************************************************
#
#********************************************************************************
-class Message(object):
+MessagesAll = {}
+
+class MessageMeta(type):
+
+ def __new__(klass, name, bases, kws):
+ newClass = type.__new__(klass, name, bases, kws)
+ msgName = kws['name']
+ if msgName in MessagesAll:
+ raise ValueError('A message of that type already exists: ' + msgName)
+ MessagesAll[msgName] = newClass
+ return newClass
+
+#********************************************************************************
+#
+#********************************************************************************
+class MessageBase(object):
"""Class wrapping a Fcp message
Sample use::
@@ -49,27 +64,33 @@
@ivar name: (str) message name
@ivar params: (dict) message params
"""
-
+ __metaclass__ = MessageMeta
+
+ name = ''
+ _additional_params_ = {}
+ _param_types_ = {}
+
+
@classmethod
- def privateParamName(klass, name):
- """Returns a message param name that is marked as being private to the package
- @return: (L{PrivateParamName])
- """
- return PrivateParamName(name)
+ def __eq__(klass, other):
+ return klass.name == other.name
+ @classmethod
+ def __ne__(klass, other):
+ return klass.name != other.name
- def __init__(self, name, data=None, **params):
+
+ def __init__(self, data=None, **params):
"""
- @param name: messge name
@param data: data associated to the message
@param params: {field-name: value, ...} of parameters of the message
- @note: all params can be accessed as attributes of the class
"""
+ params.update(self._additional_params_.copy())
+
self.data = data
- self.name = name
self.params = params
+
-
def get(self, name, default=None):
"""Returns the message parameter 'name' or 'default' """
return self.params.get(name, default)
@@ -88,18 +109,9 @@
def pprint(self):
"""Returns the message as nicely formated human readable string"""
out = ['', '>>' + self.name, ]
- paramTypes = types.MessageParamTypes.get(self.name, None)
-
for param, value in self.params.items():
- if isinstance(param, PrivateParamName):
+ if isinstance(param, PrivateParam):
continue
-
- # convert python to fcp value if necessary
- #if paramTypes is not None:
- # paramType = paramTypes.get(param, None)
- # if paramType is not None:
- # value = paramType.pythonToFcp(value)
-
out.append('>> %s=%s' % (param, value))
if self.data is None:
@@ -113,17 +125,14 @@
def toString(self):
"""Returns the message as formated string ready to be send"""
out = [self.name, ]
- paramTypes = types.MessageParamTypes.get(self.name, None)
-
for param, value in self.params.items():
- if isinstance(param, PrivateParamName):
+ if isinstance(param, PrivateParam):
continue
# convert python to fcp value if necessary
- if paramTypes is not None:
- paramType = paramTypes.get(param, None)
- if paramType is not None:
- value = paramType.pythonToFcp(value)
+ paramType = self._param_types_.get(param, None)
+ if paramType is not None:
+ value = paramType.pythonToFcp(value)
out.append('%s=%s' % (param, value))
@@ -135,4 +144,1023 @@
return '\n'.join(out)
+#***************************************************************************************
+#
+# param types for config message
+#
+# ..bit more efford here, cos we need types for user input checking
+# ...a slpoppy implementation of a dict should be enough
+#
+#***************************************************************************************
+class _ConfigMessageParamTypes(object):
+ """Parameter --> FcpType mapping for config related messages
+
+ @note: we use this instead of _param_types_ dict to handle param classes
+ in L{ConfigData} and L{ModifyConfig}
+ """
+
+
+
+ # all known config keys (param class stripped)
+ Params = {
+
+ 'console.allowedHosts': types.FcpTypeIPList, # host names, single IPs CIDR-maskip IPs likee 192.168.0.0/24
+ 'console.bindTo': types.FcpTypeIPList,
+ 'console.directEnabled': types.FcpTypeBool,
+ 'console.enabled': types.FcpTypeBool,
+ 'console.port': types.FcpTypeIPort,
+ 'console.ssl': types.FcpTypeBool,
+
+ 'fcp.allowedHosts': types.FcpTypeIPList,
+ 'fcp.allowedHostsFullAccess': types.FcpTypeIPList,
+ 'fcp.assumeDownloadDDAIsAllowed': types.FcpTypeBool,
+ 'fcp.assumeUploadDDAIsAllowed': types.FcpTypeBool,
+ 'fcp.bindTo': types.FcpTypeIP,
+ 'fcp.enabled': types.FcpTypeBool,
+ 'fcp.persistentDownloadsEnabled': types.FcpTypeBool,
+ 'fcp.persistentDownloadsFile': types.FcpTypeFilename,
+ 'fcp.persistentDownloadsInterval': types.FcpTypeTimeDelta,
+ 'fcp.port': types.FcpTypeIPort,
+ 'fcp.ssl': types.FcpTypeBool,
+
+ 'fproxy.CSSOverride': types.FcpTypeBool,
+ 'fproxy.advancedModeEnabled': types.FcpTypeBool,
+ 'fproxy.allowedHosts': types.FcpTypeIPList,
+ 'fproxy.allowedHostsFullAccess': types.FcpTypeIPList,
+ 'fproxy.bindTo': types.FcpTypeIPList,
+ 'fproxy.css': types.FcpTypeChoiceFProxyCss,
+ 'fproxy.doRobots': types.FcpTypeBool,
+ 'fproxy.enabled': types.FcpTypeBool,
+ 'fproxy.javascriptEnabled': types.FcpTypeBool,
+ 'fproxy.port': types.FcpTypeIPort,
+ 'fproxy.showPanicButton': types.FcpTypeBool,
+ 'fproxy.ssl': types.FcpTypeBool,
+
+ 'logger.dirname': types.FcpTypeDirname,
+ 'logger.enabled': types.FcpTypeBool,
+ 'logger.interval': types.FcpTypeTimeDelta,
+ 'logger.maxCachedBytes': types.FcpTypeByteAmount,
+ 'logger.maxCachedLines': types.FcpTypeByteAmount, # ???
+ 'logger.maxZippedLogsSize': types.FcpTypeByteAmount, # ???
+ 'logger.priority': types.FcpTypeChoiceLoggerPriority,
+ 'logger.priorityDetail': types.FcpType, # ???? is it Detailed priority thresholds ???
+
+ 'node.alwaysAllowLocalAddresses': types.FcpTypeBool,
+ 'node.assumeNATed': types.FcpTypeBool,
+ 'node.bindTo': types.FcpTypeIP,
+ 'node.clientThrottleFile': types.FcpTypeFilename,
+ 'node.databaseMaxMemory': types.FcpTypeByteAmount,
+ 'node.disableHangCheckers': types.FcpTypeBool,
+ 'node.disableProbabilisticHTLs': types.FcpTypeBool,
+ 'node.downloadAllowedDirs': types.FcpTypeChoiceNodeDownloadAllowedDirs,
+ 'node.downloadsDir': types.FcpTypeDirname,
+ 'node.enableARKs': types.FcpTypeBool,
+ 'node.enablePacketCoalescing': types.FcpTypeBool,
+ 'node.enablePerNodeFailureTables': types.FcpTypeBool,
+ 'node.enableSwapping': types.FcpTypeBool,
+ 'node.enableSwapQueueing': types.FcpTypeBool,
+ 'node.enableULPRDataPropagation': types.FcpTypeBool,
+ 'node.extraPeerDataDir': types.FcpTypeDirname,
+ 'node.includeLocalAddressesInNoderefs': types.FcpTypeBool,
+ 'node.inputBandwidthLimit': types.FcpTypeByteAmount, # -1 is possible as value aswell
+ 'node.ipAddressOverride': types.FcpTypeIP,
+ 'node.l10n': types.FcpType, # ???
+ 'node.lazyResume': types.FcpTypeBool,
+ 'node.listenPort': types.FcpTypeIPort,
+ 'node.maxBackgroundUSKFetchers': types.FcpTypeIntWithBounds(0, None),
+ 'node.maxHTL': types.FcpTypeIntWithBounds(0, None),
+ 'node.name': types.FcpTypeString,
+ 'node.nodeDir': types.FcpTypeDirname,
+ 'node.oneConnectionPerIP': types.FcpTypeBool,
+ 'node.outputBandwidthLimit': types.FcpTypeByteAmount,
+ 'node.passOpennetPeersThroughDarknet': types.FcpTypeBool,
+ 'node.persistentTempDir': types.FcpTypeDirname,
+ 'node.storeDir': types.FcpTypeDirname,
+ 'node.storeForceBigShrinks': types.FcpTypeBool,
+ 'node.storeSize': types.FcpTypeByteAmount,
+ 'node.storeType': types.FcpTypeString,
+ 'node.tempDir': types.FcpTypeDirname,
+ 'node.tempIPAddressHint': types.FcpTypeIP, # ???
+ 'node.testingDropPacketsEvery': types.FcpTypeIntWithBounds(0, None),
+ 'node.uploadAllowedDirs': types.FcpTypeChoiceNodeDownloadAllowedDirs,
+
+ 'node.testnet.enabled': types.FcpTypeBool,
+
+ 'node.load.aggressiveGC': types.FcpType, # ???
+ 'node.load.freeHeapBytesThreshold': types.FcpTypeByteAmount,
+ 'node.load.freeHeapPercentThreshold': types.FcpTypePercent,
+ 'node.load.memoryChecker': types.FcpTypeBool,
+ 'node.load.nodeThrottleFile': types.FcpTypeFilename,
+ 'node.load.threadLimit': types.FcpTypeIntWithBounds(0, None),
+
+ 'node.opennet.acceptSeedConnections': types.FcpTypeBool,
+ 'node.opennet.alwaysAllowLocalAddresses': types.FcpTypeBool,
+ 'node.opennet.assumeNATed': types.FcpTypeBool,
+ 'node.opennet.bindTo': types.FcpTypeIP,
+ 'node.opennet.enabled': types.FcpTypeBool,
+ 'node.opennet.listenPort': types.FcpTypeIPort,
+ 'node.opennet.maxOpennetPeers': types.FcpTypeIntWithBounds(0, None),
+ 'node.opennet.oneConnectionPerIP': types.FcpTypeBool,
+ 'node.opennet.testingDropPacketsEvery': types.FcpTypeIntWithBounds(0, None),
+
+ 'node.scheduler.CHKinserter_priority_policy': types.FcpTypeChoicePriorityPolicy,
+ 'node.scheduler.CHKrequester_priority_policy': types.FcpTypeChoicePriorityPolicy,
+ 'node.scheduler.SSKinserter_priority_policy': types.FcpTypeChoicePriorityPolicy,
+ 'node.scheduler.SSKrequester_priority_policy': types.FcpTypeChoicePriorityPolicy,
+
+ 'node.updater.URI': types.FcpTypeUri,
+ 'node.updater.autoupdate': types.FcpTypeBool,
+ 'node.updater.enabled': types.FcpTypeBool,
+ 'node.updater.extURI': types.FcpTypeUri,
+ 'node.updater.revocationURI': types.FcpTypeUri,
+
+ 'pluginmanager.loadplugin': types.FcpTypeStringList,
+ 'pluginmanager2.loadedPlugins': types.FcpTypeStringList,
+
+ 'ssl.sslEnable': types.FcpTypeBool,
+ 'ssl.sslKeyPass': types.FcpTypeString,
+ 'ssl.sslKeyStore': types.FcpTypeFilename,
+ 'ssl.sslKeyStorePass': types.FcpTypeString,
+ 'ssl.sslVersion': types.FcpTypeChoiceSSLVersion,
+
+ 'toadletsymlinker.symlinks': types.FcpTypeStringList,
+ }
+ def __init__(self):
+ pass
+
+ def splitAll(self, paramName):
+ """Splits a parameter name into its components
+ @param paramName: (str) parameter name to split
+ @return: (list) components
+ """
+ return paramName.split(consts.ConfigKeySep)
+
+
+ def splitParamClass(self, paramName):
+ """Splits the parameter class from a parameter name
+ @param paramName: (str) parameter name to split
+ @return: (tuple) paramClass, tail
+ """
+ result = paramName.split(consts.ConfigKeySep, 1)
+ if len(result) == 2:
+ if result[0] in consts.ConfigValueClass.ClassesAll:
+ return result
+ return '', paramName
+
+
+ def get(self, paramName, default=None):
+ """Returns the type of a parameter or default
+ @param paramName: (str) name of the parameter to retuen the type for
+ @return: (FcpType)
+ """
+ try:
+ return self[paramName]
+ except KeyError:
+ return default
+
+
+ def __getitem__(self, paramName):
+ """Returns the type of a parameter
+ @param paramName: (str) name of the parameter to retuen the type for
+ @return: (FcpType)
+ """
+ paramClass, paramKey = self.splitParamClass(paramName)
+ if paramClass == consts.ConfigValueClass.Current or paramClass == '':
+ return self.Params[paramKey]
+ elif paramClass == consts.ConfigValueClass.Default:
+ return self.Params[paramKey]
+ elif paramClass == consts.ConfigValueClass.ExpertFlag:
+ return types.FcpTypeBool
+ elif paramClass == consts.ConfigValueClass.ForceWriteFlag:
+ return types.FcpTypeBool
+ elif paramClass == consts.ConfigValueClass.ShortDescription:
+ return types.FcpTypeString
+ elif paramClass == consts.ConfigValueClass.LongDescription:
+ return types.FcpTypeString
+ elif paramClass == consts.ConfigValueClass.SortOrder:
+ return types.FcpTypeInt
+ elif paramClass == consts.ConfigValueClass.DataType:
+ return types.FcpTypeString
+ else:
+ raise ValueError('Unknown param class in: %r' % paramName)
+
+ConfigMessageParamTypes = _ConfigMessageParamTypes()
+#********************************************************************************
+#
+#********************************************************************************
+PeerMessageParamTypes = {
+ 'ark.number': types.FcpTypeInt,
+ 'auth.negTypes': types.FcpTypeInt,
+
+ 'location': types.FcpTypeFloat,
+ 'opennet': types.FcpTypeBool,
+ 'testnet': types.FcpTypeBool,
+
+ 'metadata.timeLastConnected': types.FcpTypeTime,
+ 'metadata.timeLastReceivedPacket': types.FcpTypeTime,
+ 'metadata.timeLastRoutable': types.FcpTypeTime,
+ 'metadata.timeLastSuccess': types.FcpTypeTime,
+ 'metadata.routableConnectionCheckCount': types.FcpTypeInt,
+ 'metadata.hadRoutableConnectionCount': types.FcpTypeInt,
+
+ 'volatile.averagePingTime': types.FcpTypeFloat,
+ 'volatile.overloadProbability': types.FcpTypePercent,
+ 'volatile.routingBackoff': types.FcpTypeInt,
+ 'volatile.routingBackoffPercent': types.FcpTypePercent,
+ 'volatile.totalBytesIn': types.FcpTypeInt,
+ 'volatile.totalBytesOut': types.FcpTypeInt,
+ 'volatile.routingBackoffLength': types.FcpTypeInt,
+ }
+
+'''all other Peer message params here....
+
+>> identity=YIrE..................
+>> lastGoodVersion=Fred,0.7,1.0,1106
+>> physical.udp=00.000.000.000:00000
+>> version=Fred,0.7,1.0,1107
+>> dsaGroup.q=ALFDN...............
+>> dsaGroup.p=AIYIrE..................
+>> dsaPubKey.y=YSlb............
+>> dsaGroup.g=UaRa...............
+>> ark.pubURI=SSK@......................
+>>
+>> metadata.detected.udp=000.000.000.000:00000
+
+>> volatile.lastRoutingBackoffReason=ForwardRejectedOverload
+>> volatile.percentTimeRoutableConnection=99.4735.................
+>> volatile.status=CONNECTED
+
+'''
+
+
+AdditionalGetParams = {
+
+ # persistent params that will go into identifier
+ PrivateParam('RequestType'): consts.RequestType.Null, # identifies sub message types
+ PrivateParam('InitTime'): 0, # when was the request started?
+ PrivateParam('FilenameCollision'): consts.FilenameCollision.HandleNever, # handle fielanem collisions?
+ PrivateParam('PersistentUserData'): '', # any user defined persistent data
+
+ # non persistent params
+ PrivateParam('RequestStatus'): consts.RequestStatus.Null,
+ PrivateParam('ErrorMessage'): None, # error message in case an error occured
+ PrivateParam('UserData'): None, # any user defined runtime data here
+
+ # params for SSKKeypair
+ PrivateParam('PrivateParamKey'): None,
+ PrivateParam('PublicKey'): None,
+
+ # params from DataFound
+ PrivateParam('MetadataContentType'): '', # contecnt type
+ PrivateParam('MetadataSize'): 0, # content size
+
+ # params from PersistentRequestModified
+ PrivateParam('Modified'): {},
+
+ # params for DDA test
+ PrivateParam('TestDDA'): {},
+
+ # params for SimpleProgress
+ PrivateParam('ProgressTotal'): 0,
+ PrivateParam('ProgressRequired'): 0,
+ PrivateParam('ProgressFailed'): 0,
+ PrivateParam('ProgressFatalyFailed'): 0,
+ PrivateParam('ProgressSucceeeded'): 0,
+ }
+
+
+AdditionalPutParams = {
+
+ # persistent params that will go into identifier
+ PrivateParam('RequestType'): consts.RequestType.Null, # identifies sub message types
+ PrivateParam('InitTime'): 0, # when was the request started?
+
+ #TODO: not really necessary, but we need it for persistent params
+ PrivateParam('FilenameCollision'): consts.FilenameCollision.HandleNever,
+ PrivateParam('PersistentUserData'): '', # any user defined persistent data
+
+ # non persistent params
+ PrivateParam('RequestStatus'): consts.RequestStatus.Null,
+ PrivateParam('ErrorMessage'): None, # error message in case an error occured
+ PrivateParam('UserData'): None, # any user defined runtime data here
+
+ # params for SSKKeypair
+ PrivateParam('PrivateParamKey'): None,
+ PrivateParam('PublicKey'): None,
+
+ # params from DataFound
+ PrivateParam('MetadataContentType'): '', # contecnt type
+ PrivateParam('MetadataSize'): 0, # content size
+
+ # params from PersistentRequestModified
+ PrivateParam('Modified'): {},
+
+ # params for DDA test
+ PrivateParam('TestDDA'): {},
+
+ # params for SimpleProgress
+ PrivateParam('ProgressTotal'): 0,
+ PrivateParam('ProgressRequired'): 0,
+ PrivateParam('ProgressFailed'): 0,
+ PrivateParam('ProgressFatalyFailed'): 0,
+ PrivateParam('ProgressSucceeeded'): 0,
+ }
+
+AdditionalGenerateSSKParams = {
+ PrivateParam('RequestType'): consts.RequestType.Null, # identifies sub message types
+ PrivateParam('RequestStatus'): consts.RequestStatus.Null,
+ PrivateParam('InitTime'): 0, # when was the request started?
+ PrivateParam('PrivateKey'): None,
+ PrivateParam('PublicKey'): None,
+ }
+
+AdditionalSubscribeUSKParams = {
+ PrivateParam('RequestType'): consts.RequestType.Null, # identifies sub message types
+ PrivateParam('RequestStatus'): consts.RequestStatus.Null,
+ PrivateParam('InitTime'): 0, # when was the request started?
+ PrivateParam('UserData'): None,
+ }
+
+AdditionalPluginInfoParams = {
+ PrivateParam('RequestType'): consts.RequestType.Null, # identifies sub message types
+ PrivateParam('RequestStatus'): consts.RequestStatus.Null,
+ PrivateParam('InitTime'): 0, # when was the request started?
+ }
+
+#********************************************************************************
+#
+#********************************************************************************
+#TODO: register new message type?
+def newMessageType(name, paramTypes=None, additionalParams=None):
+ kws = {
+ 'name': name,
+ '_additional_params_': additionalParams if additionalParams is not None else {},
+ '_param_types_': paramTypes if paramTypes is not None else {},
+ }
+ return type(name, (MessageBase, ), kws)
+
+#********************************************************************************
+# some additional messages we define for uniformity
+#********************************************************************************
+class ClientDisconnected(MessageBase):
+ name = consts.Message.ClientDisconnected
+ _additional_params_ = {}
+ _param_types_ = {
+ 'DisconnectReason': types.FcpTypeInt,
+ }
+
+class ClientSocketDied(MessageBase):
+ name = consts.Message.ClientSocketDied
+ _additional_params_ = {}
+ _param_types_ = {
+ }
+
+
+class ClientSocketTimeout(MessageBase):
+ name = consts.Message.ClientSocketTimeout
+ _additional_params_ = {}
+ _param_types_ = {
+ }
+
+#********************************************************************************
+#
+#********************************************************************************
+class AddPeer(MessageBase):
+ name = consts.Message.AddPeer
+ _additional_params_ = {}
+ _param_types_ = PeerMessageParamTypes
+
+
+class AllData(MessageBase):
+ name = consts.Message.AllData
+ _additional_params_ = {}
+ _param_types_ = {
+ 'DataLength': types.FcpTypeInt,
+ 'Global': types.FcpTypeBool,
+ }
+
+
+class ClientGet(MessageBase):
+ name = consts.Message.ClientGet
+ _additional_params_ = AdditionalGetParams
+ _param_types_ = {
+ 'BinaryBlob': types.FcpTypeBool,
+ 'DSOnly': types.FcpTypeBool,
+ 'Global': types.FcpTypeBool,
+ 'IgnoreDS': types.FcpTypeBool,
+ 'MaxRetries': types.FcpTypeInt,
+ 'MaxSize': types.FcpTypeInt,
+ 'MaxTempSize': types.FcpTypeInt,
+ 'Verbosity': types.FcpTypeInt,
+ }
+
+
+class ClientHello(MessageBase):
+ name = consts.Message.ClientHello
+ _additional_params_ = {}
+ _param_types_ = {
+ 'ExpectedVersion': types.FcpTypeFloat,
+ }
+
+
+class ClientPut(MessageBase):
+ name = consts.Message.ClientPut
+ _additional_params_ = AdditionalPutParams
+ _param_types_ = {
+ 'BinaryBlob': types.FcpTypeBool,
+ 'DataLength': types.FcpTypeInt,
+ 'DontCompress': types.FcpTypeBool,
+ 'EarlyEncode': types.FcpTypeBool,
+ 'GetCHKOnly': types.FcpTypeBool,
+ 'Global': types.FcpTypeBool,
+ 'MaxRetries': types.FcpTypeInt,
+ 'Verbosity': types.FcpTypeInt,
+ }
+
+
+class ClientPutComplexDir(MessageBase):
+ name = consts.Message.ClientPutComplexDir
+ _additional_params_ = AdditionalGetParams
+ _param_types_ = {
+ 'BinaryBlob': types.FcpTypeBool,
+ 'DontCompress': types.FcpTypeBool,
+ 'EarlyEncode': types.FcpTypeBool,
+ 'GetCHKOnly': types.FcpTypeBool,
+ 'Global': types.FcpTypeBool,
+ 'MaxRetries': types.FcpTypeInt,
+ 'Verbosity': types.FcpTypeInt,
+ }
+
+
+class ClientPutDiskDir(MessageBase):
+ name = consts.Message.ClientPutDiskDir
+ _additional_params_ = AdditionalGetParams
+ _param_types_ = {
+ 'BinaryBlob': types.FcpTypeBool,
+ 'DontCompress': types.FcpTypeBool,
+ 'EarlyEncode': types.FcpTypeBool,
+ 'GetCHKOnly': types.FcpTypeBool,
+ 'Global': types.FcpTypeBool,
+ 'MaxRetries': types.FcpTypeInt,
+ 'Verbosity': types.FcpTypeInt,
+ }
+
+
+class CloseConnectionDuplicateClientName(MessageBase):
+ name = consts.Message.CloseConnectionDuplicateClientName
+ _additional_params_ = {}
+ _param_types_ = {
+ }
+
+#########################################
+#########################################
+class ConfigData(MessageBase):
+ name = consts.Message.ConfigData
+ _additional_params_ = {}
+ _param_types_ = ConfigMessageParamTypes
+
+
+class DataFound(MessageBase):
+ name = consts.Message.DataFound
+ _additional_params_ = {}
+ _param_types_ = {
+ 'DataLength': types.FcpTypeInt,
+ 'Global': types.FcpTypeBool,
+ }
+
+
+class EndListPeerNotes(MessageBase):
+ name = consts.Message.EndListPeerNotes
+ _additional_params_ = {}
+ _param_types_ = {
+ }
+
+
+class EndListPeers(MessageBase):
+ name = consts.Message.EndListPeers
+ _additional_params_ = {}
+ _param_types_ = {
+ }
+
+
+class EndListPersistentRequests(MessageBase):
+ name = consts.Message.EndListPersistentRequests
+ _additional_params_ = {}
+ _param_types_ = {
+ }
+
+
+class FCPPluginMessage(MessageBase):
+ name = consts.Message.FCPPluginMessage
+ _additional_params_ = {}
+ _param_types_ = {
+ }
+
+
+class FCPPluginReply(MessageBase):
+ name = consts.Message.FCPPluginReply
+ _additional_params_ = {}
+ _param_types_ = {
+ 'DataLength': types.FcpTypeInt,
+ }
+
+
+class FinishedCompression(MessageBase):
+ name = consts.Message.FinishedCompression
+ _additional_params_ = {}
+ _param_types_ = {
+ 'CompressedSize': types.FcpTypeInt,
+ 'OriginalSize': types.FcpTypeInt,
+ }
+
+
+class GenerateSSK(MessageBase):
+ name = consts.Message.GenerateSSK
+ _additional_params_ = AdditionalGenerateSSKParams
+ _param_types_ = {
+ }
+
+
+class GetConfig(MessageBase):
+ name = consts.Message.GetConfig
+ _additional_params_ = {}
+ _param_types_ = {
+ 'WithCurrent': types.FcpTypeBool,
+ 'WithDefaults': types.FcpTypeBool,
+ 'WithExpertFlag': types.FcpTypeBool,
+ 'WithForceWriteFlag': types.FcpTypeBool,
+ 'WithLongDescription': types.FcpTypeBool,
+ 'WithShortDescription': types.FcpTypeBool,
+ 'WithSortOrder': types.FcpTypeBool,
+ }
+
+
+class GetFailed(MessageBase):
+ name = consts.Message.GetFailed
+ _additional_params_ = {}
+ _param_types_ = {
+ 'Code': types.FcpTypeInt,
+ 'ExpectedDataLength': types.FcpTypeInt_GetFailed_ExpectedDataLenght,
+ 'Fatal': types.FcpTypeBool,
+ 'FinalizedExpected': types.FcpTypeBool,
+ 'Global': types.FcpTypeBool,
+ }
+
+
+class GetNode(MessageBase):
+ name = consts.Message.GetNode
+ _additional_params_ = {}
+ _param_types_ = {
+ 'GiveOpennetRef': types.FcpTypeBool,
+ 'WithPrivate': types.FcpTypeBool,
+ 'WithVolatile': types.FcpTypeBool,
+ }
+
+
+class GetPluginInfo(MessageBase):
+ name = consts.Message.GetPluginInfo
+ _additional_params_ = AdditionalPluginInfoParams
+ _param_types_ = {
+ 'Started': types.FcpTypeBool,
+ }
+
+
+class GetRequestStatus(MessageBase):
+ name = consts.Message.GetRequestStatus
+ _additional_params_ = {}
+ _param_types_ = {
+ 'Global': types.FcpTypeBool,
+ 'OnlyData': types.FcpTypeBool,
+ }
+
+
+class IdentifierCollision(MessageBase):
+ name = consts.Message.IdentifierCollision
+ _additional_params_ = {}
+ _param_types_ = {
+ 'Global': types.FcpTypeBool,
+ }
+
+
+class ListPeer(MessageBase):
+ name = consts.Message.ListPeer
+ _additional_params_ = {}
+ _param_types_ = {
+ 'WithMetadata': types.FcpTypeBool,
+ 'WithVolantile': types.FcpTypeBool,
+ }
+
+
+class ListPeerNotes(MessageBase):
+ name = consts.Message.ListPeerNotes
+ _additional_params_ = {}
+ _param_types_ = {
+ }
+
+
+
+class ListPeers(MessageBase):
+ name = consts.Message.ListPeers
+ _additional_params_ = {}
+ _param_types_ = {
+ 'WithMetadata': types.FcpTypeBool,
+ 'WithVolantile': types.FcpTypeBool,
+ }
+
+
+class ListPersistentRequests(MessageBase):
+ name = consts.Message.ListPersistentRequests
+ _additional_params_ = {}
+ _param_types_ = {
+ }
+
+#####################################
+#####################################
+class ModifyConfig(MessageBase):
+ name = consts.Message.ModifyConfig
+ _additional_params_ = {}
+ _param_types_ = ConfigMessageParamTypes
+
+#####################################
+#####################################
+class ModifyPeer(MessageBase):
+ name = consts.Message.ModifyPeer
+ _additional_params_ = {}
+ _param_types_ = {
+ }
+
+
+class ModifyPeerNote(MessageBase):
+ name = consts.Message.ModifyPeerNote
+ _additional_params_ = {}
+ _param_types_ = {
+ #'Peernotetype': types.FcpTypeInt, #????
+ }
+
+
+class ModifyPersistentRequest(MessageBase):
+ name = consts.Message.ModifyPersistentRequest
+ _additional_params_ = {}
+ _param_types_ = {
+ 'Global': types.FcpTypeBool,
+ }
+
+###################################
+###################################
+class NodeData(MessageBase):
+ name = consts.Message.NodeData
+ _additional_params_ = {}
+ _param_types_ = {
+ 'ark.number': types.FcpTypeInt,
+ 'auth.negTypes': types.FcpTypeInt,
+ 'location': types.FcpTypeFloat,
+ 'opennet': types.FcpTypeBool,
+ 'testnet': types.FcpTypeBool,
+
+ 'volatile.allocatedJavaMemory': types.FcpTypeInt,
+ 'volatile.availableCPUs': types.FcpTypeInt,
+ 'volatile.averagePingTime': types.FcpTypeFloat,
+ 'volatile.avgStoreAccessRate': types.FcpTypePercent,
+ 'volatile.backedOffPercent': types.FcpTypePercent,
+ 'volatile.bwlimitDelayTime': types.FcpTypeFloat,
+ 'volatile.cacheAccess': types.FcpTypeInt,
+ 'volatile.cachedKeys': types.FcpTypeInt,
+ 'volatile.cachedSize': types.FcpTypeInt,
+ 'volatile.cachedStoreHits': types.FcpTypeInt,
+ 'volatile.cachedStoreMisses': types.FcpTypeInt,
+ 'volatile.freeJavaMemory': types.FcpTypeInt,
+ 'volatile.isUsingWrapper': types.FcpTypeBool,
+ 'volatile.locationChangePerMinute': types.FcpTypeFloat,
+ 'volatile.locationChangePerSession': types.FcpTypeFloat,
+ 'volatile.locationChangePerSwap': types.FcpTypeFloat,
+ 'volatile.maximumJavaMemory': types.FcpTypeInt,
+ 'volatile.maxOverallKeys': types.FcpTypeInt,
+ 'volatile.maxOverallSize': types.FcpTypeInt,
+ 'volatile.networkSizeEstimate24hourRecent': types.FcpTypeInt,
+ 'volatile.networkSizeEstimate48hourRecent': types.FcpTypeInt,
+ 'volatile.networkSizeEstimateSession': types.FcpTypeInt,
+ 'volatile.noSwaps': types.FcpTypeFloat,
+ 'volatile.noSwapsPerMinute': types.FcpTypeFloat,
+ 'volatile.numberOfARKFetchers': types.FcpTypeInt,
+ 'volatile.numberOfBursting': types.FcpTypeInt,
+ 'volatile.numberOfConnected': types.FcpTypeInt,
+ 'volatile.numberOfDisabled': types.FcpTypeInt,
+ 'volatile.numberOfDisconnected': types.FcpTypeInt,
+ 'volatile.numberOfInsertSenders': types.FcpTypeInt,
+ 'volatile.numberOfListening': types.FcpTypeInt,
+ 'volatile.numberOfListenOnly': types.FcpTypeInt,
+ 'volatile.numberOfNeverConnected': types.FcpTypeInt,
+ 'volatile.numberOfNotConnected': types.FcpTypeInt,
+ 'volatile.numberOfRemotePeerLocationsSeenInSwaps': types.FcpTypeFloat,
+ 'volatile.numberOfRequestSenders': types.FcpTypeInt,
+ 'volatile.numberOfRoutingBackedOff': types.FcpTypeInt,
+ 'volatile.numberOfSimpleConnected': types.FcpTypeInt,
+ 'volatile.numberOfTooNew': types.FcpTypeInt,
+ 'volatile.numberOfTooOld': types.FcpTypeInt,
+ 'volatile.numberOfTransferringRequestSenders': types.FcpTypeInt,
+ 'volatile.numberWithRoutingBackoffReasons.ForwardRejectedOverload': types.FcpTypeInt,
+ 'volatile.overallAccesses': types.FcpTypeInt,
+ 'volatile.overallKeys': types.FcpTypeInt,
+ 'volatile.overallSize': types.FcpTypeInt,
+ 'volatile.percentCachedStoreHitsOfAccesses': types.FcpTypePercent,
+ 'volatile.percentOverallKeysOfMax': types.FcpTypePercent,
+ 'volatile.percentStoreHitsOfAccesses': types.FcpTypePercent,
+ 'volatile.pInstantReject': types.FcpTypeFloat, # or percent?
+ 'volatile.recentInputRate': types.FcpTypeFloat,
+ 'volatile.recentOutputRate': types.FcpTypeFloat,
+ 'volatile.routingMissDistance': types.FcpTypeFloat,
+ 'volatile.runningThreadCount': types.FcpTypeInt,
+ 'volatile.startedSwaps': types.FcpTypeInt,
+ 'volatile.startupTime': types.FcpTypeTime,
+ 'volatile.storeAccesses': types.FcpTypeInt,
+ 'volatile.storeHits': types.FcpTypeInt,
+ 'volatile.storeKeys': types.FcpTypeInt,
+ 'volatile.storeMisses': types.FcpTypeInt,
+ 'volatile.storeSize': types.FcpTypeInt,
+ 'volatile.swaps': types.FcpTypeFloat,
+ 'volatile.swapsPerMinute': types.FcpTypeFloat,
+ 'volatile.swapsPerNoSwaps': types.FcpTypeFloat,
+ 'volatile.swapsRejectedAlreadyLocked': types.FcpTypeInt,
+ 'volatile.swapsRejectedLoop': types.FcpTypeInt,
+ 'volatile.swapsRejectedNowhereToGo': types.FcpTypeInt,
+ 'volatile.swap...
[truncated message content] |
|
From: <jU...@us...> - 2008-03-09 12:28:36
|
Revision: 347
http://fclient.svn.sourceforge.net/fclient/?rev=347&view=rev
Author: jUrner
Date: 2008-03-09 05:28:33 -0700 (Sun, 09 Mar 2008)
Log Message:
-----------
moved persistent params handling to message
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-03-08 11:15:48 UTC (rev 346)
+++ trunk/sandbox/fcp2/message.py 2008-03-09 12:28:33 UTC (rev 347)
@@ -1,7 +1,8 @@
-"""Freennet Client Protocol message
+"""Freennet Client Protocol messages
"""
import os, sys
+import base64
import socket
#--> rel import hack
@@ -30,6 +31,7 @@
#
#********************************************************************************
MessagesAll = {}
+PersistentParamsSep = '0x01'
class MessageMeta(type):
@@ -45,105 +47,127 @@
#
#********************************************************************************
class MessageBase(object):
- """Class wrapping a Fcp message
-
- Sample use::
+ """Class wrapping a Fcp message
+
+ Sample use::
- msg = Messsage(
- consts.Message.ClientHello,
- ExpectedVersion='2.0',
- Name='MyConnectionName'
- )
- msg['Name'] = 'another'
- msg['Name']
- >> 'another'
-
- msg.send(mySocket)
-
- @ivar data: (bytes) data carried along with the message or None
- @ivar name: (str) message name
- @ivar params: (dict) message params
+ msg = Message.ClientHello(
+ ExpectedVersion='2.0',
+ Name='MyConnectionName'
+ )
+ msg['Name'] = 'another'
+ msg['Name']
+ >> 'another'
+
+
+ @ivar data: (bytes) data carried along with the message or None
+ @ivar name: (str) message name
+ @ivar params: (dict) message params
+ """
+ __metaclass__ = MessageMeta
+
+ name = ''
+ _additional_params_ = {}
+ _param_types_ = {}
+ _persistent_params_ = ()
+
+
+ @classmethod
+ def __eq__(klass, other):
+ return klass.name == other.name
+
+ @classmethod
+ def __ne__(klass, other):
+ return klass.name != other.name
+
+
+ def __init__(self, data=None, **params):
"""
- __metaclass__ = MessageMeta
+ @param data: data associated to the message
+ @param params: {field-name: value, ...} of parameters of the message
+ """
+ params.update(self._additional_params_.copy())
- name = ''
- _additional_params_ = {}
- _param_types_ = {}
-
+ self.data = data
+ self.params = params
- @classmethod
- def __eq__(klass, other):
- return klass.name == other.name
-
- @classmethod
- def __ne__(klass, other):
- return klass.name != other.name
-
-
- def __init__(self, data=None, **params):
- """
- @param data: data associated to the message
- @param params: {field-name: value, ...} of parameters of the message
- """
- params.update(self._additional_params_.copy())
- self.data = data
- self.params = params
-
-
- def get(self, name, default=None):
- """Returns the message parameter 'name' or 'default' """
- return self.params.get(name, default)
+ def get(self, name, default=None):
+ """Returns the message parameter 'name' or 'default' """
+ return self.params.get(name, default)
+
+
+ def __getitem__(self, name):
+ """Returns the message parameter 'name' """
+ return self.params[name]
+
+
+ def __setitem__(self, name, value):
+ """Sets the message parameter 'name' to 'value' """
+ self.params[name] = value
+
+ def pprint(self):
+ """Returns the message as nicely formated human readable string"""
+ out = ['', '>>' + self.name, ]
+ for param, value in self.params.items():
+ if isinstance(param, PrivateParam):
+ continue
+ out.append('>> %s=%s' % (param, value))
- def __getitem__(self, name):
- """Returns the message parameter 'name' """
- return self.params[name]
-
-
- def __setitem__(self, name, value):
- """Sets the message parameter 'name' to 'value' """
- self.params[name] = value
+ if self.data is None:
+ out.append('>>EndMessage')
+ else:
+ out.append('>>Data')
+ out.append(self.data)
+ return '\n'.join(out)
+
+
+ def toString(self):
+ """Returns the message as formated string ready to be send"""
+ out = [self.name, ]
+ for param, value in self.params.items():
+ if isinstance(param, PrivateParam):
+ continue
+ # convert python to fcp value if necessary
+ paramType = self._param_types_.get(param, None)
+ if paramType is not None:
+ value = paramType.pythonToFcp(value)
+
+ out.append('%s=%s' % (param, value))
- def pprint(self):
- """Returns the message as nicely formated human readable string"""
- out = ['', '>>' + self.name, ]
- for param, value in self.params.items():
- if isinstance(param, PrivateParam):
- continue
- out.append('>> %s=%s' % (param, value))
-
- if self.data is None:
- out.append('>>EndMessage')
- else:
- out.append('>>Data')
- out.append(self.data)
- return '\n'.join(out)
+ if self.data is None:
+ out.append('EndMessage\n')
+ else:
+ out.append('Data')
+ out.append(self.data)
+ return '\n'.join(out)
+
+
+ #TODO:
+ # 1. if one setter / getter fails no setter / getter result should assumed to be valid
+ # 2. log errors
+ #
+ #
+ def setPersistentParams(self, persistentData):
+ params = persistentData.split(PersistentParamsSep)
+ if len(params) > len(self._persistent_params_):
+ raise ValueError('Too many parameters in data')
+ elif len(params) < len(self._persistent_params_):
+ raise ValueError('Too few parameters in data')
+ for n, (getter, setter) in enumerate(self._persistent_params_):
+ setter(self, params[n])
+
+ def getPersistentParams(self):
+ out = []
+ for n, (getter, setter) in enumerate(self._persistent_params_):
+ #TODO: check if PersistentParamsSep is in data returned
+ out.append(getter(self))
+ return PersistentParamsSep.join(out)
- def toString(self):
- """Returns the message as formated string ready to be send"""
- out = [self.name, ]
- for param, value in self.params.items():
- if isinstance(param, PrivateParam):
- continue
-
- # convert python to fcp value if necessary
- paramType = self._param_types_.get(param, None)
- if paramType is not None:
- value = paramType.pythonToFcp(value)
-
- out.append('%s=%s' % (param, value))
-
- if self.data is None:
- out.append('EndMessage\n')
- else:
- out.append('Data')
- out.append(self.data)
- return '\n'.join(out)
-
#***************************************************************************************
#
# param types for config message
@@ -437,7 +461,6 @@
PrivateParam('InitTime'): 0, # when was the request started?
#TODO: not really necessary, but we need it for persistent params
- PrivateParam('FilenameCollision'): consts.FilenameCollision.HandleNever,
PrivateParam('PersistentUserData'): '', # any user defined persistent data
# non persistent params
@@ -488,18 +511,56 @@
PrivateParam('InitTime'): 0, # when was the request started?
}
+
+PersistentParamsGet = (
+ (
+ lambda msg: str(msg.__getitem__('RequestType')),
+ lambda msg, value: msg.__setitem__('Requesttype', int(value)),
+ ),
+ (
+ lambda msg: str(msg.__getitem__('InitTime')),
+ lambda msg, value: msg.__setitem__('InitTime', float(value)),
+ ),
+ (
+ lambda msg: str(msg.__getitem__('FilenameCollision')),
+ lambda msg, value: msg.__setitem__('FilenameCollision', int(value)),
+ ),
+ (
+ lambda msg: base64.b64encode(msg.__getitem__('PersistentUserData')),
+ lambda msg, value: msg.__setitem__('PersistentUserData', base64.b64decode(value)),
+ ),
+ )
+
+PersistentParamsPut = (
+ (
+ lambda msg: str(msg.__getitem__('RequestType')),
+ lambda msg, value: msg.__setitem__('Requesttype', int(value)),
+ ),
+ (
+ lambda msg: str(msg.__getitem__('InitTime')),
+ lambda msg, value: msg.__setitem__('InitTime', float(value)),
+ ),
+ (
+ lambda msg: base64.b64encode(msg.__getitem__('PersistentUserData')),
+ lambda msg, value: msg.__setitem__('PersistentUserData', base64.b64decode(value)),
+ ),
+ )
#********************************************************************************
#
#********************************************************************************
#TODO: register new message type?
-def newMessageType(name, paramTypes=None, additionalParams=None):
+def newMessageType(name, paramTypes=None, additionalParams=None, persistentParams=None):
kws = {
'name': name,
- '_additional_params_': additionalParams if additionalParams is not None else {},
- '_param_types_': paramTypes if paramTypes is not None else {},
+ '_additional_params_': {} if additionalParams is None else additionalParams,
+ '_persistent_params_': () if persistentParams is None else persistentParams,
+ '_param_types_': {} if paramTypes is None else paramTypes,
}
return type(name, (MessageBase, ), kws)
+
+#TODO: _persistent_params_ ...define in all message classes or not? Bogus for most,
+# but makes customization of individual classes harder for useres
#********************************************************************************
# some additional messages we define for uniformity
#********************************************************************************
@@ -544,6 +605,7 @@
class ClientGet(MessageBase):
name = consts.Message.ClientGet
_additional_params_ = AdditionalGetParams
+ _persistent_params_ = PersistentParamsGet
_param_types_ = {
'BinaryBlob': types.FcpTypeBool,
'DSOnly': types.FcpTypeBool,
@@ -554,6 +616,17 @@
'MaxTempSize': types.FcpTypeInt,
'Verbosity': types.FcpTypeInt,
}
+
+ def restorePersistentParams(self):
+ try:
+ MessageBase.setPersistentParams(self, self['ClientToken'])
+ except Exception, d:
+ #print Exception, d
+ return False
+ return True
+
+ def updatePersistentParams(self):
+ self['ClientToken'] = MessageBase.getPersistentParams(self)
class ClientHello(MessageBase):
@@ -567,6 +640,7 @@
class ClientPut(MessageBase):
name = consts.Message.ClientPut
_additional_params_ = AdditionalPutParams
+ _persistent_params_ = PersistentParamsPut
_param_types_ = {
'BinaryBlob': types.FcpTypeBool,
'DataLength': types.FcpTypeInt,
@@ -577,34 +651,24 @@
'MaxRetries': types.FcpTypeInt,
'Verbosity': types.FcpTypeInt,
}
+
+ def restorePersistentParams(self):
+ try:
+ MessageBase.setPersistentParams(self, self['ClientToken'])
+ except Exception, d:
+ return False
+ return True
+
+ def updatePersistentParams(self):
+ self['ClientToken'] = MessageBase.getPersistentParams(self)
-class ClientPutComplexDir(MessageBase):
+class ClientPutComplexDir(ClientPut):
name = consts.Message.ClientPutComplexDir
- _additional_params_ = AdditionalGetParams
- _param_types_ = {
- 'BinaryBlob': types.FcpTypeBool,
- 'DontCompress': types.FcpTypeBool,
- 'EarlyEncode': types.FcpTypeBool,
- 'GetCHKOnly': types.FcpTypeBool,
- 'Global': types.FcpTypeBool,
- 'MaxRetries': types.FcpTypeInt,
- 'Verbosity': types.FcpTypeInt,
- }
+
-
-class ClientPutDiskDir(MessageBase):
+class ClientPutDiskDir(ClientPut):
name = consts.Message.ClientPutDiskDir
- _additional_params_ = AdditionalGetParams
- _param_types_ = {
- 'BinaryBlob': types.FcpTypeBool,
- 'DontCompress': types.FcpTypeBool,
- 'EarlyEncode': types.FcpTypeBool,
- 'GetCHKOnly': types.FcpTypeBool,
- 'Global': types.FcpTypeBool,
- 'MaxRetries': types.FcpTypeInt,
- 'Verbosity': types.FcpTypeInt,
- }
class CloseConnectionDuplicateClientName(MessageBase):
@@ -927,7 +991,7 @@
'Build': types.FcpTypeInt,
'CompressionCodecs': types.FcpTypeInt,
'ExtBuild': types.FcpTypeInt,
- 'FcpVersion': types.FcpTypeFloat,
+ 'FCPVersion': types.FcpTypeFloat,
'Testnet': types.FcpTypeBool,
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-10 13:03:22
|
Revision: 353
http://fclient.svn.sourceforge.net/fclient/?rev=353&view=rev
Author: jUrner
Date: 2008-03-10 06:03:23 -0700 (Mon, 10 Mar 2008)
Log Message:
-----------
some fixes for mesages
++ getting tired working around the messed up protocol
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-03-09 12:56:43 UTC (rev 352)
+++ trunk/sandbox/fcp2/message.py 2008-03-10 13:03:23 UTC (rev 353)
@@ -150,7 +150,7 @@
# 2. log errors
#
#
- def setPersistentParams(self, persistentData):
+ def _setPersistentParams(self, persistentData):
params = persistentData.split(PersistentParamsSep)
if len(params) > len(self._persistent_params_):
raise ValueError('Too many parameters in data')
@@ -160,7 +160,7 @@
setter(self, params[n])
- def getPersistentParams(self):
+ def _getPersistentParams(self):
out = []
for n, (getter, setter) in enumerate(self._persistent_params_):
#TODO: check if PersistentParamsSep is in data returned
@@ -168,6 +168,19 @@
return PersistentParamsSep.join(out)
+ def _restoreParams(self, params):
+ for paramName, paramValue in params.items():
+ paramType = self._param_types_.get(paramName, None)
+ if paramType is not None:
+ paramValue = paramType.fcpToPython(paramValue)
+ self[paramName] = paramValue
+ return True
+
+
+ def _getDataLength(self):
+ return 0
+
+
#***************************************************************************************
#
# param types for config message
@@ -617,16 +630,17 @@
'Verbosity': types.FcpTypeInt,
}
- def restorePersistentParams(self):
+ def _restoreParams(self, params):
+ MessageBase._restoreParams(self, params)
try:
- MessageBase.setPersistentParams(self, self['ClientToken'])
+ MessageBase._setPersistentParams(self, self['ClientToken'])
except Exception, d:
#print Exception, d
return False
return True
def updatePersistentParams(self):
- self['ClientToken'] = MessageBase.getPersistentParams(self)
+ self['ClientToken'] = MessageBase._getPersistentParams(self)
class ClientHello(MessageBase):
@@ -652,13 +666,18 @@
'Verbosity': types.FcpTypeInt,
}
- def restorePersistentParams(self):
+ def _getDataLength(self):
+ return self['DataLength']
+
+ def _restoreParams(self, params):
+ MessageBase._restoreParams(self, params)
try:
- MessageBase.setPersistentParams(self, self['ClientToken'])
+ MessageBase._setPersistentParams(self, self['ClientToken'])
except Exception, d:
+ #print Exception, d
return False
return True
-
+
def updatePersistentParams(self):
self['ClientToken'] = MessageBase.getPersistentParams(self)
@@ -666,6 +685,29 @@
class ClientPutComplexDir(ClientPut):
name = consts.Message.ClientPutComplexDir
+
+ def __init__(self, *args, **kwargs):
+ ClientPut.__init__(self, *args, **kwargs)
+ self._dataLength = 0
+
+
+ def _restoreParams(self, params):
+ result = ClientPut._restoreParams(self, params)
+
+ for paramName, paramValue in self.params.items():
+ tmp_paramName = paramName.split('.')
+ if len(tmp_paramName) == 3:
+ if tmp_paramName[-1] == 'DataLength':
+ n = types.FcpTypeInt.fcpToPython(paramValue)
+ self._dataLength += n
+ self[paramName] = n
+ return result
+
+
+ def _getDataLength(self):
+ return self._dataLength
+
+
class ClientPutDiskDir(ClientPut):
name = consts.Message.ClientPutDiskDir
@@ -1022,26 +1064,64 @@
class PersistentGet(MessageBase):
name = consts.Message.PersistentGet
_additional_params_ = {}
- _param_types_ = {
- }
+ _persistent_params_ = PersistentParamsGet
+ _param_types_ = ClientGet._param_types_.copy()
+ _param_types_['Started'] = types.FcpTypeBool
+
+ def _restoreParams(self, params):
+ MessageBase._restoreParams(self, params)
+ try:
+ MessageBase._setPersistentParams(self, self['ClientToken'])
+ except Exception, d:
+ #print Exception, d
+ return False
+ return True
-
#######################################
#######################################
class PersistentPut(MessageBase):
name = consts.Message.PersistentPut
- _additional_params_ = {}
- _param_types_ = {
- }
+ _additional_params_ = AdditionalPutParams
+ _persistent_params_ = PersistentParamsPut
+ _param_types_ = ClientPut._param_types_.copy()
+ _param_types_['Started'] = types.FcpTypeBool
+ def _restoreParams(self, params):
+ MessageBase._restoreParams(self, params)
+ try:
+ MessageBase._setPersistentParams(self, self['ClientToken'])
+ except Exception, d:
+ #print Exception, d
+ return False
+ return True
+
class PersistentPutDir(MessageBase):
name = consts.Message.PersistentPutDir
- _additional_params_ = {}
- _param_types_ = {
- }
+ _additional_params_ = AdditionalPutParams
+ _persistent_params_ = PersistentParamsPut
+ _param_types_ = ClientPutDiskDir._param_types_.copy()
+ _param_types_['Started'] = types.FcpTypeBool
+
+
+ def _restoreParams(self, params):
+ MessageBase._restoreParams(self, params)
+ for paramName, paramValue in self.params.items():
+ tmp_paramName = paramName.split('.')
+ if len(tmp_paramName) == 3:
+ if tmp_paramName[-1] == 'DataLength':
+ n = types.FcpTypeInt.fcpToPython(paramValue)
+ self[paramName] = n
+ try:
+ MessageBase._setPersistentParams(self, self['ClientToken'])
+ except Exception, d:
+ #print Exception, d
+ return False
+ return True
+
+
class PersistentRequestModified(MessageBase):
name = consts.Message.PersistentRequestModified
_additional_params_ = {}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-11 01:02:50
|
Revision: 359
http://fclient.svn.sourceforge.net/fclient/?rev=359&view=rev
Author: jUrner
Date: 2008-03-10 18:02:55 -0700 (Mon, 10 Mar 2008)
Log Message:
-----------
a few fixes
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-03-11 01:02:27 UTC (rev 358)
+++ trunk/sandbox/fcp2/message.py 2008-03-11 01:02:55 UTC (rev 359)
@@ -145,6 +145,12 @@
return '\n'.join(out)
+
+
+ def updatePersistentParams(self):
+ pass
+
+
#TODO:
# 1. if one setter / getter fails no setter / getter result should assumed to be valid
# 2. log errors
@@ -679,7 +685,7 @@
return True
def updatePersistentParams(self):
- self['ClientToken'] = MessageBase.getPersistentParams(self)
+ self['ClientToken'] = MessageBase._getPersistentParams(self)
class ClientPutComplexDir(ClientPut):
@@ -799,6 +805,7 @@
'WithLongDescription': types.FcpTypeBool,
'WithShortDescription': types.FcpTypeBool,
'WithSortOrder': types.FcpTypeBool,
+ 'WithDataTypes': types.FcpTypeBool,
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-11 11:20:32
|
Revision: 366
http://fclient.svn.sourceforge.net/fclient/?rev=366&view=rev
Author: jUrner
Date: 2008-03-11 04:20:32 -0700 (Tue, 11 Mar 2008)
Log Message:
-----------
Peristentget fixes and this and that
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-03-11 11:19:48 UTC (rev 365)
+++ trunk/sandbox/fcp2/message.py 2008-03-11 11:20:32 UTC (rev 366)
@@ -144,9 +144,7 @@
out.append(self.data)
return '\n'.join(out)
-
-
def updatePersistentParams(self):
pass
@@ -522,6 +520,7 @@
PrivateParam('RequestStatus'): consts.RequestStatus.Null,
PrivateParam('InitTime'): 0, # when was the request started?
PrivateParam('UserData'): None,
+ PrivateParam('Edition'): -1,
}
AdditionalPluginInfoParams = {
@@ -534,7 +533,7 @@
PersistentParamsGet = (
(
lambda msg: str(msg.__getitem__('RequestType')),
- lambda msg, value: msg.__setitem__('Requesttype', int(value)),
+ lambda msg, value: msg.__setitem__('RequestType', int(value)),
),
(
lambda msg: str(msg.__getitem__('InitTime')),
@@ -553,7 +552,7 @@
PersistentParamsPut = (
(
lambda msg: str(msg.__getitem__('RequestType')),
- lambda msg, value: msg.__setitem__('Requesttype', int(value)),
+ lambda msg, value: msg.__setitem__('RequestType', int(value)),
),
(
lambda msg: str(msg.__getitem__('InitTime')),
@@ -619,6 +618,9 @@
'DataLength': types.FcpTypeInt,
'Global': types.FcpTypeBool,
}
+
+ def _getDataLength(self):
+ return self['DataLength']
class ClientGet(MessageBase):
@@ -647,8 +649,8 @@
def updatePersistentParams(self):
self['ClientToken'] = MessageBase._getPersistentParams(self)
+
-
class ClientHello(MessageBase):
name = consts.Message.ClientHello
_additional_params_ = {}
@@ -1070,7 +1072,7 @@
#######################################
class PersistentGet(MessageBase):
name = consts.Message.PersistentGet
- _additional_params_ = {}
+ _additional_params_ = AdditionalGetParams
_persistent_params_ = PersistentParamsGet
_param_types_ = ClientGet._param_types_.copy()
_param_types_['Started'] = types.FcpTypeBool
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-04-08 10:08:05
|
Revision: 373
http://fclient.svn.sourceforge.net/fclient/?rev=373&view=rev
Author: jUrner
Date: 2008-04-08 03:08:08 -0700 (Tue, 08 Apr 2008)
Log Message:
-----------
use pmstruct to handle persistent data
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-04-08 10:07:36 UTC (rev 372)
+++ trunk/sandbox/fcp2/message.py 2008-04-08 10:08:08 UTC (rev 373)
@@ -16,6 +16,7 @@
from fcp2 import consts
from fcp2 import types
+from fcp2.fcp_lib import pmstruct
from fcp2.fcp_lib import uuid
@@ -157,9 +158,9 @@
def _setPersistentParams(self, persistentData):
params = persistentData.split(PersistentParamsSep)
if len(params) > len(self._persistent_params_):
- raise ValueError('Too many parameters in data')
+ raise ValueError('Too many parameters in persistentData')
elif len(params) < len(self._persistent_params_):
- raise ValueError('Too few parameters in data')
+ raise ValueError('Too few parameters in persistentData')
for n, (getter, setter) in enumerate(self._persistent_params_):
setter(self, params[n])
@@ -388,8 +389,28 @@
ConfigMessageParamTypes = _ConfigMessageParamTypes()
#********************************************************************************
-#
+# equipment for messages with persustent params and additional params
#********************************************************************************
+class PeristentParamsGet(pmstruct.PoorMansStruct):
+ _fields_ = (
+ ('Flags', pmstruct.Int),
+ ('InitTime', pmstruct.Float),
+ ('PersistentUserData', pmstruct.Str),
+ )
+
+PeristentParamsPut = PeristentParamsGet
+
+
+class PersistentParams(object):
+
+ def __init__(self, mapping):
+ self.mapping = mapping
+
+ def fromString(self, string):
+ pass
+
+
+
PeerMessageParamTypes = {
'ark.number': types.FcpTypeInt,
'auth.negTypes': types.FcpTypeInt,
@@ -698,7 +719,7 @@
ClientPut.__init__(self, *args, **kwargs)
self._dataLength = 0
-
+
def _restoreParams(self, params):
result = ClientPut._restoreParams(self, params)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-04-09 21:09:54
|
Revision: 392
http://fclient.svn.sourceforge.net/fclient/?rev=392&view=rev
Author: jUrner
Date: 2008-04-09 14:09:58 -0700 (Wed, 09 Apr 2008)
Log Message:
-----------
add node tree to deal with hirarchical message params
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-04-09 21:09:48 UTC (rev 391)
+++ trunk/sandbox/fcp2/message.py 2008-04-09 21:09:58 UTC (rev 392)
@@ -17,6 +17,7 @@
from fcp2 import consts
from fcp2 import types
from fcp2.fcp_lib import pmstruct
+from fcp2.fcp_lib import node
from fcp2.fcp_lib import uuid
@@ -25,6 +26,13 @@
#********************************************************************************
#
#********************************************************************************
+class Node(node.Node):
+ """Node tree used along with messages"""
+ ComponentSep = '.'
+
+#********************************************************************************
+#
+#********************************************************************************
class PrivateParam(str):
"""Helper class to mark a message parameter as PrivateParam to the package"""
@@ -146,6 +154,18 @@
return '\n'.join(out)
+ def toTree(self):
+ """Converts message params to a tree of nodes
+ @return: (L{Node}) root node
+
+ @note: some messages have hirarchicaly organized (dotted) parameters. Use this
+ method to convert the parameters to a tree of nodes
+ """
+ node_ = Node()
+ for name, value in self.params.iteritems():
+ node_[name] = value
+
+
def updatePersistentParams(self):
pass
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-05-05 08:00:39
|
Revision: 402
http://fclient.svn.sourceforge.net/fclient/?rev=402&view=rev
Author: jUrner
Date: 2008-05-05 01:00:40 -0700 (Mon, 05 May 2008)
Log Message:
-----------
RemovePersistentRequest is deprecated in Fcp. use RemoveRequest
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-05-05 07:59:34 UTC (rev 401)
+++ trunk/sandbox/fcp2/message.py 2008-05-05 08:00:40 UTC (rev 402)
@@ -1240,8 +1240,8 @@
}
-class RemovePersistentRequest(MessageBase):
- name = consts.Message.RemovePersistentRequest
+class RemoveRequest(MessageBase):
+ name = consts.Message.RemoveRequest
_additional_params_ = {}
_param_types_ = {
'Global': types.FcpTypeBool,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-06-29 10:58:24
|
Revision: 416
http://fclient.svn.sourceforge.net/fclient/?rev=416&view=rev
Author: jUrner
Date: 2008-06-29 03:58:33 -0700 (Sun, 29 Jun 2008)
Log Message:
-----------
implemented autoconvert fcp keys to python keys
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-06-29 10:57:31 UTC (rev 415)
+++ trunk/sandbox/fcp2/message.py 2008-06-29 10:58:33 UTC (rev 416)
@@ -16,6 +16,7 @@
from fcp2 import consts
from fcp2 import types
+from fcp2 import key
from fcp2.fcp_lib import pmstruct
from fcp2.fcp_lib import node
from fcp2.fcp_lib import uuid
@@ -143,7 +144,7 @@
paramType = self._param_types_.get(param, None)
if paramType is not None:
value = paramType.pythonToFcp(value)
-
+
out.append('%s=%s' % (param, value))
if self.data is None:
@@ -330,11 +331,11 @@
'node.scheduler.SSKinserter_priority_policy': types.FcpTypeChoicePriorityPolicy,
'node.scheduler.SSKrequester_priority_policy': types.FcpTypeChoicePriorityPolicy,
- 'node.updater.URI': types.FcpTypeUri,
+ 'node.updater.URI': key.FcpTypeKey,
'node.updater.autoupdate': types.FcpTypeBool,
'node.updater.enabled': types.FcpTypeBool,
- 'node.updater.extURI': types.FcpTypeUri,
- 'node.updater.revocationURI': types.FcpTypeUri,
+ 'node.updater.extURI': key.FcpTypeKey,
+ 'node.updater.revocationURI': key.FcpTypeKey,
'pluginmanager.loadplugin': types.FcpTypeStringList,
'pluginmanager2.loadedPlugins': types.FcpTypeStringList,
@@ -676,6 +677,7 @@
'MaxRetries': types.FcpTypeInt,
'MaxSize': types.FcpTypeInt,
'MaxTempSize': types.FcpTypeInt,
+ 'URI': key.FcpTypeKey,
'Verbosity': types.FcpTypeInt,
}
@@ -712,6 +714,7 @@
'GetCHKOnly': types.FcpTypeBool,
'Global': types.FcpTypeBool,
'MaxRetries': types.FcpTypeInt,
+ 'URI': key.FcpTypeKey,
'Verbosity': types.FcpTypeInt,
}
@@ -861,6 +864,7 @@
'Fatal': types.FcpTypeBool,
'FinalizedExpected': types.FcpTypeBool,
'Global': types.FcpTypeBool,
+ 'RedirectURI': key.FcpTypeKey,
}
@@ -969,6 +973,7 @@
_additional_params_ = {}
_param_types_ = {
'ark.number': types.FcpTypeInt,
+ 'ark.privURI': key.FcpTypeKey,
'auth.negTypes': types.FcpTypeInt,
'location': types.FcpTypeFloat,
'opennet': types.FcpTypeBool,
@@ -1210,6 +1215,7 @@
_additional_params_ = {}
_param_types_ = {
'Code': types.FcpTypeInt,
+ 'ExpectedURI': key.FcpTypeKey,
'Global': types.FcpTypeBool,
}
@@ -1219,6 +1225,7 @@
_additional_params_ = {}
_param_types_ = {
'Global': types.FcpTypeBool,
+ 'URI': key.FcpTypeKey,
}
#####################################
@@ -1230,6 +1237,7 @@
_additional_params_ = {}
_param_types_ = {
'Global': types.FcpTypeBool,
+ 'URI': key.FcpTypeKey,
}
@@ -1252,6 +1260,8 @@
name = consts.Message. SSKKeypair
_additional_params_ = {}
_param_types_ = {
+ 'InsertURI': key.FcpTypeKey,
+ 'RequestURI': key.FcpTypeKey,
}
@@ -1287,6 +1297,7 @@
_additional_params_ = AdditionalSubscribeUSKParams
_param_types_ = {
'DontPoll': types.FcpTypeBool,
+ 'URI': key.FcpTypeKey,
}
@@ -1295,6 +1306,7 @@
_additional_params_ = {}
_param_types_ = {
'Edition': types.FcpTypeInt,
+ 'URI': key.KeyBase,
}
@@ -1334,6 +1346,7 @@
name = consts.Message.URIGenerated
_additional_params_ = {}
_param_types_ = {
+ 'URI': key.FcpTypeKey,
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-06-29 12:38:16
|
Revision: 422
http://fclient.svn.sourceforge.net/fclient/?rev=422&view=rev
Author: jUrner
Date: 2008-06-29 05:38:23 -0700 (Sun, 29 Jun 2008)
Log Message:
-----------
SubscribedUSKUpdate was broken. fixed
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-06-29 12:37:43 UTC (rev 421)
+++ trunk/sandbox/fcp2/message.py 2008-06-29 12:38:23 UTC (rev 422)
@@ -1306,7 +1306,7 @@
_additional_params_ = {}
_param_types_ = {
'Edition': types.FcpTypeInt,
- 'URI': key.KeyBase,
+ 'URI': key.FcpTypeKey,
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-06-29 15:18:21
|
Revision: 424
http://fclient.svn.sourceforge.net/fclient/?rev=424&view=rev
Author: jUrner
Date: 2008-06-29 08:18:28 -0700 (Sun, 29 Jun 2008)
Log Message:
-----------
stringify msg params for readability
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-06-29 12:39:15 UTC (rev 423)
+++ trunk/sandbox/fcp2/message.py 2008-06-29 15:18:28 UTC (rev 424)
@@ -123,6 +123,12 @@
for param, value in self.params.items():
if isinstance(param, PrivateParam):
continue
+
+ # convert python to fcp value if necessary
+ paramType = self._param_types_.get(param, None)
+ if paramType is not None:
+ value = paramType.pythonToFcp(value)
+
out.append('>> %s=%s' % (param, value))
if self.data is None:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-06-30 08:58:05
|
Revision: 434
http://fclient.svn.sourceforge.net/fclient/?rev=434&view=rev
Author: jUrner
Date: 2008-06-30 01:57:58 -0700 (Mon, 30 Jun 2008)
Log Message:
-----------
removed some leftover code
++ beautifications
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-06-30 08:57:07 UTC (rev 433)
+++ trunk/sandbox/fcp2/message.py 2008-06-30 08:57:58 UTC (rev 434)
@@ -218,7 +218,7 @@
# param types for config message
#
# ..bit more efford here, cos we need types for user input checking
-# ...a slpoppy implementation of a dict should be enough
+# ...a sloppy implementation of a dict should be enough
#
#***************************************************************************************
class _ConfigMessageParamTypes(object):
@@ -415,8 +415,12 @@
raise ValueError('Unknown param class in: %r' % paramName)
ConfigMessageParamTypes = _ConfigMessageParamTypes()
+
#********************************************************************************
-# equipment for messages with persustent params and additional params
+# equipp Get / Put messages with some persistent params
+#
+# these params are stored in ClientToken
+#
#********************************************************************************
class PeristentParamsGet(pmstruct.PoorMansStruct):
_fields_ = (
@@ -427,62 +431,13 @@
PeristentParamsPut = PeristentParamsGet
-
-class PersistentParams(object):
-
- def __init__(self, mapping):
- self.mapping = mapping
-
- def fromString(self, string):
- pass
-
-
-
-PeerMessageParamTypes = {
- 'ark.number': types.FcpTypeInt,
- 'auth.negTypes': types.FcpTypeInt,
-
- 'location': types.FcpTypeFloat,
- 'opennet': types.FcpTypeBool,
- 'testnet': types.FcpTypeBool,
-
- 'metadata.timeLastConnected': types.FcpTypeTime,
- 'metadata.timeLastReceivedPacket': types.FcpTypeTime,
- 'metadata.timeLastRoutable': types.FcpTypeTime,
- 'metadata.timeLastSuccess': types.FcpTypeTime,
- 'metadata.routableConnectionCheckCount': types.FcpTypeInt,
- 'metadata.hadRoutableConnectionCount': types.FcpTypeInt,
-
- 'volatile.averagePingTime': types.FcpTypeFloat,
- 'volatile.overloadProbability': types.FcpTypePercent,
- 'volatile.routingBackoff': types.FcpTypeInt,
- 'volatile.routingBackoffPercent': types.FcpTypePercent,
- 'volatile.totalBytesIn': types.FcpTypeInt,
- 'volatile.totalBytesOut': types.FcpTypeInt,
- 'volatile.routingBackoffLength': types.FcpTypeInt,
- }
-
-'''all other Peer message params here....
-
->> identity=YIrE..................
->> lastGoodVersion=Fred,0.7,1.0,1106
->> physical.udp=00.000.000.000:00000
->> version=Fred,0.7,1.0,1107
->> dsaGroup.q=ALFDN...............
->> dsaGroup.p=AIYIrE..................
->> dsaPubKey.y=YSlb............
->> dsaGroup.g=UaRa...............
->> ark.pubURI=SSK@......................
->>
->> metadata.detected.udp=000.000.000.000:00000
-
->> volatile.lastRoutingBackoffReason=ForwardRejectedOverload
->> volatile.percentTimeRoutableConnection=99.4735.................
->> volatile.status=CONNECTED
-
-'''
-
-
+#********************************************************************************
+# at runtime we store a few additional params in msg.params
+#
+# for uniformity reasons we store them in msg.params and mark them
+# as private so they don't get send to the node
+#
+#********************************************************************************
AdditionalGetParams = {
# persistent params that will go into identifier
@@ -496,12 +451,8 @@
PrivateParam('ErrorMessage'): None, # error message in case an error occured
PrivateParam('UserData'): None, # any user defined runtime data here
- # params for SSKKeypair
- PrivateParam('PrivateParamKey'): None,
- PrivateParam('PublicKey'): None,
-
# params from DataFound
- PrivateParam('MetadataContentType'): '', # contecnt type
+ PrivateParam('MetadataContentType'): '', # content type
PrivateParam('MetadataSize'): 0, # content size
# params from PersistentRequestModified
@@ -533,10 +484,6 @@
PrivateParam('ErrorMessage'): None, # error message in case an error occured
PrivateParam('UserData'): None, # any user defined runtime data here
- # params for SSKKeypair
- PrivateParam('PrivateParamKey'): None,
- PrivateParam('PublicKey'): None,
-
# params from DataFound
PrivateParam('MetadataContentType'): '', # contecnt type
PrivateParam('MetadataSize'): 0, # content size
@@ -559,8 +506,6 @@
PrivateParam('RequestType'): consts.RequestType.Null, # identifies sub message types
PrivateParam('RequestStatus'): consts.RequestStatus.Null,
PrivateParam('InitTime'): 0, # when was the request started?
- PrivateParam('PrivateKey'): None,
- PrivateParam('PublicKey'): None,
}
AdditionalSubscribeUSKParams = {
@@ -614,7 +559,7 @@
#********************************************************************************
#
#********************************************************************************
-#TODO: register new message type?
+#TODO: do we need this?
def newMessageType(name, paramTypes=None, additionalParams=None, persistentParams=None):
kws = {
'name': name,
@@ -624,11 +569,8 @@
}
return type(name, (MessageBase, ), kws)
-
-#TODO: _persistent_params_ ...define in all message classes or not? Bogus for most,
-# but makes customization of individual classes harder for useres
#********************************************************************************
-# some additional messages we define for uniformity
+# some messages defined by the client
#********************************************************************************
class ClientDisconnected(MessageBase):
name = consts.Message.ClientDisconnected
@@ -651,12 +593,54 @@
}
#********************************************************************************
-#
+# fcp messages
#********************************************************************************
class AddPeer(MessageBase):
name = consts.Message.AddPeer
_additional_params_ = {}
- _param_types_ = PeerMessageParamTypes
+ _param_types_ = {
+ 'ark.number': types.FcpTypeInt,
+ 'auth.negTypes': types.FcpTypeInt,
+ 'ark.pubURI': key.FcpTypeKey,
+
+ 'location': types.FcpTypeFloat,
+ 'opennet': types.FcpTypeBool,
+ 'testnet': types.FcpTypeBool,
+
+ # passed in Peer message
+ 'metadata.timeLastConnected': types.FcpTypeTime,
+ 'metadata.timeLastReceivedPacket': types.FcpTypeTime,
+ 'metadata.timeLastRoutable': types.FcpTypeTime,
+ 'metadata.timeLastSuccess': types.FcpTypeTime,
+ 'metadata.routableConnectionCheckCount': types.FcpTypeInt,
+ 'metadata.hadRoutableConnectionCount': types.FcpTypeInt,
+
+ 'volatile.averagePingTime': types.FcpTypeFloat,
+ 'volatile.overloadProbability': types.FcpTypePercent,
+ 'volatile.routingBackoff': types.FcpTypeInt,
+ 'volatile.routingBackoffPercent': types.FcpTypePercent,
+ 'volatile.totalBytesIn': types.FcpTypeInt,
+ 'volatile.totalBytesOut': types.FcpTypeInt,
+ 'volatile.routingBackoffLength': types.FcpTypeInt,
+ }
+
+'''all other Peer message params here....
+
+>> identity=YIrE..................
+>> lastGoodVersion=Fred,0.7,1.0,1106
+>> physical.udp=00.000.000.000:00000
+>> version=Fred,0.7,1.0,1107
+>> dsaGroup.q=ALFDN...............
+>> dsaGroup.p=AIYIrE..................
+>> dsaPubKey.y=YSlb............
+>> dsaGroup.g=UaRa...............
+>>
+>> metadata.detected.udp=000.000.000.000:00000
+
+>> volatile.lastRoutingBackoffReason=ForwardRejectedOverload
+>> volatile.percentTimeRoutableConnection=99.4735.................
+>> volatile.status=CONNECTED
+'''
class AllData(MessageBase):
@@ -1103,7 +1087,7 @@
class Peer(MessageBase):
name = consts.Message.Peer
_additional_params_ = {}
- _param_types_ = PeerMessageParamTypes
+ _param_types_ = AddPeer._param_types_
class PeerNote(MessageBase):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-06-30 09:35:46
|
Revision: 438
http://fclient.svn.sourceforge.net/fclient/?rev=438&view=rev
Author: jUrner
Date: 2008-06-30 02:35:54 -0700 (Mon, 30 Jun 2008)
Log Message:
-----------
removed some left over code
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-06-30 09:17:24 UTC (rev 437)
+++ trunk/sandbox/fcp2/message.py 2008-06-30 09:35:54 UTC (rev 438)
@@ -17,7 +17,6 @@
from fcp2 import consts
from fcp2 import types
from fcp2 import key
-from fcp2.fcp_lib import pmstruct
from fcp2.fcp_lib import node
from fcp2.fcp_lib import uuid
@@ -417,21 +416,6 @@
ConfigMessageParamTypes = _ConfigMessageParamTypes()
#********************************************************************************
-# equipp Get / Put messages with some persistent params
-#
-# these params are stored in ClientToken
-#
-#********************************************************************************
-class PeristentParamsGet(pmstruct.PoorMansStruct):
- _fields_ = (
- ('Flags', pmstruct.Int),
- ('InitTime', pmstruct.Float),
- ('PersistentUserData', pmstruct.Str),
- )
-
-PeristentParamsPut = PeristentParamsGet
-
-#********************************************************************************
# at runtime we store a few additional params in msg.params
#
# for uniformity reasons we store them in msg.params and mark them
@@ -522,7 +506,12 @@
PrivateParam('InitTime'): 0, # when was the request started?
}
-
+#********************************************************************************
+# equipp Get / Put messages with some persistent params
+#
+# these params are stored in ClientToken
+#
+#********************************************************************************
PersistentParamsGet = (
(
lambda msg: str(msg.__getitem__('RequestType')),
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-06-30 09:38:37
|
Revision: 440
http://fclient.svn.sourceforge.net/fclient/?rev=440&view=rev
Author: jUrner
Date: 2008-06-30 02:38:21 -0700 (Mon, 30 Jun 2008)
Log Message:
-----------
beautifications
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-06-30 09:36:21 UTC (rev 439)
+++ trunk/sandbox/fcp2/message.py 2008-06-30 09:38:21 UTC (rev 440)
@@ -24,6 +24,12 @@
del hack
#<-- rel import hack
#********************************************************************************
+# consts
+#********************************************************************************
+MessagesAll = {}
+PersistentParamsSep = '0x01'
+
+#********************************************************************************
#
#********************************************************************************
class Node(node.Node):
@@ -39,9 +45,6 @@
#********************************************************************************
#
#********************************************************************************
-MessagesAll = {}
-PersistentParamsSep = '0x01'
-
class MessageMeta(type):
def __new__(klass, name, bases, kws):
@@ -507,7 +510,7 @@
}
#********************************************************************************
-# equipp Get / Put messages with some persistent params
+# equip Get / Put messages with some persistent params
#
# these params are stored in ClientToken
#
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|