Cjdns contains a set of low level messages which are not encrypted. If you send a packet and it cannot be forwarded, the switch which knows it is not possible to forward will notify you with a CTRL message, these are not encrypted because obviously the switch doesn't know who you are and can't reasonably encrypt anything to you.
- PING: request that the content of the message be echo'd back to you
- PONG: response to a PING message
- KEYPING: Similar to a ping except that the message also sends a public key and requests one back. NOTE: When constructing a keyping, remember that the key you send is your key and the other person's key should be in the response.
- KEYPONG: Response to a KEYPING message, contains the responder's key.
- ERROR: Emitted by the switch in case a message cannot be forwarded.
- MALFORMED_ADDRESS: The switch label was malformed
- FLOOD: Packet dropped because link is congested (never sent as of v18)
- LINK_LIMIT_EXCEEDED: Packet dropped because node has oversent its limit (never sent as of v18)
- OVERSIZE_MESSAGE: Message too big to send, caused by differing MTU along a path
- UNDERSIZE_MESSAGE: Message smaller than expected headers
- AUTHENTICATION: Authentication failed (CryptoAuth could not understand the packet)
- INVALID: Header is invalid or checksum failed
- UNDELIVERABLE: Message could not be sent to its destination through no fault of the sender
- LOOP_ROUTE: The route enters and leaves through the same interface in one switch
- RETURN_PATH_INVALID: The switch is unable to represent the return path, this basically means the label is so long that the inverse label is impossible to put in 64 bits.
input:
const Cjdnsctrl = require('cjdnsctrl');
Cjdnsctrl.parse(new Buffer(
"994b00050123456700000012a331ebbed8d92ac03b10efed3e389cd0c6ec7331" +
"a72dbde198476c5eb4d14a1f02e29842b42aedb6bce2ead3", "hex"));
result:
{ type: 'KEYPING',
version: 18,
key: '3fdqgz2vtqb0wx02hhvx3wjmjqktyt567fcuvj3m72vw5u6ubu740k3m22fplqvqwpspy93.k',
content: <Buffer > }
input:
const Cjdnsctrl = require('cjdnsctrl');
Cjdnsctrl.serialize({
type: 'KEYPING',
version: 18,
key: '3fdqgz2vtqb0wx02hhvx3wjmjqktyt567fcuvj3m72vw5u6ubu740k3m22fplqvqwpspy93.k',
content: new Buffer(0)
});
result:
<Buffer 99 4b 00 05 01 23 45 67 00 00 00 12 a3 31 eb be d8 d9 2a c0 3b 10 ef ed 3e 38 9c ... >