[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r7985 - GNUnet/src/applications/dv/module
From: |
gnunet |
Subject: |
[GNUnet-SVN] r7985 - GNUnet/src/applications/dv/module |
Date: |
Wed, 3 Dec 2008 14:34:03 -0700 (MST) |
Author: nevans
Date: 2008-12-03 14:34:02 -0700 (Wed, 03 Dec 2008)
New Revision: 7985
Modified:
GNUnet/src/applications/dv/module/dv.c
Log:
backup before change
Modified: GNUnet/src/applications/dv/module/dv.c
===================================================================
--- GNUnet/src/applications/dv/module/dv.c 2008-12-03 19:58:39 UTC (rev
7984)
+++ GNUnet/src/applications/dv/module/dv.c 2008-12-03 21:34:02 UTC (rev
7985)
@@ -41,6 +41,7 @@
unsigned long long fisheye_depth;
unsigned long long max_table_size;
+unsigned int send_interval;
unsigned short curr_table_size;
unsigned short closing = 0;
@@ -50,6 +51,7 @@
* Generic list structure for neighbor lists
*/
struct GNUNET_dv_neighbor *next;
+ struct GNUNET_dv_neighbor *prev;
/**
* Identity of neighbor
@@ -102,46 +104,55 @@
return ret;
}
+/*
+ * Handles the receipt of a peer disconnect notification.
+ *
+ */
static void
peer_disconnect_handler (const GNUNET_PeerIdentity * peer, void *unused)
{
struct GNUNET_dv_neighbor *pos = neighbors;
- struct GNUNET_dv_neighbor *prev = NULL;
- int not_found = 1;
+ struct GNUNET_dv_neighbor *temp = NULL;
+
GNUNET_mutex_lock (dvMutex);
- while ((pos->next != NULL) && (not_found))
- {
- prev = pos;
- if (memcmp (&peer, &pos->next->neighbor, sizeof (GNUNET_PeerIdentity))
- == 0)
- not_found = 0;
- pos = pos->next;
- }
- if ((prev == NULL)
- && (memcmp (&peer, &pos->next->neighbor, sizeof (GNUNET_PeerIdentity))
- == 0))
- {
- if (neighbors->referrer != NULL)
- GNUNET_free (neighbors->referrer);
- GNUNET_free (neighbors);
- neighbors = NULL;
- curr_table_size = 0;
- }
- else if (prev != NULL)
- {
- prev->next = pos->next;
- GNUNET_free (pos->neighbor);
- if (pos->referrer != NULL)
- GNUNET_free (pos->referrer);
- GNUNET_free (pos);
- }
- GNUNET_mutex_unlock (dvMutex);
+
+ while (pos != NULL)
+ {
+ if ((memcmp (&peer, &pos->neighbor, sizeof (GNUNET_PeerIdentity))
+ == 0) || (memcmp (&peer, &pos->referrer, sizeof
(GNUNET_PeerIdentity))
+ == 0))
+ {
+ if (pos->prev != NULL)
+ {
+ pos->prev->next = pos->next;
+ }
+ else
+ {
+ neighbors = pos->next;
+ }
+
+ if (pos->next != NULL)
+ {
+ pos->next->prev = pos->prev;
+ }
+
+ temp = pos->next;
+ GNUNET_free(pos->neighbor);
+ if (pos->referrer != NULL)
+ GNUNET_free(pos->referrer);
+ GNUNET_free(pos);
+ pos = temp;
+ }
+ else
+ pos = pos->next;
+ }
+
+ GNUNET_mutex_unlock (dvMutex);
return;
}
struct GNUNET_dv_neighbor *
-findNeighbor (const GNUNET_PeerIdentity * neighbor,
- const GNUNET_PeerIdentity * referrer)
+findNeighbor (const GNUNET_PeerIdentity * neighbor)
{
struct GNUNET_dv_neighbor *pos = neighbors;
@@ -150,14 +161,7 @@
if (memcmp (&neighbor, &pos->neighbor, sizeof (GNUNET_PeerIdentity)) ==
0)
{
- if ((referrer == NULL) && (&pos->referrer == NULL))
- return pos;
- else if ((referrer != NULL) && (&pos->referrer != NULL)
- &&
- (memcmp
- (&referrer, &pos->referrer,
- sizeof (GNUNET_PeerIdentity)) == 0))
- return pos;
+ return pos;
}
pos = pos->next;
}
@@ -171,7 +175,7 @@
int ret = GNUNET_OK;
GNUNET_mutex_lock (dvMutex);
- struct GNUNET_dv_neighbor *dv_neighbor = findNeighbor (neighbor, referrer);
+ struct GNUNET_dv_neighbor *dv_neighbor = findNeighbor (neighbor);
if (dv_neighbor != NULL)
{
@@ -179,6 +183,18 @@
{
dv_neighbor->cost = cost;
}
+ if ((referrer != NULL) && (dv_neighbor->referrer != NULL) &&
(memcmp(dv_neighbor->referrer,referrer,sizeof(GNUNET_PeerIdentity)) != 0))
+ {
+ GNUNET_free(dv_neighbor->referrer);
+ dv_neighbor->referrer = GNUNET_malloc(sizeof(GNUNET_PeerIdentity));
+ memcpy(&dv_neighbor->referrer,&referrer,sizeof(GNUNET_PeerIdentity));
+ }
+ else if ((referrer != NULL)&&(dv_neighbor->referrer == NULL))
+ {
+ dv_neighbor->referrer = GNUNET_malloc(sizeof(GNUNET_PeerIdentity));
+ memcpy(&dv_neighbor->referrer,&referrer,sizeof(GNUNET_PeerIdentity));
+ }
+
}
else
{
@@ -199,6 +215,8 @@
dv_neighbor->referrer = NULL;
}
+ dv_neighbor->prev = NULL;
+ neighbors->prev = dv_neighbor;
dv_neighbor->next = neighbors;
neighbors = dv_neighbor;
curr_table_size++;
@@ -216,9 +234,9 @@
}
static void *
-connection_poll_dv_calc_thread (void *rcls)
+connection_poll_thread (void *rcls)
{
- static GNUNET_CoreAPIForPlugins *capi = rcls;
+ GNUNET_CoreAPIForPlugins *capi = rcls;
while (!closing)
{
@@ -226,8 +244,61 @@
GNUNET_thread_sleep (30 * GNUNET_CRON_SECONDS);
}
+ return NULL;
}
+static void *
+neighbor_send_thread (void *rcls)
+{
+
+ struct GNUNET_dv_neighbor *about = NULL;
+ struct GNUNET_dv_neighbor *to = NULL;
+ p2p_dv_MESSAGE_NeighborInfo *message =
GNUNET_malloc(sizeof(p2p_dv_MESSAGE_NeighborInfo));
+
+ message->header.size = htons (sizeof(p2p_dv_MESSAGE_NeighborInfo));
+ message->header.type = htons (GNUNET_P2P_PROTO_DV_NEIGHBOR_MESSAGE);
+ message->reserved = htonl(0);
+
+ while (!closing)
+ {
+ //updateSendInterval();
+ about = chooseAboutNeighbor();
+ to = chooseToNeighbor();
+
+ if (message->neighbor != NULL)
+ {
+ GNUNET_free(message->neighbor);
+ }
+ message->neighbor = GNUNET_malloc(sizeof(GNUNET_PeerIdentity));
+ message->cost = htonl(about->cost);
+
memcpy(&message->neighbor,&about->neighbor,sizeof(GNUNET_PeerIdentity));
+ coreAPI->ciphertext_send(to->neighbor,&message,0,send_interval
* GNUNET_CRON_MILLISECONDS);
+
+ GNUNET_thread_sleep (send_interval * GNUNET_CRON_MILLISECONDS);
+ }
+
+ if (message->neighbor != NULL)
+ {
+ GNUNET_free(message->neighbor);
+ }
+
+ GNUNET_free(message);
+
+ return NULL;
+}
+
+struct GNUNET_dv_neighbor *
+chooseToNeighbor()
+{
+
+}
+
+struct GNUNET_dv_neighbor *
+chooseAboutNeighbor()
+{
+
+}
+
int
initialize_module_dv (GNUNET_CoreAPIForPlugins * capi)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r7985 - GNUnet/src/applications/dv/module,
gnunet <=