+typedef int (tids_auth_func)(gss_name_t client_name, TR_NAME *display_name, void *cookie);
+
+
+
+/* Utility functions for TID_REQ structures, in tid/tid_req.c */
+TR_EXPORT TID_REQ *tid_req_new(void);
+TR_EXPORT TID_REQ *tid_req_get_next_req(TID_REQ *req);
+void tid_req_set_next_req(TID_REQ *req, TID_REQ *next_req);
+TR_EXPORT int tid_req_get_resp_sent(TID_REQ *req);
+void tid_req_set_resp_sent(TID_REQ *req, int resp_sent);
+TR_EXPORT int tid_req_get_conn(TID_REQ *req);
+void tid_req_set_conn(TID_REQ *req, int conn);
+TR_EXPORT gss_ctx_id_t tid_req_get_gssctx(TID_REQ *req);
+void tid_req_set_gssctx(TID_REQ *req, gss_ctx_id_t gssctx);
+TR_EXPORT int tid_req_get_resp_rcvd(TID_REQ *req);
+void tid_req_set_resp_rcvd(TID_REQ *req, int resp_rcvd);
+TR_EXPORT TR_NAME *tid_req_get_rp_realm(TID_REQ *req);
+void tid_req_set_rp_realm(TID_REQ *req, TR_NAME *rp_realm);
+TR_EXPORT TR_NAME *tid_req_get_realm(TID_REQ *req);
+void tid_req_set_realm(TID_REQ *req, TR_NAME *realm);
+TR_EXPORT TR_NAME *tid_req_get_comm(TID_REQ *req);
+void tid_req_set_comm(TID_REQ *req, TR_NAME *comm);
+TR_EXPORT TR_NAME *tid_req_get_orig_coi(TID_REQ *req);
+void tid_req_set_rp_orig_coi(TID_REQ *req, TR_NAME *orig_coi);
+TR_EXPORT TIDC_RESP_FUNC *tid_req_get_resp_func(TID_REQ *req);
+void tid_req_set_resp_func(TID_REQ *req, TIDC_RESP_FUNC *resp_func);
+TR_EXPORT void *tid_req_get_cookie(TID_REQ *req);
+void tid_req_set_cookie(TID_REQ *req, void *cookie);
+TR_EXPORT TID_REQ *tid_dup_req (TID_REQ *orig_req);
+TR_EXPORT void tid_req_free( TID_REQ *req);
+
+/* Utility functions for TID_RESP structure, in tid/tid_resp.c */
+
+TID_RESP *tid_resp_new(TALLOC_CTX *mem_ctx);
+void tid_resp_free(TID_RESP *resp);
+TID_RESP *tid_resp_dup(TALLOC_CTX *mem_ctx, TID_RESP *resp);
+TR_EXPORT int tid_resp_get_result(TID_RESP *resp);
+void tid_resp_set_result(TID_RESP *resp, int result);
+TR_EXPORT TR_NAME *tid_resp_get_err_msg(TID_RESP *resp);
+void tid_resp_set_err_msg(TID_RESP *resp, TR_NAME *err_msg);
+TR_EXPORT TR_NAME *tid_resp_get_rp_realm(TID_RESP *resp);
+void tid_resp_set_rp_realm(TID_RESP *resp, TR_NAME *rp_realm);
+TR_EXPORT TR_NAME *tid_resp_get_realm(TID_RESP *resp);
+void tid_resp_set_realm(TID_RESP *resp, TR_NAME *realm);
+TR_EXPORT TR_NAME *tid_resp_get_comm(TID_RESP *resp);
+void tid_resp_set_comm(TID_RESP *resp, TR_NAME *comm);
+TR_EXPORT TR_NAME *tid_resp_get_orig_coi(TID_RESP *resp);
+void tid_resp_set_orig_coi(TID_RESP *resp, TR_NAME *orig_coi);
+TR_EXPORT TID_SRVR_BLK *tid_resp_get_server(TID_RESP *resp, size_t index);
+TR_EXPORT size_t tid_resp_get_num_servers(const TID_RESP *resp);
+TR_EXPORT const TID_PATH *tid_resp_get_error_path(const TID_RESP *);
+
+/** Get either the error_path or the path of the first server block for
+ * a successful response*/
+TR_EXPORT const TID_PATH *tid_resp_get_a_path(const TID_RESP *);
+/* Server blocks*/
+TR_EXPORT void tid_srvr_get_address(const TID_SRVR_BLK *,
+ const struct sockaddr **out_addr, size_t *out_sa_len);
+TR_EXPORT DH *tid_srvr_get_dh(TID_SRVR_BLK *);
+TR_EXPORT const TR_NAME *tid_srvr_get_key_name(const TID_SRVR_BLK *);
+TR_EXPORT const TID_PATH *tid_srvr_get_path(const TID_SRVR_BLK *);
+/* Key expiration time is expressed as time since 1970-01-01 00:00:00 UTC */
+TR_EXPORT int tid_srvr_get_key_expiration(const TID_SRVR_BLK *, struct timeval *tv_out);
+
+#define tid_resp_servers_foreach(RESP, SERVER, INDEX) \
+ for (INDEX=0,SERVER=NULL; \
+ ((INDEX < tid_resp_get_num_servers(RESP))&&(SERVER = tid_resp_get_server(resp, INDEX))); \
+ INDEX++)
+