Hash2Pub/Hash2Pub/FediChord.asn1

90 lines
2.1 KiB
Groff

FediChordProtocol DEFINITIONS AUTOMATIC TAGS ::= BEGIN
NodeID ::= INTEGER (0..115792089237316195423570985008687907853269984665640564039457584007913129639935)
Domain ::= VisibleString
Request ::= SEQUENCE {
requestID INTEGER,
senderID NodeID,
parts INTEGER, -- number of message parts
part INTEGER, -- part number of this message
action ENUMERATED {queryID, join, leave, stabilise, ping},
actionPayload CHOICE {
queryIDSendPayload QueryIDSendPayload,
joinSendPayload JoinSendPayload,
leaveSendPayload LeaveSendPayload,
stabiliseSendPayload StabiliseSendPayload
}
}
Response ::= SEQUENCE {
responseTo INTEGER,
senderID NodeID,
parts INTEGER,
part INTEGER,
action ENUMERATED {queryID, join, leave, stabilise, ping},
actionPayload CHOICE {
queryIDReceivePayload QueryIDReceivePayload,
joinReceivePayload JoinReceivePayload,
leaveReceivePayload LeaveReceivePayload,
stabiliseReceivePayload StabiliseReceivePayload
}
}
NodeState ::= SEQUENCE {
nid NodeID,
domain Domain,
ipAddr OCTET STRING (SIZE(16)),
dhtPort INTEGER,
apPort INTEGER,
vServer INTEGER
}
CacheEntry ::= SEQUENCE {
node NodeState,
-- use unix time stamp, as DATE-TIME isn't supported by the Haskell lib
timestamp INTEGER
}
NodeCache ::= SEQUENCE OF CacheEntry
JoinSendPayload ::= NodeState
JoinReceivePayload ::= SEQUENCE {
successors SEQUENCE OF NodeID,
predecessors SEQUENCE OF NodeID,
cache NodeCache
}
QueryIDSendPayload ::= SEQUENCE {
targetID NodeID,
lBestNodes INTEGER
}
QueryResult ::= ENUMERATED { found, forward }
QueryIDReceivePayload ::= SEQUENCE {
result QueryResult,
nodeData NodeCache
}
StabiliseSendPayload ::= NodeState
StabiliseReceivePayload ::= SEQUENCE {
successors SEQUENCE OF NodeID,
predecessors SEQUENCE OF NodeID
-- ToDo: transfer of handled key data, if newly responsible for it
}
LeaveSendPayload ::= SEQUENCE {
successors SEQUENCE OF NodeID,
predecessors SEQUENCE OF NodeID
-- ToDo: transfer of own data to newly responsible node
}
LeaveReceivePayload ::= NULL -- just a confirmation
END