Hash2Pub/Hash2Pub/FediChord.asn1

103 lines
2.6 KiB
Plaintext
Raw Normal View History

FediChordProtocol DEFINITIONS AUTOMATIC TAGS ::= BEGIN
NodeID ::= INTEGER (0..115792089237316195423570985008687907853269984665640564039457584007913129639935)
Domain ::= VisibleString
Action ::= ENUMERATED {queryID, join, leave, stabilise, ping}
Request ::= SEQUENCE {
action Action,
requestID INTEGER,
sender NodeState,
parts INTEGER (0..150), -- number of message parts
part INTEGER (0..150), -- part number of this message, starts at 1
actionPayload CHOICE {
queryIDRequestPayload QueryIDRequestPayload,
joinRequestPayload JoinRequestPayload,
leaveRequestPayload LeaveRequestPayload,
stabiliseRequestPayload StabiliseRequestPayload,
pingRequestPayload PingRequestPayload
}
}
-- idea: different message layouts as a way of distinguishing between
-- request and response instead of explicit flag
Response ::= SEQUENCE {
responseTo INTEGER,
senderID NodeID,
parts INTEGER (0..150),
part INTEGER (0..150),
action Action,
actionPayload CHOICE {
queryIDResponsePayload QueryIDResponsePayload,
joinResponsePayload JoinResponsePayload,
leaveResponsePayload LeaveResponsePayload,
stabiliseResponsePayload StabiliseResponsePayload,
pingResponsePayload PingResponsePayload
}
}
NodeState ::= SEQUENCE {
nid NodeID,
domain Domain,
ipAddr OCTET STRING (SIZE(16)),
dhtPort INTEGER,
apPort INTEGER,
vServerID INTEGER
}
CacheEntry ::= SEQUENCE {
node NodeState,
-- use POSIX time stamp, as DATE-TIME isn't supported by the Haskell lib
timestamp INTEGER
}
NodeCache ::= SEQUENCE OF CacheEntry
JoinRequestPayload ::= NULL
JoinResponsePayload ::= SEQUENCE {
successors SEQUENCE OF NodeID,
predecessors SEQUENCE OF NodeID,
cache NodeCache
}
QueryResult ::= ENUMERATED { found, forward }
QueryIDRequestPayload ::= SEQUENCE {
targetID NodeID,
lBestNodes INTEGER
}
QueryIDResponsePayload ::= SEQUENCE {
result QueryResult,
nodeData CHOICE {NodeState, NodeCache}
}
StabiliseRequestPayload ::= NULL
StabiliseResponsePayload ::= SEQUENCE {
successors SEQUENCE OF NodeID,
predecessors SEQUENCE OF NodeID
-- ToDo: transfer of handled key data, if newly responsible for it
}
LeaveRequestPayload ::= SEQUENCE {
successors SEQUENCE OF NodeID,
predecessors SEQUENCE OF NodeID
-- ToDo: transfer of own data to newly responsible node
}
LeaveResponsePayload ::= NULL -- just a confirmation
PingRequestPayload ::= NULL -- do not include a node/ vserver ID, so that
2020-04-30 13:37:46 +02:00
-- the node has to respond with all active ones
-- learning all active vserver IDs handled by the server at once
PingResponsePayload ::= SEQUENCE OF NodeState
2020-04-30 13:37:46 +02:00
END