Code

Renamed CONNECTION_* constants to SDB_CONNECTION_*.
[sysdb.git] / src / include / frontend / proto.h
index 9e02400e13ea597d9201d0a0577c47e9daefa11e..7aae68dde622a0ebe7835c796a46c216838b7de8 100644 (file)
@@ -40,6 +40,8 @@ extern "C" {
  * message body depends on the message type. Both, the message type and length
  * are stored in an unsigned 32bit integer in network byte-order.
  *
+ * Any strings in the message body may not include a zero byte.
+ *
  *                  1               3               4               6
  *  0               6               2               8               4
  * +-------------------------------+-------------------------------+
@@ -52,104 +54,212 @@ extern "C" {
 /* status codes returned to a client */
 typedef enum {
        /*
-        * CONNECTION_OK:
-        * Indicates that a command was successful. The message body will contain
-        * the result of the command (if any) encoded as a JSON string.
+        * Generic status and log messages.
+        */
+
+       /*
+        * SDB_CONNECTION_OK:
+        * Indicates that a command was successful. The message body will usually
+        * be empty but may contain a string providing unformatted information
+        * providing more details.
+        *
+        * 0               32              64
+        * +---------------+---------------+
+        * | OK            | len(msg)      |
+        * +---------------+---------------+
+        * | optional status message ...   |
         */
-       CONNECTION_OK = 0,
+       SDB_CONNECTION_OK = 0,
 
        /*
-        * CONNECTION_ERROR:
+        * SDB_CONNECTION_ERROR:
         * Indicates that a command has failed. The message body will contain a
         * string describing the error.
+        *
+        * 0               32              64
+        * +---------------+---------------+
+        * | ERROR         | len(msg)      |
+        * +---------------+---------------+
+        * | error message ...             |
         */
-       CONNECTION_ERROR,
+       SDB_CONNECTION_ERROR,
 
        /*
-        * CONNECTION_LOG:
+        * SDB_CONNECTION_LOG:
         * Indicates an asynchronous log message. The message body will contain
-        * the message string providing informational or warning logs. Log
-        * messages may be sent to the client any time.
+        * the log priority (see utils/error.h) and message. Log messages may be
+        * sent to the client any time.
+        *
+        * 0               32              64
+        * +---------------+---------------+
+        * | LOG           | length        |
+        * +---------------+---------------+
+        * | log priority  | log message   |
+        * +---------------+               |
+        * | ...                           |
+        */
+       SDB_CONNECTION_LOG,
+
+       /*
+        * Query-result specific messages.
         */
-       CONNECTION_LOG,
+
+       /*
+        * SDB_CONNECTION_DATA:
+        * Indicates that a data query was successful. The message body will
+        * contain the type of the data and the result encoded as a JSON string.
+        * The type is the same as the command code of the respective command (see
+        * below) and is stored as an unsigned 32bit integer in network
+        * byte-order. The result may be empty (but the type is still included) if
+        * the query did not return any result. The type and the result message
+        * are empty on empty commands.
+        *
+        * 0               32              64
+        * +---------------+---------------+
+        * | DATA          | length        |
+        * +---------------+---------------+
+        * | result type   | result ...    |
+        * +---------------+               |
+        * | ...                           |
+        */
+       SDB_CONNECTION_DATA = 100,
 } sdb_conn_status_t;
 
 /* accepted commands / state of the connection */
 typedef enum {
        /*
-        * CONNECTION_IDLE:
+        * SDB_CONNECTION_IDLE:
         * This is an internal state used for idle connections.
         */
-       CONNECTION_IDLE = 0,
+       SDB_CONNECTION_IDLE = 0,
 
        /*
-        * CONNECTION_PING:
+        * SDB_CONNECTION_PING:
         * Check if the current connection is still alive. The server will reply
-        * with CONNECTION_OK if it was able to handle the command.
+        * with SDB_CONNECTION_OK and an empty message body if it was able to
+        * handle the command.
+        *
+        * 0               32              64
+        * +---------------+---------------+
+        * | PING          | 0             |
+        * +---------------+---------------+
         */
-       CONNECTION_PING,
+       SDB_CONNECTION_PING,
 
        /*
-        * CONNECTION_STARTUP:
+        * SDB_CONNECTION_STARTUP:
         * Setup of a client connection. The message body shall include the
         * username of the user contacting the server. The server may then send
         * further requests to the client for authentication (not implemented
         * yet). Once the setup and authentication was successful, the server
-        * replies with CONNECTION_OK. Further information may be requested from
-        * the server using special messages specific to the authentication
+        * replies with SDB_CONNECTION_OK. Further information may be requested
+        * from the server using special messages specific to the authentication
         * method. The server does not send any asynchronous messages before
         * startup is complete.
+        *
+        * 0               32              64
+        * +---------------+---------------+
+        * | STARTUP       | len(username) |
+        * +---------------+---------------+
+        * | username ...                  |
         */
-       CONNECTION_STARTUP,
+       SDB_CONNECTION_STARTUP,
 
        /*
-        * Querying the server.
+        * Querying the server. On success, the server replies with
+        * SDB_CONNECTION_DATA.
+        *
+        * The command codes listed here are used, both, for sending a query to
+        * the server and to indicate the response type from a query in a DATA
+        * message.
         */
 
        /*
-        * CONNECTION_QUERY:
+        * SDB_CONNECTION_QUERY:
         * Execute a query in the server. The message body shall include a single
         * query command as a text string. Multiple commands are ignored by the
-        * server entirely.
+        * server entirely to protect against injection attacks.
+        *
+        * 0               32              64
+        * +---------------+---------------+
+        * | QUERY         | len(query)    |
+        * +---------------+---------------+
+        * | query string ...              |
         */
-       CONNECTION_QUERY,
+       SDB_CONNECTION_QUERY,
 
        /*
-        * CONNECTION_FETCH:
+        * SDB_CONNECTION_FETCH:
         * Execute the 'FETCH' command in the server. The message body shall
-        * include the hostname of the host to be retrieved.
+        * include the type and the identifier of the object to be retrieved.
+        * Hosts are identified by their name. Other types are not supported yet.
+        * The type is encoded as a 32bit integer in network byte-order.
+        *
+        * 0               32              64
+        * +---------------+---------------+
+        * | FETCH         | length        |
+        * +---------------+---------------+
+        * | object type   | identifier    |
+        * +---------------+               |
+        * | ...                           |
         */
-       CONNECTION_FETCH,
+       SDB_CONNECTION_FETCH,
 
        /*
-        * CONNECTION_LIST:
-        * Execute the 'LIST' command in the server.
+        * SDB_CONNECTION_LIST:
+        * Execute the 'LIST' command in the server. The message body may include
+        * the type of the objects to be listed, encoded as a 32bit integer in
+        * network byte-order. The response includes all hosts and the respective
+        * child objects. By default, all hosts are listed.
+        *
+        * 0               32              64
+        * +---------------+---------------+
+        * | LIST          | length        |
+        * +---------------+---------------+
+        * | [object type] |
+        * +---------------+
         */
-       CONNECTION_LIST,
+       SDB_CONNECTION_LIST,
 
        /*
-        * CONNECTION_LOOKUP:
+        * SDB_CONNECTION_LOOKUP:
         * Execute the 'LOOKUP' command in the server. The message body shall
-        * include the conditional expression of the 'MATCHING' clause.
+        * include the type of the objects to look up and a string representing
+        * the conditional expression of the 'MATCHING' clause. The type is
+        * encoded as a 32bit integer in network byte-order.
+        *
+        * 0               32              64
+        * +---------------+---------------+
+        * | LOOKUP        | length        |
+        * +---------------+---------------+
+        * | object type   | matching      |
+        * +---------------+               |
+        * | clause ...                    |
         */
-       CONNECTION_LOOKUP,
+       SDB_CONNECTION_LOOKUP,
 
        /*
-        * CONNECTION_TIMESERIES:
+        * SDB_CONNECTION_TIMESERIES:
         * Execute the 'TIMESERIES' command in the server. This command is not yet
-        * supported on the wire. Use CONNECTION_QUERY instead.
+        * supported on the wire. Use SDB_CONNECTION_QUERY instead.
         */
-       CONNECTION_TIMESERIES,
+       SDB_CONNECTION_TIMESERIES,
 
        /*
         * Command subcomponents.
         */
 
        /*
-        * CONNECTION_EXPR:
+        * SDB_CONNECTION_MATCHER:
+        * A parsed matcher. Only used internally.
+        */
+       SDB_CONNECTION_MATCHER = 100,
+
+       /*
+        * SDB_CONNECTION_EXPR:
         * A parsed expression. Only used internally.
         */
-       CONNECTION_EXPR,
+       SDB_CONNECTION_EXPR,
 } sdb_conn_state_t;
 
 #ifdef __cplusplus