dht.proto 1.86 KB
Newer Older
1
package dht.pb;
2 3 4

//run `protoc --go_out=. *.proto` to generate

5
message Message {
6 7 8
	enum MessageType {
		PUT_VALUE = 0;
		GET_VALUE = 1;
9 10 11 12
		ADD_PROVIDER = 2;
		GET_PROVIDERS = 3;
		FIND_NODE = 4;
		PING = 5;
13 14
	}

15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
	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;
	}

30
	message Peer {
31
		// ID of a given peer.
32
		optional string id = 1;
33 34 35 36 37 38

		// multiaddrs for a given peer
		repeated string addrs = 2;

		// used to signal the sender's connection capabilities to the peer
		optional ConnectionType connection = 3;
39 40
	}

41
	// defines what type of message it is.
42
	optional MessageType type = 1;
43 44 45 46 47 48

	// defines what coral cluster level this query/response belongs to.
	optional int32 clusterLevelRaw = 10;

	// Used to specify the key associated with this message.
	// PUT_VALUE, GET_VALUE, ADD_PROVIDER, GET_PROVIDERS
49
	optional string key = 2;
50

51 52
	// Used to return a value
	// PUT_VALUE, GET_VALUE
53
	optional Record record = 3;
54

55 56 57
	// Used to return peers closer to a key in a query
	// GET_VALUE, GET_PROVIDERS, FIND_NODE
	repeated Peer closerPeers = 8;
58

59 60 61
	// Used to return Providers
	// GET_VALUE, ADD_PROVIDER, GET_PROVIDERS
	repeated Peer providerPeers = 9;
62
}
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

// Record represents a dht record that contains a value
// for a key value pair
message Record {
	// The key that references this record
	optional string key = 1;

	// The actual value this record is storing
	optional bytes value = 2;

	// hash of the authors public key
	optional string author = 3;

	// A PKI signature for the key+value+author
	optional bytes signature = 4;
}