gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r34055 - gnunet/src/multicast


From: gnunet
Subject: [GNUnet-SVN] r34055 - gnunet/src/multicast
Date: Fri, 25 Jul 2014 15:24:15 +0200

Author: tg
Date: 2014-07-25 15:24:15 +0200 (Fri, 25 Jul 2014)
New Revision: 34055

Modified:
   gnunet/src/multicast/gnunet-service-multicast.c
   gnunet/src/multicast/multicast.h
   gnunet/src/multicast/multicast_api.c
Log:
multicast: send join decision to remote peer

Modified: gnunet/src/multicast/gnunet-service-multicast.c
===================================================================
--- gnunet/src/multicast/gnunet-service-multicast.c     2014-07-25 11:42:08 UTC 
(rev 34054)
+++ gnunet/src/multicast/gnunet-service-multicast.c     2014-07-25 13:24:15 UTC 
(rev 34055)
@@ -70,19 +70,19 @@
 static struct GNUNET_SERVER_NotificationContext *nc;
 
 /**
- * All connected origins.
+ * All connected origin clients.
  * Group's pub_key_hash -> struct Origin * (uniq)
  */
 static struct GNUNET_CONTAINER_MultiHashMap *origins;
 
 /**
- * All connected members.
+ * All connected member clients.
  * Group's pub_key_hash -> struct Member * (multi)
  */
 static struct GNUNET_CONTAINER_MultiHashMap *members;
 
 /**
- * Connected members per group.
+ * Connected member clients per group.
  * Group's pub_key_hash -> Member's pub_key_hash (uniq) -> struct Member * 
(uniq)
  */
 static struct GNUNET_CONTAINER_MultiHashMap *group_members;
@@ -437,8 +437,8 @@
  * Send message to all clients connected to the group.
  */
 static void
-client_send (const struct Group *grp,
-             const struct GNUNET_MessageHeader *msg)
+client_send_msg (const struct Group *grp,
+                 const struct GNUNET_MessageHeader *msg)
 {
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
               "%p Sending message to clients.\n", grp);
@@ -463,7 +463,7 @@
   const struct GNUNET_MessageHeader *msg = cls;
   struct Member *orig = origin;
 
-  client_send (&orig->grp, msg);
+  client_send_msg (&orig->grp, msg);
   return GNUNET_YES;
 }
 
@@ -480,7 +480,7 @@
 
   if (NULL != mem->join_dcsn)
   { /* Only send message to admitted members */
-    client_send (&mem->grp, msg);
+    client_send_msg (&mem->grp, msg);
   }
   return GNUNET_YES;
 }
@@ -616,7 +616,38 @@
 }
 
 
+static int
+cadet_send_join_decision_cb (void *cls,
+                             const struct GNUNET_HashCode *group_key_hash,
+                             void *channel)
+{
+  const struct MulticastJoinDecisionMessageHeader *hdcsn = cls;
+  struct Channel *chn = channel;
+
+  if (0 == memcmp (&hdcsn->member_key, &chn->member_key, sizeof 
(chn->member_key))
+      && 0 == memcmp (&hdcsn->peer, &chn->peer, sizeof (chn->peer)))
+  {
+    cadet_send_msg (chn, &hdcsn->header);
+    return GNUNET_NO;
+  }
+  return GNUNET_YES;
+}
+
+
 /**
+ * Send join decision to a remote peer.
+ */
+static void
+cadet_send_join_decision (struct Group *grp,
+                          const struct MulticastJoinDecisionMessageHeader 
*hdcsn)
+{
+  GNUNET_CONTAINER_multihashmap_get_multiple (channels_in, &grp->pub_key_hash,
+                                              &cadet_send_join_decision_cb,
+                                              (void *) hdcsn);
+}
+
+
+/**
  * Iterator callback for sending a message to origin clients.
  */
 static int
@@ -797,7 +828,7 @@
     req->header.size = htons (sizeof (*req) + join_msg_size);
     req->header.type = htons (GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_REQUEST);
     req->group_key = grp->pub_key;
-    req->member_peer = this_peer;
+    req->peer = this_peer;
     GNUNET_CRYPTO_ecdsa_key_get_public (&mem->priv_key, &req->member_key);
     if (0 < join_msg_size)
       memcpy (&req[1], join_msg, join_msg_size);
@@ -832,7 +863,7 @@
 client_send_join_decision (struct Member *mem,
                            const struct MulticastJoinDecisionMessageHeader 
*hdcsn)
 {
-  client_send (&mem->grp, &hdcsn->header);
+  client_send_msg (&mem->grp, &hdcsn->header);
 
   const struct MulticastJoinDecisionMessage *
     dcsn = (const struct MulticastJoinDecisionMessage *) &hdcsn[1];
@@ -854,6 +885,7 @@
   }
 }
 
