2020-04-27 02:07:24 +02:00
|
|
|
FediChordProtocol DEFINITIONS AUTOMATIC TAGS ::= BEGIN
|
|
|
|
|
|
|
|
NodeID ::= INTEGER (0..115792089237316195423570985008687907853269984665640564039457584007913129639935)
|
|
|
|
|
2020-04-28 15:58:53 +02:00
|
|
|
Domain ::= VisibleString
|
|
|
|
|
2020-04-29 22:55:43 +02:00
|
|
|
Action ::= ENUMERATED {queryID, join, leave, stabilise, ping}
|
|
|
|
|
2020-04-27 02:07:24 +02:00
|
|
|
Request ::= SEQUENCE {
|
2020-04-30 23:32:16 +02:00
|
|
|
action Action,
|
2020-04-27 02:07:24 +02:00
|
|
|
requestID INTEGER,
|
|
|
|
senderID NodeID,
|
2020-04-28 15:58:53 +02:00
|
|
|
parts INTEGER, -- number of message parts
|
|
|
|
part INTEGER, -- part number of this message
|
|
|
|
actionPayload CHOICE {
|
|
|
|
queryIDSendPayload QueryIDSendPayload,
|
|
|
|
joinSendPayload JoinSendPayload,
|
|
|
|
leaveSendPayload LeaveSendPayload,
|
2020-04-30 13:37:46 +02:00
|
|
|
stabiliseSendPayload StabiliseSendPayload,
|
|
|
|
pingSendPayload PingSendPayload
|
2020-04-28 15:58:53 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-04-30 23:32:16 +02:00
|
|
|
-- idea: different message layouts as a way of distinguishing between
|
|
|
|
-- request and response instead of explicit flag
|
|
|
|
|
2020-04-28 15:58:53 +02:00
|
|
|
Response ::= SEQUENCE {
|
|
|
|
responseTo INTEGER,
|
|
|
|
senderID NodeID,
|
2020-04-27 02:07:24 +02:00
|
|
|
parts INTEGER,
|
|
|
|
part INTEGER,
|
2020-04-29 22:55:43 +02:00
|
|
|
action Action,
|
2020-04-28 15:58:53 +02:00
|
|
|
actionPayload CHOICE {
|
|
|
|
queryIDReceivePayload QueryIDReceivePayload,
|
|
|
|
joinReceivePayload JoinReceivePayload,
|
|
|
|
leaveReceivePayload LeaveReceivePayload,
|
2020-04-30 13:37:46 +02:00
|
|
|
stabiliseReceivePayload StabiliseReceivePayload,
|
|
|
|
pingReceivePayload PingReceivePayload
|
2020-04-28 15:58:53 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
NodeState ::= SEQUENCE {
|
|
|
|
nid NodeID,
|
|
|
|
domain Domain,
|
|
|
|
ipAddr OCTET STRING (SIZE(16)),
|
|
|
|
dhtPort INTEGER,
|
|
|
|
apPort INTEGER,
|
|
|
|
vServer INTEGER
|
|
|
|
}
|
|
|
|
|
|
|
|
CacheEntry ::= SEQUENCE {
|
|
|
|
node NodeState,
|
2020-04-29 22:55:43 +02:00
|
|
|
-- use POSIX time stamp, as DATE-TIME isn't supported by the Haskell lib
|
2020-04-28 15:58:53 +02:00
|
|
|
timestamp INTEGER
|
|
|
|
}
|
|
|
|
|
|
|
|
NodeCache ::= SEQUENCE OF CacheEntry
|
|
|
|
|
|
|
|
JoinSendPayload ::= NodeState
|
|
|
|
|
|
|
|
JoinReceivePayload ::= SEQUENCE {
|
|
|
|
successors SEQUENCE OF NodeID,
|
|
|
|
predecessors SEQUENCE OF NodeID,
|
|
|
|
cache NodeCache
|
2020-04-27 02:07:24 +02:00
|
|
|
}
|
|
|
|
|
2020-04-28 15:58:53 +02:00
|
|
|
QueryIDSendPayload ::= SEQUENCE {
|
|
|
|
targetID NodeID,
|
|
|
|
lBestNodes INTEGER
|
|
|
|
}
|
|
|
|
|
|
|
|
QueryResult ::= ENUMERATED { found, forward }
|
|
|
|
|
|
|
|
QueryIDReceivePayload ::= SEQUENCE {
|
|
|
|
result QueryResult,
|
2020-04-29 22:55:43 +02:00
|
|
|
nodeData NodeCache OPTIONAL -- empty if `found`
|
2020-04-28 15:58:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
|
2020-04-30 13:37:46 +02:00
|
|
|
PingSendPayload ::= NULL -- do not include a node/ vserver ID, so that
|
|
|
|
-- the node has to respond with all active ones
|
|
|
|
|
|
|
|
-- learning all active vserver IDs handled by the server at once
|
|
|
|
PingReceivePayload ::= SEQUENCE OF NodeState
|
|
|
|
|
2020-04-28 15:58:53 +02:00
|
|
|
|
2020-04-27 02:07:24 +02:00
|
|
|
END
|