fclient-commit Mailing List for fclient (Page 26)
Status: Pre-Alpha
Brought to you by:
jurner
You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(23) |
Nov
(54) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(17) |
Feb
(209) |
Mar
(63) |
Apr
(31) |
May
(7) |
Jun
(39) |
Jul
(390) |
Aug
(122) |
Sep
(6) |
Oct
|
Nov
|
Dec
|
From: <jU...@us...> - 2008-03-08 11:10:19
|
Revision: 337 http://fclient.svn.sourceforge.net/fclient/?rev=337&view=rev Author: jUrner Date: 2008-03-08 03:10:20 -0800 (Sat, 08 Mar 2008) Log Message: ----------- adapt to new message handling and a few fixes PluginMessage is not kept track of anymore Modified Paths: -------------- trunk/sandbox/fcp2/client.py Modified: trunk/sandbox/fcp2/client.py =================================================================== --- trunk/sandbox/fcp2/client.py 2008-03-08 11:05:30 UTC (rev 336) +++ trunk/sandbox/fcp2/client.py 2008-03-08 11:10:20 UTC (rev 337) @@ -319,7 +319,7 @@ that the request has been completed and remove it fom our queue if necessary. Non Get / Put requests will be removed in any case. """ - removeRequest = msg.name in (consts.Message.ProtocolError, consts.Message.PersistentRequestRemoved) + removeRequest = msg == message.ProtocolError or msg == message.PersistentRequestRemoved if not removeRequest: #NOTE: non Get / Put related requests do not have a Persistence param removeRequest = request.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection @@ -358,80 +358,42 @@ """ identifier = fcparams.newUuid(uuids=self._requests) if identifier is None else identifier + # equip requests with some additional params + #TODO: keep an eye on additional params, they may collide with Fcp parameters - Private = message.Message.privateParamName + Private = message.PrivateParam - if requestType & (consts.RequestType.MaskGet | consts.RequestType.MaskPut): - - msg.params.update({ - - # persistent params that will go into identifier - Private('RequestType'): requestType, # identifies sub message types - Private('InitTime'): time.time() if initTime is None else initTime, # when was the request started? - Private('FilenameCollision'): filenameCollision, # handle fielanem collisions? - Private('PersistentUserData'): persistentUserData, # any user defined persistent data - - # non persistent params - Private('RequestStatus'): consts.RequestStatus.Null, - Private('ErrorMessage'): None, # error message in case an error occured - Private('UserData'): userData, # any user defined runtime data here - - # params for SSKKeypair - Private('PrivateKey'): None, - Private('PublicKey'): None, - - # params from DataFound - Private('MetadataContentType'): '', # contecnt type - Private('MetadataSize'): 0, # content size - - # params from PersistentRequestModified - Private('Modified'): {}, - - # params for DDA test - Private('TestDDA'): {}, - - # params for SimpleProgress - Private('ProgressTotal'): 0, - Private('ProgressRequired'): 0, - Private('ProgressFailed'): 0, - Private('ProgressFatalyFailed'): 0, - Private('ProgressSucceeeded'): 0, - - }) - # equip msg with some persistent pparams - if msg.get('ClientToken', None) is None: - msg['ClientToken'] = fcparams.messageToParams(msg) - + """ + @requestparam: B{ErrorMessage:} (L{messageMessage}) if an error occured + @requestparam: B{Modified:} (dict) + @requestparam: B{Modified:} (dict) + @requestparam: B{PrivateKey:} None. Will contain the private key as soon as the key is generated + @requestparam: B{PublicKey:} None. Will contain the public key as soon as the key is generated + @requestparam: B{RequestStatus:} one or more of the L{consts.RequestStatus} flags + @requestparam: B{RequestType:} one or more of the L{consts.RequestType} flags + @requestparam: B{Identifier:} identifier of the request + """ + msg['Identifier'] = fcparams.newUuid(uuids=self._requests) if identifier is None else identifier + msg['RequestType'] = requestType + msg['InitTime'] = time.time() if initTime is None else initTime + if requestType & consts.RequestType.MaskGet: + msg['FilenameCollision'] = filenameCollision + msg['UserData'] = userData + msg['PersistentUserData'] = persistentUserData + msg['ClientToken'] = fcparams.messageToParams(msg) + elif requestType & consts.RequestType.MaskPut: + msg['UserData'] = userData + msg['PersistentUserData'] = persistentUserData + msg['ClientToken'] = fcparams.messageToParams(msg) elif requestType & consts.RequestType.MaskGenerateKeypair: - msg.params.update({ - Private('RequestType'): requestType, # identifies sub message types - Private('RequestStatus'): consts.RequestStatus.Null, - Private('InitTime'): initTime, # when was the request started? - Private('Modified'): {}, - - Private('PrivateKey'): None, - Private('PublicKey'): None, - }) - - elif requestType & consts.RequestType.PluginMessage: - msg.params.update({ - Private('RequestType'): requestType, # identifies sub message types - Private('RequestStatus'): consts.RequestStatus.Null, - Private('InitTime'): initTime, # when was the request started? - Private('Modified'): {}, - - Private('PluginReply'): None, - }) - + pass + elif requestType & consts.RequestType.SubscribeUSK: + msg['UserData'] = userData + elif requestType & consts.RequestType.PluginInfo: + pass else: - msg.params.update({ - Private('RequestType'): requestType, # identifies sub message types - Private('RequestStatus'): consts.RequestStatus.Null, - Private('InitTime'): initTime, # when was the request started? - Private('Modified'): {}, - }) - - msg['Identifier'] = identifier + raise ValueError('Can not register request: ' + msg.name) + self._requests[identifier] = msg ############################################################### @@ -443,8 +405,7 @@ """Closes the client @note: make shure to call close() when done with the client """ - msg = message.Message( - consts.Message.ClientDisconnected, + msg = message.ClientDisconnected( DisconnectReason=consts.DisconnectReason.Close, Param=None, ) @@ -453,7 +414,7 @@ def closeFreenet(self): """Shuts down the freenet node""" - self.sendMessage(consts.Message.Shutdown) + self.sendMessage(message.Shutdown()) def connect(self, host=DefaultFcpHost, port=DefaultFcpPort, duration=20, timeout=0.5): @@ -495,9 +456,10 @@ # try to get handshake if result: errorMsg = self.sendMessage( - consts.Message.ClientHello, - Name=self._connectionName, - ExpectedVersion=self.ExpectedFcpVersion, + message.ClientHello( + Name=self._connectionName, + ExpectedVersion=self.ExpectedFcpVersion, + ) ) yield None if errorMsg is None: @@ -505,11 +467,11 @@ while timeElapsed <= duration: yield None msg = self.next(dispatch=False) - if msg.name == consts.Message.ClientSocketTimeout: + if msg == message.ClientSocketTimeout: timeElapsed += max(self.ioHandler.io.Timeout, 0.1) yield None - elif msg.name == consts.Message.NodeHello: + elif msg == message.NodeHello: self._nodeHelloMessage = msg # check if version is ok if self.versionCheckNodeHello(msg): @@ -522,14 +484,13 @@ break else: - disconnectReason = consts.DisconnectReason.UnkownNodeHello + disconnectReason = consts.DisconnectReason.UnknownNodeHello disconnectParam = msg break if disconnectReason is None: disconnectReason=consts.DisconnectReason.ConnectingFailed - disconnectMsg = message.Message( - consts.Message.ClientDisconnected, + disconnectMsg = message.ClientDisconnected( DisconnectReason=disconnectReason, Param=disconnectParam, ) @@ -611,8 +572,9 @@ ## errors ## #################################################### - if msg.name == consts.Message.IdentifierCollision: + if msg == message.IdentifierCollision: if initialRequest is None: + self.events.IdentifierCollision(msg) return False # resend request with new identifier @@ -622,15 +584,14 @@ initialRequest['Identifier'] = newIdentifier initialRequest['Modified'] = {consts.RequestModified.Identifier: requestIdentifier} self.events.RequestModified(initialRequest) - self.sendMessageEx(initialRequest) + self.sendMessage(initialRequest) return True - elif msg.name == consts.Message.ProtocolError: + elif msg == message.ProtocolError: code = msg['Code'] if code == consts.ProtocolError.ShuttingDown: - disconnectMsg = message.Message( - consts.Message.ClientDisconnected, + disconnectMsg = message.ClientDisconnected( DisconnectReason=consts.DisconnectReason.Shutdown, Param=None, ) @@ -643,13 +604,13 @@ return True if initialRequest is None: + self.events.ProtocolError(msg) return False - - + # handle DDA errors elif code == consts.ProtocolError.DDADenied: - ddaRequestMsg = message.Message(consts.Message.TestDDARequest) - if initialRequest.name == consts.Message.ClientGet: + ddaRequestMsg = message.TestDDARequest() + if initialRequest == message.ClientGet: ddaRequestMsg['WantWriteDirectory'] = True directory = os.path.dirname(initialRequest['Filename']) else: @@ -666,7 +627,7 @@ 'ErrorMsg': msg, } self._ddaTests.append(initialRequest) - self.sendMessageEx(ddaRequestMsg) + self.sendMessage(ddaRequestMsg) return True @@ -682,7 +643,7 @@ newFilename = namespace.unique_filename(filename, extensions=1, ispostfixed=collisionHandled) initialRequest['Filename'] = newFilename initialRequest['Modified'] = {consts.RequestModified.Filename: filename} - self.sendMessageEx(initialRequest) + self.sendMessage(initialRequest) self.events.RequestModified(initialRequest) return True @@ -693,18 +654,12 @@ # handle plugin related request failures elif code == consts.ProtocolError.NoSuchPlugin or code == consts.ProtocolError.AccessDenied: - if initialRequest.name == consts.Message.GetPluginInfo: + if initialRequest == message.GetPluginInfo: initialRequest['ErrorMessage'] = msg initialRequest['RequestStatus'] |= consts.RequestStatus.Error self._finalizeRequest(msg, initialRequest, self.events.PluginInfoFailed) return True - elif initialRequest.name == consts.Message.FCPPluginMessage: - initialRequest['ErrorMessage'] = msg - initialRequest['RequestStatus'] |= consts.RequestStatus.Error - self._finalizeRequest(msg, initialRequest, self.events.PluginMessageFailed) - return True - # only requests should get through to here # NOTE: Fcp already removed the request @@ -723,7 +678,7 @@ ## TestDDA drill. ## #################################################### - elif msg.name == consts.Message.TestDDAReply: + elif msg == message.TestDDAReply: directory = msg['Directory'] # find message that triggered the call @@ -754,14 +709,15 @@ initialRequest['TestDDA']['TmpFile'] = fpathWrite self.sendMessage( - consts.Message.TestDDAResponse, - Directory=msg['Directory'], - ReadContent=readContent, + message.TestDDAResponse( + Directory=msg['Directory'], + ReadContent=readContent, + ) ) return True - elif msg.name == consts.Message.TestDDAComplete: + elif msg == message.TestDDAComplete: # clean up tmp file directory = msg['Directory'] @@ -794,7 +750,7 @@ return True # else: resend message - self.sendMessageEx(initialRequest) + self.sendMessage(initialRequest) return True #################################################### @@ -802,11 +758,11 @@ ## config related ## #################################################### - elif msg.name == consts.Message.ConfigData: + elif msg == message.ConfigData: self.events.ConfigData(msg) return True - elif msg.name == consts.Message.NodeData: + elif msg == message.NodeData: self.events.NodeData(msg) return True @@ -815,7 +771,7 @@ ## get / put related ## #################################################### - elif msg.name == consts.Message.AllData: + elif msg == message.AllData: if initialRequest is None: return False @@ -824,7 +780,7 @@ self._finalizeRequest(msg, initialRequest, self.events.RequestCompleted) return True - elif msg.name == consts.Message.DataFound: + elif msg == message.DataFound: if initialRequest is None: return False @@ -840,10 +796,11 @@ if initialRequest['RequestType'] == consts.RequestType.GetData: if initialRequest['Persistence'] != consts.Persistence.Connection: self.sendMessage( - consts.Message.GetRequestStatus, - Identifier=initialRequest['Identifier'], - Global=False, - OnlyData=True + message.GetRequestStatus( + Identifier=initialRequest['Identifier'], + Global=False, + OnlyData=True + ) ) else: self._finalizeRequest(msg, initialRequest, self.events.RequestCompleted) @@ -851,7 +808,7 @@ return True - elif msg.name == consts.Message.GetFailed: + elif msg == message.GetFailed: if initialRequest is None: return False @@ -872,7 +829,7 @@ return True - elif msg.name == consts.Message.PersistentGet: + elif msg == message.PersistentGet: # unknown request... try to restore it if initialRequest is None: @@ -883,13 +840,14 @@ if fcParams is None: self._loggers['Runtime'].critical(consts.LogMessages.RequestInvalidClientToken) self.sendMessage( - consts.Message.RemovePersistentRequest, - Identifier=requestIdentifier, - Global=msg['Global'], + message.RemovePersistentRequest( + Identifier=requestIdentifier, + Global=msg['Global'], + ) ) return True - initialRequest = copy.deepcopy(msg) + initialRequest = message.ClientGet() self._registerRequest( initialRequest, fcParams[fcparams.IRequestType], @@ -899,8 +857,8 @@ persistentUserData=fcParams[fcparams.IPersistentUserData], filenameCollision=fcParams[fcparams.IFilenameCollision], ) - - initialRequest.name = consts.Message.ClientGet + + initialRequest.params.update(msg.params) #FIX: remove Started param from PersistentGet / Put del initialRequest.params['Started'] #FIX: [0001965: Persistence vs PersistenceType] @@ -914,7 +872,7 @@ return False - elif msg.name == consts.Message.PersistentRequestModified: + elif msg == message.PersistentRequestModified: if initialRequest is None: return False @@ -949,7 +907,7 @@ return True - elif msg.name == consts.Message.PersistentRequestRemoved: + elif msg == message.PersistentRequestRemoved: if initialRequest is None: return False @@ -958,7 +916,7 @@ return True - elif msg.name == consts.Message.SimpleProgress: + elif msg == message.SimpleProgress: if initialRequest is None: return False @@ -972,7 +930,7 @@ ## put related - elif msg.name == consts.Message.PersistentPut: + elif msg == message.PersistentPut or msg == message.PersistentPutDir: # unknown request... try to restore it if initialRequest is None: @@ -983,14 +941,21 @@ if fcParams is None: self._loggers['Runtime'].critical(consts.LogMessages.RequestInvalidClientToken) self.sendMessage( - consts.Message.RemovePersistentRequest, - Identifier=requestIdentifier, - Global=msg['Global'], + message.RemovePersistentRequest( + Identifier=requestIdentifier, + Global=msg['Global'], + ) ) return True - initialRequest = copy.deepcopy(msg) requestType = fcParams[fcparams.IRequestType] + if requestType in (consts.RequestType.PutData, consts.RequestType.PutFile): + initialRequest = message.ClientPut() + elif requestType == consts.RequestType.PutDir: + initialRequest = message.ClientPutDiskDir() + elif request == consts.RequestType.PutMultiple: + initialRequest = message.ClientPutComplexDir() + self._registerRequest( initialRequest, requestType, @@ -1000,15 +965,7 @@ persistentUserData=fcParams[fcparams.IPersistentUserData], filenameCollision=fcParams[fcparams.IFilenameCollision], ) - - # determine initial message name - if requestType in (consts.RequestType.PutData, consts.RequestType.PutFile): - initialRequest.name = consts.Message.ClientPut - elif requestType == consts.RequestType.PutDir: - initialRequest.name = consts.Message.ClientPutDiskDir - elif requestType == consts.RequestType.PutMultiple: - initialRequest.name = consts.Message.ClientPutComplexDir - + #FIX: remove Started param from PersistentGet / Put del initialRequest.params['Started'] initialRequest['RequestStatus'] |= consts.RequestStatus.Restored @@ -1019,7 +976,7 @@ return False - elif msg.name == consts.Message.PutFailed: + elif msg == message.PutFailed: if initialRequest is None: return False @@ -1033,7 +990,7 @@ return True - elif msg.name == consts.Message.PutFetchable: + elif msg == message.PutFetchable: if initialRequest is None: # something went wrong return False @@ -1042,7 +999,7 @@ return True - elif msg.name == consts.Message.PutSuccessful: + elif msg == message.PutSuccessful: if initialRequest is None: return False # TODO: StartupTime and CompletionTime are passed, but @@ -1054,20 +1011,20 @@ return True - elif msg.name == consts.Message.URIGenerated: + elif msg == message.URIGenerated: if initialRequest is None: return False initialRequest['URI'] = msg['URI'] return True - elif msg.name == consts.Message.FinishedCompression: + elif msg == message.FinishedCompression: if initialRequest is None: return False initialRequest['RequestStatus'] |= consts.RequestStatus.Compressed self.events.RequestCompressionFinished(initialRequest) return True - elif msg.name == consts.Message.StartedCompression: + elif msg == message.StartedCompression: if initialRequest is None: return False initialRequest['RequestStatus'] |= consts.RequestStatus.Compressing @@ -1079,31 +1036,31 @@ ## Peer related messages ## #################################################### - elif msg.name == consts.Message.EndListPeers: + elif msg == message.EndListPeers: self.events.EndListPeers(msg) return True - elif msg.name == consts.Message.EndListPeerNotes: + elif msg == message.EndListPeerNotes: self.events.EndListPeerNotes(msg.params) return True - elif msg.name == consts.Message.Peer: + elif msg == message.Peer: self.events.Peer(msg) return True - elif msg.name == consts.Message.PeerNote: + elif msg == message.PeerNote: self.events.PeerNote(msg) return True - elif msg.name == consts.Message.PeerRemoved: + elif msg == message.PeerRemoved: self.events.PeerRemoved(msg) return True - elif msg.name == consts.Message.UnknownNodeIdentifier: + elif msg == message.UnknownNodeIdentifier: self.events.PeerUnknown(msg) return True - elif msg.name == consts.Message.UnknownPeerNoteType: + elif msg == message.UnknownPeerNoteType: self.events.PeerNoteTypeUnknown(msg) return True #################################################### @@ -1111,7 +1068,7 @@ ## plugins ## #################################################### - elif msg.name == consts.Message.PluginInfo: + elif msg == message.PluginInfo: if initialRequest is None: return False @@ -1119,12 +1076,8 @@ self._finalizeRequest(msg, initialRequest, self.events.PluginInfo) return True - elif msg.name == consts.Message.FCPPluginReply: - if initialRequest is None: - return False - initialRequest['RequestStatus'] |= consts.RequestStatus.Success - initialRequest['PluginReply'] = msg - self._finalizeRequest(msg, initialRequest, self.events.PluginMessage) + elif msg == message.FCPPluginReply: + self.events.PluginMessage(msg) return True #################################################### @@ -1132,9 +1085,8 @@ ## others ## #################################################### - elif msg.name == consts.Message.CloseConnectionDuplicateClientName: - disconnectMsg = message.Message( - consts.Message.ClientDisconnected, + elif msg == message.CloseConnectionDuplicateClientName: + disconnectMsg = message.ClientDisconnected( DisconnectReason=consts.DisconnectReason.DuplicateClientName, Param=None, ) @@ -1142,7 +1094,7 @@ return True - elif msg.name == consts.Message.SSKKeypair: + elif msg == message.SSKKeypair: if initialRequest is None: return False @@ -1160,7 +1112,7 @@ self._finalizeRequest(msg, initialRequest, self.events.KeypairGenerated) return True - elif msg.name == consts.Message.SubscribedUSKUpdate: + elif msg == message.SubscribedUSKUpdate: if initialRequest is None: return False self.events.USKUpdated(msg) @@ -1180,12 +1132,11 @@ try: msg = self.ioHandler.readMessage() except iohandler.IOTimeout, details: - msg = message.Message(consts.Message.ClientSocketTimeout) + msg = message.ClientSocketTimeout() if dispatch: self.events.Idle(msg) except iohandler.IOBroken, details: - msg = message.Message( - consts.Message.ClientDisconnected, + msg = message.ClientDisconnected( DisconnectReason=consts.DisconnectReason.SocketDied, Param=details, ) @@ -1211,7 +1162,7 @@ except KeyboardInterrupt: self._loggers['Runtime'].info(consts.LogMessages.KeyboardInterrupt) return - if msg.name == consts.Message.ClientSocketDied: + if msg == message.ClientSocketDied: return #n = 0 @@ -1236,26 +1187,12 @@ self._loggers['Runtime'].info(consts.LogMessages.KeyboardInterrupt) break - if msg.name == consts.Message.ClientSocketDied: + if msg == message.ClientSocketDied: break - def sendMessage(self, name, data=None, **params): + def sendMessage(self, msg): """Sends a message to freenet - @param name: name of the message to send - @param data: data to atatch to the message - @param params: {para-name: param-calue, ...} of parameters to pass along - with the message (see freenet protocol) - - - @note: you can use this method to send a message to the node, bypassing all - track keeping methods of the client - """ - return self.sendMessageEx(message.Message(name, data=data, **params)) - - - def sendMessageEx(self, msg): - """Sends a message to freenet @param msg: (L{message.Message}) message to send @return: (L{message.Message}) disconnect if something went wrong @@ -1267,8 +1204,7 @@ try: self.ioHandler.sendMessageEx(msg) except iohandler.IOBroken, details: - errorMsg = message.Message( - consts.Message.ClientDisconnected, + errorMsg = message.ClientDisconnected( DisconnectReason=consts.DisconnectReason.SocketDied, Param=details ) @@ -1296,15 +1232,16 @@ @event: ConfigData(event, msg) """ self.sendMessage( - consts.Message.GetConfig, - WithSortOrder=withSortOrder, - WithCurrent=withCurrent, - WithDefaults=withDefaults, - WithExpertFlag=withExpertFlag, - WithForceWriteFlag=withForceWriteFlag, - WithShortDescription=withShortDescription, - WithLongDescription=withLongDescription, - WithDataTypes=withDataTypes, + message.GetConfig( + WithSortOrder=withSortOrder, + WithCurrent=withCurrent, + WithDefaults=withDefaults, + WithExpertFlag=withExpertFlag, + WithForceWriteFlag=withForceWriteFlag, + WithShortDescription=withShortDescription, + WithLongDescription=withLongDescription, + WithDataTypes=withDataTypes, + ) ) @@ -1312,9 +1249,9 @@ """Modifies node configuration values @param params: (dict) containing parameters to modify """ - msg = message.Message(consts.Message.ModifyConfig) + msg = message.ModifyConfig() msg.params = params - self.sendMessageEx(msg) + self.sendMessage(msg) ######################################################## @@ -1341,7 +1278,7 @@ @return: (str) identifier of the request """ - msg = message.Message(consts.Message.ClientGet, URI=key) + msg = message.ClientGet(URI=key) for paramName, value in messageParams.items(): if value is not None: msg[paramName] = value @@ -1353,7 +1290,7 @@ persistentUserData=persistentUserData, userData=userData, ) - self.sendMessageEx(msg) + self.sendMessage(msg) return msg['Identifier'] @@ -1562,14 +1499,13 @@ @todo: looks like USK subscribes will persist untill connection is closed. Can they be removed somehow? """ - msg = message.Message( - consts.Message.SubscribeUSK, + msg = message.SubscribeUSK( URI=key, DontPoll=dontPoll, ) self._registerRequest(msg, consts.RequestType.SubscribeUSK) msg['RequestStatus'] |= consts.RequestStatus.Completed - self.sendMessageEx(msg) + self.sendMessage(msg) return msg['Identifier'] @@ -1611,16 +1547,16 @@ only 'Uri' is requested from freenet) is always the first item in the list. """ if requestType in (consts.RequestType.PutData, consts.RequestType.PutFile): - msgName = consts.Message.ClientPut + msgName = message.ClientPut.name elif requestType == consts.RequestType.PutDir: - msgName = consts.Message.ClientPutDiskDir + msgName = message.ClientPutDiskDir.name elif requestType == consts.RequestType.PutMultiple: - msgName = consts.Message.ClientPutComplexDir + msgName = message.ClientPutComplexDir.name else: raise ValueError('Unsupported request type') #TODO: autoconvert keys to python classes??? - msg = message.Message(msgName, URI=key) + msg = message.MessagesAll[msgName](URI=key) contentType = msgParams.get('ContentType', None) if contentType is not None: del msgParams['ContentType'] @@ -1710,7 +1646,7 @@ persistentUserData=persistentUserData, userData=userData, ) - self.sendMessageEx(msg) + self.sendMessage(msg) return msg['Identifier'] @@ -1774,8 +1710,7 @@ @param userData: (any) any data to be associated to the request at runtime @return: (str) request identifier """ - msg = message.Message( - consts.Message.ClientPut, + msg = message.ClientPut( URI=consts.KeyType.KSK + name, Persistence=persistence, PriorityClass=priorityClass, @@ -1788,7 +1723,7 @@ persistentUserData=persistentUserData, userData=userData, ) - self.sendMessageEx(msg) + self.sendMessage(msg) return msg['Identifier'] #CHK @@ -1978,7 +1913,7 @@ @note: for other params see L{chkPutData} @note: to upload multiple items at once pass a dict for each item containig the following members: - - FcRequestType: L{consts.RequestType.PutData}, L{consts.RequestType.PutFile} or L{consts.RequestType.PutRedirect} + - RequestType: L{consts.RequestType.PutData}, L{consts.RequestType.PutFile} or L{consts.RequestType.PutRedirect} - Data: if requestType is L{consts.RequestType.PutData}, data to upload - Filename: if requestType is L{consts.RequestType.PutFile}, filepath of the file to upload - TargetURI: if requestType is L{consts.RequestType.PutRedirect}, uri to redirect to @@ -2193,8 +2128,7 @@ self.events.RequestModified(initialRequest) return - msg = message.Message( - consts.Message.ModifyPersistentRequest, + msg = message.ModifyPersistentRequest( Identifier=initialRequest['Identifier'], Global=False, ) @@ -2204,7 +2138,7 @@ if priorityClass is not None: msg['PriorityClass'] = priorityClass - self.sendMessageEx(msg) + self.sendMessage(msg) def removeRequest(self, requestIdentifier): @@ -2218,13 +2152,14 @@ # remove Persistence.Connection emidiately # ..make up a PersistentRequestRemoved message for this case if initialRequest['Persistence'] == consts.Persistence.Connection: - msg = message.Message(consts.Message.PersistentRequestRemoved, Identifier=requestIdentifier, Global=False) + msg = message.PersistentRequestRemoved(Identifier=requestIdentifier, Global=False) self._finalizeRequest(msg, initialRequest, self.events.RequestRemoved) else: self.sendMessage( - consts.Message.RemovePersistentRequest, - Global=False, - Identifier=requestIdentifier, + message.RemovePersistentRequest( + Global=False, + Identifier=requestIdentifier, + ) ) else: del self._requests[requestIdentifier] @@ -2248,7 +2183,7 @@ """ requestType = request.get('RequestType', consts.RequestType.Null) if not requestType & (consts.RequestType.MaskGet | consts.RequestType.MaskPut): - raise ValueError('Can not resend request: %s' % requestMessage.name) + raise ValueError('Can not resend request: %s' % request.name) # we don't know what UserData may be, so back it up before copying oldIdentifier = request['Identifier'] @@ -2285,7 +2220,7 @@ request['UserData'] = oldUserData self.removeRequest(request['Identifier']) - self.sendMessageEx(newRequest) + self.sendMessage(newRequest) return newRequest['Identifier'] ######################################################## @@ -2304,10 +2239,11 @@ @param giveOpennetRef: if True, the opennet reference is retuned instead of the darknet """ self.sendMessage( - consts.Message.GetNode, - WithPrivate=withPrivate, - WithVolatile=withVolatile, - GiveOpennetRef=giveOpennetRef, + message.GetNode( + WithPrivate=withPrivate, + WithVolatile=withVolatile, + GiveOpennetRef=giveOpennetRef, + ) ) @@ -2316,8 +2252,9 @@ @param identity: identity of the peer to request information for """ self.sendMessage( - consts.Message.ListPeer, - NodeIdentifier=identity, + message.ListPeer( + NodeIdentifier=identity, + ) ) @@ -2329,8 +2266,9 @@ @note: listPeerNotes() is only available for darknet nodes """ self.sendMessage( - consts.Message.ListPeerNotes, - NodeIdentifier=identity + message.ListPeerNotes( + NodeIdentifier=identity + ) ) @@ -2343,9 +2281,10 @@ @event: EndListPeers(event, params). """ self.sendMessage( - consts.Message.ListPeers, - WithMetadata=withMetaData, - WithVolatile=withVolantile, + message.ListPeers( + WithMetadata=withMetaData, + WithVolatile=withVolantile, + ) ) @@ -2358,9 +2297,10 @@ @note: you can only modify darknet peers """ - msg = Message( - consts.Message.ModifyPeer, - NodeIdentifier=identity, + msg = MessageEx( + message.ModifyPeer( + NodeIdentifier=identity, + ) ) if allowLocalAddresses is not None: msg['AllowLocalAddresses'] = allowLocalAddresses @@ -2368,7 +2308,7 @@ msg['IsDisabled'] = isDisabled if isListenOnly is not None: msg['IsListenOnly'] = isListenOnly - self.sendMessageEx(msg) + self.sendMessage(msg) def modifyPeerNote(self, identity, note): @@ -2379,11 +2319,12 @@ @note: you can only modify notes of darknet peers """ self.sendMessage( - consts.Message.ModifyPeerNote, - NodeIdentifier=identity, - #NOTE: currently fcp supports only this one type - PeerNoteType=consts.PeerNoteType.Private, - NoteText=note + message.ModifyPeerNote( + NodeIdentifier=identity, + #NOTE: currently fcp supports only this one type + PeerNoteType=consts.PeerNoteType.Private, + NoteText=note + ) ) @@ -2392,8 +2333,9 @@ @param identity: identity of the peer node to remove """ self.sendMessage( - consts.Message.RemovePeer, - NodeIdentifier=identity, + message.RemovePeer( + NodeIdentifier=identity, + ) ) ########################################################## @@ -2407,34 +2349,41 @@ @param detailed: (bool) If True, detailed information is returned @return: (str) request identifier """ - msg = message.Message( - consts.Message.GetPluginInfo, + msg = message.GetPluginInfo( PluginName=pluginName, Detailed=detailed, ) self._registerRequest(msg, consts.RequestType.PluginInfo) - self.sendMessageEx(msg) + self.sendMessage(msg) return msg['Identifier'] - def sendPluginMessage(self, pluginName, params, data=None): + def sendPluginMessage(self, pluginName, identifier, params, data=None): """Sends a message to a plugin @param pluginName: name of the plugin to send the message to + @param identifier: (str) identifier to identify plugin responses or protocol errors @param params: (dict) additional params to pass to the plugin (each parameter has to be prefixed with 'Param.') @param data: (str) data to pass along with the messaage or None - @return: (str) request identifier + @return: (L{message.FCPPluginMessage}) + + @note: the client does not keep track of messages send to a plugin, because the plugin + may or may not return. If the plugin sends a reply, a L{events.PluginMessage} is triggered. + If something goes wrong, L{events.ProtocolError} or an is L{events.IdentifierCollision} + is triggered. Use the identifier passed to identify responses. + + @todo: this is method not tested. Assumption: identifer does not have to be unique to + the node. Most likely it has to be unique to the plugin. """ - msg = message.Message( - consts.Message.FCPPluginMessage, + msg = message.FCPPluginMessage( PluginName=pluginName, + Identifier=identifier, **params ) if data is not None: msg['DataLength'] = len(data) msg.data = data - self._registerRequest(msg, consts.RequestType.PluginMessage) - self.sendMessageEx(msg) - return msg['Identifier'] + self.sendMessage(msg) + return msg ########################################################## ## @@ -2448,21 +2397,14 @@ @return: identifier of the request @event: L{events.Events.KeypairGenerated} triggered as soon as the request is complete - - @requestparam: B{FcModified:} (dict) - @requestparam: B{FcPrivateKey:} None. Will contain the private key as soon as the key is generated - @requestparam: B{FcPublivcKey:} None. Will contain the public key as soon as the key is generated - @requestparam: B{FcRequestStatus:} one or more of the L{consts.RequestStatus} flags - @requestparam: B{FcRequestType:} one or more of the L{consts.RequestType} flags - @requestparam: B{Identifier:} identifier of the request """ if keypairType not in (consts.KeyType.SSK, consts.KeyType.USK): raise ValueError('keypairType must be %s or %s' % (consts.KeyType.SSK, consts.KeyType.USK)) requestType = consts.RequestType.GenerateSSKKeypair if keypairType == consts.KeyType.SSK else consts.RequestType.GenerateUSKKeypair - msg = message.Message(consts.Message.GenerateSSK) + msg = message.GenerateSSK() self._registerRequest(msg, requestType) - self.sendMessageEx(msg) + self.sendMessage(msg) return msg['Identifier'] 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:57
|
Revision: 336 http://fclient.svn.sourceforge.net/fclient/?rev=336&view=rev Author: jUrner Date: 2008-03-08 03:05:30 -0800 (Sat, 08 Mar 2008) Log Message: ----------- moved all message related stuff to message.py Modified Paths: -------------- trunk/sandbox/fcp2/types.py Modified: trunk/sandbox/fcp2/types.py =================================================================== --- trunk/sandbox/fcp2/types.py 2008-03-08 11:05:00 UTC (rev 335) +++ trunk/sandbox/fcp2/types.py 2008-03-08 11:05:30 UTC (rev 336) @@ -263,549 +263,6 @@ ChoicesAll = (Stl, SslV3, TlsV1) ChoicesAllowMultiple = False - -#*************************************************************************************** -# -# 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 ConfigMessageParams(object): - """Parameter --> FcpType mapping for config related messages""" - - - - # all known config keys (param class stripped) - Params = { - - 'console.allowedHosts': FcpTypeIPList, # host names, single IPs CIDR-maskip IPs likee 192.168.0.0/24 - 'console.bindTo': FcpTypeIPList, - 'console.directEnabled': FcpTypeBool, - 'console.enabled': FcpTypeBool, - 'console.port': FcpTypeIPort, - 'console.ssl': FcpTypeBool, - - 'fcp.allowedHosts': FcpTypeIPList, - 'fcp.allowedHostsFullAccess': FcpTypeIPList, - 'fcp.assumeDownloadDDAIsAllowed': FcpTypeBool, - 'fcp.assumeUploadDDAIsAllowed': FcpTypeBool, - 'fcp.bindTo': FcpTypeIP, - 'fcp.enabled': FcpTypeBool, - 'fcp.persistentDownloadsEnabled': FcpTypeBool, - 'fcp.persistentDownloadsFile': FcpTypeFilename, - 'fcp.persistentDownloadsInterval': FcpTypeTimeDelta, - 'fcp.port': FcpTypeIPort, - 'fcp.ssl': FcpTypeBool, - - 'fproxy.CSSOverride': FcpTypeBool, - 'fproxy.advancedModeEnabled': FcpTypeBool, - 'fproxy.allowedHosts': FcpTypeIPList, - 'fproxy.allowedHostsFullAccess': FcpTypeIPList, - 'fproxy.bindTo': FcpTypeIPList, - 'fproxy.css': FcpTypeChoiceFProxyCss, - 'fproxy.doRobots': FcpTypeBool, - 'fproxy.enabled': FcpTypeBool, - 'fproxy.javascriptEnabled': FcpTypeBool, - 'fproxy.port': FcpTypeIPort, - 'fproxy.showPanicButton': FcpTypeBool, - 'fproxy.ssl': FcpTypeBool, - - 'logger.dirname': FcpTypeDirname, - 'logger.enabled': FcpTypeBool, - 'logger.interval': FcpTypeTimeDelta, - 'logger.maxCachedBytes': FcpTypeByteAmount, - 'logger.maxCachedLines': FcpTypeByteAmount, # ??? - 'logger.maxZippedLogsSize': FcpTypeByteAmount, # ??? - 'logger.priority': FcpTypeChoiceLoggerPriority, - 'logger.priorityDetail': FcpType, # ???? is it Detailed priority thresholds ??? - - 'node.alwaysAllowLocalAddresses': FcpTypeBool, - 'node.assumeNATed': FcpTypeBool, - 'node.bindTo': FcpTypeIP, - 'node.clientThrottleFile': FcpTypeFilename, - 'node.databaseMaxMemory': FcpTypeByteAmount, - 'node.disableHangCheckers': FcpTypeBool, - 'node.disableProbabilisticHTLs': FcpTypeBool, - 'node.downloadAllowedDirs': FcpTypeChoiceNodeDownloadAllowedDirs, - 'node.downloadsDir': FcpTypeDirname, - 'node.enableARKs': FcpTypeBool, - 'node.enablePacketCoalescing': FcpTypeBool, - 'node.enablePerNodeFailureTables': FcpTypeBool, - 'node.enableSwapping': FcpTypeBool, - 'node.enableSwapQueueing': FcpTypeBool, - 'node.enableULPRDataPropagation': FcpTypeBool, - 'node.extraPeerDataDir': FcpTypeDirname, - 'node.includeLocalAddressesInNoderefs': FcpTypeBool, - 'node.inputBandwidthLimit': FcpTypeByteAmount, # -1 is possible as value aswell - 'node.ipAddressOverride': FcpTypeIP, - 'node.l10n': FcpType, # ??? - 'node.lazyResume': FcpTypeBool, - 'node.listenPort': FcpTypeIPort, - 'node.maxBackgroundUSKFetchers': FcpTypeIntWithBounds(0, None), - 'node.maxHTL': FcpTypeIntWithBounds(0, None), - 'node.name': FcpTypeString, - 'node.nodeDir': FcpTypeDirname, - 'node.oneConnectionPerIP': FcpTypeBool, - 'node.outputBandwidthLimit': FcpTypeByteAmount, - 'node.passOpennetPeersThroughDarknet': FcpTypeBool, - 'node.persistentTempDir': FcpTypeDirname, - 'node.storeDir': FcpTypeDirname, - 'node.storeForceBigShrinks': FcpTypeBool, - 'node.storeSize': FcpTypeByteAmount, - 'node.storeType': FcpTypeString, - 'node.tempDir': FcpTypeDirname, - 'node.tempIPAddressHint': FcpTypeIP, # ??? - 'node.testingDropPacketsEvery': FcpTypeIntWithBounds(0, None), - 'node.uploadAllowedDirs': FcpTypeChoiceNodeDownloadAllowedDirs, - - 'node.testnet.enabled': FcpTypeBool, - - 'node.load.aggressiveGC': FcpType, # ??? - 'node.load.freeHeapBytesThreshold': FcpTypeByteAmount, - 'node.load.freeHeapPercentThreshold': FcpTypePercent, - 'node.load.memoryChecker': FcpTypeBool, - 'node.load.nodeThrottleFile': FcpTypeFilename, - 'node.load.threadLimit': FcpTypeIntWithBounds(0, None), - - 'node.opennet.acceptSeedConnections': FcpTypeBool, - 'node.opennet.alwaysAllowLocalAddresses': FcpTypeBool, - 'node.opennet.assumeNATed': FcpTypeBool, - 'node.opennet.bindTo': FcpTypeIP, - 'node.opennet.enabled': FcpTypeBool, - 'node.opennet.listenPort': FcpTypeIPort, - 'node.opennet.maxOpennetPeers': FcpTypeIntWithBounds(0, None), - 'node.opennet.oneConnectionPerIP': FcpTypeBool, - 'node.opennet.testingDropPacketsEvery': FcpTypeIntWithBounds(0, None), - - 'node.scheduler.CHKinserter_priority_policy': FcpTypeChoicePriorityPolicy, - 'node.scheduler.CHKrequester_priority_policy': FcpTypeChoicePriorityPolicy, - 'node.scheduler.SSKinserter_priority_policy': FcpTypeChoicePriorityPolicy, - 'node.scheduler.SSKrequester_priority_policy': FcpTypeChoicePriorityPolicy, - - 'node.updater.URI': FcpTypeUri, - 'node.updater.autoupdate': FcpTypeBool, - 'node.updater.enabled': FcpTypeBool, - 'node.updater.extURI': FcpTypeUri, - 'node.updater.revocationURI': FcpTypeUri, - - 'pluginmanager.loadplugin': FcpTypeStringList, - 'pluginmanager2.loadedPlugins': FcpTypeStringList, - - 'ssl.sslEnable': FcpTypeBool, - 'ssl.sslKeyPass': FcpTypeString, - 'ssl.sslKeyStore': FcpTypeFilename, - 'ssl.sslKeyStorePass': FcpTypeString, - 'ssl.sslVersion': FcpTypeChoiceSSLVersion, - - 'toadletsymlinker.symlinks': 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 FcpTypeBool - elif paramClass == consts.ConfigValueClass.ForceWriteFlag: - return FcpTypeBool - elif paramClass == consts.ConfigValueClass.ShortDescription: - return FcpTypeString - elif paramClass == consts.ConfigValueClass.LongDescription: - return FcpTypeString - elif paramClass == consts.ConfigValueClass.SortOrder: - return FcpTypeInt - elif paramClass == consts.ConfigValueClass.DataType: - return FcpTypeString - else: - raise ValueError('Unknown param class in: %r' % paramName) - -#*************************************************************************************** -# -# param types for peer message -# -# ..need to do a bit more here, cos it may be needed to validate user input -# -#*************************************************************************************** -PeerMessageParams = { - 'ark.number': FcpTypeInt, - 'auth.negTypes': FcpTypeInt, - - 'location': FcpTypeFloat, - 'opennet': FcpTypeBool, - 'testnet': FcpTypeBool, - - 'metadata.timeLastConnected': FcpTypeTime, - 'metadata.timeLastReceivedPacket': FcpTypeTime, - 'metadata.timeLastRoutable': FcpTypeTime, - 'metadata.timeLastSuccess': FcpTypeTime, - 'metadata.routableConnectionCheckCount': FcpTypeInt, - 'metadata.hadRoutableConnectionCount': FcpTypeInt, - - 'volatile.averagePingTime': FcpTypeFloat, - 'volatile.overloadProbability': FcpTypePercent, - 'volatile.routingBackoff': FcpTypeInt, - 'volatile.routingBackoffPercent': FcpTypePercent, - 'volatile.totalBytesIn': FcpTypeInt, - 'volatile.totalBytesOut': FcpTypeInt, - 'volatile.routingBackoffLength': 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 - -''' - -#*************************************************************************************** -# -# param types for node message -# -#*************************************************************************************** -NodeMessageParams = { - 'ark.number': FcpTypeInt, - 'auth.negTypes': FcpTypeInt, - 'location': FcpTypeFloat, - 'opennet': FcpTypeBool, - 'testnet': FcpTypeBool, - - 'volatile.allocatedJavaMemory': FcpTypeInt, - 'volatile.availableCPUs': FcpTypeInt, - 'volatile.averagePingTime': FcpTypeFloat, - 'volatile.avgStoreAccessRate': FcpTypePercent, - 'volatile.backedOffPercent': FcpTypePercent, - 'volatile.bwlimitDelayTime': FcpTypeFloat, - 'volatile.cacheAccess': FcpTypeInt, - 'volatile.cachedKeys': FcpTypeInt, - 'volatile.cachedSize': FcpTypeInt, - 'volatile.cachedStoreHits': FcpTypeInt, - 'volatile.cachedStoreMisses': FcpTypeInt, - 'volatile.freeJavaMemory': FcpTypeInt, - 'volatile.isUsingWrapper': FcpTypeBool, - 'volatile.locationChangePerMinute': FcpTypeFloat, - 'volatile.locationChangePerSession': FcpTypeFloat, - 'volatile.locationChangePerSwap': FcpTypeFloat, - 'volatile.maximumJavaMemory': FcpTypeInt, - 'volatile.maxOverallKeys': FcpTypeInt, - 'volatile.maxOverallSize': FcpTypeInt, - 'volatile.networkSizeEstimate24hourRecent': FcpTypeInt, - 'volatile.networkSizeEstimate48hourRecent': FcpTypeInt, - 'volatile.networkSizeEstimateSession': FcpTypeInt, - 'volatile.noSwaps': FcpTypeFloat, - 'volatile.noSwapsPerMinute': FcpTypeFloat, - 'volatile.numberOfARKFetchers': FcpTypeInt, - 'volatile.numberOfBursting': FcpTypeInt, - 'volatile.numberOfConnected': FcpTypeInt, - 'volatile.numberOfDisabled': FcpTypeInt, - 'volatile.numberOfDisconnected': FcpTypeInt, - 'volatile.numberOfInsertSenders': FcpTypeInt, - 'volatile.numberOfListening': FcpTypeInt, - 'volatile.numberOfListenOnly': FcpTypeInt, - 'volatile.numberOfNeverConnected': FcpTypeInt, - 'volatile.numberOfNotConnected': FcpTypeInt, - 'volatile.numberOfRemotePeerLocationsSeenInSwaps': FcpTypeFloat, - 'volatile.numberOfRequestSenders': FcpTypeInt, - 'volatile.numberOfRoutingBackedOff': FcpTypeInt, - 'volatile.numberOfSimpleConnected': FcpTypeInt, - 'volatile.numberOfTooNew': FcpTypeInt, - 'volatile.numberOfTooOld': FcpTypeInt, - 'volatile.numberOfTransferringRequestSenders': FcpTypeInt, - 'volatile.numberWithRoutingBackoffReasons.ForwardRejectedOverload': FcpTypeInt, - 'volatile.overallAccesses': FcpTypeInt, - 'volatile.overallKeys': FcpTypeInt, - 'volatile.overallSize': FcpTypeInt, - 'volatile.percentCachedStoreHitsOfAccesses': FcpTypePercent, - 'volatile.percentOverallKeysOfMax': FcpTypePercent, - 'volatile.percentStoreHitsOfAccesses': FcpTypePercent, - 'volatile.pInstantReject': FcpTypeFloat, # or percent? - 'volatile.recentInputRate': FcpTypeFloat, - 'volatile.recentOutputRate': FcpTypeFloat, - 'volatile.routingMissDistance': FcpTypeFloat, - 'volatile.runningThreadCount': FcpTypeInt, - 'volatile.startedSwaps': FcpTypeInt, - 'volatile.startupTime': FcpTypeTime, - 'volatile.storeAccesses': FcpTypeInt, - 'volatile.storeHits': FcpTypeInt, - 'volatile.storeKeys': FcpTypeInt, - 'volatile.storeMisses': FcpTypeInt, - 'volatile.storeSize': FcpTypeInt, - 'volatile.swaps': FcpTypeFloat, - 'volatile.swapsPerMinute': FcpTypeFloat, - 'volatile.swapsPerNoSwaps': FcpTypeFloat, - 'volatile.swapsRejectedAlreadyLocked': FcpTypeInt, - 'volatile.swapsRejectedLoop': FcpTypeInt, - 'volatile.swapsRejectedNowhereToGo': FcpTypeInt, - 'volatile.swapsRejectedRateLimit': FcpTypeInt, - 'volatile.swapsRejectedRecognizedID': FcpTypeInt, - 'volatile.totalInputBytes': FcpTypeInt, - 'volatile.totalInputRate': FcpTypeInt, - 'volatile.totalOutputBytes': FcpTypeInt, - 'volatile.totalOutputRate': FcpTypeInt, - 'volatile.totalPayloadOutputBytes': FcpTypeInt, - 'volatile.totalPayloadOutputPercent': FcpTypePercent, - 'volatile.totalPayloadOutputRate': FcpTypeInt, - 'volatile.unclaimedFIFOSize': FcpTypeInt, - 'volatile.uptimeSeconds': FcpTypeInt, - 'volatile.usedJavaMemory': 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~.................. - -''' -#*************************************************************************************** -# -# Mapping from message params to param types -# -# ...being lazy here, only types that are not strings are declared -# -#*************************************************************************************** -MessageParamTypes = { - - # client messages - # - #'AddPeer': # added later as PeerMessageParams - 'ClientGet': { - 'BinaryBlob': FcpTypeBool, - 'Global': FcpTypeBool, - 'IgnoreDS': FcpTypeBool, - 'DSOnly': FcpTypeBool, - 'MaxRetries': FcpTypeInt, - 'MaxSize': FcpTypeInt, - 'MaxTempSize': FcpTypeInt, - 'Verbosity': FcpTypeInt, - }, - 'ClientHello': { - 'ExpectedVersion': FcpTypeFloat, - }, - 'ClientPut': { - 'BinaryBlob': FcpTypeBool, - 'DataLength': FcpTypeInt, - 'DontCompress': FcpTypeBool, - 'EarlyEncode': FcpTypeBool, - 'GetCHKOnly': FcpTypeBool, - 'Global': FcpTypeBool, - 'MaxRetries': FcpTypeInt, - 'Verbosity': FcpTypeInt, - }, - 'FCPPluginReply': { - 'DataLength': FcpTypeInt, - }, - 'GetConfig': { - 'WithCurrent': FcpTypeBool, - 'WithDefaults': FcpTypeBool, - 'WithSortOrder': FcpTypeBool, - 'WithExpertFlag': FcpTypeBool, - 'WithForceWriteFlag': FcpTypeBool, - 'WithShortDescription': FcpTypeBool, - 'WithLongDescription': FcpTypeBool, - }, - 'GetNode': { - 'GiveOpennetRef': FcpTypeBool, - 'WithPrivate': FcpTypeBool, - 'WithVolatile': FcpTypeBool, - }, - 'GetPluginInfo': { - 'Detailed': FcpTypeBool, - }, - 'GetRequestStatus': { - 'Global': FcpTypeBool, - 'OnlyData': FcpTypeBool, - }, - 'ListPeer': { - 'WithMetadata': FcpTypeBool, - 'WithVolantile': FcpTypeBool, - }, - 'ListPeers': { - 'WithMetadata': FcpTypeBool, - 'WithVolantile': FcpTypeBool, - }, - 'ModifyPeer': { - 'AllowLocalAddresses': FcpTypeBool, - 'IsDisabled': FcpTypeBool, - 'ListenOnly': FcpTypeBool, - }, - #'ModifyConfig': # added later as ConfigMessageParams() - 'ModifyPeerNote': { - 'NoteText': FcpTypeBase64EncodedString, - }, - 'ModifyPersistentRequest': { - 'Global': FcpTypeBool, - }, - 'RemopvePersistentRequest': { - 'Global': FcpTypeBool, - }, - 'SubscribeUSK': { - 'DontPoll': FcpTypeBool, - }, - 'TestDDARequest': { - 'WantReadDirectory': FcpTypeBool, - 'WantWriteDirectory': FcpTypeBool, - }, - 'WatchGlobal': { - 'Enabled': FcpTypeBool, - 'VerbosityMask': FcpTypeInt, - }, - - # node messages - # - 'AllData': { - 'Global': FcpTypeBool, - 'DataLength': FcpTypeInt, - #NOTE: we ignore startup and completion time here as long as it is not passed in all related messages - }, - #'ConfigData': # added later as ConfigMessageParams() - 'DataFound': { - 'Global': FcpTypeBool, - 'DataLength': FcpTypeInt, - }, - 'FinishedCompression': { - 'OriginalSize': FcpTypeInt, - 'CompressedSize': FcpTypeInt, - }, - 'GetFailed': { - 'Code': FcpTypeInt, - 'ExpectedDataLength': FcpTypeInt_GetFailed_ExpectedDataLenght, - 'Fatal': FcpTypeBool, - 'FinalizedExpected': FcpTypeBool, - 'Global': FcpTypeBool, - }, - 'GetPluginInfo': { - 'Started': FcpTypeBool, - }, - 'IdentifierCollision': { - 'Global': FcpTypeBool, - }, - #'NodeData': # added later as NodeMessageParams - 'NodeHello': { - 'Build': FcpTypeInt, - 'CompressionCodecs': FcpTypeInt, - 'ExtBuild': FcpTypeInt, - #'ExtRevision': FcpTypeInt, - 'FcpVersion': FcpTypeFloat, - 'Testnet': FcpTypeBool, - }, - #'Peer': # added later as PeerMessageParams - 'PeerNote': { - 'NoteText': FcpTypeBase64EncodedString, - }, - 'PersistentRequestModified': { - 'Global': FcpTypeBool, - }, - 'PersistentRequestRemoved': { - 'Global': FcpTypeBool, - }, - 'ProtocolError': { - 'Code': FcpTypeInt, - 'Global': FcpTypeBool, - }, - 'PutFailed': { - 'Global': FcpTypeBool, - 'Code': FcpTypeInt, - }, - 'PutFetchable': { - 'Global': FcpTypeBool, - }, - 'SimpleProgress': { - 'Total': FcpTypeInt, - 'Required': FcpTypeInt, - 'Failed': FcpTypeInt, - 'FatalyFailed': FcpTypeInt, - 'Succeeded': FcpTypeInt, - 'FinalizedTotal': FcpTypeBool, - }, - 'SubscribedUSKUpdate': { - 'Edition': FcpTypeInt, - }, - 'TestDDAComplete': { - 'ReadDirectoryAllowed': FcpTypeBool, - 'WriteDirectoryAllowed': FcpTypeBool, - }, - } - -MessageParamTypes['ClientPutDiskDir'] = MessageParamTypes['ClientPut'] -MessageParamTypes['ClientComplexDir'] = MessageParamTypes['ClientPut'] - -# TODO: "Started" param? Think we simply ignore it -MessageParamTypes['PersistentGet'] = MessageParamTypes['ClientGet'] -MessageParamTypes['PersistentPut'] = MessageParamTypes['ClientPut'] - -MessageParamTypes['ModifyConfig'] = MessageParamTypes['ConfigData'] = ConfigMessageParams() -MessageParamTypes['Peer'] = MessageParamTypes['AddPeer'] = PeerMessageParams - - #******************************************************************************************** # #******************************************************************************************** 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-07 09:55:09
|
Revision: 334 http://fclient.svn.sourceforge.net/fclient/?rev=334&view=rev Author: jUrner Date: 2008-03-07 01:55:12 -0800 (Fri, 07 Mar 2008) Log Message: ----------- fixed a critical that could hang io forever Modified Paths: -------------- trunk/sandbox/fcp2/iohandler.py Modified: trunk/sandbox/fcp2/iohandler.py =================================================================== --- trunk/sandbox/fcp2/iohandler.py 2008-03-07 09:54:27 UTC (rev 333) +++ trunk/sandbox/fcp2/iohandler.py 2008-03-07 09:55:12 UTC (rev 334) @@ -347,7 +347,11 @@ if isClientPutComplexDir: n = clientPutComplexDirDataLength else: - n = msg['DataLength'] + # make shure DataLength is int, otherwise we might loop here forever + try: + n = int(msg['DataLength']) + except ValueError: + raise MessageParseError('DataLength param must be type(int)') if n > 0: while self._receiveBuffer: if len(self._receiveBuffer) >= n: 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-07 09:54:16
|
Revision: 332 http://fclient.svn.sourceforge.net/fclient/?rev=332&view=rev Author: jUrner Date: 2008-03-07 01:54:21 -0800 (Fri, 07 Mar 2008) Log Message: ----------- adapt to Fc prefix has gone Modified Paths: -------------- trunk/sandbox/fcp2/test_fcp/test_client.py Modified: trunk/sandbox/fcp2/test_fcp/test_client.py =================================================================== --- trunk/sandbox/fcp2/test_fcp/test_client.py 2008-03-07 09:54:15 UTC (rev 331) +++ trunk/sandbox/fcp2/test_fcp/test_client.py 2008-03-07 09:54:21 UTC (rev 332) @@ -543,7 +543,7 @@ self.failUnless(myIdentifier in requestsAll) self.assertEqual(myIdentifier, myRequest['Identifier']) - self.assertEqual(myRequest['FcRequestStatus'], consts.RequestStatus.Null) + self.assertEqual(myRequest['RequestStatus'], consts.RequestStatus.Null) self.assertHasNextEvent(None) self.assertHasNextMessage(None) @@ -613,20 +613,20 @@ self.assertHasNextEvent( self.fcpClient.events.RequestCompleted, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Success | + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), data=data ) self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) # cheat a bit to test peristence == Forever (client should not remove request) requestsAll[myIdentifier] =myRequest myRequest['Persistence'] = consts.Persistence.Forever - myRequest['FcRequestStatus'] &= ~(consts.RequestStatus.Success | + myRequest['RequestStatus'] &= ~(consts.RequestStatus.Success | consts.RequestStatus.Completed | consts.RequestStatus.RemovedFromQueue ) @@ -642,11 +642,11 @@ self.assertHasNextEvent( self.fcpClient.events.RequestCompleted, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Success | consts.RequestStatus.Completed), + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.Completed), data=data ) self.failUnless(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) self.assertHasNextMessage(None) @@ -686,7 +686,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestFailed, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Error | + ('RequestStatus', consts.RequestStatus.Error | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -700,7 +700,7 @@ requestsAll[myIdentifier] =myRequest myRequest['Persistence'] = consts.Persistence.Forever - myRequest['FcRequestStatus'] &= ~(consts.RequestStatus.Error | + myRequest['RequestStatus'] &= ~(consts.RequestStatus.Error | consts.RequestStatus.Completed | consts.RequestStatus.RemovedFromQueue ) @@ -716,7 +716,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestFailed, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Error | consts.RequestStatus.Completed), + ('RequestStatus', consts.RequestStatus.Error | consts.RequestStatus.Completed), ) self.failUnless(myIdentifier in requestsAll) self.assertHasNextEvent(None) @@ -760,13 +760,13 @@ self.assertHasNextEvent( self.fcpClient.events.RequestCompleted, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Success | + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), ) self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) self.assertHasNextMessage(None) @@ -804,7 +804,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestFailed, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Error | + ('RequestStatus', consts.RequestStatus.Error | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -849,13 +849,13 @@ self.assertHasNextEvent( self.fcpClient.events.RequestCompleted, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Success | + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), ) self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) self.assertHasNextMessage(None) @@ -892,12 +892,12 @@ self.assertHasNextEvent( self.fcpClient.events.RequestCompleted, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Success | + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), ) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) self.assertHasNextMessage(None) @@ -934,12 +934,12 @@ self.assertHasNextEvent( self.fcpClient.events.RequestFailed, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Error | + ('RequestStatus', consts.RequestStatus.Error | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), ) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) self.assertHasNextMessage(None) @@ -976,7 +976,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestCompleted, consts.Message.ClientPut, - ('FcRequestStatus', consts.RequestStatus.Success | + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1008,7 +1008,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestFailed, consts.Message.ClientPut, - ('FcRequestStatus', consts.RequestStatus.Error | + ('RequestStatus', consts.RequestStatus.Error | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1039,7 +1039,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestCompleted, consts.Message.ClientPut, - ('FcRequestStatus', consts.RequestStatus.Success | + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1070,7 +1070,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestFailed, consts.Message.ClientPut, - ('FcRequestStatus', consts.RequestStatus.Error | + ('RequestStatus', consts.RequestStatus.Error | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1101,7 +1101,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestCompleted, consts.Message.ClientPutDiskDir, - ('FcRequestStatus', consts.RequestStatus.Success | + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1132,7 +1132,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestFailed, consts.Message.ClientPutDiskDir, - ('FcRequestStatus', consts.RequestStatus.Error | + ('RequestStatus', consts.RequestStatus.Error | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1163,7 +1163,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestCompleted, consts.Message.ClientPut, - ('FcRequestStatus', consts.RequestStatus.Success | + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1194,7 +1194,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestFailed, consts.Message.ClientPut, - ('FcRequestStatus', consts.RequestStatus.Error | + ('RequestStatus', consts.RequestStatus.Error | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1210,22 +1210,22 @@ items = [ { - 'FcRequestType': consts.RequestType.PutData, + 'RequestType': consts.RequestType.PutData, 'Data': '12345', 'Name': 'myItem0', }, { - 'FcRequestType': consts.RequestType.PutFile, + 'RequestType': consts.RequestType.PutFile, 'Filename': 'myFile.txt', 'Name': 'myItem1', }, { - 'FcRequestType': consts.RequestType.PutRedirect, + 'RequestType': consts.RequestType.PutRedirect, 'TargetURI': 'CHK@123456789', 'Name': 'myItem2', }, { - 'FcRequestType': consts.RequestType.PutData, + 'RequestType': consts.RequestType.PutData, 'Data': '67890', 'Name': 'myItem3', }, @@ -1273,7 +1273,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestCompleted, consts.Message.ClientPutComplexDir, - ('FcRequestStatus', consts.RequestStatus.Success | + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1290,7 +1290,7 @@ # upload directory is not allowed items = [ { - 'FcRequestType': consts.RequestType.PutDir, + 'RequestType': consts.RequestType.PutDir, 'Data': '12345', 'Name': 'myItem0', }, @@ -1303,7 +1303,7 @@ # no request type specified items = [ { - #'FcRequestType': consts.RequestType.PutData, + #'RequestType': consts.RequestType.PutData, 'Data': '12345', 'Name': 'myItem0', }, @@ -1313,7 +1313,7 @@ # param missing (we enforce all required parameters) items = [ { - 'FcRequestType': consts.RequestType.PutData, + 'RequestType': consts.RequestType.PutData, #'Data': '12345', #'Name': 'myItem0', }, @@ -1372,9 +1372,9 @@ ) self.assertHasNextEvent(self.fcpClient.events.RequestModified) - self.failUnless(consts.RequestModified.PersistentUserData in myRequest['FcModified']) - self.failUnless(consts.RequestModified.PriorityClass in myRequest['FcModified']) - self.assertEqual('bar', myRequest['FcPersistentUserData']) + self.failUnless(consts.RequestModified.PersistentUserData in myRequest['Modified']) + self.failUnless(consts.RequestModified.PriorityClass in myRequest['Modified']) + self.assertEqual('bar', myRequest['PersistentUserData']) self.assertEqual(consts.Priority.High, myRequest['PriorityClass']) self.assertHasNextEvent(None) @@ -1420,9 +1420,9 @@ self.assertHasNextEvent(self.fcpClient.events.RequestModified) - self.failUnless(consts.RequestModified.PersistentUserData in myRequest['FcModified']) - #self.failUnless(consts.RequestModified.PriorityClass in myRequest['FcModified']) - self.assertEqual('bar', myRequest['FcPersistentUserData']) + self.failUnless(consts.RequestModified.PersistentUserData in myRequest['Modified']) + #self.failUnless(consts.RequestModified.PriorityClass in myRequest['Modified']) + self.assertEqual('bar', myRequest['PersistentUserData']) #self.assertEqual(consts.Priority.High, myRequest['PriorityClass']) self.assertHasNextEvent(None) @@ -1458,7 +1458,7 @@ self.fcpClient.removeRequest(myIdentifier) # of our request should be removed emidiately, - self.assertEqual(myRequest['FcRequestStatus'], consts.RequestStatus.Removed | + self.assertEqual(myRequest['RequestStatus'], consts.RequestStatus.Removed | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ) @@ -1468,7 +1468,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestRemoved, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Removed | + ('RequestStatus', consts.RequestStatus.Removed | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1509,7 +1509,7 @@ # status of our request should be set to removed emidiately, but it should # not be removed from the client - self.assertEqual(myRequest['FcRequestStatus'], consts.RequestStatus.Removed | consts.RequestStatus.Completed) + self.assertEqual(myRequest['RequestStatus'], consts.RequestStatus.Removed | consts.RequestStatus.Completed) self.failUnless(myIdentifier in self.fcpClient.getRequests()) # client schould send a RemovePersistentRequest @@ -1522,12 +1522,12 @@ ) # now the request should have been removed - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.RemovedFromQueue) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.RemovedFromQueue) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent( self.fcpClient.events.RequestRemoved, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Removed | + ('RequestStatus', consts.RequestStatus.Removed | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1557,7 +1557,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestRemoved, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Removed | + ('RequestStatus', consts.RequestStatus.Removed | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1599,7 +1599,7 @@ self.assertHasNextEvent( self.fcpClient.events.RequestRemoved, consts.Message.ClientGet, - ('FcRequestStatus', consts.RequestStatus.Removed | + ('RequestStatus', consts.RequestStatus.Removed | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), @@ -1684,7 +1684,7 @@ self.fcpClient.events.RequestRestored, consts.Message.ClientGet, ('Identifier', myIdentifier), - ('FcRequestStatus', consts.RequestStatus.Restored), # no RequestStatus.Pending flag should be set here + ('RequestStatus', consts.RequestStatus.Restored), # no RequestStatus.Pending flag should be set here ) self.failUnless(myIdentifier in requestsAll) @@ -1832,8 +1832,8 @@ consts.Message.ClientGet, ) - self.failUnless(consts.RequestModified.Identifier in msg['FcModified']) - oldIdentifier = msg['FcModified'][consts.RequestModified.Identifier] + self.failUnless(consts.RequestModified.Identifier in msg['Modified']) + oldIdentifier = msg['Modified'][consts.RequestModified.Identifier] newIdentifier = msg['Identifier'] self.assertEqual(oldIdentifier, myIdentifier) self.assertNotEqual(newIdentifier, myIdentifier) @@ -1880,12 +1880,12 @@ consts.Message.ClientGet ) - self.failUnless(consts.RequestModified.Filename in msg['FcModified']) - self.assertEqual(msg['FcModified'][consts.RequestModified.Filename], fpath) + self.failUnless(consts.RequestModified.Filename in msg['Modified']) + self.assertEqual(msg['Modified'][consts.RequestModified.Filename], fpath) self.assertNotEqual(msg['Filename'], fpath) # check flags - filenameCollision = msg['FcFilenameCollision'] + filenameCollision = msg['FilenameCollision'] self.assertEqual( filenameCollision & consts.FilenameCollision.MaskHandle, consts.FilenameCollision.HandleRename @@ -1981,7 +1981,7 @@ Persistence=consts.Persistence.Connection, ) self.fcpClient._registerRequest(msg, consts.RequestType.PutData) - msg['FcPrivateKey'] = myKey + msg['PrivateKey'] = myKey myIdentifier = msg['Identifier'] requestsAll = self.fcpClient.getRequests() @@ -2004,7 +2004,7 @@ Persistence=consts.Persistence.Connection, ) self.fcpClient._registerRequest(msg, consts.RequestType.PutData) - msg['FcPrivateKey'] = myKey + msg['PrivateKey'] = myKey myIdentifier = msg['Identifier'] requestsAll = self.fcpClient.getRequests() @@ -2026,7 +2026,7 @@ Persistence=consts.Persistence.Connection, ) self.fcpClient._registerRequest(msg, consts.RequestType.PutData) - msg['FcPrivateKey'] = myKey + msg['PrivateKey'] = myKey myIdentifier = msg['Identifier'] requestsAll = self.fcpClient.getRequests() @@ -2087,14 +2087,14 @@ consts.Message.GetPluginInfo, ('Identifier', myIdentifier), ('PluginName', 'hi there'), - ('FcRequestStatus', consts.RequestStatus.Success | + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), ) self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) self.assertHasNextMessage(None) @@ -2126,14 +2126,14 @@ consts.Message.GetPluginInfo, #('PluginName', 'hi there'), ('Identifier', myIdentifier), - ('FcRequestStatus', consts.RequestStatus.Error | + ('RequestStatus', consts.RequestStatus.Error | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), ) self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) self.assertHasNextMessage(None) @@ -2167,16 +2167,16 @@ consts.Message.FCPPluginMessage, ('PluginName', 'hi there'), ('Identifier', myIdentifier), - ('FcRequestStatus', consts.RequestStatus.Success | + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), ) - reply = msg['FcPluginReply'] + reply = msg['PluginReply'] self.failUnless(reply.params.get('baz', None) == '12345') self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) self.assertHasNextMessage(None) @@ -2208,14 +2208,14 @@ consts.Message.FCPPluginMessage, #('PluginName', 'hi there'), ('Identifier', myIdentifier), - ('FcRequestStatus', consts.RequestStatus.Error | + ('RequestStatus', consts.RequestStatus.Error | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), ) self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) self.assertHasNextMessage(None) @@ -2247,15 +2247,15 @@ self.fcpClient.events.KeypairGenerated, consts.Message.GenerateSSK, ('Identifier', myIdentifier), - ('FcPublicKey','SSK@public'), - ('FcPrivateKey','SSK@private'), - ('FcRequestStatus', consts.RequestStatus.Success | + ('PublicKey','SSK@public'), + ('PrivateKey','SSK@private'), + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), ) self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) self.assertHasNextMessage(None) @@ -2279,15 +2279,15 @@ self.fcpClient.events.KeypairGenerated, consts.Message.GenerateSSK, ('Identifier', myIdentifier), - ('FcPublicKey','USK@public'), - ('FcPrivateKey','USK@private'), - ('FcRequestStatus', consts.RequestStatus.Success | + ('PublicKey','USK@public'), + ('PrivateKey','USK@private'), + ('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.RemovedFromQueue | consts.RequestStatus.Completed ), ) self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) self.assertHasNextMessage(None) @@ -2307,7 +2307,7 @@ requestsAll = self.fcpClient.getRequests() self.failUnless(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextMessage(consts.Message.SubscribeUSK) self.sendResponseMessage( 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:10
|
Revision: 331 http://fclient.svn.sourceforge.net/fclient/?rev=331&view=rev Author: jUrner Date: 2008-03-07 01:54:15 -0800 (Fri, 07 Mar 2008) Log Message: ----------- adapt to Fc prefix has gone Modified Paths: -------------- trunk/sandbox/fcp2/fcparams.py Modified: trunk/sandbox/fcp2/fcparams.py =================================================================== --- trunk/sandbox/fcp2/fcparams.py 2008-03-07 09:53:48 UTC (rev 330) +++ trunk/sandbox/fcp2/fcparams.py 2008-03-07 09:54:15 UTC (rev 331) @@ -57,10 +57,10 @@ MAGIC = '{8a7808d0-3934-465a-b1b4-b7150ed109a5}' # magic string to identify our requests FcParams = ( - ('FcRequestType', validateInt), - ('FcInitTime', validateFloat), # can not take it from uuid cos requests may be resend multiple times - ('FcFilenameCollision', validateInt), - ('FcPersistentUserData', validateString), + ('RequestType', validateInt), + ('InitTime', validateFloat), # can not take it from uuid cos requests may be resend multiple times + ('FilenameCollision', validateInt), + ('PersistentUserData', validateString), ) IRequestType = 0 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:53:45
|
Revision: 330 http://fclient.svn.sourceforge.net/fclient/?rev=330&view=rev Author: jUrner Date: 2008-03-07 01:53:48 -0800 (Fri, 07 Mar 2008) Log Message: ----------- more log messages Modified Paths: -------------- trunk/sandbox/fcp2/consts.py Modified: trunk/sandbox/fcp2/consts.py =================================================================== --- trunk/sandbox/fcp2/consts.py 2008-03-07 09:53:17 UTC (rev 329) +++ trunk/sandbox/fcp2/consts.py 2008-03-07 09:53:48 UTC (rev 330) @@ -264,7 +264,6 @@ Connected = 'connected to node' ConnectingFailed = 'connecting to node failed' Retry = 'Retrying' - Closing = 'Closing' Sending = 'Sending' @@ -278,6 +277,9 @@ AllRequestsCompleted = 'All requests completed' EventTriggered = 'triggered: ' + + RequestInvalidClientToken = 'Request invalid client token' + class Message: 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:53:14
|
Revision: 329 http://fclient.svn.sourceforge.net/fclient/?rev=329&view=rev Author: jUrner Date: 2008-03-07 01:53:17 -0800 (Fri, 07 Mar 2008) Log Message: ----------- private message params come now without Fc prefix Modified Paths: -------------- trunk/sandbox/fcp2/client.py Modified: trunk/sandbox/fcp2/client.py =================================================================== --- trunk/sandbox/fcp2/client.py 2008-03-06 18:25:54 UTC (rev 328) +++ trunk/sandbox/fcp2/client.py 2008-03-07 09:53:17 UTC (rev 329) @@ -295,8 +295,8 @@ # clean left over DDA test tmp files for initialRequest in self._ddaTests: - if initialRequest['FcTestDDA'].get('TmpFile', None) is not None: - tools.saveRemoveFile(initialRequest['FcTestDDA']['TmpFile']) + if initialRequest['TestDDA'].get('TmpFile', None) is not None: + tools.saveRemoveFile(initialRequest['TestDDA']['TmpFile']) self._ddaTests = [] self._requests = {} @@ -324,9 +324,9 @@ #NOTE: non Get / Put related requests do not have a Persistence param removeRequest = request.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection if removeRequest: - request['FcRequestStatus'] |= consts.RequestStatus.RemovedFromQueue + request['RequestStatus'] |= consts.RequestStatus.RemovedFromQueue - request['FcRequestStatus'] |= consts.RequestStatus.Completed + request['RequestStatus'] |= consts.RequestStatus.Completed if event is not None: event(request) @@ -358,41 +358,44 @@ """ identifier = fcparams.newUuid(uuids=self._requests) if identifier is None else identifier + #TODO: keep an eye on additional params, they may collide with Fcp parameters + Private = message.Message.privateParamName + if requestType & (consts.RequestType.MaskGet | consts.RequestType.MaskPut): msg.params.update({ # persistent params that will go into identifier - 'FcRequestType': requestType, # identifies sub message types - 'FcInitTime': time.time() if initTime is None else initTime, # when was the request started? - 'FcFilenameCollision': filenameCollision, # handle fielanem collisions? - 'FcPersistentUserData': persistentUserData, # any user defined persistent data + Private('RequestType'): requestType, # identifies sub message types + Private('InitTime'): time.time() if initTime is None else initTime, # when was the request started? + Private('FilenameCollision'): filenameCollision, # handle fielanem collisions? + Private('PersistentUserData'): persistentUserData, # any user defined persistent data # non persistent params - 'FcRequestStatus': consts.RequestStatus.Null, - 'FcErrorMessage': None, # error message in case an error occured - 'FcUserData': userData, # any user defined runtime data here + Private('RequestStatus'): consts.RequestStatus.Null, + Private('ErrorMessage'): None, # error message in case an error occured + Private('UserData'): userData, # any user defined runtime data here # params for SSKKeypair - 'FcPrivateKey': None, - 'FcPublicKey': None, + Private('PrivateKey'): None, + Private('PublicKey'): None, # params from DataFound - 'FcMetadataContentType': '', # contecnt type - 'FcDataLength': '', # content size + Private('MetadataContentType'): '', # contecnt type + Private('MetadataSize'): 0, # content size # params from PersistentRequestModified - 'FcModified': {}, + Private('Modified'): {}, # params for DDA test - 'FcTestDDA': {}, + Private('TestDDA'): {}, # params for SimpleProgress - 'FcProgressTotal': '0', - 'FcProgressRequired': '0', - 'FcProgressFailed': '0', - 'FcProgressFatalyFailed': '0', - 'FcProgressSucceeeded': '0', + Private('ProgressTotal'): 0, + Private('ProgressRequired'): 0, + Private('ProgressFailed'): 0, + Private('ProgressFatalyFailed'): 0, + Private('ProgressSucceeeded'): 0, }) # equip msg with some persistent pparams @@ -401,34 +404,33 @@ elif requestType & consts.RequestType.MaskGenerateKeypair: msg.params.update({ - 'FcRequestType': requestType, # identifies sub message types - 'FcRequestStatus': consts.RequestStatus.Null, - 'FcInitTime': initTime, # when was the request started? - 'FcModified': {}, + Private('RequestType'): requestType, # identifies sub message types + Private('RequestStatus'): consts.RequestStatus.Null, + Private('InitTime'): initTime, # when was the request started? + Private('Modified'): {}, - 'FcPrivateKey': None, - 'FcPublicKey': None, + Private('PrivateKey'): None, + Private('PublicKey'): None, }) elif requestType & consts.RequestType.PluginMessage: msg.params.update({ - 'FcRequestType': requestType, # identifies sub message types - 'FcRequestStatus': consts.RequestStatus.Null, - 'FcInitTime': initTime, # when was the request started? - 'FcModified': {}, + Private('RequestType'): requestType, # identifies sub message types + Private('RequestStatus'): consts.RequestStatus.Null, + Private('InitTime'): initTime, # when was the request started? + Private('Modified'): {}, - 'FcPluginReply': None, + Private('PluginReply'): None, }) else: msg.params.update({ - 'FcRequestType': requestType, # identifies sub message types - 'FcRequestStatus': consts.RequestStatus.Null, - 'FcInitTime': initTime, # when was the request started? - 'FcModified': {}, + Private('RequestType'): requestType, # identifies sub message types + Private('RequestStatus'): consts.RequestStatus.Null, + Private('InitTime'): initTime, # when was the request started? + Private('Modified'): {}, }) - msg['FcRequestStatus'] |= consts.RequestStatus.Null msg['Identifier'] = identifier self._requests[identifier] = msg @@ -618,7 +620,7 @@ self._requests[newIdentifier] = initialRequest del self._requests[requestIdentifier] initialRequest['Identifier'] = newIdentifier - initialRequest['FcModified'] = {consts.RequestModified.Identifier: requestIdentifier} + initialRequest['Modified'] = {consts.RequestModified.Identifier: requestIdentifier} self.events.RequestModified(initialRequest) self.sendMessageEx(initialRequest) return True @@ -656,7 +658,7 @@ ddaRequestMsg['Directory'] = directory # add params required for testing - initialRequest['FcTestDDA'] = { + initialRequest['TestDDA'] = { 'Directory': directory, 'Replied': False, 'TmpFile': None, @@ -670,44 +672,44 @@ # handle filename collisions elif code == consts.ProtocolError.DiskTargetExists: - handleCollision = initialRequest.get('FcFilenameCollision', consts.FilenameCollision.HandleNever) + handleCollision = initialRequest.get('FilenameCollision', consts.FilenameCollision.HandleNever) collisionHandled = bool(handleCollision & consts.FilenameCollision.CollisionHandled) # rename filename if handleCollision & consts.FilenameCollision.HandleRename: filename = initialRequest['Filename'] - initialRequest['FcFilenameCollision'] |= consts.FilenameCollision.CollisionHandled + initialRequest['FilenameCollision'] |= consts.FilenameCollision.CollisionHandled newFilename = namespace.unique_filename(filename, extensions=1, ispostfixed=collisionHandled) initialRequest['Filename'] = newFilename - initialRequest['FcModified'] = {consts.RequestModified.Filename: filename} + initialRequest['Modified'] = {consts.RequestModified.Filename: filename} self.sendMessageEx(initialRequest) self.events.RequestModified(initialRequest) return True # don't handle else: - initialRequest['FcFilenameCollision'] &= ~consts.FilenameCollision.CollisionHandled + initialRequest['FilenameCollision'] &= ~consts.FilenameCollision.CollisionHandled # handle plugin related request failures elif code == consts.ProtocolError.NoSuchPlugin or code == consts.ProtocolError.AccessDenied: if initialRequest.name == consts.Message.GetPluginInfo: - initialRequest['FcErrorMessage'] = msg - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Error + initialRequest['ErrorMessage'] = msg + initialRequest['RequestStatus'] |= consts.RequestStatus.Error self._finalizeRequest(msg, initialRequest, self.events.PluginInfoFailed) return True elif initialRequest.name == consts.Message.FCPPluginMessage: - initialRequest['FcErrorMessage'] = msg - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Error + initialRequest['ErrorMessage'] = msg + initialRequest['RequestStatus'] |= consts.RequestStatus.Error self._finalizeRequest(msg, initialRequest, self.events.PluginMessageFailed) return True # only requests should get through to here # NOTE: Fcp already removed the request - initialRequest['FcErrorMessage'] = msg - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Error + initialRequest['ErrorMessage'] = msg + initialRequest['RequestStatus'] |= consts.RequestStatus.Error self._finalizeRequest(msg, initialRequest, self.events.RequestFailed) return True @@ -726,9 +728,9 @@ # find message that triggered the call for initialRequest in self._ddaTests: - if initialRequest['FcTestDDA']['Directory'] == directory: - if not initialRequest['FcTestDDA']['Replied']: - initialRequest['FcTestDDA']['Replied'] = True + if initialRequest['TestDDA']['Directory'] == directory: + if not initialRequest['TestDDA']['Replied']: + initialRequest['TestDDA']['Replied'] = True break else: # fell through @@ -749,7 +751,7 @@ if not written: tools.saveRemoveFile(fpathWrite) else: - initialRequest['FcTestDDA']['TmpFile'] = fpathWrite + initialRequest['TestDDA']['TmpFile'] = fpathWrite self.sendMessage( consts.Message.TestDDAResponse, @@ -765,8 +767,8 @@ # find message that triggered the call for initialRequest in self._ddaTests: - if initialRequest['FcTestDDA']['Directory'] == directory: - if initialRequest['FcTestDDA']['Replied']: + if initialRequest['TestDDA']['Directory'] == directory: + if initialRequest['TestDDA']['Replied']: break else: # fell through @@ -774,9 +776,9 @@ # remove test and clean tmp data self._ddaTests.remove(initialRequest) - if initialRequest['FcTestDDA']['TmpFile'] is not None: - tools.saveRemoveFile(initialRequest['FcTestDDA']['TmpFile']) - wantWrite = initialRequest.params['FcTestDDA']['WantWrite'] + if initialRequest['TestDDA']['TmpFile'] is not None: + tools.saveRemoveFile(initialRequest['TestDDA']['TmpFile']) + wantWrite = initialRequest.params['TestDDA']['WantWrite'] # check if test was sucessful testFailed = False @@ -786,8 +788,8 @@ testFailed = not msg.params.get('ReadDirectoryAllowed', False) if testFailed: - initialRequest['FcRequestStatus'] = consts.RequestStatus.Error - initialRequest['FcErrorMessage'] = initialRequest['FcTestDDA']['ErrorMsg'] + initialRequest['RequestStatus'] = consts.RequestStatus.Error + initialRequest['ErrorMessage'] = initialRequest['TestDDA']['ErrorMsg'] self._finalizeRequest(msg, initialRequest, self.events.RequestFailed) return True @@ -817,7 +819,7 @@ if initialRequest is None: return False - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Success + initialRequest['RequestStatus'] |= consts.RequestStatus.Success initialRequest.data = msg.data self._finalizeRequest(msg, initialRequest, self.events.RequestCompleted) return True @@ -826,16 +828,16 @@ if initialRequest is None: return False - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Success - initialRequest['FcMetadataContentType'] = msg.get('Metadata.ContentType', '') - initialRequest['FcDataLength'] = msg.get('DataLength', '') + initialRequest['RequestStatus'] |= consts.RequestStatus.Success + initialRequest['MetadataContentType'] = msg.get('Metadata.ContentType', '') + initialRequest['MetadataSize'] = msg.get('DataLength', '') # except from GetData all requests are complete here. Next GetData will run through AllData... # For GetData with persistence != connection the node sends no All Data message # whatever that is good for ..fix this here to get all GetData request to complete on # All Data. - if initialRequest['FcRequestType'] == consts.RequestType.GetData: + if initialRequest['RequestType'] == consts.RequestType.GetData: if initialRequest['Persistence'] != consts.Persistence.Connection: self.sendMessage( consts.Message.GetRequestStatus, @@ -858,14 +860,14 @@ return False # check if it is one of our requests for key information - if code == consts.FetchError.TooBig and initialRequest['FcRequestType'] == consts.RequestType.GetKeyInfo: - initialRequest['FcMetadataContentType'] = msg.get('ExpectedMetadata.ContentType', '') - initialRequest['FcDataLength'] = msg.get('ExpectedDataLength', -1) - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Success + if code == consts.FetchError.TooBig and initialRequest['RequestType'] == consts.RequestType.GetKeyInfo: + initialRequest['MetadataContentType'] = msg.get('ExpectedMetadata.ContentType', '') + initialRequest['DataLength'] = msg.get('ExpectedDataLength', -1) + initialRequest['RequestStatus'] |= consts.RequestStatus.Success self._finalizeRequest(msg, initialRequest, self.events.RequestCompleted) else: - initialRequest['FcErrorMessage'] = msg - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Error + initialRequest['ErrorMessage'] = msg + initialRequest['RequestStatus'] |= consts.RequestStatus.Error self._finalizeRequest(msg, initialRequest, self.events.RequestFailed) return True @@ -878,6 +880,8 @@ # not one of our requests... so cancel it if fcParams is None or CancelPersistentRequests: + if fcParams is None: + self._loggers['Runtime'].critical(consts.LogMessages.RequestInvalidClientToken) self.sendMessage( consts.Message.RemovePersistentRequest, Identifier=requestIdentifier, @@ -902,7 +906,7 @@ #FIX: [0001965: Persistence vs PersistenceType] if 'PersistenceType' in initialRequest.params: initialRequest['Persistence'] = initialRequest.params.pop('PersistenceType') - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Restored + initialRequest['RequestStatus'] |= consts.RequestStatus.Restored self.events.RequestRestored(initialRequest) return True @@ -940,7 +944,7 @@ modified[consts.RequestModified.PriorityClass] = None initialRequest['PriorityClass'] = priorityClass - initialRequest['FcModified'] = modified + initialRequest['Modified'] = modified self.events.RequestModified(initialRequest) return True @@ -949,7 +953,7 @@ if initialRequest is None: return False - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Removed + initialRequest['RequestStatus'] |= consts.RequestStatus.Removed self._finalizeRequest(msg, initialRequest, self.events.RequestRemoved) return True @@ -958,11 +962,11 @@ if initialRequest is None: return False - initialRequest['FcProgressTotal'] = msg['Total'] - initialRequest['FcProgressRequired'] = msg['Required'] - initialRequest['FcProgressFailed'] = msg['Failed'] - initialRequest['FcProgressFatalyFailed'] = msg['FatallyFailed'] - initialRequest['FcProgressSucceeeded'] = msg['Succeeded'] + initialRequest['ProgressTotal'] = msg['Total'] + initialRequest['ProgressRequired'] = msg['Required'] + initialRequest['ProgressFailed'] = msg['Failed'] + initialRequest['ProgressFatalyFailed'] = msg['FatallyFailed'] + initialRequest['ProgressSucceeeded'] = msg['Succeeded'] self.events.RequestProgress(initialRequest) return True @@ -976,6 +980,8 @@ # not one of our requests... so cancel it if fcParams is None or CancelPersistentRequests: + if fcParams is None: + self._loggers['Runtime'].critical(consts.LogMessages.RequestInvalidClientToken) self.sendMessage( consts.Message.RemovePersistentRequest, Identifier=requestIdentifier, @@ -1005,7 +1011,7 @@ #FIX: remove Started param from PersistentGet / Put del initialRequest.params['Started'] - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Restored + initialRequest['RequestStatus'] |= consts.RequestStatus.Restored self.events.RequestRestored(initialRequest) return True @@ -1021,8 +1027,8 @@ if code == consts.InsertError.Canceled: return False - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Error - initialRequest['FcErrorMessage'] = msg + initialRequest['RequestStatus'] |= consts.RequestStatus.Error + initialRequest['ErrorMessage'] = msg self._finalizeRequest(msg, initialRequest, self.events.RequestFailed) return True @@ -1042,7 +1048,7 @@ # TODO: StartupTime and CompletionTime are passed, but # as long as no corrosponding params are passed in DataFound # we ignore them - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Success + initialRequest['RequestStatus'] |= consts.RequestStatus.Success initialRequest['URI'] = msg['URI'] self._finalizeRequest(msg, initialRequest, self.events.RequestCompleted) return True @@ -1057,14 +1063,14 @@ elif msg.name == consts.Message.FinishedCompression: if initialRequest is None: return False - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Compressed + initialRequest['RequestStatus'] |= consts.RequestStatus.Compressed self.events.RequestCompressionFinished(initialRequest) return True elif msg.name == consts.Message.StartedCompression: if initialRequest is None: return False - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Compressing + initialRequest['RequestStatus'] |= consts.RequestStatus.Compressing self.events.RequestCompressionStarted(initialRequest) return True @@ -1109,15 +1115,15 @@ if initialRequest is None: return False - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Success + initialRequest['RequestStatus'] |= consts.RequestStatus.Success self._finalizeRequest(msg, initialRequest, self.events.PluginInfo) return True elif msg.name == consts.Message.FCPPluginReply: if initialRequest is None: return False - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Success - initialRequest['FcPluginReply'] = msg + initialRequest['RequestStatus'] |= consts.RequestStatus.Success + initialRequest['PluginReply'] = msg self._finalizeRequest(msg, initialRequest, self.events.PluginMessage) return True @@ -1144,13 +1150,13 @@ insertURI = key.stripKey(msg['InsertURI']) requestURI = key.stripKey(msg['RequestURI']) - if initialRequest['FcRequestType'] == consts.RequestType.GenerateUSKKeypair: + if initialRequest['RequestType'] == consts.RequestType.GenerateUSKKeypair: insertURI = insertURI.replace(consts.KeyType.SSK, consts.KeyType.USK, 1) requestURI = requestURI.replace(consts.KeyType.SSK, consts.KeyType.USK, 1) - initialRequest['FcPrivateKey'] = insertURI - initialRequest['FcPublicKey'] = requestURI - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Success + initialRequest['PrivateKey'] = insertURI + initialRequest['PublicKey'] = requestURI + initialRequest['RequestStatus'] |= consts.RequestStatus.Success self._finalizeRequest(msg, initialRequest, self.events.KeypairGenerated) return True @@ -1216,7 +1222,7 @@ # check if we have running requests. Assert False haveRunningRequests = False for request in self._requests.values(): - if not request['FcRequestStatus'] & consts.RequestStatus.Completed: + if not request['RequestStatus'] & consts.RequestStatus.Completed: haveRunningRequests = True break @@ -1562,7 +1568,7 @@ DontPoll=dontPoll, ) self._registerRequest(msg, consts.RequestType.SubscribeUSK) - msg['FcRequestStatus'] |= consts.RequestStatus.Completed + msg['RequestStatus'] |= consts.RequestStatus.Completed self.sendMessageEx(msg) return msg['Identifier'] @@ -1594,7 +1600,7 @@ to this method @note: to upload multiple items at once pass a dict for each item containig the following members: - - FcRequestType: L{consts.RequestType.PutData}, L{consts.RequestType.PutFile} or L{consts.RequestType.PutRedirect} + - RequestType: L{consts.RequestType.PutData}, L{consts.RequestType.PutFile} or L{consts.RequestType.PutRedirect} - Data: if requestType is L{consts.RequestType.PutData}, data to upload - Filename: if requestType is L{consts.RequestType.PutFile}, filepath of the file to upload - TargetURI: if requestType is L{consts.RequestType.PutRedirect}, uri to redirect to @@ -1658,8 +1664,7 @@ data = '' for n, item in enumerate(items): - - requestType = item.get('FcRequestType', None) + requestType = item.get('RequestType', None) if requestType is None: raise ValueError('No request type specified for item: %s' % n) uploadFrom = uploadTypeMapping.get(requestType, None) @@ -1674,7 +1679,7 @@ allowedParams = dict(paramMapping[requestType]) msg.params['Files.%s.UploadFrom' % n] = uploadFrom for param, value in item.items(): - if param.startswith('Fc'): + if param == 'RequestType': continue if param in allowedParams: @@ -2169,7 +2174,7 @@ Fcp does not provide means to do so. """ initialRequest = self._requests[requestIdentifier] - if not initialRequest['FcRequestType'] & (consts.RequestType.MaskGet | consts.RequestType.MaskPut): + if not initialRequest['RequestType'] & (consts.RequestType.MaskGet | consts.RequestType.MaskPut): raise ValueError('Can not modify request: %s' % initialRequest.name) #FIX: [0002083] @@ -2180,11 +2185,11 @@ # raise ValueError('Can not modify priority of requests with Persistence=connection') if persistentUserData is not None: - initialRequest['FcPersistentUserData'] = persistentUserData + initialRequest['PersistentUserData'] = persistentUserData initialRequest['ClientToken'] = fcparams.messageToParams(initialRequest) modified[consts.RequestModified.PersistentUserData] = None - initialRequest['FcModified'] = modified + initialRequest['Modified'] = modified self.events.RequestModified(initialRequest) return @@ -2194,7 +2199,7 @@ Global=False, ) if persistentUserData is not None: - initialRequest['FcPersistentUserData'] = persistentUserData + initialRequest['PersistentUserData'] = persistentUserData msg['ClientToken'] = fcparams.messageToParams(initialRequest) if priorityClass is not None: msg['PriorityClass'] = priorityClass @@ -2207,8 +2212,8 @@ @param requestIdentifier: (str) identifier of the request to remove """ initialRequest = self._requests[requestIdentifier] - initialRequest['FcRequestStatus'] |= consts.RequestStatus.Removed | consts.RequestStatus.Completed - if initialRequest['FcRequestType'] & (consts.RequestType.MaskGet | consts.RequestType.MaskPut): + initialRequest['RequestStatus'] |= consts.RequestStatus.Removed | consts.RequestStatus.Completed + if initialRequest['RequestType'] & (consts.RequestType.MaskGet | consts.RequestType.MaskPut): # remove Persistence.Connection emidiately # ..make up a PersistentRequestRemoved message for this case @@ -2236,18 +2241,18 @@ request, it will be removed. The new request will have FcInitTime reset and FcUserData amd FcPersistentUserData taken over from the old request - @note: for SSK and USK puts, the private key is taken from request['FcPrivateKey']. Adjust private (and public + @note: for SSK and USK puts, the private key is taken from request['PrivateKey']. Adjust private (and public key) if necessary @todo: reset init time or not? Currently it is not reset. """ - requestType = request.get('FcRequestType', consts.RequestType.Null) + requestType = request.get('RequestType', consts.RequestType.Null) if not requestType & (consts.RequestType.MaskGet | consts.RequestType.MaskPut): raise ValueError('Can not resend request: %s' % requestMessage.name) # we don't know what UserData may be, so back it up before copying oldIdentifier = request['Identifier'] - oldUserData, request['FcUserData'] = request['FcUserData'], None + oldUserData, request['UserData'] = request['UserData'], None newRequest = copy.deepcopy(request) # reset key if necessary @@ -2259,25 +2264,25 @@ if requestKey.KeyType == consts.KeyType.CHK: newRequest['URI'] = consts.KeyType.CHK elif requestKey.KeyType == consts.KeyType.SSK: - newRequest['URI'] = request['FcPrivateKey'] + newRequest['URI'] = request['PrivateKey'] if requestKey.filename: newRequest['URI'] += '/' + requestKey.filename elif requestKey.KeyType == consts.KeyType.USK: - newRequest['URI'] = request['FcPrivateKey'] + newRequest['URI'] = request['PrivateKey'] if requestKey.filename: newRequest['URI'] += '/' + requestKey.filename self._registerRequest( newRequest, requestType, - filenameCollision=newRequest['FcFilenameCollision'] & consts.FilenameCollision.MaskHandle, + filenameCollision=newRequest['FilenameCollision'] & consts.FilenameCollision.MaskHandle, #initTime=time.time(), - persistentUserData=newRequest['FcPersistentUserData'], + persistentUserData=newRequest['PersistentUserData'], userData=oldUserData, ) if oldIdentifier in self._requests: - request['FcUserData'] = oldUserData + request['UserData'] = oldUserData self.removeRequest(request['Identifier']) self.sendMessageEx(newRequest) 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-06 18:25:28
|
Revision: 327 http://fclient.svn.sourceforge.net/fclient/?rev=327&view=rev Author: jurner Date: 2008-03-06 10:25:35 -0800 (Thu, 06 Mar 2008) Log Message: ----------- adjust to iohandler changes Modified Paths: -------------- trunk/sandbox/fcp2/test_fcp/dummy_io.py Modified: trunk/sandbox/fcp2/test_fcp/dummy_io.py =================================================================== --- trunk/sandbox/fcp2/test_fcp/dummy_io.py 2008-03-06 18:25:06 UTC (rev 326) +++ trunk/sandbox/fcp2/test_fcp/dummy_io.py 2008-03-06 18:25:35 UTC (rev 327) @@ -20,7 +20,7 @@ #******************************************************************** # #******************************************************************** -class DummyIO(iohandler.IOObject): +class DummyIO(iohandler.IOObjectBase): def __init__(self, ): self.readBuffer = '' # buffer client reads from 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:05
|
Revision: 326 http://fclient.svn.sourceforge.net/fclient/?rev=326&view=rev Author: jurner Date: 2008-03-06 10:25:06 -0800 (Thu, 06 Mar 2008) Log Message: ----------- added docs and a bit of this and that Modified Paths: -------------- trunk/sandbox/fcp2/iohandler.py Modified: trunk/sandbox/fcp2/iohandler.py =================================================================== --- trunk/sandbox/fcp2/iohandler.py 2008-03-06 17:45:43 UTC (rev 325) +++ trunk/sandbox/fcp2/iohandler.py 2008-03-06 18:25:06 UTC (rev 326) @@ -43,47 +43,94 @@ """Exception raised when the io connection is closed""" -class IOObject(object): +class IOObjectBase(object): + """Base class for io objects + + @cvar Timeout: (int) timeout for io operations + @cvar BufferSize: (int) buffer size for io operations (must be> 0) + + @note: implement this class to read / write messages from any device via L{IOHandler} + """ Timeout = 0 BufferSize = 4096 - def __init__(self, ): - pass + def __init__(self, **kwargs): + """ + @param kwargs: any additional keyword arguments passed to L{IOHandler.connect} + """ def connect(self, **kwargs): + """Should connect to the io device + + @return: always None + @raise L{IOConnectFailed}: in case something goes wrong + """ raise IOConnectFailed('Failed') def read(self, n): + """Should read n bytes from the device + + @return: always None + @raise L{IOBroken}: in case something goes wrong + @raise L{IOTimeout}: if the read operation times out + """ raise IOBroken('Broken') def write(self, bytes): + """Should write bytes to the device + + @return: always None + @raise L{IOBroken}: in case something goes wrong + """ raise IOBroken('Broken') def close(self): + """Should close the io device + + @return: always None + @raise L{IOClosed}: if the device is already closed + """ raise IOClosed('Closed') def isOpen(self): + """Should check if the device is open + + @return: (bool) True if so, False otherwise + """ return False def setTimeout(self, n): + """Should set the timeout for io operations + + @return: always None + """ pass #***************************************************************************** # #***************************************************************************** -class SocketIO(IOObject): +class SocketIO(IOObjectBase): + """Handles message io over socket + """ + Timeout = 0.1 BufferSize = 4096 def __init__(self): self.socket = None - def connect(self, **kwargs): + def connect(self, host=None, port=None): + """Conects to socket + + @param host: (str) host to connect to + @param port: (int) port to use + """ + if self.isOpen(): self.close() self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: - self.socket.connect((kwargs['host'], kwargs['port'])) + self.socket.connect((host, port)) except socket.error, details: raise IOConnectFailed(details) @@ -123,25 +170,43 @@ # #***************************************************************************** class IOHandler(object): + """Handles message io + """ TerminatorEndMessage = '\nEndMessage\n' TerminatorData = '\nData\n' def __init__(self, ioPrototype=SocketIO): + """ + @paran ioPrototype: (L{IOObjectBase}) derrived class to handle message io + """ + self._ioPrototype = ioPrototype - self._log = logging.getLogger(consts.LoggerNames.ClientIOHandler) + self._log = logging.getLogger(consts.LoggerNames.IOHandler) self._receiveBuffer = '' self.io = None def connect(self, duration=20, timeout=0.5, **kwargs): + """Connect to the io device + + @return: (bool) True, if a connection could be established, False otherwise + @note: for details see L{iterConnect} + """ for result in self.iterConnect(duration=duration, timeout=timeout, **kwargs): pass return result def iterConnect(self, duration=20, timeout=0.5, **kwargs): + """Iterator to connect to the io device + @param duration: (int) how long should the handler try to connect to the device? + @param timeout: (int) how long dhould the handler wait in between connection attempts + @param kwargs: keyword arguments to pass to the contructor of the io object + + @return: (bool) True, if a connection could be established, False otherwise for the next attempt in turn + """ if not duration >= 0: raise ValueError('duration must be >= 0') if not timeout >= 0: @@ -175,6 +240,7 @@ def close(self): + """Closes the handler""" self._log.debug(consts.LogMessages.Closing) self._receiveBuffer = '' if self.io is not None and self.io.isOpen(): @@ -183,6 +249,9 @@ def isOpen(self): + """Checks if the io connection is open + @return: (bool) True if so, False otherwiese + """ if self.io is not None: return self.io.isOpen() return False @@ -209,7 +278,7 @@ def readMessage(self): - """Reads the next a message from io + """Reads the next message from io device @return: (Message) next message from the socket @note: if something goes wrong the according exception is raised @@ -301,12 +370,7 @@ @param data: data to atatch to the message @param params: {para-name: param-calue, ...} of parameters to pass along with the message (see freenet protocol) - @raise SocketError: if the socket connection to the node dies unexpectedly - If an error handler is passed to the client it is called emidiately before the error - is raised. - - @note: you can use this method to send a message to the node, bypassing all - track keeping methods of the client + @raise L{IOBroken}: if the connection to the io dies unexpectedly """ return self.sendMessageEx(message.Message(name, data=data, **params)) @@ -315,12 +379,7 @@ """Sends a message to freenet @param msg: (Message) message to send @return: Message - @raise SocketError: if the socket connection to the node dies unexpectedly. - If an error handler is passed to the client it is called emidiately before the error - is raised. - - @note: you can use this method to send a message to the node, bypassing all - track keeping methods of the client + @raise L{IOBroken}: if the connection to the io dies unexpectedly """ self._log.debug(consts.LogMessages.Sending + msg.pprint()) try: @@ -332,13 +391,16 @@ def setDebugVerbosity(self, debugVerbosity): + """Adjusts the debug verbosity. See L{consts.DebugVerbosity} + """ self._log.setLevel(debugVerbosity) def setIOPrototype(self, ioObject): + """Sets the io prototype to be used by the handler + + @note: if there is a current open connection, the connection is closed in the call """ - @note: if the connection is open the connection is closed in the call - """ if self.isOpen(): self.close() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2008-03-06 17:45:38
|
Revision: 325 http://fclient.svn.sourceforge.net/fclient/?rev=325&view=rev Author: jurner Date: 2008-03-06 09:45:43 -0800 (Thu, 06 Mar 2008) Log Message: ----------- fixed import Modified Paths: -------------- trunk/sandbox/fcp2/test_fcp/test_message.py Modified: trunk/sandbox/fcp2/test_fcp/test_message.py =================================================================== --- trunk/sandbox/fcp2/test_fcp/test_message.py 2008-03-06 17:45:18 UTC (rev 324) +++ trunk/sandbox/fcp2/test_fcp/test_message.py 2008-03-06 17:45:43 UTC (rev 325) @@ -20,9 +20,6 @@ del hack #<-- rel import hack - - -from dummy_socket import DummySocket #**************************************************************************************** # #**************************************************************************************** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2008-03-06 17:45:11
|
Revision: 324 http://fclient.svn.sourceforge.net/fclient/?rev=324&view=rev Author: jurner Date: 2008-03-06 09:45:18 -0800 (Thu, 06 Mar 2008) Log Message: ----------- fixed import Modified Paths: -------------- trunk/sandbox/fcp2/test_fcp/test_config.py Modified: trunk/sandbox/fcp2/test_fcp/test_config.py =================================================================== --- trunk/sandbox/fcp2/test_fcp/test_config.py 2008-03-06 17:44:51 UTC (rev 323) +++ trunk/sandbox/fcp2/test_fcp/test_config.py 2008-03-06 17:45:18 UTC (rev 324) @@ -22,8 +22,6 @@ del hack #<-- rel import hack - -from dummy_socket import DummySocket #**************************************************************************************** # #**************************************************************************************** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2008-03-06 17:44:50
|
Revision: 323 http://fclient.svn.sourceforge.net/fclient/?rev=323&view=rev Author: jurner Date: 2008-03-06 09:44:51 -0800 (Thu, 06 Mar 2008) Log Message: ----------- new logger name for iohandler Modified Paths: -------------- trunk/sandbox/fcp2/consts.py Modified: trunk/sandbox/fcp2/consts.py =================================================================== --- trunk/sandbox/fcp2/consts.py 2008-03-06 17:44:00 UTC (rev 322) +++ trunk/sandbox/fcp2/consts.py 2008-03-06 17:44:51 UTC (rev 323) @@ -248,18 +248,14 @@ @cvar Config: logs config related information """ Fcp = 'Fcp' + Client = Fcp + '.Client' ClientEvents = Client + '.Events' - ClientMessages = Client + '.Messages' ClientRuntime = Client + '.Runtime' Config = Fcp + '.Config' - ClientIOHandler = Client + '.IOHandler' + IOHandler = Fcp + '.IOHandler' - - - - class LogMessages: """Strings used for log infos""" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2008-03-06 17:43:58
|
Revision: 322 http://fclient.svn.sourceforge.net/fclient/?rev=322&view=rev Author: jurner Date: 2008-03-06 09:44:00 -0800 (Thu, 06 Mar 2008) Log Message: ----------- runtime loggeris nolonger needed Modified Paths: -------------- trunk/sandbox/fcp2/client.py Modified: trunk/sandbox/fcp2/client.py =================================================================== --- trunk/sandbox/fcp2/client.py 2008-03-06 12:12:21 UTC (rev 321) +++ trunk/sandbox/fcp2/client.py 2008-03-06 17:44:00 UTC (rev 322) @@ -264,7 +264,6 @@ self.events = events.Events() self._loggers = { 'Event': logging.getLogger(consts.LoggerNames.ClientEvents), - 'Message': logging.getLogger(consts.LoggerNames.ClientMessages), 'Runtime': logging.getLogger(consts.LoggerNames.ClientRuntime), } self._nodeHelloMessage = None @@ -524,8 +523,7 @@ disconnectReason = consts.DisconnectReason.UnkownNodeHello disconnectParam = msg break - - + if disconnectReason is None: disconnectReason=consts.DisconnectReason.ConnectingFailed disconnectMsg = message.Message( This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2008-03-06 12:12:15
|
Revision: 321 http://fclient.svn.sourceforge.net/fclient/?rev=321&view=rev Author: jurner Date: 2008-03-06 04:12:21 -0800 (Thu, 06 Mar 2008) Log Message: ----------- removed test code Modified Paths: -------------- trunk/sandbox/fcp2/iohandler.py Modified: trunk/sandbox/fcp2/iohandler.py =================================================================== --- trunk/sandbox/fcp2/iohandler.py 2008-03-06 12:09:53 UTC (rev 320) +++ trunk/sandbox/fcp2/iohandler.py 2008-03-06 12:12:21 UTC (rev 321) @@ -68,7 +68,6 @@ def setTimeout(self, n): pass - #***************************************************************************** # #***************************************************************************** @@ -294,9 +293,8 @@ self._log.debug(consts.LogMessages.Received + msg.pprint()) return msg + - - def sendMessage(self, name, data=None, **params): """Sends a message to freenet @param name: name of the message to send @@ -353,33 +351,5 @@ # #*********************************************************************************************** if __name__ == '__main__': - - c = IOHandler() - def cb(event, *params): - print event - #print event == c.events.MessageReceived - #print event.msg - - - #for e in c.events: - # e += cb - - if c.connect(duration=1, host='127.0.0.1', port=9481): - - - c.sendMessageEx(message.Message(consts.Message.ClientHello, Name='foo', ExpectedVersion="2,0")) - msg = c.readMessage() - - - #print 222, c.nextMessage() - - c.close() - - - - - - - - + pass \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2008-03-06 12:09:50
|
Revision: 320 http://fclient.svn.sourceforge.net/fclient/?rev=320&view=rev Author: jurner Date: 2008-03-06 04:09:53 -0800 (Thu, 06 Mar 2008) Log Message: ----------- removed dummy socket. Use io now Modified Paths: -------------- trunk/sandbox/fcp2/test_fcp/dummy_io.py trunk/sandbox/fcp2/test_fcp/test_client.py Modified: trunk/sandbox/fcp2/test_fcp/dummy_io.py =================================================================== --- trunk/sandbox/fcp2/test_fcp/dummy_io.py 2008-03-06 12:08:50 UTC (rev 319) +++ trunk/sandbox/fcp2/test_fcp/dummy_io.py 2008-03-06 12:09:53 UTC (rev 320) @@ -20,7 +20,7 @@ #******************************************************************** # #******************************************************************** -class TestIO(iohandler.IOObject): +class DummyIO(iohandler.IOObject): def __init__(self, ): self.readBuffer = '' # buffer client reads from Modified: trunk/sandbox/fcp2/test_fcp/test_client.py =================================================================== --- trunk/sandbox/fcp2/test_fcp/test_client.py 2008-03-06 12:08:50 UTC (rev 319) +++ trunk/sandbox/fcp2/test_fcp/test_client.py 2008-03-06 12:09:53 UTC (rev 320) @@ -26,7 +26,7 @@ del hack #<-- rel import hack -from dummy_socket import TestIO +from dummy_io import DummyIO #*********************************************************************************** # #*********************************************************************************** @@ -45,7 +45,7 @@ debugVerbosity=Client.consts.DebugVerbosity.Quiet ) - fcpClient.ioHandler.setIOPrototype(TestIO) + fcpClient.ioHandler.setIOPrototype(DummyIO) #fcpClient.connect() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2008-03-06 12:08:43
|
Revision: 319 http://fclient.svn.sourceforge.net/fclient/?rev=319&view=rev Author: jurner Date: 2008-03-06 04:08:50 -0800 (Thu, 06 Mar 2008) Log Message: ----------- removed dummy socket. Use io now Added Paths: ----------- trunk/sandbox/fcp2/test_fcp/dummy_io.py Removed Paths: ------------- trunk/sandbox/fcp2/test_fcp/dummy_socket.py Copied: trunk/sandbox/fcp2/test_fcp/dummy_io.py (from rev 318, trunk/sandbox/fcp2/test_fcp/dummy_socket.py) =================================================================== --- trunk/sandbox/fcp2/test_fcp/dummy_io.py (rev 0) +++ trunk/sandbox/fcp2/test_fcp/dummy_io.py 2008-03-06 12:08:50 UTC (rev 319) @@ -0,0 +1,108 @@ +"""Dummy socket object for testing""" + +import os, sys + +#--> rel import hack +class _RelImportHack(object): + def __init__(self, n): + fpath = os.path.abspath(__file__) + for i in xrange(n): fpath = os.path.dirname(fpath) + sys.path.insert(0, fpath) + def __del__(self): sys.path.pop(0) +hack = _RelImportHack(3) + +from fcp2 import client +from fcp2.client import iohandler +from fcp2 import consts + +del hack +#<-- rel import hack +#******************************************************************** +# +#******************************************************************** +class TestIO(iohandler.IOObject): + + def __init__(self, ): + self.readBuffer = '' # buffer client reads from + self.writeBuffer = '' # buffer client writes to + + self._isOpen = False + self._isBroken = False + self._disallowConnect = False + self._reverseDirection = False + + def connect(self, **kwargs): + self._isOpen = True + + def read(self, n): + if self._isBroken: + raise iohandler.IOBroken('Broken') + if not self.isOpen(): + raise iohandler.IOClosed('Closed') + + if self._reverseDirection: + if not self.writeBuffer: + raise iohandler.IOTimeout('Timeout') + bytes, self.writeBuffer = self.writeBuffer[ :n], self.writeBuffer[n: ] + else: + if not self.readBuffer: + raise iohandler.IOTimeout('Timeout') + bytes, self.readBuffer = self.readBuffer[ :n], self.readBuffer[n: ] + return bytes + + def write(self, bytes): + if self._isBroken: + raise iohandler.IOBroken('Broken') + if not self.isOpen(): + raise iohandler.IOClosed('Closed') + self.writeBuffer += bytes + + def close(self): + self._isBroken = False + self._disallowConnect = False + self._reverseDirection = False + if self.isOpen(): + self._isOpen = False + self.readBuffer = '' + self.writeBuffer = '' + else: + raise iohandler.IOClosed('Closed') + + def isOpen(self): + return self._isOpen + + def setTimeout(self, n): + pass + + + ############################ + ## for testing... + + def setOpen(self, flag): + self._isOpen = flag + + def setBroken(self, flag): + self._isBroken = flag + + def setDissallowConnect(self, flag): + self.disallowConnect = flag + + def setReverseDirection(self, flag): + self._reverseDirection = flag + + + def sendResponseMessage(self, name, data=None, **params): + buf = [name, ] + for name, value in params.items(): + buf.append('%s=%s' % (name, value) ) + if data is None: + buf.append('EndMessage\n') + else: + buf.append('Data\n') + self.readBuffer += '\n'.join(buf) + if data: + assert 'DataLength' in params + assert params['DataLength'] == len(data) + self.readBuffer += data + + Deleted: trunk/sandbox/fcp2/test_fcp/dummy_socket.py =================================================================== --- trunk/sandbox/fcp2/test_fcp/dummy_socket.py 2008-03-06 12:05:53 UTC (rev 318) +++ trunk/sandbox/fcp2/test_fcp/dummy_socket.py 2008-03-06 12:08:50 UTC (rev 319) @@ -1,108 +0,0 @@ -"""Dummy socket object for testing""" - -import os, sys - -#--> rel import hack -class _RelImportHack(object): - def __init__(self, n): - fpath = os.path.abspath(__file__) - for i in xrange(n): fpath = os.path.dirname(fpath) - sys.path.insert(0, fpath) - def __del__(self): sys.path.pop(0) -hack = _RelImportHack(3) - -from fcp2 import client -from fcp2.client import iohandler -from fcp2 import consts - -del hack -#<-- rel import hack -#******************************************************************** -# -#******************************************************************** -class TestIO(iohandler.IOObject): - - def __init__(self, ): - self.readBuffer = '' # buffer client reads from - self.writeBuffer = '' # buffer client writes to - - self._isOpen = False - self._isBroken = False - self._disallowConnect = False - self._reverseDirection = False - - def connect(self, **kwargs): - self._isOpen = True - - def read(self, n): - if self._isBroken: - raise iohandler.IOBroken('Broken') - if not self.isOpen(): - raise iohandler.IOClosed('Closed') - - if self._reverseDirection: - if not self.writeBuffer: - raise iohandler.IOTimeout('Timeout') - bytes, self.writeBuffer = self.writeBuffer[ :n], self.writeBuffer[n: ] - else: - if not self.readBuffer: - raise iohandler.IOTimeout('Timeout') - bytes, self.readBuffer = self.readBuffer[ :n], self.readBuffer[n: ] - return bytes - - def write(self, bytes): - if self._isBroken: - raise iohandler.IOBroken('Broken') - if not self.isOpen(): - raise iohandler.IOClosed('Closed') - self.writeBuffer += bytes - - def close(self): - self._isBroken = False - self._disallowConnect = False - self._reverseDirection = False - if self.isOpen(): - self._isOpen = False - self.readBuffer = '' - self.writeBuffer = '' - else: - raise iohandler.IOClosed('Closed') - - def isOpen(self): - return self._isOpen - - def setTimeout(self, n): - pass - - - ############################ - ## for testing... - - def setOpen(self, flag): - self._isOpen = flag - - def setBroken(self, flag): - self._isBroken = flag - - def setDissallowConnect(self, flag): - self.disallowConnect = flag - - def setReverseDirection(self, flag): - self._reverseDirection = flag - - - def sendResponseMessage(self, name, data=None, **params): - buf = [name, ] - for name, value in params.items(): - buf.append('%s=%s' % (name, value) ) - if data is None: - buf.append('EndMessage\n') - else: - buf.append('Data\n') - self.readBuffer += '\n'.join(buf) - if data: - assert 'DataLength' in params - assert params['DataLength'] == len(data) - self.readBuffer += data - - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2008-03-06 12:05:47
|
Revision: 318 http://fclient.svn.sourceforge.net/fclient/?rev=318&view=rev Author: jurner Date: 2008-03-06 04:05:53 -0800 (Thu, 06 Mar 2008) Log Message: ----------- removed dummy socket. Use io now Modified Paths: -------------- trunk/sandbox/fcp2/test_fcp/dummy_socket.py Modified: trunk/sandbox/fcp2/test_fcp/dummy_socket.py =================================================================== --- trunk/sandbox/fcp2/test_fcp/dummy_socket.py 2008-03-06 12:05:35 UTC (rev 317) +++ trunk/sandbox/fcp2/test_fcp/dummy_socket.py 2008-03-06 12:05:53 UTC (rev 318) @@ -1,8 +1,5 @@ """Dummy socket object for testing""" -import socket - - import os, sys #--> rel import hack @@ -91,7 +88,6 @@ self.disallowConnect = flag def setReverseDirection(self, flag): - """""" self._reverseDirection = flag @@ -109,94 +105,4 @@ assert params['DataLength'] == len(data) self.readBuffer += data - - - - -#******************************************************************** -# -#******************************************************************** -class DummySocket(object): - """Dummy socket for testing""" - - def __init__(self, family=socket.AF_INET, type=socket.SOCK_STREAM): - - self.closed = False - self.error = False - self.timeout = 0 - self.bytesReceiver = None - - self.bytes = '' - self.responseBytes = '' - - def setBytes(self, bytes): - self.bytes = bytes - - def setResponse(self, bytes): - self.responseBytes += bytes - - def sendResponseMessage(self, name, data=None, **params): - buf = [name, ] - for name, value in params.items(): - buf.append('%s=%s' % (name, value) ) - if data is None: - buf.append('EndMessage\n') - else: - buf.append('Data\n') - self.responseBytes += '\n'.join(buf) - if data: - assert 'DataLength' in params - assert params['DataLength'] == len(data) - self.responseBytes += data - - - def setBytesReceiver(self, cb): - self.bytesReceiver = cb - - def setClosed(self, flag): - self.closed = flag - - def setError(self, flag): - self.error = flag - - def __call__(self, family=socket.AF_INET, type=socket.SOCK_STREAM): - self.bytes = '' - self.closed = False - self.error = False - return self - - - def connect(self, (host, port)): - if self.error: - raise socket.error(0, 'I am dead') - - def close(self): - self.closed = True - self.bytes = '' - - def recv(self, n): - if self.closed: - return '' - elif self.error: - raise socket.error(0, 'I am dead!') - self.responseBytes, bytes = self.responseBytes[n:], self.responseBytes[:n] - if bytes: - return bytes - raise socket.timeout(0) - - def sendall(self, bytes): - if self.closed: - raise socket.error(0, 'I am dead!') - self.bytes += bytes - if self.bytesReceiver is not None: - self.bytesReceiver(bytes) - - - def settimeout(self, n): - self.timeout = n - - - - - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2008-03-06 12:05:28
|
Revision: 317 http://fclient.svn.sourceforge.net/fclient/?rev=317&view=rev Author: jurner Date: 2008-03-06 04:05:35 -0800 (Thu, 06 Mar 2008) Log Message: ----------- reead, write methods have gone. Use iohandler Modified Paths: -------------- trunk/sandbox/fcp2/test_fcp/test_message.py Modified: trunk/sandbox/fcp2/test_fcp/test_message.py =================================================================== --- trunk/sandbox/fcp2/test_fcp/test_message.py 2008-03-06 12:05:25 UTC (rev 316) +++ trunk/sandbox/fcp2/test_fcp/test_message.py 2008-03-06 12:05:35 UTC (rev 317) @@ -28,85 +28,9 @@ #**************************************************************************************** class TestMessageObject(unittest.TestCase): + pass - def testFromSocket(self): - """Reads a simple message from socket""" - s = DummySocket() - s.setResponse('NodeHello\nfoo=bar\nEndMessage\n') - msg = Message.fromSocket(s) - - self.failUnless(msg.name == consts.Message.NodeHello) - self.failUnless(len(msg.params) == 1) - self.failUnless(msg.get('foo', None) == 'bar') - - - def testFromSocketClosed(self): - """Reads a message from a closed socket""" - s = DummySocket() - s.setBytes('NodeHello\nfoo=bar\nEndMessage\n') - s.setClosed(True) - msg = Message.fromSocket(s) - - self.failUnless(msg.name == consts.Message.ClientSocketDied) - self.failUnless(msg.get('Exception', None) == socket.error) - - - - def testFromSocketError(self): - """Reads a message from a socket that raises emidiately""" - s = DummySocket() - s.setResponse('NodeHello\nfoo=bar\nEndMessage\n') - s.setError(True) - msg = Message.fromSocket(s) - - self.failUnless(msg.name == consts.Message.ClientSocketDied) - self.failUnless(msg.get('Exception', None) == socket.error) - - def testFromSocketTimeout(self): - """Reads a message from a socket with no bytes available""" - s = DummySocket() - msg = Message.fromSocket(s) - - self.failUnless(msg.name == consts.Message.ClientSocketTimeout) - - - def testDataFromSocket(self): - """Reads a message with associated data member from a socket""" - s = DummySocket() - s.setResponse('AllData\nDataLength=8\nData\n\nABC\nDEF') - msg = Message.fromSocket(s) - - self.failUnless(msg.name == consts.Message.AllData) - self.failUnless(len(msg.params) == 1) - self.failUnless(msg.get('DataLength', None) == '8') - self.failUnless(msg.data == '\nABC\nDEF') - - - def testSend(self): - """Sends a simple message""" - s = DummySocket() - msg = Message( - consts.Message.ClientHello, - foo='bar' - ) - msg.send(s) - self.failUnless(s.bytes == 'ClientHello\nfoo=bar\nEndMessage\n') - - - def testSendData(self): - """Sends a message containing a data member""" - s = DummySocket('') - msg = Message( - consts.Message.AllData, - DataLength='5', - data='ABCDE' - ) - msg.send(s) - self.failUnless(s.bytes == 'AllData\nDataLength=5\nData\nABCDE') - - - #********************************************************************************* # #********************************************************************************* This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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 12:01:04
|
Revision: 315 http://fclient.svn.sourceforge.net/fclient/?rev=315&view=rev Author: jurner Date: 2008-03-06 04:01:06 -0800 (Thu, 06 Mar 2008) Log Message: ----------- just an intermediate, new TestIO object Modified Paths: -------------- trunk/sandbox/fcp2/test_fcp/dummy_socket.py Modified: trunk/sandbox/fcp2/test_fcp/dummy_socket.py =================================================================== --- trunk/sandbox/fcp2/test_fcp/dummy_socket.py 2008-03-06 12:00:08 UTC (rev 314) +++ trunk/sandbox/fcp2/test_fcp/dummy_socket.py 2008-03-06 12:01:06 UTC (rev 315) @@ -1,9 +1,122 @@ """Dummy socket object for testing""" import socket + + +import os, sys + +#--> rel import hack +class _RelImportHack(object): + def __init__(self, n): + fpath = os.path.abspath(__file__) + for i in xrange(n): fpath = os.path.dirname(fpath) + sys.path.insert(0, fpath) + def __del__(self): sys.path.pop(0) +hack = _RelImportHack(3) + +from fcp2 import client +from fcp2.client import iohandler +from fcp2 import consts + +del hack +#<-- rel import hack #******************************************************************** # #******************************************************************** +class TestIO(iohandler.IOObject): + + def __init__(self, ): + self.readBuffer = '' # buffer client reads from + self.writeBuffer = '' # buffer client writes to + + self._isOpen = False + self._isBroken = False + self._disallowConnect = False + self._reverseDirection = False + + def connect(self, **kwargs): + self._isOpen = True + + def read(self, n): + if self._isBroken: + raise iohandler.IOBroken('Broken') + if not self.isOpen(): + raise iohandler.IOClosed('Closed') + + if self._reverseDirection: + if not self.writeBuffer: + raise iohandler.IOTimeout('Timeout') + bytes, self.writeBuffer = self.writeBuffer[ :n], self.writeBuffer[n: ] + else: + if not self.readBuffer: + raise iohandler.IOTimeout('Timeout') + bytes, self.readBuffer = self.readBuffer[ :n], self.readBuffer[n: ] + return bytes + + def write(self, bytes): + if self._isBroken: + raise iohandler.IOBroken('Broken') + if not self.isOpen(): + raise iohandler.IOClosed('Closed') + self.writeBuffer += bytes + + def close(self): + self._isBroken = False + self._disallowConnect = False + self._reverseDirection = False + if self.isOpen(): + self._isOpen = False + self.readBuffer = '' + self.writeBuffer = '' + else: + raise iohandler.IOClosed('Closed') + + def isOpen(self): + return self._isOpen + + def setTimeout(self, n): + pass + + + ############################ + ## for testing... + + def setOpen(self, flag): + self._isOpen = flag + + def setBroken(self, flag): + self._isBroken = flag + + def setDissallowConnect(self, flag): + self.disallowConnect = flag + + def setReverseDirection(self, flag): + """""" + self._reverseDirection = flag + + + def sendResponseMessage(self, name, data=None, **params): + buf = [name, ] + for name, value in params.items(): + buf.append('%s=%s' % (name, value) ) + if data is None: + buf.append('EndMessage\n') + else: + buf.append('Data\n') + self.readBuffer += '\n'.join(buf) + if data: + assert 'DataLength' in params + assert params['DataLength'] == len(data) + self.readBuffer += data + + + + + + +#******************************************************************** +# +#******************************************************************** class DummySocket(object): """Dummy socket for testing""" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2008-03-06 12:00:07
|
Revision: 314 http://fclient.svn.sourceforge.net/fclient/?rev=314&view=rev Author: jurner Date: 2008-03-06 04:00:08 -0800 (Thu, 06 Mar 2008) Log Message: ----------- reworked test to use new iohandler Modified Paths: -------------- trunk/sandbox/fcp2/test_fcp/test_client.py Modified: trunk/sandbox/fcp2/test_fcp/test_client.py =================================================================== --- trunk/sandbox/fcp2/test_fcp/test_client.py 2008-03-06 11:59:34 UTC (rev 313) +++ trunk/sandbox/fcp2/test_fcp/test_client.py 2008-03-06 12:00:08 UTC (rev 314) @@ -21,113 +21,32 @@ from fcp2.client import Client from fcp2 import consts +from fcp2 import iohandler del hack #<-- rel import hack -from dummy_socket import DummySocket +from dummy_socket import TestIO #*********************************************************************************** # #*********************************************************************************** DIR = os.path.dirname(os.path.abspath(__file__)) -TestAgainstNode = 0 # don't know how to test against node. Do not touch this! +##TestAgainstNode = 0 # don't know how to test against node. Do not touch this! -#*********************************************************************************** -# -#*********************************************************************************** -class MyFcpClient(Client): - """Customized client recording all messages it sends - """ - def __init__(self, *args, **kwargs): - Client.__init__(self, *args, **kwargs) - self.test_messagesSend = [] - - def sendMessageEx(self, msg): - Client.sendMessageEx(self, msg) - # deepcopy here, we need exact state - msg = copy.deepcopy(msg) - self.test_messagesSend.append(msg) - def clearMessagesSend(self): - self.test_messagesSend = [] - #*********************************************************************************** # -#*********************************************************************************** -class DummySocketModule(object): - """Dummy socket module we inject into the client module for testing - - """ - AF_INET = socket.AF_INET - SOCK_STREAM = socket.SOCK_STREAM - error = socket.error - socket = DummySocket() - - def __init__(self): - self.lastSocket = None - - def __getattribute__(self, name): - obj = object.__getattribute__(self, name) - if name == 'socket': - self.lastSocket = obj - return obj - #*********************************************************************************** -# -#*********************************************************************************** -class MySocketFactory(object): - """Real and alive socket. Can be used to test against the running node. Not used currently - - Usage:: - - DummySocketModule.socket = MySocketFactory() - - """ - def __init__(self, *args, **kwargs): - self.socket = None - self.closed = False - - def __call__(self, *args, **kwargs): - self.socket = socket.socket(*args, **kwargs) - return self - - def sendResponseMessage(self, *args, **kwargs): - pass - - def connect(self, *args, **kwargs): - return self.socket.connect(*args, **kwargs) - - def sendall(self, bytes): - return self.socket.sendall(bytes) - - def settimeout(self, n): - return self.socket.settimeout(n) - - def recv(self, n): - return self.socket.recv(n) - - def close(self): - self.closed = True - result = self.socket.close() - self.socket = None - return result - -#*********************************************************************************** -# -#*********************************************************************************** class BaseTestClient(unittest.TestCase): """Base class for all tests""" - if TestAgainstNode: - DummySocketModule.socket = MySocketFactory() - fcpClient = MyFcpClient( + fcpClient = Client( #debugVerbosity=Client.consts.DebugVerbosity.Debug debugVerbosity=Client.consts.DebugVerbosity.Quiet ) - # inject our customized socket module - socketModule = DummySocketModule() - client.socket = socketModule + fcpClient.ioHandler.setIOPrototype(TestIO) + #fcpClient.connect() def __init__(self, *args, **kwargs): @@ -147,14 +66,17 @@ """Clears all messages send, requests registered and events triggered so far""" # clean up the mess we eventaully left behinf self.events = [] - self.fcpClient.clearMessagesSend() + if self.ioOpen(): + self.fcpClient.ioHandler.io.readBuffer = '' + self.fcpClient.ioHandler.io.writeBuffer = '' self.fcpClient._requests = {} + def connectClient(self): """Connects to the client""" for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=20, timeout=0.1)): - if n == 0: + if n == 1: self.assertHasNextMessage( consts.Message.ClientHello ) @@ -261,11 +183,11 @@ @return: message if a message was received or None """ + msg = self.getNextMessage() if messageName is None: - self.failIf(self.fcpClient.test_messagesSend) + self.failUnless(msg is None) else: - self.failUnless(self.fcpClient.test_messagesSend) - msg = self.fcpClient.test_messagesSend.pop(0) + self.failIf(msg is None) self.assertEqual(msg.name, messageName) if param1 is not None: param1, value1 = param1 @@ -334,11 +256,33 @@ def sendResponseMessage(self, messageName, data=None, callNext=True, **params): """Posts a message to the client""" - self.socketModule.lastSocket.sendResponseMessage(messageName, data=data, **params) - if not TestAgainstNode: - if callNext: - self.fcpClient.next() + msg = Client.message.Message(messageName, data=data, **params) + self.fcpClient.ioHandler.io.readBuffer += msg.toString() + if callNext: + self.fcpClient.next() + + def getNextMessage(self): + # cheat a bit to get iohandler to read a message from writeBuffer + if self.ioOpen(): + self.fcpClient.ioHandler.io.setReverseDirection(True) + try: + msg = self.fcpClient.ioHandler.readMessage() + except iohandler.IOTimeout: + return None + finally: + self.fcpClient.ioHandler.io.setReverseDirection(False) + return msg + + + def ioOpen(self): + return self.fcpClient.ioHandler.isOpen() + + + def getIO(self): + return self.fcpClient.ioHandler.io + + def setUp(self): # conect all events self.events = [] # events received from the client @@ -371,17 +315,12 @@ self.failUnless(self.socket.closed) - def XXXtestConnect(self): nodeHello = self.fcpClient.connect(duration=10, timeout=0.1) - self.failIf(nodeHello is None) - return + self.failUnless(nodeHello is None) + #return - - nodeHello = self.fcpClient.connect(duration=0, timeout=0) - self.failIf(nodeHello is not None) - - self.socketModule.lastSocket.sendResponseMessage( + self.sendResponseMessage( 'NodeHello', FCPVersion='2.0', Node='Fred', @@ -395,37 +334,33 @@ NodeLanguage='en', ) nodeHello = self.fcpClient.connect(duration=10, timeout=0.1) - self.failIf(nodeHello is None) + print nodeHello + #self.failIf(nodeHello is None) def test_0_IterIterConnect_RFailure(self): - # we cannot test against node here - if not TestAgainstNode: - - for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=1, timeout=0.1)): - if n == 0: - self.assertHasNextMessage( - consts.Message.ClientHello - ) - - # check events the client triggered - self.assertHasNextEvent( - self.fcpClient.events.ClientDisconnected, - consts.Message.ClientDisconnected, - ('DisconnectReason', consts.DisconnectReason.ConnectingFailed), + for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=1, timeout=0.1)): + if n == 1: + self.assertHasNextMessage( + consts.Message.ClientHello ) - - self.assertHasNextEvent(None) - self.assertHasNextMessage(None) - self.failUnless(self.socketModule.lastSocket.closed) - - #self.fcpClient.connect(duration=20, timeout=0.1) - + # check events the client triggered + self.assertHasNextEvent( + self.fcpClient.events.ClientDisconnected, + consts.Message.ClientDisconnected, + ('DisconnectReason', consts.DisconnectReason.ConnectingFailed), + ) + + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + self.failIf(self.ioOpen()) + + def test_1_IterConnect_Success(self): - for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=20, timeout=0.1)): - if n == 0: + for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=1, timeout=0.1)): + if n == 1: self.assertHasNextMessage( consts.Message.ClientHello ) @@ -460,7 +395,7 @@ class TestDisconnectReason(BaseTestClient): def test_1000_DuplicateClientName(self): - + self.sendResponseMessage('CloseConnectionDuplicateClientName') msg = self.assertHasNextEvent( self.fcpClient.events.ClientDisconnected, @@ -470,8 +405,9 @@ self.failUnless('Param' in msg.params) self.assertEqual(msg['Param'], None) - self.failUnless(self.socketModule.lastSocket.closed) + self.failIf(self.ioOpen()) self.assertHasNextEvent(None) + #print self.fcpClient.test_messagesSend[0].name self.assertHasNextMessage(None) self.connectClient() @@ -479,9 +415,9 @@ def test_1001_SocketDied_Receive(self): - self.socketModule.lastSocket.close() - self.fcpClient.next() - + self.getIO().setBroken(True) + self.assertRaises(iohandler.IOBroken, self.fcpClient.next) + # check if ClientDisconnected events has been triggered msg = self.assertHasNextEvent( self.fcpClient.events.ClientDisconnected, @@ -490,21 +426,21 @@ #('Param', ClientSocketDiedMessage) # can not test here ) self.failUnless('Param' in msg.params) - self.assertEqual(msg['Param'].name, consts.Message.ClientSocketDied) + # Param is now details of IOBroken exception, no idea how to test + #self.assertEqual(msg['Param'].name, consts.Message.ClientSocketDied) - self.failUnless(self.socketModule.lastSocket.closed) + self.failIf(self.ioOpen()) self.assertHasNextEvent(None) self.assertHasNextMessage(None) - self.connectClient() def test_1002_SocketDied_Send(self): - self.socketModule.lastSocket.close() - + self.getIO().setBroken(True) + # send a test message - self.assertRaises(socket.error, self.fcpClient.sendMessage, 'test' ) + self.assertRaises(iohandler.IOBroken, self.fcpClient.sendMessage, 'test' ) # check if ClientDisconnected events has been triggered msg = self.assertHasNextEvent( @@ -514,9 +450,10 @@ #('Param', ClientSocketDiedMessage) # can not test here ) self.failUnless('Param' in msg.params) - self.assertEqual(msg['Param'].name, consts.Message.ClientSocketDied) + # Param is now details of IOBroken exception, no idea how to test + #self.assertEqual(msg['Param'].name, consts.Message.ClientSocketDied) - self.failUnless(self.socketModule.lastSocket.closed) + self.failIf(self.ioOpen()) self.assertHasNextEvent(None) self.assertHasNextMessage(None) self.connectClient() @@ -542,7 +479,7 @@ self.failUnless('Param' in msg.params) self.assertEqual(msg['Param'], None) - self.failUnless(self.socketModule.lastSocket.closed) + self.failIf(self.ioOpen()) self.assertHasNextEvent(None) self.assertHasNextMessage(None) self.connectClient() @@ -551,33 +488,27 @@ def test_1004_VersionMismatch(self): - # cheat a bit and reconnect client - enum = self.fcpClient.iterConnect(duration=0.2, timeout=0.1) - msg = enum.next() - self.failIf(msg is not None) - - # check messages the client send message - self.assertHasNextMessage(consts.Message.ClientHello) - - #NOTE: have to send directly via socket here (our sendResponseMessage - # calls client.next() autkmatically) - self.socketModule.lastSocket.sendResponseMessage( - 'NodeHello', - FCPVersion='0.0', - Node='Fred', - Version=str(self.fcpClient.ExpectedFcpVersion), - Revision='0', - Build='0', - ExRevision='0', - Testnet='false', - CompressionCodecs='1', - ConnectionIdentifier='any', - NodeLanguage='en', - - callNext=False - ) - msg = enum.next() + for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=1, timeout=0.1)): + if n == 1: + self.assertHasNextMessage( + consts.Message.ClientHello + ) + self.sendResponseMessage( + 'NodeHello', + FCPVersion='0.0', + Node='Fred', + Version=str(self.fcpClient.ExpectedFcpVersion), + Revision='0', + Build='0', + ExRevision='0', + Testnet='false', + CompressionCodecs='1', + ConnectionIdentifier='any', + NodeLanguage='en', + callNext=False + ) + # check events the client triggered msg = self.assertHasNextEvent( self.fcpClient.events.ClientDisconnected, @@ -588,7 +519,7 @@ self.failUnless('Param' in msg.params) self.assertEqual(msg['Param'].name, consts.Message.NodeHello) - self.failUnless(self.socketModule.lastSocket.closed) + self.failIf(self.ioOpen()) self.assertHasNextEvent(None) self.assertHasNextMessage(None) self.connectClient() @@ -2433,7 +2364,6 @@ if __name__ == "__main__": test() -test() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2008-03-06 11:59:28
|
Revision: 313 http://fclient.svn.sourceforge.net/fclient/?rev=313&view=rev Author: jurner Date: 2008-03-06 03:59:34 -0800 (Thu, 06 Mar 2008) Log Message: ----------- some more type conversions Modified Paths: -------------- trunk/sandbox/fcp2/types.py Modified: trunk/sandbox/fcp2/types.py =================================================================== --- trunk/sandbox/fcp2/types.py 2008-03-06 11:59:02 UTC (rev 312) +++ trunk/sandbox/fcp2/types.py 2008-03-06 11:59:34 UTC (rev 313) @@ -652,6 +652,7 @@ }, 'ClientPut': { 'BinaryBlob': FcpTypeBool, + 'DataLength': FcpTypeInt, 'DontCompress': FcpTypeBool, 'EarlyEncode': FcpTypeBool, 'GetCHKOnly': FcpTypeBool, @@ -659,6 +660,9 @@ 'MaxRetries': FcpTypeInt, 'Verbosity': FcpTypeInt, }, + 'FCPPluginReply': { + 'DataLength': FcpTypeInt, + }, 'GetConfig': { 'WithCurrent': FcpTypeBool, 'WithDefaults': FcpTypeBool, @@ -719,6 +723,7 @@ # 'AllData': { 'Global': FcpTypeBool, + 'DataLength': FcpTypeInt, #NOTE: we ignore startup and completion time here as long as it is not passed in all related messages }, #'ConfigData': # added later as ConfigMessageParams() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |