|
@@ -715,53 +715,23 @@ public:
|
|
VERB_NETWORK_MEMBERSHIP_CERTIFICATE = 10,
|
|
VERB_NETWORK_MEMBERSHIP_CERTIFICATE = 10,
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Network configuration request:
|
|
|
|
- * <[8] 64-bit network ID>
|
|
|
|
- * <[2] 16-bit length of request meta-data dictionary>
|
|
|
|
- * <[...] string-serialized request meta-data>
|
|
|
|
- * [<[8] 64-bit revision of netconf we currently have>]
|
|
|
|
|
|
+ * DEPRECATED but still supported, interpreted as an object request:
|
|
|
|
+ *
|
|
|
|
+ * /controller/network/<network ID>/member/<requester address>
|
|
*
|
|
*
|
|
- * This message requests network configuration from a node capable of
|
|
|
|
- * providing it. If the optional revision is included, a response is
|
|
|
|
- * only generated if there is a newer network configuration available.
|
|
|
|
|
|
+ * When received in this manner the response is sent via the old
|
|
|
|
+ * OK(NETWORK_CONFIG_REQUEST) instead of OK(REQUEST_OBJECT).
|
|
*
|
|
*
|
|
* OK response payload:
|
|
* OK response payload:
|
|
* <[8] 64-bit network ID>
|
|
* <[8] 64-bit network ID>
|
|
* <[2] 16-bit length of network configuration dictionary>
|
|
* <[2] 16-bit length of network configuration dictionary>
|
|
* <[...] network configuration dictionary>
|
|
* <[...] network configuration dictionary>
|
|
*
|
|
*
|
|
- * OK returns a Dictionary (string serialized) containing the network's
|
|
|
|
- * configuration and IP address assignment information for the querying
|
|
|
|
- * node. It also contains a membership certificate that the querying
|
|
|
|
- * node can push to other peers to demonstrate its right to speak on
|
|
|
|
- * a given network.
|
|
|
|
- *
|
|
|
|
- * When a new network configuration is received, another config request
|
|
|
|
- * should be sent with the new netconf's revision. This confirms receipt
|
|
|
|
- * and also causes any subsequent changes to rapidly propagate as this
|
|
|
|
- * cycle will repeat until there are no changes. This is optional but
|
|
|
|
- * recommended behavior.
|
|
|
|
- *
|
|
|
|
* ERROR response payload:
|
|
* ERROR response payload:
|
|
* <[8] 64-bit network ID>
|
|
* <[8] 64-bit network ID>
|
|
- *
|
|
|
|
- * UNSUPPORTED_OPERATION is returned if this service is not supported,
|
|
|
|
- * and OBJ_NOT_FOUND if the queried network ID was not found.
|
|
|
|
*/
|
|
*/
|
|
VERB_NETWORK_CONFIG_REQUEST = 11,
|
|
VERB_NETWORK_CONFIG_REQUEST = 11,
|
|
|
|
|
|
- /**
|
|
|
|
- * Network configuration refresh request:
|
|
|
|
- * <[...] array of 64-bit network IDs>
|
|
|
|
- *
|
|
|
|
- * This can be sent by the network controller to inform a node that it
|
|
|
|
- * should now make a NETWORK_CONFIG_REQUEST.
|
|
|
|
- *
|
|
|
|
- * It does not generate an OK or ERROR message, and is treated only as
|
|
|
|
- * a hint to refresh now.
|
|
|
|
- */
|
|
|
|
- VERB_NETWORK_CONFIG_REFRESH = 12,
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* Request endpoints for multicast distribution:
|
|
* Request endpoints for multicast distribution:
|
|
* <[8] 64-bit network ID>
|
|
* <[8] 64-bit network ID>
|
|
@@ -1030,7 +1000,63 @@ public:
|
|
*
|
|
*
|
|
* ERROR has no payload.
|
|
* ERROR has no payload.
|
|
*/
|
|
*/
|
|
- VERB_REQUEST_PROOF_OF_WORK = 19
|
|
|
|
|
|
+ VERB_REQUEST_PROOF_OF_WORK = 19,
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Request an object or a chunk of an object with optional meta-data:
|
|
|
|
+ * <[8] 64-bit chunk offset>
|
|
|
|
+ * <[2] 16-bit chunk length or 0 for any / sender-preferred>
|
|
|
|
+ * <[2] 16-bit object path length in bytes>
|
|
|
|
+ * <[...] object path>
|
|
|
|
+ * <[2] 16-bit length of request meta-data dictionary>
|
|
|
|
+ * <[...] request meta-data dictionary>
|
|
|
|
+ *
|
|
|
|
+ * This is used to request an object. Objects can be things like network
|
|
|
|
+ * configs, software updates, etc. This provides an in-band way to
|
|
|
|
+ * distribute such things and obsoletes the network config specific
|
|
|
|
+ * messages. (They are still supported for backward compatibility.)
|
|
|
|
+ *
|
|
|
|
+ * The use of path and request/response meta-data makes the semantics of
|
|
|
|
+ * this analogous to HTTP POST, and it could therefore be mapped to
|
|
|
|
+ * HTTP POST requests to permit plugins that leverage the ZT protocol
|
|
|
|
+ * to do out-of-band things like special authentication, etc.
|
|
|
|
+ *
|
|
|
|
+ * Large objects can be transferred via repeated calls with higher and
|
|
|
|
+ * higher chunk offsets and then SHA-512 verified on receipt, but this is
|
|
|
|
+ * not efficient. It should not be used heavily as an alternative to
|
|
|
|
+ * TCP. It's a bit more like X-Modem and other old-school SEND/ACK
|
|
|
|
+ * protocols. It is potentially a good idea for software updates since
|
|
|
|
+ * it means that ZT can update itself even on networks with no "vanilla"
|
|
|
|
+ * Internet access.
|
|
|
|
+ *
|
|
|
|
+ * OK and ERROR responses are optional but recommended. ERROR responses
|
|
|
|
+ * can include OBJECT_NOT_FOUND.
|
|
|
|
+ *
|
|
|
|
+ * OK response payload:
|
|
|
|
+ * <[16] first 16 bytes of SHA-512 of complete object>
|
|
|
|
+ * <[8] 64-bit total object size>
|
|
|
|
+ * <[8] 64-bit chunk offset>
|
|
|
|
+ * <[2] 16-bit length of chunk payload>
|
|
|
|
+ * <[...] chunk payload>
|
|
|
|
+ */
|
|
|
|
+ VERB_REQUEST_OBJECT = 20,
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Notification of a remote object update:
|
|
|
|
+ * <[8] 64-bit total object size or 0 if unspecified here>
|
|
|
|
+ * <[16] first 16 bytes of SHA-512 of object (if size specified)>
|
|
|
|
+ * <[2] 16-bit length of object path>
|
|
|
|
+ * <[...] object path>
|
|
|
|
+ * <[2] 16-bit length of meta-data dictionary>
|
|
|
|
+ * <[...] meta-data dictionary>
|
|
|
|
+ *
|
|
|
|
+ * This can be sent to notify another peer that an object has updated and
|
|
|
|
+ * should be re-requested. The receiving peer is not required to do anything
|
|
|
|
+ * or send anything in response to this. If the first size field is zero, the
|
|
|
|
+ * SHA-512 hash is also unspecified and should be zero. This means that the
|
|
|
|
+ * object was updated but must be re-requested.
|
|
|
|
+ */
|
|
|
|
+ VERB_OBJECT_UPDATED = 21
|
|
};
|
|
};
|
|
|
|
|
|
/**
|
|
/**
|