// Record represents a dht record that contains a value // for a key value pair message Record { // The key that references this record bytes key = 1; // The actual value this record is storing bytes value = 2; // Note: These fields were removed from the Record message // hash of the authors public key //optional string author = 3; // A PKI signature for the key+value+author //optional bytes signature = 4; // Time the record was received, set by receiver string timeReceived = 5; }; message Message { enum MessageType { PUT_VALUE = 0; GET_VALUE = 1; ADD_PROVIDER = 2; GET_PROVIDERS = 3; FIND_NODE = 4; PING = 5; } enum ConnectionType { // sender does not have a connection to peer, and no extra information (default) NOT_CONNECTED = 0; // sender has a live connection to peer CONNECTED = 1; // sender recently connected to peer CAN_CONNECT = 2; // sender recently tried to connect to peer repeatedly but failed to connect // ("try" here is loose, but this should signal "made strong effort, failed") CANNOT_CONNECT = 3; } message Peer { // ID of a given peer. bytes id = 1; // multiaddrs for a given peer repeated bytes addrs = 2; // used to signal the sender's connection capabilities to the peer ConnectionType connection = 3; } // defines what type of message it is. MessageType type = 1; // defines what coral cluster level this query/response belongs to. // in case we want to implement coral's cluster rings in the future. int32 clusterLevelRaw = 10; // NOT USED // Used to specify the key associated with this message. // PUT_VALUE, GET_VALUE, ADD_PROVIDER, GET_PROVIDERS bytes key = 2; // Used to return a value // PUT_VALUE, GET_VALUE Record record = 3; // Used to return peers closer to a key in a query // GET_VALUE, GET_PROVIDERS, FIND_NODE repeated Peer closerPeers = 8; // Used to return Providers // GET_VALUE, ADD_PROVIDER, GET_PROVIDERS repeated Peer providerPeers = 9; }