Add encoder for monitoring responses
[trust_router.git] / include / tr_mon.h
similarity index 80%
rename from mon/tr_mon_req.h
rename to include/tr_mon.h
index d32b262..dc255ba 100644 (file)
 #include <talloc.h>
 #include <jansson.h>
 #include <gmodule.h>
+#include <tr_name_internal.h>
 
 /* Typedefs */
 typedef struct tr_mon_req TR_MON_REQ;
+typedef struct tr_mon_resp TR_MON_RESP;
 
 typedef enum tr_mon_cmd TR_MON_CMD;
+typedef enum tr_mon_resp_code TR_MON_RESP_CODE;
 
 typedef struct tr_mon_opt TR_MON_OPT;
 typedef enum tr_mon_opt_type TR_MON_OPT_TYPE;
@@ -66,6 +69,12 @@ enum tr_mon_cmd {
   MON_CMD_SHOW
 };
 
+/* These should be explicitly numbered because they form part of the public API */
+enum tr_mon_resp_code {
+  MON_RESP_SUCCESS=0,
+  MON_RESP_ERROR=1, // generic error
+};
+
 enum tr_mon_opt_type {
   OPT_TYPE_UNKNOWN=0,
 
@@ -92,25 +101,42 @@ struct tr_mon_req {
   GArray *options;
 };
 
+struct tr_mon_resp {
+  TR_MON_REQ *req; // request this responds to
+  TR_MON_RESP_CODE code;
+  TR_NAME *message;
+  json_t *payload;
+};
+
 /* Prototypes */
+/* tr_mon.c */
+const char *cmd_to_string(TR_MON_CMD cmd);
+TR_MON_CMD cmd_from_string(const char *s);
+const char *opt_type_to_string(TR_MON_OPT_TYPE opt_type);
+TR_MON_OPT_TYPE opt_type_from_string(const char *s);
+
+/* tr_mon_req.c */
 TR_MON_REQ *tr_mon_req_new(TALLOC_CTX *mem_ctx, TR_MON_CMD cmd);
 void tr_mon_req_free(TR_MON_REQ *req);
 TR_MON_RC tr_mon_req_add_option(TR_MON_REQ *req, TR_MON_OPT_TYPE opt_type);
 size_t tr_mon_req_opt_count(TR_MON_REQ *req);
 TR_MON_OPT *tr_mon_req_opt_index(TR_MON_REQ *req, size_t index);
 
-const char *cmd_to_string(TR_MON_CMD cmd);
-TR_MON_CMD cmd_from_string(const char *s);
-
-const char *opt_type_to_string(TR_MON_OPT_TYPE opt_type);
-TR_MON_OPT_TYPE opt_type_from_string(const char *s);
-
 /* tr_mon_req_encode.c */
 json_t *tr_mon_req_encode(TR_MON_REQ *req);
 
 /* tr_mon_req_decode.c */
 TR_MON_REQ *tr_mon_req_decode(TALLOC_CTX *mem_ctx, const char *req_json);
 
-/* tr_mon_rec_decode.c */
+/* tr_mon_resp.c */
+TR_MON_RESP *tr_mon_resp_new(TALLOC_CTX *mem_ctx,
+                             TR_MON_REQ *req,
+                             TR_MON_RESP_CODE code,
+                             const char *msg,
+                             json_t *payload);
+void tr_mon_resp_free(TR_MON_RESP *resp);
+
+/* tr_mon_resp_encode.c */
+json_t *tr_mon_resp_encode(TR_MON_RESP *resp);
 
 #endif //TRUST_ROUTER_TR_MON_REQ_H