Code to check community membership on TR.
[trust_router.git] / common / tr_comm.c
index 660ed4b..e032ea8 100644 (file)
  */
 
 #include <trust_router/tr_name.h>
+#include <tr_config.h>
 #include <tr.h>
 #include <tr_comm.h>
+#include <tr_rp.h>
+
+TR_IDP_REALM *tr_find_comm_idp (TR_COMM *comm, TR_NAME *idp_realm)
+{
+  TR_IDP_REALM *idp;
+
+  if ((!comm) || (!idp_realm)) {
+    return NULL;
+  }
+
+  for (idp = comm->idp_realms; NULL != idp; idp = idp->next) {
+    if (!tr_name_cmp (idp_realm, idp->realm_id)) {
+      fprintf(stderr, "tr_find_comm_idp: Found %s.\n", idp_realm->buf);
+      return idp;
+    }
+  }
+  /* if we didn't find one, return NULL */ 
+  return NULL;
+}
+
+TR_RP_REALM *tr_find_comm_rp (TR_COMM *comm, TR_NAME *rp_realm)
+{
+  TR_RP_REALM *rp;
+
+  if ((!comm) || (!rp_realm)) {
+    return NULL;
+  }
+
+  for (rp = comm->rp_realms; NULL != rp; rp = rp->next) {
+    if (!tr_name_cmp (rp_realm, rp->realm_name)) {
+      fprintf(stderr, "tr_find_comm_idp: Found %s.\n", rp_realm->buf);
+      return rp;
+    }
+  }
+  /* if we didn't find one, return NULL */ 
+  return NULL;
+}
 
 TR_COMM *tr_comm_lookup(TR_INSTANCE *tr, TR_NAME *comm) 
 {
+  TR_COMM *cfg_comm = NULL;
+
+  for (cfg_comm = tr->active_cfg->comms; NULL != cfg_comm; cfg_comm = cfg_comm->next) {
+    if ((cfg_comm->id->len == comm->len) &&
+       (!strncmp(cfg_comm->id->buf, comm->buf, comm->len)))
+      return cfg_comm;
+  }
   return NULL;
 }