summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVicky Risk <vicky@isc.org>2018-08-23 01:38:33 +0200
committerVicky Risk <vicky@isc.org>2018-08-28 17:53:07 +0200
commit772c791ca246ce64e36f66d89a1d2dc7dd0e1eda (patch)
treee8d454966cd167cd2f5d31ef4a103a4e7fba57be
parentDelete Makefile.am (diff)
downloadkea-772c791ca246ce64e36f66d89a1d2dc7dd0e1eda.tar.xz
kea-772c791ca246ce64e36f66d89a1d2dc7dd0e1eda.zip
Delete cc-protocol.txt
-rw-r--r--doc/design/cc-protocol.txt185
1 files changed, 0 insertions, 185 deletions
diff --git a/doc/design/cc-protocol.txt b/doc/design/cc-protocol.txt
deleted file mode 100644
index 15db9c12a1..0000000000
--- a/doc/design/cc-protocol.txt
+++ /dev/null
@@ -1,185 +0,0 @@
-The CC protocol
-===============
-
-We use our home-grown protocol for IPC between modules. There's a
-central daemon routing the messages.
-
-Addressing
-----------
-
-Each connected client gets an unique address, called ``l-name''. A
-message can be sent directly to such l-name, if it is known to the
-sender.
-
-A client may subscribe to a group of communication. A message can be
-broadcasted to a whole group instead of a single client. There's also
-an instance parameter to addressing, but we didn't find any actual use
-for it and it is not used for anything. It is left in the default `*`
-for most of our code and should be done so in any new code. It wasn't
-priority to remove it yet.
-
-Wire format
------------
-
-Each message on the wire looks like this:
-
- <message length><header length><header><body>
-
-The message length is 4-byte unsigned integer in network byte order,
-specifying the number of bytes of the rest of the message (eg. header
-length, header and body put together).
-
-The header length is 2-byte unsigned integer in network byte order,
-specifying the length of the header.
-
-The header is a string representation of single JSON object. It
-specifies the type of message and routing information.
-
-The body is the payload of the message. It takes the whole rest of
-size of the message (so its length is message length - 2 - header
-length). The content is not examined by the routing daemon, but the
-clients expect it to be valid JSON object.
-
-The body may be empty in case the message is not to be routed to
-client, but it is instruction for the routing daemon. See message
-types below.
-
-The message is sent in this format to the routing daemon, the daemon
-optionally modifies the headers and delivers it in the same format to
-the recipient(s).
-
-The headers
------------
-
-The header object can contain following information:
-
-|====================================================================================================
-|Name |type |Description
-|====================================================================================================
-|from |string|Sender's l-name
-|type |string|Type of the message. The routed message is "send".
-|group |string|The group to deliver to.
-|instance |string|Instance in the group. Purpose lost in history. Defaults to "*".
-|to |string|Override recipient (group/instance ignored).
-|seq |int |Tracking number of the message.
-|reply |int |If present, contains a seq number of message this is a reply to.
-|want_answer|bool |If present and true, the daemon generates error if there's no matching recipient.
-|====================================================================================================
-
-Types of messages
------------------
-
-Get Local Name (type "getlname")
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Upon connection, this is the first message to be sent to the daemon.
-It will return the local name of this client. Each connection gets
-its own unique local name, and local names are never repeated. They
-should be considered opaque strings, in a format useful only to the
-message routing system. They are used in replies or to send to a
-specific destination.
-
-To request the local name, the only element included is the
- {"type": "getlname"}
-tuple. The response is also a simple, single tuple:
- {"lname" => "Opaque utf-8 string"}
-
-Until this message is sent, no other types of messages may be sent on
-this connection.
-
-Regular Group Messages (type "send")
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Message routed to other client. This one expects the body to be
-non-empty.
-
-Expected headers are:
-
-* from
-* group
-* instance (set to "*" if no specific instance desired)
-* seq (should be unique for the sender)
-* to (set to "*" if not directed to specific client)
-* reply (optional, only if it is reply)
-* want_answer (optional, only when not a reply)
-
-A client does not see its own transmissions.
-
-Group Subscriptions (type "subscribe")
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Indicates the sender wants to be included in the given group.
-
-Expected headers are:
-
-* group
-* instance (leave at "*" for default)
-
-There is no response to this message and the client is subscribed to
-the given group and instance.
-
-The group can be any utf-8 string and the group doesn't have to exist
-before (it is created when at least one client is in it). A client may
-be subscribed in multiple groups.
-
-Group Unsubscribe (type "unsubscribe")
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The headers to be included are "group" and "instance" and have the same
-meaning as a "subscribe" message. Only, the client is removed from the
-group.
-
-Transmitted messages
---------------------
-
-These are the messages generally transmitted in the body of the
-message.
-
-Command
-~~~~~~~
-
-It is a command from one process to another, to do something or send
-some information. It is identified by a name and can optionally have
-parameters. It'd look like this:
-
- {"command": ["name", <parameters>]}
-
-The parameters may be omitted (then the array is 1 element long). If
-present, it may be any JSON element. However, the most usual is an
-object with named parameter values.
-
-It is usually transmitted with the `want_answer` header turned on to
-cope with the situation the remote end doesn't exist, and sent to a
-group (eg. `to` with value of `*`).
-
-Success reply
-~~~~~~~~~~~~~
-
-When the command is successful, the other side answers by a reply of
-the following format:
-
- {"result": [0, <result>]}
-
-The result is the return value of the command. It may be any JSON
-element and it may be omitted (for the case of ``void'' function).
-
-This is transmitted with the `reply` header set to the `seq` number of
-the original command. It is sent with the `to` header set.
-
-Error reply
-~~~~~~~~~~~
-
-In case something goes wrong, an error reply is sent. This is similar
-as throwing an exception from local function. The format is similar:
-
- {"result": [ecode, "Error description"]}
-
-The `ecode` is non-zero error code. Most of the current code uses `1`
-for all errors. The string after that is mandatory and must contain a
-human-readable description of the error.
-
-The negative error codes are reserved for errors from the daemon.
-Currently, only `-1` is used and it is generated when a message with
-`reply` not included is sent, it has the `want_answer` header set to
-`true` and there's no recipient to deliver the message to. This
-usually means a command was sent to a non-existent recipient.