Allow caller to set port number for tidc_open_connection(). Install
[trust_router.git] / common / tr_constraint.c
index 0910d76..aa3d4fc 100644 (file)
  * OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
-
 #include <jansson.h>
 
+#include <tr_filter.h>
+#include <trust_router/tr_constraint.h>
+
+TR_CONSTRAINT_SET *tr_constraint_set_from_fline (TR_FLINE *fline)
+{
+  json_t *cset = NULL;
+
+  if (!fline)
+    return NULL;
+
+  if (fline->realm_cons)
+    tr_constraint_add_to_set(&cset, fline->realm_cons);
+  if (fline->domain_cons)
+    tr_constraint_add_to_set(&cset, fline->domain_cons);
+  
+   return cset;
+}
+
+/* A constraint set is represented in json as an array of constraint
+ * objects.  So, a constraint set (cset) that consists of one realm
+ * constraint and one domain constraint might look like:
+ *
+ *     {cset: [{domain: [a.com, b.co.uk]},
+ *             {realm: [c.net, d.org]}]}
+ */
+
+void tr_constraint_add_to_set (TR_CONSTRAINT_SET **cset, TR_CONSTRAINT *cons)
+{
+  json_t *jcons = NULL;
+  json_t *jmatches = NULL;
+  int i = 0;
+
+  if ((!cset) || (!cons))
+    return;
+
+  /* If we don't already have a json object, create one */
+  if (!(*cset))
+    *cset = json_array();
+
+  /* Create a json object representing cons */
+  jmatches = json_array();
+  jcons = json_object();
+
+  for (i = 0; ((i < TR_MAX_CONST_MATCHES) && (NULL != cons->matches[i])); i++) {
+    json_array_append_new(jmatches, json_string(cons->matches[i]->buf));
+  }
+
+  json_object_set_new(jcons, cons->type->buf, jmatches);
+  
+  /* Add the created object to the cset object */
+  json_array_append_new(*cset, jcons);
+} 
+