+/**
+ * Per node handler used for inter node communication.
+ *
+ * Each node in the buffer tree may optionally provide a command handler for
+ * execution of commands by other nodes of the tree.
+ *
+ * It is dependent on the node in question which commands are supported and how
+ * they work. In any case, the input for the command handler is some string and
+ * its output is also a string which is returned via the \a result pointer of
+ * the handler.
+ *
+ * This mechanism is used in para_audiod e.g. by the alsa writer which needs to
+ * know the sample rate of its input known to e.g. the mp3dec node further up
+ * in the buffer tree.
+ */
+typedef int (*btr_command_handler)(struct btr_node *btrn,
+ const char *command, char **result);
+
+/**
+ * Structure for creating new buffer tree nodes.
+ *
+ * btr_new_node() takes a pointer to such a structure.
+ *
+ * There are four different combinations of \a parent and child:
+ *
+ * 1. both \p NULL. This creates a new buffer tree with a single isolated node.
+ *
+ * 2. \a parent != \p NULL, \a child == NULL. This creates a new leaf node by
+ * adding the new node to the list of children of the given parent node.
+ *
+ * 3. \a parent == NULL, \a child != NULL. The new node becomes the new root of
+ * the buffer tree. The child must be old root.
+ *
+ * 4. both != NULL. This creates a new internal node. \a child must be child of
+ * p. This mode of operation is currently not needed and is thus not yet
+ * implemented.
+ */