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.
|