[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r34055 - gnunet/src/multicast,
gnunet <=