7 #include <trust_router/tr_dh.h>
10 #define TRP_METRIC_INFINITY 0xFFFF
11 #define TRP_METRIC_INVALID 0xFFFFFFFF
12 #define TRP_INTERVAL_INVALID 0
16 TRP_ERROR, /* generic error */
17 TRP_NOPARSE, /* parse error */
18 TRP_NOMEM, /* allocation error */
19 TRP_BADTYPE, /* typing error */
20 TRP_UNSUPPORTED, /* unsupported feature */
24 typedef enum trp_msg_type {
25 TRP_MSG_TYPE_UNKNOWN=0, /* conveniently, JSON parser returns 0 if a non-integer number is specified */
27 TRP_MSG_TYPE_ROUTE_REQ
31 typedef enum trp_msg_info_type {
32 TRP_MSG_INFO_TYPE_UNKNOWN=0, /* conveniently, JSON parser returns 0 if a non-integer number is specified */
33 TRP_MSG_INFO_TYPE_ROUTE,
34 TRP_MSG_INFO_TYPE_COMMUNITY, /* not yet implemented (2016-06-14) */
37 typedef struct trp_msg {
42 /* update msg record types */
43 typedef struct trp_msg_info_rec TRP_MSG_INFO_REC;
44 struct trp_msg_info_rec {
45 TRP_MSG_INFO_REC *next;
46 TRP_MSG_INFO_TYPE type;
47 void *data; /* pointer to one of the record types */
50 typedef struct trp_msg_info_route {
53 TR_NAME *trust_router;
55 unsigned int interval;
58 /* TODO: define struct trp_msg_info_community */
60 typedef struct trp_route_update {
64 typedef struct trp_route_req {
69 TRP_MSG_TYPE trp_msg_type_from_string(const char *s);
70 const char *trp_msg_type_to_string(TRP_MSG_TYPE msgtype);
71 TRP_MSG_INFO_TYPE trp_msg_info_type_from_string(const char *s);
72 const char *trp_msg_info_type_to_string(TRP_MSG_INFO_TYPE msgtype);
74 TRP_MSG *trp_msg_new(TALLOC_CTX *mem_ctx);
75 void trp_msg_destroy(TRP_MSG *msg);
76 void trp_msg_pprint(TRP_MSG *msg);
77 char *trp_encode_msg(TRP_MSG *msg);
79 TR_NAME *trp_msg_info_route_get_comm(TRP_MSG_INFO_REC *rec);
80 TR_NAME *trp_msg_info_route_get_realm(TRP_MSG_INFO_REC *rec);
81 TR_NAME *trp_msg_info_route_get_trust_router(TRP_MSG_INFO_REC *rec);
82 unsigned int trp_msg_info_route_get_metric(TRP_MSG_INFO_REC *rec);
83 unsigned int trp_msg_info_route_get_interval(TRP_MSG_INFO_REC *rec);
85 typedef struct trps_instance TRPS_INSTANCE;
87 /* REMOVE THIS!! --jennifer, 2016-06-13 */
88 typedef TRP_MSG TRP_REQ;
89 typedef TRP_MSG TRP_RESP;
92 typedef int (TRPS_REQ_FUNC)(TRPS_INSTANCE *, TRP_REQ *, TRP_RESP *, void *);
93 typedef void (TRPS_RESP_FUNC)(TRPS_INSTANCE *, TRP_REQ *, TRP_RESP *, void *);
94 typedef int (trps_auth_func)(gss_name_t client_name, TR_NAME *display_name, void *cookie);
97 /* encapsulate a gss context and its connection file handle */
98 typedef struct trps_connection {
100 gss_ctx_id_t *gssctx;
103 /* a collection of the above */
104 #define TRPS_CONNECTIONS_MAX 10
105 typedef struct trps_connection_set {
106 TRPS_CONNECTION *conn[TRPS_CONNECTIONS_MAX];
108 } TRPS_CONNECTION_SET;
110 /* TRP Client Instance Data */
111 typedef struct trpc_instance {
112 DH *client_dh; /* Client's DH struct with priv and pub keys */
115 /* TRP Server Instance Data */
116 struct trps_instance {
119 TRPS_REQ_FUNC *req_handler;
120 trps_auth_func *auth_handler;
122 struct tr_rp_client *rp_gss; /* Client matching GSS name, TBD -- FIX ME (??) */
123 TRPS_CONNECTION_SET *connections; /* active GSS connections */
127 TRPS_ERR_OK=0, /* success */
128 TRPS_ERR_NOMEM, /* allocation problem */
129 TRPS_ERR_MAX_CONN, /* out of connections */
130 TRPS_ERR_UNKNOWN /* catch-all */
135 /* these should probably be static? */
136 TRPS_CONNECTION *trps_connection_new(TALLOC_CTX *mem_ctx);
137 TRPS_CONNECTION_SET *trps_connection_set_new(TALLOC_CTX *mem_ctx);
138 TRPS_ERR trps_connection_set_add(TRPS_CONNECTION_SET *tcs, TRPS_CONNECTION *new_conn);
139 TRPS_ERR trps_connection_set_del(TRPS_CONNECTION_SET *tcs, TRPS_CONNECTION *conn);
140 unsigned int trps_connection_set_len(TRPS_CONNECTION_SET *tcs);
142 TRPC_INSTANCE *trpc_create (TALLOC_CTX *mem_ctx);
143 void trpc_destroy (TRPC_INSTANCE *trpc);
144 int trpc_open_connection (TRPC_INSTANCE *trpc, char *server, unsigned int port, gss_ctx_id_t *gssctx);
145 int trpc_send_msg (TRPC_INSTANCE *trpc, int conn, gss_ctx_id_t gssctx, const char *msg_content,
146 int *resp_handler(), void *cookie);
148 TRPS_INSTANCE *trps_create (TALLOC_CTX *mem_ctx);
149 void trps_destroy (TRPS_INSTANCE *trps);
150 int trps_send_msg (TRPS_INSTANCE *trps, int conn, gss_ctx_id_t gssctx, const char *msg_content);
151 int trps_accept(TRPS_INSTANCE *trps, int listen);
153 #endif /* TRP_INTERNAL_H */