tr_constraint_set_get_match_strings
[trust_router.git] / include / trust_router / tr_constraint.h
index d740a3a..28f6bd4 100644 (file)
 
 #ifndef TR_CONSTRAINT_H
 #define TR_CONSTRAINT_H
-
 #include <trust_router/tr_name.h>
-#include <jansson.h>
+#include <trust_router/tid.h>
+
 
 #define TR_MAX_CONST_MATCHES 24
 
-typedef struct tr_fline TR_FLINE;
-typedef json_t TR_CONSTRAINT_SET;
 
 typedef struct tr_constraint {
   TR_NAME *type;
   TR_NAME *matches[TR_MAX_CONST_MATCHES];
 } TR_CONSTRAINT;
 
-TR_CONSTRAINT_SET *tr_constraint_set_from_fline (TR_FLINE *fline);
-void tr_constraint_add_to_set (TR_CONSTRAINT_SET **cs, TR_CONSTRAINT *c);
+void TR_EXPORT tr_constraint_add_to_set (TR_CONSTRAINT_SET **cs, TR_CONSTRAINT *c);
+
+int TR_EXPORT tr_constraint_set_validate( TR_CONSTRAINT_SET *);
+/**
+ * Create a new constraint set containing all constraints from #orig
+ * with constraint_type #constraint_type and no others.  This constraint set is
+ * live until #request is freed.
+ */
+TR_EXPORT TR_CONSTRAINT_SET *tr_constraint_set_filter(TID_REQ *request,
+                                  TR_CONSTRAINT_SET *orig,
+                                  const char * constraint_type);
+
+TR_EXPORT TR_CONSTRAINT_SET
+*tr_constraint_set_intersect(TID_REQ *request,
+                            TR_CONSTRAINT_SET *input);
+
+/** Get the set of wildcard strings that matches a fully intersected
+ * constraint set.  Requires that the constraint set only have one
+ * constraint in it, but the constraint may have multiple matches for
+ * a given type.  Returns true on success false on failure.  The
+ * output is live as long as the request is live.
+ */
+int TR_EXPORT tr_constraint_set_get_match_strings(TID_REQ *,
+                                           TR_CONSTRAINT_SET *,
+                                                 const char * constraint_type,
+                                                 tr_const_string **output,
+                                           size_t *output_len);
 
 #endif