+
 /**
  * Join decision from client.
  */
@@ -870,29 +902,27 @@
               "%p Got join decision from client for group %s..\n",
               grp, GNUNET_h2s (&grp->pub_key_hash));
 
-  if (GNUNET_YES
-      == GNUNET_CONTAINER_multihashmap_contains (origins, &grp->pub_key_hash))
-  { /* Local origin */
-    struct GNUNET_CONTAINER_MultiHashMap *
-      grp_mem = GNUNET_CONTAINER_multihashmap_get (group_members,
-                                                   &grp->pub_key_hash);
-    if (NULL != grp_mem)
-    {
-      struct GNUNET_HashCode member_key_hash;
-      GNUNET_CRYPTO_hash (&hdcsn->member_key, sizeof (hdcsn->member_key),
-                          &member_key_hash);
-      struct Member *
-        mem = GNUNET_CONTAINER_multihashmap_get (grp_mem, &member_key_hash);
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "%p ..and member %s: %p\n",
-                  grp, GNUNET_h2s (&member_key_hash), mem);
-      if (NULL != mem)
-        client_send_join_decision (mem, hdcsn);
-    }
+  struct GNUNET_CONTAINER_MultiHashMap *
+    grp_mem = GNUNET_CONTAINER_multihashmap_get (group_members,
+                                                 &grp->pub_key_hash);
+  struct Member *mem = NULL;
+  if (NULL != grp_mem)
+  {
+    struct GNUNET_HashCode member_key_hash;
+    GNUNET_CRYPTO_hash (&hdcsn->member_key, sizeof (hdcsn->member_key),
+                        &member_key_hash);
+    mem = GNUNET_CONTAINER_multihashmap_get (grp_mem, &member_key_hash);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "%p ..and member %s: %p\n",
+                grp, GNUNET_h2s (&member_key_hash), mem);
   }
+  if (NULL != mem)
+  { /* Found local member */
+    client_send_join_decision (mem, hdcsn);
+  }
   else
-  {
-    /* FIXME: send join decision to hdcsn->peer */
+  { /* Look for remote member */
+    cadet_send_join_decision (grp, hdcsn);
   }
   GNUNET_SERVER_receive_done (client, GNUNET_OK);
 }
@@ -1097,7 +1127,7 @@
   chn->group_key = req->group_key;
   chn->group_key_hash = group_key_hash;
   chn->member_key = req->member_key;
-  chn->peer = req->member_peer;
+  chn->peer = req->peer;
   chn->join_status = JOIN_WAITING;
   GNUNET_CONTAINER_multihashmap_put (channels_in, &chn->group_key_hash, chn,
                                      
GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
@@ -1108,7 +1138,7 @@
 
 
 /**
- * Incoming join request message from CADET.
+ * Incoming join decision message from CADET.
  */
 int
 cadet_recv_join_decision (void *cls,

Modified: gnunet/src/multicast/multicast.h
===================================================================
--- gnunet/src/multicast/multicast.h    2014-07-25 11:42:08 UTC (rev 34054)
+++ gnunet/src/multicast/multicast.h    2014-07-25 13:24:15 UTC (rev 34055)
@@ -70,7 +70,7 @@
   /**
    * Peer identity of the joining member.
    */
-  struct GNUNET_PeerIdentity member_peer;
+  struct GNUNET_PeerIdentity peer;
 
   /* Followed by struct GNUNET_MessageHeader join_message */
 };

Modified: gnunet/src/multicast/multicast_api.c
===================================================================
--- gnunet/src/multicast/multicast_api.c        2014-07-25 11:42:08 UTC (rev 
34054)
+++ gnunet/src/multicast/multicast_api.c        2014-07-25 13:24:15 UTC (rev 
34055)
@@ -159,7 +159,7 @@
   /**
    * Peer identity of the member requesting join.
    */
-  struct GNUNET_PeerIdentity member_peer;
+  struct GNUNET_PeerIdentity peer;
 };
 
 
@@ -232,7 +232,7 @@
   struct GNUNET_MULTICAST_JoinHandle *jh = GNUNET_malloc (sizeof (*jh));
   jh->group = grp;
   jh->member_key = jreq->member_key;
-  jh->member_peer = jreq->member_peer;
+  jh->peer = jreq->peer;
 
   const struct GNUNET_MessageHeader *jmsg = NULL;
   if (sizeof (*jreq) + sizeof (*jmsg) <= ntohs (jreq->header.size))
@@ -461,7 +461,7 @@
                               + relay_size + join_resp_size);
   hdcsn->header.type = htons (GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION);
   hdcsn->member_key = join->member_key;
-  hdcsn->peer = join->member_peer;
+  hdcsn->peer = join->peer;
 
   dcsn = (struct MulticastJoinDecisionMessage *) &hdcsn[1];
   dcsn->header.type = htons (GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]