SF.net SVN: fclient: [335] trunk/sandbox/fcp2/message.py
Status: Pre-Alpha
Brought to you by:
jurner
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. |