#include <gsscon.h>
#include <trust_router/tr_dh.h>
-
-#define TRP_PORT 12310
-#define TRP_METRIC_INFINITY 0xFFFF
-
-typedef enum trp_rc {
- TRP_SUCCESS=0,
- TRP_ERROR, /* generic error */
- TRP_NOPARSE, /* parse error */
- TRP_NOMEM, /* allocation error */
-} TRP_RC;
-
-/*** Messages ***/
-typedef enum trp_msg_type {
- TRP_MSG_TYPE_UNKNOWN=0, /* conveniently, JSON parser returns 0 if a non-integer number is specified */
- TRP_MSG_TYPE_UPDATE,
- TRP_MSG_TYPE_ROUTE_REQ
-} TRP_MSG_TYPE;
-
-typedef struct trp_msg {
- TRP_MSG_TYPE type;
- void *body;
-} TRP_MSG;
-
-typedef struct trp_msg_body_update TRP_MSG_BODY_UPDATE;
-struct trp_msg_body_update {
- TRP_MSG_BODY_UPDATE *next;
- TR_NAME *community;
+#include <trust_router/trp.h>
+
+/* info records */
+typedef enum trp_inforec_type {
+ TRP_INFOREC_TYPE_UNKNOWN=0, /* conveniently, JSON parser returns 0 if a non-integer number is specified */
+ TRP_INFOREC_TYPE_ROUTE,
+ TRP_INFOREC_TYPE_COMMUNITY, /* not yet implemented (2016-06-14) */
+} TRP_INFOREC_TYPE;
+
+/* TRP update record types */
+typedef struct trp_inforec_route {
+ TR_NAME *comm;
TR_NAME *realm;
TR_NAME *trust_router;
unsigned int metric;
unsigned int interval;
-};
+} TRP_INFOREC_ROUTE;
-typedef struct trp_msg_body_route_req {
- TR_NAME *community;
- TR_NAME *realm;
-} TRP_MSG_BODY_ROUTE_REQ;
+/* TODO: define struct trp_msg_info_community */
-TRP_MSG_TYPE trp_msg_type_from_string(const char *s);
-const char *trp_msg_type_to_string(TRP_MSG_TYPE msgtype);
+typedef union trp_inforec_data {
+ TRP_INFOREC_ROUTE *route;
+ /* TRP_INFOREC_COMM *comm; */
+} TRP_INFOREC_DATA;
+
+typedef struct trp_inforec TRP_INFOREC;
+struct trp_inforec {
+ TRP_INFOREC *next;
+ TRP_INFOREC_TYPE type;
+ TRP_INFOREC_DATA data; /* contains pointer to one of the record types */
+};
-TRP_MSG *trp_msg_new(TALLOC_CTX *mem_ctx);
-void trp_msg_destroy(TRP_MSG *msg);
+struct trp_update {
+ TRP_INFOREC *records;
+};
+struct trp_req {
+ TR_NAME *comm;
+ TR_NAME *realm;
+};
-typedef struct trps_instance TRPS_INSTANCE;
+TRP_INFOREC_TYPE trp_inforec_type_from_string(const char *s);
+const char *trp_inforec_type_to_string(TRP_INFOREC_TYPE msgtype);
+
+TRP_UPD *trp_upd_new(TALLOC_CTX *mem_ctx);
+void trp_upd_free(TRP_UPD *update);
+TRP_REQ *trp_req_new(TALLOC_CTX *mem_ctx);
+void trp_req_free(TRP_REQ *req);
+TRP_INFOREC *trp_inforec_new(TALLOC_CTX *mem_ctx, TRP_INFOREC_TYPE type);
+void trp_inforec_free(TRP_INFOREC *rec);
+TR_NAME *trp_inforec_get_comm(TRP_INFOREC *rec);
+TRP_RC trp_inforec_set_comm(TRP_INFOREC *rec, TR_NAME *comm);
+TR_NAME *trp_inforec_get_realm(TRP_INFOREC *rec);
+TRP_RC trp_inforec_set_realm(TRP_INFOREC *rec, TR_NAME *realm);
+TR_NAME *trp_inforec_get_trust_router(TRP_INFOREC *rec);
+TRP_RC trp_inforec_set_trust_router(TRP_INFOREC *rec, TR_NAME *trust_router);
+unsigned int trp_inforec_get_metric(TRP_INFOREC *rec);
+TRP_RC trp_inforec_set_metric(TRP_INFOREC *rec, unsigned int metric);
+unsigned int trp_inforec_get_interval(TRP_INFOREC *rec);
+TRP_RC trp_inforec_set_interval(TRP_INFOREC *rec, unsigned int interval);
-/* REMOVE THIS!! --jennifer, 2016-06-13 */
-typedef TRP_MSG TRP_REQ;
-typedef TRP_MSG TRP_RESP;
+typedef struct trps_instance TRPS_INSTANCE;
-typedef int (TRPS_REQ_FUNC)(TRPS_INSTANCE *, TRP_REQ *, TRP_RESP *, void *);
-typedef void (TRPS_RESP_FUNC)(TRPS_INSTANCE *, TRP_REQ *, TRP_RESP *, void *);
+typedef int (TRPS_REQ_FUNC)();
+typedef void (TRPS_RESP_FUNC)();
typedef int (trps_auth_func)(gss_name_t client_name, TR_NAME *display_name, void *cookie);