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.swapsRejectedRateLimit': types.FcpTypeInt, + 'volatile.swapsRejectedRecognizedID': types.FcpTypeInt, + 'volatile.totalInputBytes': types.FcpTypeInt, + 'volatile.totalInputRate': types.FcpTypeInt, + 'volatile.totalOutputBytes': types.FcpTypeInt, + 'volatile.totalOutputRate': types.FcpTypeInt, + 'volatile.totalPayloadOutputBytes': types.FcpTypeInt, + 'volatile.totalPayloadOutputPercent': types.FcpTypePercent, + 'volatile.totalPayloadOutputRate': types.FcpTypeInt, + 'volatile.unclaimedFIFOSize': types.FcpTypeInt, + 'volatile.uptimeSeconds': types.FcpTypeInt, + 'volatile.usedJavaMemory': types.FcpTypeInt, + } + + + ''' + >>all other NodeData message params here.... + >> + >> physical.udp=000.000.000.000:00000 + >> dsaPubKey.y=GarpsNUKe................................................. + >> version=Fred,0.7,1.0,1107 + >> myName=whatever + >> ark.pubURI=SSK@............... + + >> dsaGroup.q=ALFDNoq..... + >> dsaGroup.p=AIYIrE9VNhM3............. + >> volatile.avgConnectedPeersPerNode=00.00................ + >> dsaGroup.g=UaRa............. + >> dsaPrivKey.x=Pwam.................. + >> ark.privURI=SSK@................. + >> lastGoodVersion=Fred,0.7,1.0,1106 + >> sig=691f............ + >> identity=vMQa~.................. + + ''' + +class NodeHello(MessageBase): + name = consts.Message.NodeHello + _additional_params_ = {} + _param_types_ = { + 'Build': types.FcpTypeInt, + 'CompressionCodecs': types.FcpTypeInt, + 'ExtBuild': types.FcpTypeInt, + 'FcpVersion': types.FcpTypeFloat, + 'Testnet': types.FcpTypeBool, + } + +####################################### +####################################### +class Peer(MessageBase): + name = consts.Message.Peer + _additional_params_ = {} + _param_types_ = PeerMessageParamTypes + + +class PeerNote(MessageBase): + name = consts.Message.PeerNote + _additional_params_ = {} + _param_types_ = { + 'NoteText': types.FcpTypeBase64EncodedString, + } + + +class PeerRemoved(MessageBase): + name = consts.Message.PeerRemoved + _additional_params_ = {} + _param_types_ = { + } + +####################################### +####################################### +class PersistentGet(MessageBase): + name = consts.Message.PersistentGet + _additional_params_ = {} + _param_types_ = { + } + + +####################################### +####################################### +class PersistentPut(MessageBase): + name = consts.Message.PersistentPut + _additional_params_ = {} + _param_types_ = { + } + + +class PersistentPutDir(MessageBase): + name = consts.Message.PersistentPutDir + _additional_params_ = {} + _param_types_ = { + } + + +class PersistentRequestModified(MessageBase): + name = consts.Message.PersistentRequestModified + _additional_params_ = {} + _param_types_ = { + 'Global': types.FcpTypeBool, + } + + +class PersistentRequestRemoved(MessageBase): + name = consts.Message.PersistentRequestRemoved + _additional_params_ = {} + _param_types_ = { + 'Global': types.FcpTypeBool, + } + + +class PluginInfo(MessageBase): + name = consts.Message.PluginInfo + _additional_params_ = {} + _param_types_ = { + } + + +class ProtocolError(MessageBase): + name = consts.Message.ProtocolError + _additional_params_ = {} + _param_types_ = { + 'Code': types.FcpTypeInt, + 'Global': types.FcpTypeBool, + } + + + +class PutFailed(MessageBase): + name = consts.Message.PutFailed + _additional_params_ = {} + _param_types_ = { + 'Code': types.FcpTypeInt, + 'Global': types.FcpTypeBool, + } + + +class PutFetchable(MessageBase): + name = consts.Message.PutFetchable + _additional_params_ = {} + _param_types_ = { + 'Global': types.FcpTypeBool, + } + +##################################### +###################################### +#!! not implemented +#TODO: has more params +class PutSuccessful(MessageBase): + name = consts.Message.PutSuccessful + _additional_params_ = {} + _param_types_ = { + 'Global': types.FcpTypeBool, + } + + +class RemovePeer(MessageBase): + name = consts.Message.RemovePeer + _additional_params_ = {} + _param_types_ = { + } + + +class RemovePersistentRequest(MessageBase): + name = consts.Message.RemovePersistentRequest + _additional_params_ = {} + _param_types_ = { + 'Global': types.FcpTypeBool, + } + + +class SSKKeypair(MessageBase): + name = consts.Message. SSKKeypair + _additional_params_ = {} + _param_types_ = { + } + + +class Shutdown(MessageBase): + name = consts.Message.Shutdown + _additional_params_ = {} + _param_types_ = { + } + + +class SimpleProgress(MessageBase): + name = consts.Message.SimpleProgress + _additional_params_ = {} + _param_types_ = { + 'Failed': types.FcpTypeInt, + 'FatalyFailed': types.FcpTypeInt, + 'FinalizedTotal': types.FcpTypeBool, + 'Required': types.FcpTypeInt, + 'Succeeded': types.FcpTypeInt, + 'Total': types.FcpTypeInt, + } + + +class StartedCompression(MessageBase): + name = consts.Message.StartedCompression + _additional_params_ = {} + _param_types_ = { + } + + +class SubscribeUSK(MessageBase): + name = consts.Message.SubscribeUSK + _additional_params_ = AdditionalSubscribeUSKParams + _param_types_ = { + 'DontPoll': types.FcpTypeBool, + } + + +class SubscribedUSKUpdate(MessageBase): + name = consts.Message.SubscribedUSKUpdate + _additional_params_ = {} + _param_types_ = { + 'Edition': types.FcpTypeInt, + } + + +class TestDDAComplete(MessageBase): + name = consts.Message.TestDDAComplete + _additional_params_ = {} + _param_types_ = { + 'ReadDirectoryAllowed': types.FcpTypeBool, + 'WriteDirectoryAllowed': types.FcpTypeBool, + } + + +class TestDDAReply(MessageBase): + name = consts.Message.TestDDAReply + _additional_params_ = {} + _param_types_ = { + } + + +class TestDDARequest(MessageBase): + name = consts.Message.TestDDARequest + _additional_params_ = {} + _param_types_ = { + 'WantReadDirectory': types.FcpTypeBool, + 'WantWriteDirectory': types.FcpTypeBool, + } + + +class TestDDAResponse(MessageBase): + name = consts.Message.TestDDAResponse + _additional_params_ = {} + _param_types_ = { + } + + +class URIGenerated(MessageBase): + name = consts.Message.URIGenerated + _additional_params_ = {} + _param_types_ = { + } + + +class UnknownNodeIdentifier(MessageBase): + name = consts.Message.UnknownNodeIdentifier + _additional_params_ = {} + _param_types_ = { + } + + +class UnknownPeerNoteType(MessageBase): + name = consts.Message.UnknownPeerNoteType + _additional_params_ = {} + _param_types_ = { + } + + +class WatchGlobal(MessageBase): + name = consts.Message.WatchGlobal + _additional_params_ = {} + _param_types_ = { + 'Enabled': types.FcpTypeBool, + 'VerbosityMask': types.FcpTypeInt, + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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. |