[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r3211 - in GNUnet/src: applications/datastore applications/
From: |
grothoff |
Subject: |
[GNUnet-SVN] r3211 - in GNUnet/src: applications/datastore applications/fs applications/fs/module applications/gap applications/sqstore_sqlite include server |
Date: |
Sun, 6 Aug 2006 20:00:16 -0700 (PDT) |
Author: grothoff
Date: 2006-08-06 19:59:36 -0700 (Sun, 06 Aug 2006)
New Revision: 3211
Modified:
GNUnet/src/applications/datastore/datastore.c
GNUnet/src/applications/fs/ecrs_core.c
GNUnet/src/applications/fs/module/anonymity.c
GNUnet/src/applications/fs/module/anonymity.h
GNUnet/src/applications/fs/module/fs.c
GNUnet/src/applications/fs/module/migration.c
GNUnet/src/applications/fs/module/ondemand.c
GNUnet/src/applications/fs/module/ondemand.h
GNUnet/src/applications/fs/module/querymanager.c
GNUnet/src/applications/fs/module/querymanager.h
GNUnet/src/applications/gap/gap.c
GNUnet/src/applications/gap/gap.h
GNUnet/src/applications/gap/pid_table.c
GNUnet/src/applications/gap/pid_table.h
GNUnet/src/applications/sqstore_sqlite/sqlite.c
GNUnet/src/include/fs.h
GNUnet/src/include/gnunet_dht.h
GNUnet/src/server/gnunet-update.c
Log:
I70 hacking -- fixing compile errors
Modified: GNUnet/src/applications/datastore/datastore.c
===================================================================
--- GNUnet/src/applications/datastore/datastore.c 2006-08-03 22:02:24 UTC
(rev 3210)
+++ GNUnet/src/applications/datastore/datastore.c 2006-08-07 02:59:36 UTC
(rev 3211)
@@ -32,6 +32,7 @@
#include "gnunet_protocols.h"
#include "gnunet_datastore_service.h"
#include "gnunet_sqstore_service.h"
+#include "gnunet_state_service.h"
#include "filter.h"
#include "prefetch.h"
@@ -330,6 +331,7 @@
static Datastore_ServiceAPI api;
unsigned long long lquota;
unsigned int sqot;
+ State_ServiceAPI * state;
if (-1 == GC_get_configuration_value_number(capi->cfg,
"FS",
@@ -338,20 +340,28 @@
((unsigned long long)-1)/1024,
1024,
&lquota))
- return; /* OOPS */
+ return NULL; /* OOPS */
quota
= lquota * 1024L * 1024L; /* MB to bytes */
+ state = capi->requestService("state");
+ if (state != NULL) {
+ sqot = htonl(lquota);
+ state->write(capi->ectx,
+ "FS-LAST-QUOTA",
+ sizeof(unsigned int),
+ &sqot);
+ capi->releaseService(state);
+ } else {
+ GE_LOG(capi->ectx,
+ GE_USER | GE_ADMIN | GE_ERROR | GE_BULK,
+ _("Failed to load state service. Trying to do without.\n"));
+ }
sq = capi->requestService("sqstore");
if (sq == NULL) {
GE_BREAK(coreAPI->ectx, 0);
return NULL;
}
- sqot = htonl(lquota);
- stateWriteContent("FS-LAST-QUOTA",
- sizeof(unsigned int),
- &sqot);
-
coreAPI = capi;
initPrefetch(capi->ectx,
@@ -414,6 +424,7 @@
unsigned long long quota;
unsigned int lastQuota;
int * lq;
+ State_ServiceAPI * state;
if (-1 == GC_get_configuration_value_number(uapi->cfg,
"FS",
@@ -423,14 +434,26 @@
1024,
"a))
return; /* OOPS */
- lq = NULL;
- if (sizeof(int) != stateReadContent("FS-LAST-QUOTA",
- (void**)&lq))
- return; /* first start? */
- lastQuota = ntohl(*lq);
- FREE(lq);
- if (lastQuota == quota)
- return; /* unchanged */
+ state = uapi->requestService("state");
+ if (state != NULL) {
+ lq = NULL;
+ if (sizeof(int) != state->read(uapi->ectx,
+ "FS-LAST-QUOTA",
+ (void**)&lq)) {
+ uapi->releaseService(state);
+ return; /* first start? */
+ }
+ uapi->releaseService(state);
+ lastQuota = ntohl(*lq);
+ FREE(lq);
+ if (lastQuota == quota)
+ return; /* unchanged */
+ } else {
+ GE_LOG(uapi->ectx,
+ GE_USER | GE_ADMIN | GE_ERROR | GE_BULK,
+ _("Failed to load state service. Trying to do without.\n"));
+ }
+
/* ok, need to convert! */
deleteFilter(uapi->ectx,
uapi->cfg);
Modified: GNUnet/src/applications/fs/ecrs_core.c
===================================================================
--- GNUnet/src/applications/fs/ecrs_core.c 2006-08-03 22:02:24 UTC (rev
3210)
+++ GNUnet/src/applications/fs/ecrs_core.c 2006-08-07 02:59:36 UTC (rev
3211)
@@ -53,8 +53,8 @@
Datastore_Value * val;
DBlock * db;
- GE_ASSERT(ectx, len >= sizeof(DBlock));
- GE_ASSERT(ectx, (data!=NULL) && (query != NULL));
+ GE_ASSERT(NULL, len >= sizeof(DBlock));
+ GE_ASSERT(NULL, (data!=NULL) && (query != NULL));
hash(&data[1], len - sizeof(DBlock), &hc);
hashToKey(&hc,
&skey,
@@ -67,8 +67,8 @@
val->expirationTime = htonl(0);
db = (DBlock*) &val[1];
db->type = htonl(D_BLOCK);
- GE_ASSERT(ectx, len - sizeof(DBlock) < MAX_BUFFER_SIZE);
- GE_ASSERT(ectx, len - sizeof(DBlock)
+ GE_ASSERT(NULL, len - sizeof(DBlock) < MAX_BUFFER_SIZE);
+ GE_ASSERT(NULL, len - sizeof(DBlock)
== encryptBlock(&data[1],
len - sizeof(DBlock),
&skey,
@@ -83,7 +83,7 @@
return OK;
} else {
FREE(val);
- GE_BREAK(ectx, 0);
+ GE_BREAK(NULL, 0);
*value = NULL;
return SYSERR;
}
@@ -96,7 +96,7 @@
void fileBlockGetKey(const DBlock * data,
unsigned int len,
HashCode512 * key) {
- GE_ASSERT(ectx, len >= sizeof(DBlock));
+ GE_ASSERT(NULL, len >= sizeof(DBlock));
hash(&data[1],
len - sizeof(DBlock),
key);
@@ -117,16 +117,16 @@
SESSIONKEY skey;
INITVECTOR iv;
- GE_ASSERT(ectx, len >= sizeof(DBlock));
+ GE_ASSERT(NULL, len >= sizeof(DBlock));
data = (const char*) &db[1];
len -= sizeof(DBlock);
- GE_ASSERT(ectx, len < MAX_BUFFER_SIZE);
+ GE_ASSERT(NULL, len < MAX_BUFFER_SIZE);
hash(data, len, &hc);
hashToKey(&hc,
&skey,
&iv);
tmp = MALLOC(len);
- GE_ASSERT(ectx, len == encryptBlock(data,
+ GE_ASSERT(NULL, len == encryptBlock(data,
len,
&skey,
&iv,
@@ -138,7 +138,7 @@
unsigned int getTypeOfBlock(unsigned int size,
const DBlock * data) {
if (size <= 4) {
- GE_BREAK(ectx, 0);
+ GE_BREAK(NULL, 0);
return ANY_BLOCK; /* signal error */
}
return ntohl(*((const unsigned int*)data));
@@ -161,7 +161,7 @@
type = getTypeOfBlock(size, data);
if (type == ANY_BLOCK) {
- GE_BREAK(ectx, 0);
+ GE_BREAK(NULL, 0);
return SYSERR;
}
switch (type) {
@@ -174,7 +174,7 @@
case S_BLOCK: {
const SBlock * sb;
if (size < sizeof(SBlock)) {
- GE_BREAK(ectx, 0);
+ GE_BREAK(NULL, 0);
return SYSERR;
}
sb = (const SBlock*) data;
@@ -186,7 +186,7 @@
- sizeof(unsigned int),
&sb->signature,
&sb->subspace)) ) {
- GE_BREAK(ectx, 0);
+ GE_BREAK(NULL, 0);
return SYSERR;
}
*query = sb->identifier;
@@ -195,7 +195,7 @@
case K_BLOCK: {
const KBlock * kb;
if (size < sizeof(KBlock)) {
- GE_BREAK(ectx, 0);
+ GE_BREAK(NULL, 0);
return SYSERR;
}
kb = (const KBlock*) data;
@@ -204,7 +204,7 @@
size - sizeof(KBlock),
&kb->signature,
&kb->keyspace)) ) ) {
- GE_BREAK(ectx, 0);
+ GE_BREAK(NULL, 0);
return SYSERR;
}
hash(&kb->keyspace,
@@ -215,7 +215,7 @@
case N_BLOCK: {
const NBlock * nb;
if (size < sizeof(NBlock)) {
- GE_BREAK(ectx, 0);
+ GE_BREAK(NULL, 0);
return SYSERR;
}
nb = (const NBlock*) data;
@@ -227,7 +227,7 @@
- sizeof(unsigned int),
&nb->signature,
&nb->subspace)) ) {
- GE_BREAK(ectx, 0);
+ GE_BREAK(NULL, 0);
return SYSERR;
}
*query = nb->namespace; /* XOR with all zeros makes no difference... */
@@ -236,7 +236,7 @@
case KN_BLOCK: {
const KNBlock * kb;
if (size < sizeof(KNBlock)) {
- GE_BREAK(ectx, 0);
+ GE_BREAK(NULL, 0);
return SYSERR;
}
kb = (const KNBlock*) data;
@@ -247,7 +247,7 @@
- sizeof(unsigned int),
&kb->kblock.signature,
&kb->kblock.keyspace)) ) ) {
- GE_BREAK(ectx, 0);
+ GE_BREAK(NULL, 0);
return SYSERR;
}
hash(&kb->kblock.keyspace,
@@ -256,11 +256,11 @@
return OK;
}
case ONDEMAND_BLOCK: {
- GE_BREAK(ectx, 0); /* should never be used here! */
+ GE_BREAK(NULL, 0); /* should never be used here! */
return SYSERR;
}
default: {
- GE_BREAK(ectx, 0); /* unknown block type */
+ GE_BREAK(NULL, 0); /* unknown block type */
return SYSERR;
}
} /* end switch */
@@ -289,15 +289,15 @@
HashCode512 hc;
if (type != getTypeOfBlock(size, data)) {
- GE_BREAK(ectx, 0);
+ GE_BREAK(NULL, 0);
return SYSERR; /* type mismatch */
}
if (OK != getQueryFor(size, data, YES, &hc)) {
- GE_BREAK(ectx, 0); /* malformed data */
+ GE_BREAK(NULL, 0); /* malformed data */
return SYSERR;
}
if (! equalsHashCode512(&hc, &keys[0])) {
- GE_BREAK(ectx, 0); /* mismatch between primary queries,
+ GE_BREAK(NULL, 0); /* mismatch between primary queries,
we should not even see those here. */
return SYSERR;
}
@@ -330,13 +330,13 @@
case K_BLOCK:
case KN_BLOCK:
if (keyCount != 1)
- GE_BREAK(ectx, 0); /* keyCount should be 1 */
+ GE_BREAK(NULL, 0); /* keyCount should be 1 */
return OK; /* if query matches, everything matches! */
case ANY_BLOCK:
- GE_BREAK(ectx, 0); /* block type should be known */
+ GE_BREAK(NULL, 0); /* block type should be known */
return SYSERR;
default:
- GE_BREAK(ectx, 0); /* unknown block type */
+ GE_BREAK(NULL, 0); /* unknown block type */
return SYSERR;
}
}
Modified: GNUnet/src/applications/fs/module/anonymity.c
===================================================================
--- GNUnet/src/applications/fs/module/anonymity.c 2006-08-03 22:02:24 UTC
(rev 3210)
+++ GNUnet/src/applications/fs/module/anonymity.c 2006-08-07 02:59:36 UTC
(rev 3211)
@@ -42,7 +42,8 @@
*
* @return OK if cover traffic is sufficient
*/
-int checkCoverTraffic(Traffic_ServiceAPI * traffic,
+int checkCoverTraffic(struct GE_Context * ectx,
+ Traffic_ServiceAPI * traffic,
unsigned int level) {
unsigned int count;
unsigned int peers;
Modified: GNUnet/src/applications/fs/module/anonymity.h
===================================================================
--- GNUnet/src/applications/fs/module/anonymity.h 2006-08-03 22:02:24 UTC
(rev 3210)
+++ GNUnet/src/applications/fs/module/anonymity.h 2006-08-07 02:59:36 UTC
(rev 3211)
@@ -43,7 +43,8 @@
*
* @return OK if cover traffic is sufficient
*/
-int checkCoverTraffic(Traffic_ServiceAPI * traffic,
+int checkCoverTraffic(struct GE_Context * ectx,
+ Traffic_ServiceAPI * traffic,
unsigned int level);
#endif
Modified: GNUnet/src/applications/fs/module/fs.c
===================================================================
--- GNUnet/src/applications/fs/module/fs.c 2006-08-03 22:02:24 UTC (rev
3210)
+++ GNUnet/src/applications/fs/module/fs.c 2006-08-07 02:59:36 UTC (rev
3211)
@@ -84,7 +84,7 @@
*/
static Traffic_ServiceAPI * traffic;
-static Mutex lock;
+static struct MUTEX * lock;
static int migration;
@@ -93,12 +93,13 @@
*/
static DHT_TableId dht_table;
-static Semaphore * ltgSignal;
+static struct SEMAPHORE * ltgSignal;
-static PTHREAD_T localGetProcessor;
+static struct PTHREAD * localGetProcessor;
static LG_Job * lg_jobs;
+static struct GE_Context * ectx;
static Datastore_Value *
gapWrapperToDatastoreValue(const DataContainer * value,
@@ -124,7 +125,7 @@
dv->prio = htonl(prio);
dv->anonymityLevel = htonl(0);
et = ntohll(gw->timeout);
- cronTime(&now);
+ now = get_time();
/* bound ET to MAX_MIGRATION_EXP from now */
if (et > now) {
et -= now;
@@ -239,8 +240,8 @@
*
* @return SYSERR if the TCP connection should be closed, otherwise OK
*/
-static int csHandleRequestQueryStop(ClientHandle sock,
- const CS_MESSAGE_HEADER * req) {
+static int csHandleRequestQueryStop(struct ClientHandle * sock,
+ const MESSAGE_HEADER * req) {
CS_fs_request_search_MESSAGE * rs;
#if DEBUG_FS
EncName enc;
@@ -274,8 +275,8 @@
*
* @return SYSERR if the TCP connection should be closed, otherwise OK
*/
-static int csHandleCS_fs_request_insert_MESSAGE(ClientHandle sock,
- const CS_MESSAGE_HEADER * req) {
+static int csHandleCS_fs_request_insert_MESSAGE(struct ClientHandle * sock,
+ const MESSAGE_HEADER * req) {
const CS_fs_request_insert_MESSAGE * ri;
Datastore_Value * datum;
int ret;
@@ -321,10 +322,10 @@
memcpy(&datum[1],
&ri[1],
ntohs(req->size) - sizeof(CS_fs_request_insert_MESSAGE));
- MUTEX_LOCK(&lock);
+ MUTEX_LOCK(lock);
ret = datastore->put(&query,
datum);
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
if ( (ntohl(ri->anonymityLevel) == 0) &&
(dht != NULL) ) {
GapWrapper * gw;
@@ -341,7 +342,7 @@
gw->dc.size = htonl(size);
et = ntohll(ri->expiration);
/* expiration time normalization and randomization */
- cronTime(&now);
+ now = get_time();
if (et > now) {
et -= now;
et = et % MAX_MIGRATION_EXP;
@@ -370,8 +371,8 @@
/**
* Process a request to symlink a file
*/
-static int csHandleCS_fs_request_init_index_MESSAGE(ClientHandle sock,
- const CS_MESSAGE_HEADER *
req) {
+static int csHandleCS_fs_request_init_index_MESSAGE(struct ClientHandle * sock,
+ const MESSAGE_HEADER * req)
{
int ret;
char *fn;
CS_fs_request_init_index_MESSAGE *ri;
@@ -411,8 +412,8 @@
*
* @return SYSERR if the TCP connection should be closed, otherwise OK
*/
-static int csHandleCS_fs_request_index_MESSAGE(ClientHandle sock,
- const CS_MESSAGE_HEADER * req) {
+static int csHandleCS_fs_request_index_MESSAGE(struct ClientHandle * sock,
+ const MESSAGE_HEADER * req) {
int ret;
const CS_fs_request_index_MESSAGE * ri;
@@ -476,8 +477,8 @@
*
* @return SYSERR if the TCP connection should be closed, otherwise OK
*/
-static int csHandleCS_fs_request_delete_MESSAGE(ClientHandle sock,
- const CS_MESSAGE_HEADER * req) {
+static int csHandleCS_fs_request_delete_MESSAGE(struct ClientHandle * sock,
+ const MESSAGE_HEADER * req) {
int ret;
const CS_fs_request_delete_MESSAGE * rd;
Datastore_Value * value;
@@ -519,7 +520,7 @@
&enc,
type);
#endif
- MUTEX_LOCK(&lock);
+ MUTEX_LOCK(lock);
if (SYSERR == datastore->get(&query,
type,
&completeValue,
@@ -528,7 +529,7 @@
value);
else /* not found */
ret = SYSERR;
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
FREE(value);
#if DEBUG_FS
GE_LOG(ectx, GE_DEBUG | GE_REQUEST | GE_USER,
@@ -542,8 +543,8 @@
/**
* Process a client request unindex content.
*/
-static int csHandleCS_fs_request_unindex_MESSAGE(ClientHandle sock,
- const CS_MESSAGE_HEADER * req)
{
+static int csHandleCS_fs_request_unindex_MESSAGE(struct ClientHandle * sock,
+ const MESSAGE_HEADER * req) {
int ret;
CS_fs_request_unindex_MESSAGE * ru;
@@ -567,8 +568,8 @@
* Process a client request to test if certain
* data is indexed.
*/
-static int csHandleCS_fs_request_test_index_MESSAGEed(ClientHandle sock,
- const CS_MESSAGE_HEADER *
req) {
+static int csHandleCS_fs_request_test_index_MESSAGEed(struct ClientHandle *
sock,
+ const MESSAGE_HEADER *
req) {
int ret;
RequestTestindex * ru;
@@ -591,8 +592,8 @@
* Process a client request to obtain the current
* averge priority.
*/
-static int csHandleRequestGetAvgPriority(ClientHandle sock,
- const CS_MESSAGE_HEADER * req) {
+static int csHandleRequestGetAvgPriority(struct ClientHandle * sock,
+ const MESSAGE_HEADER * req) {
#if DEBUG_FS
GE_LOG(ectx, GE_DEBUG | GE_REQUEST | GE_USER,
"FS received REQUEST GETAVGPRIORITY\n");
@@ -683,7 +684,8 @@
level
= ntohl(value->anonymityLevel);
- if (OK != checkCoverTraffic(traffic,
+ if (OK != checkCoverTraffic(ectx,
+ traffic,
level)) {
/* traffic required by module not loaded;
refuse to hand out data that requires
@@ -701,7 +703,7 @@
gw->dc.size = htonl(size);
et = ntohll(value->expirationTime);
/* expiration time normalization and randomization */
- cronTime(&now);
+ now = get_time();
if (et > now) {
et -= now;
et = et % MAX_MIGRATION_EXP;
@@ -863,7 +865,7 @@
gw->dc.size = htonl(size);
et = ntohll(value->expirationTime);
/* expiration time normalization and randomization */
- cronTime(&now);
+ now = get_time();
if (et > now) {
et -= now;
et = et % MAX_MIGRATION_EXP;
@@ -1026,15 +1028,15 @@
static void * localGetter(void * noargs) {
LG_Job * job;
while (1) {
- SEMAPHORE_DOWN(ltgSignal);
- MUTEX_LOCK(&lock);
+ SEMAPHORE_DOWN(ltgSignal, YES);
+ MUTEX_LOCK(lock);
if (lg_jobs == NULL) {
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
break;
}
job = lg_jobs;
lg_jobs = job->next;
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
gapGet(NULL,
job->type,
EXTREME_PRIORITY,
@@ -1059,10 +1061,10 @@
memcpy(job->queries,
queries,
sizeof(HashCode512) * keyCount);
- MUTEX_LOCK(&lock);
+ MUTEX_LOCK(lock);
job->next = lg_jobs;
lg_jobs = job;
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
SEMAPHORE_UP(ltgSignal);
}
@@ -1071,8 +1073,8 @@
*
* @return SYSERR if the TCP connection should be closed, otherwise OK
*/
-static int csHandleRequestQueryStart(ClientHandle sock,
- const CS_MESSAGE_HEADER * req) {
+static int csHandleRequestQueryStart(struct ClientHandle * sock,
+ const MESSAGE_HEADER * req) {
const CS_fs_request_search_MESSAGE * rs;
unsigned int keyCount;
#if DEBUG_FS
@@ -1164,6 +1166,7 @@
static Blockstore dsGap;
static Blockstore dsDht;
+ ectx = capi->ectx;
GE_ASSERT(ectx, sizeof(CHK) == 128);
GE_ASSERT(ectx, sizeof(DBlock) == 4);
GE_ASSERT(ectx, sizeof(IBlock) == 132);
@@ -1171,7 +1174,6 @@
GE_ASSERT(ectx, sizeof(SBlock) == 724);
GE_ASSERT(ectx, sizeof(NBlock) == 716);
GE_ASSERT(ectx, sizeof(KNBlock) == 1244);
-
migration = testConfigurationString("FS",
"ACTIVEMIGRATION",
"YES");
@@ -1200,14 +1202,14 @@
/* dht = capi->requestService("dht"); */
dht = NULL;
ltgSignal = SEMAPHORE_CREATE(0);
- if (0 != PTHREAD_CREATE(&localGetProcessor,
- &localGetter,
- NULL,
- 32 * 1024))
+ localGetProcessor = PTHREAD_CREATE(&localGetter,
+ NULL,
+ 32 * 1024);
+ if (localGetProcessor == NULL)
DIE_STRERROR("pthread_create");
coreAPI = capi;
- ONDEMAND_init();
- MUTEX_CREATE(&lock);
+ ONDEMAND_init(capi);
+ lock = MUTEX_CREATE(NO);
dsGap.closure = NULL;
dsGap.get = &gapGet;
dsGap.put = &gapPut;
@@ -1310,7 +1312,7 @@
lg_jobs = job;
}
SEMAPHORE_UP(ltgSignal); /* lg_jobs == NULL => thread will terminate */
- PTHREAD_JOIN(&localGetProcessor,
+ PTHREAD_JOIN(localGetProcessor,
&unused);
coreAPI->releaseService(datastore);
datastore = NULL;
@@ -1325,8 +1327,11 @@
traffic = NULL;
}
coreAPI = NULL;
- MUTEX_DESTROY(&lock);
+ MUTEX_DESTROY(lock);
+ lock = NULL;
ONDEMAND_done();
+ SEMAPHORE_DESTROY(ltgSignal);
+ ltgSignal = NULL;
}
/**
Modified: GNUnet/src/applications/fs/module/migration.c
===================================================================
--- GNUnet/src/applications/fs/module/migration.c 2006-08-03 22:02:24 UTC
(rev 3210)
+++ GNUnet/src/applications/fs/module/migration.c 2006-08-07 02:59:36 UTC
(rev 3211)
@@ -69,7 +69,7 @@
/**
* Lock used to access content.
*/
-static Mutex lock;
+static struct MUTEX * lock;
/**
* The content that we are currently trying
@@ -78,7 +78,9 @@
* first time).
*/
static Datastore_Value * content;
-
+
+static struct GE_Context * ectx;
+
/**
* Callback method for pushing content into the network.
* The method chooses either a "recently" deleted block
@@ -109,7 +111,7 @@
unsigned int anonymity;
Datastore_Value *enc;
- MUTEX_LOCK(&lock);
+ MUTEX_LOCK(lock);
if (content != NULL) {
size = sizeof(GapWrapper) + ntohl(content->size) - sizeof(Datastore_Value);
if (size > padding) {
@@ -123,7 +125,7 @@
&key,
&content,
0)) {
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
#if DEBUG_MIGRATION
GE_LOG(ectx, GE_DEBUG | GE_REQUEST | GE_USER,
"Migration: random lookup in datastore failed.\n");
@@ -136,7 +138,7 @@
if (ONDEMAND_getIndexed(datastore, content, &key, &enc) != OK) {
FREE(content);
content = NULL;
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
return 0;
}
if (stats != NULL)
@@ -148,7 +150,7 @@
size = sizeof(GapWrapper) + ntohl(content->size) - sizeof(Datastore_Value);
if (size > padding) {
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
#if DEBUG_MIGRATION
GE_LOG(ectx, GE_DEBUG | GE_REQUEST | GE_USER,
"Available content of size %u too big for available space (%u)\n",
@@ -158,7 +160,7 @@
return 0;
}
et = ntohll(content->expirationTime);
- cronTime(&now);
+ now = get_time();
if (et > now) {
et -= now;
et = et % MAX_MIGRATION_EXP;
@@ -170,7 +172,8 @@
/* ret > 0; (if DHT succeeds) fixme for DHT */
}
if ( (ret == 0) &&
- (OK == checkCoverTraffic(traffic,
+ (OK == checkCoverTraffic(ectx,
+ traffic,
anonymity)) ) {
gw = MALLOC(size);
gw->dc.size = htonl(size);
@@ -198,7 +201,7 @@
FREE(content);
content = NULL;
}
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
if ( (ret > 0)&&
(stats != NULL) )
stats->change(stat_migration_count, 1);
@@ -211,7 +214,8 @@
GAP_ServiceAPI * g,
DHT_ServiceAPI * d,
Traffic_ServiceAPI * t) {
- MUTEX_CREATE(&lock);
+ ectx = capi->ectx;
+ lock = MUTEX_CREATE(NO);
coreAPI = capi;
datastore = ds;
gap = g;
@@ -241,7 +245,8 @@
traffic = NULL;
FREENONNULL(content);
content = NULL;
- MUTEX_DESTROY(&lock);
+ MUTEX_DESTROY(lock);
+ lock = NULL;
}
/* end of migration.c */
Modified: GNUnet/src/applications/fs/module/ondemand.c
===================================================================
--- GNUnet/src/applications/fs/module/ondemand.c 2006-08-03 22:02:24 UTC
(rev 3210)
+++ GNUnet/src/applications/fs/module/ondemand.c 2006-08-07 02:59:36 UTC
(rev 3211)
@@ -65,6 +65,8 @@
static char * index_directory;
+static struct GE_Context * ectx;
+
static char * getOnDemandFile(const HashCode512 * fileId) {
EncName enc;
char * fn;
@@ -638,10 +640,10 @@
return OK;
}
-int ONDEMAND_init() {
+int ONDEMAND_init(CoreAPIForApplication * capi) {
char * tmp;
-
-
+
+ ectx = capi->ectx;
tmp
= getConfigurationString("FS",
"INDEX-DIRECTORY");
Modified: GNUnet/src/applications/fs/module/ondemand.h
===================================================================
--- GNUnet/src/applications/fs/module/ondemand.h 2006-08-03 22:02:24 UTC
(rev 3210)
+++ GNUnet/src/applications/fs/module/ondemand.h 2006-08-07 02:59:36 UTC
(rev 3211)
@@ -89,9 +89,9 @@
int ONDEMAND_testindexed(Datastore_ServiceAPI * datastore,
const HashCode512 * fileId);
-int ONDEMAND_init();
+int ONDEMAND_init(CoreAPIForApplication * capi);
-int ONDEMAND_done();
+int ONDEMAND_done(void);
/* end of ondemand.h */
#endif
Modified: GNUnet/src/applications/fs/module/querymanager.c
===================================================================
--- GNUnet/src/applications/fs/module/querymanager.c 2006-08-03 22:02:24 UTC
(rev 3210)
+++ GNUnet/src/applications/fs/module/querymanager.c 2006-08-07 02:59:36 UTC
(rev 3211)
@@ -35,7 +35,7 @@
typedef struct {
HashCode512 query;
unsigned int type;
- ClientHandle client;
+ struct ClientHandle * client;
} TrackRecord;
/**
@@ -44,15 +44,18 @@
static TrackRecord ** trackers;
static unsigned int trackerCount;
+
static unsigned int trackerSize;
/**
* Mutex for all query manager structures.
*/
-static Mutex queryManagerLock;
+static struct MUTEX * queryManagerLock;
static CoreAPIForApplication * coreAPI;
+static struct GE_Context * ectx;
+
static void removeEntry(unsigned int off) {
GE_ASSERT(ectx, off < trackerCount);
FREE(trackers[off]);
@@ -63,13 +66,13 @@
GROW(trackers, trackerSize, trackerSize / 2);
}
-static void ceh(ClientHandle client) {
+static void ceh(struct ClientHandle * client) {
int i;
- MUTEX_LOCK(&queryManagerLock);
+ MUTEX_LOCK(queryManagerLock);
for (i=trackerCount-1;i>=0;i--)
if (trackers[i]->client == client)
removeEntry(i);
- MUTEX_UNLOCK(&queryManagerLock);
+ MUTEX_UNLOCK(queryManagerLock);
}
/**
@@ -81,16 +84,16 @@
*/
void trackQuery(const HashCode512 * query,
unsigned int type,
- const ClientHandle client) {
+ struct ClientHandle * client) {
int i;
GE_ASSERT(ectx, client != NULL);
- MUTEX_LOCK(&queryManagerLock);
+ MUTEX_LOCK(queryManagerLock);
for (i=trackerCount-1;i>=0;i--)
if ( (trackers[i]->client == client) &&
(equalsHashCode512(&trackers[i]->query,
query)) ) {
- MUTEX_UNLOCK(&queryManagerLock);
+ MUTEX_UNLOCK(queryManagerLock);
return;
}
if (trackerSize == trackerCount)
@@ -102,7 +105,7 @@
trackers[trackerCount]->type = type;
trackers[trackerCount]->client = client;
trackerCount++;
- MUTEX_UNLOCK(&queryManagerLock);
+ MUTEX_UNLOCK(queryManagerLock);
}
/**
@@ -112,19 +115,19 @@
* @param client where did the query come from?
*/
void untrackQuery(const HashCode512 * query,
- const ClientHandle client) {
+ struct ClientHandle * client) {
int i;
- MUTEX_LOCK(&queryManagerLock);
+ MUTEX_LOCK(queryManagerLock);
for (i=trackerCount-1;i>=0;i--)
if ( (trackers[i]->client == client) &&
(equalsHashCode512(&trackers[i]->query,
query)) ) {
removeEntry(i);
- MUTEX_UNLOCK(&queryManagerLock);
+ MUTEX_UNLOCK(queryManagerLock);
return;
}
- MUTEX_UNLOCK(&queryManagerLock);
+ MUTEX_UNLOCK(queryManagerLock);
}
/**
@@ -149,7 +152,7 @@
hash2enc(key,
&enc));
#endif
- MUTEX_LOCK(&queryManagerLock);
+ MUTEX_LOCK(queryManagerLock);
for (i=trackerCount-1;i>=0;i--) {
if ( (equalsHashCode512(&trackers[i]->query,
key)) &&
@@ -182,7 +185,7 @@
&enc);
}
#endif
- MUTEX_UNLOCK(&queryManagerLock);
+ MUTEX_UNLOCK(queryManagerLock);
}
/**
@@ -190,11 +193,12 @@
*/
int initQueryManager(CoreAPIForApplication * capi) {
coreAPI = capi;
+ ectx = capi->ectx;
capi->registerClientExitHandler(&ceh);
GROW(trackers,
trackerSize,
64);
- MUTEX_CREATE(&queryManagerLock);
+ queryManagerLock = MUTEX_CREATE(NO);
return OK;
}
@@ -207,8 +211,9 @@
0);
trackerCount = 0;
coreAPI->unregisterClientExitHandler(&ceh);
- MUTEX_DESTROY(&queryManagerLock);
+ MUTEX_DESTROY(queryManagerLock);
coreAPI = NULL;
+ ectx = NULL;
}
/* end of querymanager.c */
Modified: GNUnet/src/applications/fs/module/querymanager.h
===================================================================
--- GNUnet/src/applications/fs/module/querymanager.h 2006-08-03 22:02:24 UTC
(rev 3210)
+++ GNUnet/src/applications/fs/module/querymanager.h 2006-08-07 02:59:36 UTC
(rev 3211)
@@ -36,7 +36,7 @@
/**
* Shutdown query management.
*/
-void doneQueryManager();
+void doneQueryManager(void);
/**
* Keep track of a query. If a matching response
@@ -47,7 +47,7 @@
*/
void trackQuery(const HashCode512 * query,
unsigned int type,
- const ClientHandle client);
+ struct ClientHandle * client);
/**
* Stop keeping track of a query.
@@ -56,7 +56,7 @@
* @param client where did the query come from?
*/
void untrackQuery(const HashCode512 * query,
- const ClientHandle client);
+ struct ClientHandle * client);
/**
* We received a reply from 'responder'.
Modified: GNUnet/src/applications/gap/gap.c
===================================================================
--- GNUnet/src/applications/gap/gap.c 2006-08-03 22:02:24 UTC (rev 3210)
+++ GNUnet/src/applications/gap/gap.c 2006-08-07 02:59:36 UTC (rev 3211)
@@ -48,7 +48,7 @@
* Avoiding concurrent lookups for the same ITE: lock to grant
* access to peers to perform a lookup that matches this ITE entry.
*/
-static Mutex lookup_exclusion;
+static struct MUTEX * lookup_exclusion;
/**
* GNUnet core.
@@ -155,7 +155,7 @@
/**
* Mutex for all gap structures.
*/
-static Mutex * lock;
+static struct MUTEX * lock;
/**
* Linked list tracking reply statistics. Synchronize access using
@@ -184,6 +184,10 @@
static int hist_total;
#endif
+static struct GE_Context * ectx;
+
+static struct GC_Configuration * cfg;
+
/* ****************** helper functions ***************** */
/**
@@ -408,7 +412,7 @@
QueryRecord * qr;
PID_INDEX receiverId;
- cronTime(&now);
+ now = get_time();
receiverId = intern_pid(receiver);
MUTEX_LOCK(lock);
start = pos;
@@ -568,7 +572,7 @@
unsigned long long sel;
unsigned long long pos;
- cronTime(&now);
+ now = get_time();
MUTEX_LOCK(lock);
oldestIndex = -1;
@@ -736,13 +740,13 @@
* NULL for the local peer
*/
static int useContent(const PeerIdentity * hostId,
- const P2P_gap_reply_MESSAGE * pmsg);
+ const MESSAGE_HEADER * pmsg);
/**
* Call useContent "later" and then free the pmsg.
*/
static void useContentLater(void * data) {
- P2P_gap_reply_MESSAGE * pmsg = data;
+ MESSAGE_HEADER * pmsg = data;
useContent(NULL,
pmsg);
FREE(pmsg);
@@ -822,10 +826,11 @@
size - sizeof(P2P_gap_reply_MESSAGE));
/* delay reply, delay longer if we are busy (makes it harder
to predict / analyze, too). */
- addCronJob(&useContentLater,
- weak_randomi(TTL_DECREMENT),
- 0,
- pmsg);
+ cron_add_job(coreAPI->cron,
+ &useContentLater,
+ weak_randomi(TTL_DECREMENT),
+ 0,
+ pmsg);
return YES;
}
@@ -899,7 +904,7 @@
ite);
#endif
GE_ASSERT(ectx, sender != 0); /* do NOT add to RT for local clients! */
- cronTime(&now);
+ now = get_time();
if ( (stats != NULL) &&
(ite->ttl == 0) )
stats->change(stat_routing_slots_used, 1);
@@ -1005,7 +1010,7 @@
cron_t new_ttl;
int equal_to_pending;
- cronTime(&now);
+ now = get_time();
ite = &ROUTING_indTable_[computeRoutingIndex(query)];
equal_to_pending = equalsHashCode512(query, &ite->primaryKey);
if ( (stats != NULL) &&
@@ -1260,7 +1265,7 @@
* @param msg the message to route
*/
static void sendReply(IndirectionTableEntry * ite,
- const P2P_MESSAGE_HEADER * msg) {
+ const MESSAGE_HEADER * msg) {
unsigned int j;
unsigned int maxDelay;
cron_t now;
@@ -1271,7 +1276,7 @@
if (stats != NULL)
stats->change(stat_routing_successes, 1);
- cronTime(&now);
+ now = get_time();
if (now < ite->ttl)
maxDelay = ite->ttl - now;
else
@@ -1409,7 +1414,7 @@
senderID = intern_pid(sender);
GE_ASSERT(ectx, (senderID != 0) || (sender == NULL) );
ite = &ROUTING_indTable_[computeRoutingIndex(&query->queries[0])];
- MUTEX_LOCK(&lookup_exclusion);
+ MUTEX_LOCK(lookup_exclusion);
i = -1;
if (sender != NULL) {
if ( ( (policy & QUERY_ANSWER) > 0) &&
@@ -1519,7 +1524,7 @@
0);
- MUTEX_UNLOCK(&lookup_exclusion);
+ MUTEX_UNLOCK(lookup_exclusion);
if (doForward) {
forwardQuery(query,
sender);
@@ -1543,7 +1548,8 @@
* priority of the original request)
*/
static int useContent(const PeerIdentity * host,
- const P2P_gap_reply_MESSAGE * msg) {
+ const MESSAGE_HEADER * pmsg) {
+ const P2P_gap_reply_MESSAGE * msg;
unsigned int i;
HashCode512 contentHC;
IndirectionTableEntry * ite;
@@ -1556,18 +1562,21 @@
#if DEBUG_GAP
EncName enc;
- IF_GELOG(ectx, GE_DEBUG | GE_REQUEST | GE_USER,
- if (host != NULL)
- hash2enc(&host->hashPubKey,
- &enc));
- GE_LOG(ectx, GE_DEBUG | GE_REQUEST | GE_USER,
- "GAP received content from `%s'\n",
- (host != NULL) ? (const char*)&enc : "myself");
+ IF_GELOG(ectx,
+ GE_DEBUG | GE_REQUEST | GE_USER,
+ if (host != NULL)
+ hash2enc(&host->hashPubKey,
+ &enc));
+ GE_LOG(ectx,
+ GE_DEBUG | GE_REQUEST | GE_USER,
+ "GAP received content from `%s'\n",
+ (host != NULL) ? (const char*)&enc : "myself");
#endif
- if (ntohs(msg->header.size) < sizeof(P2P_gap_reply_MESSAGE)) {
+ if (ntohs(pmsg->size) < sizeof(P2P_gap_reply_MESSAGE)) {
GE_BREAK(ectx, 0);
return SYSERR; /* invalid! */
}
+ msg = (const P2P_gap_reply_MESSAGE *) pmsg;
ite = &ROUTING_indTable_[computeRoutingIndex(&msg->primaryKey)];
ite->successful_local_lookup_in_delay_loop = NO;
@@ -1588,18 +1597,18 @@
&contentHC);
/* FIRST: check if seen */
- MUTEX_LOCK(&lookup_exclusion);
+ MUTEX_LOCK(lookup_exclusion);
for (i=0;i<ite->seenIndex;i++) {
if (equalsHashCode512(&contentHC,
&ite->seen[i])) {
- MUTEX_UNLOCK(&lookup_exclusion);
+ MUTEX_UNLOCK(lookup_exclusion);
FREE(value);
if (stats != NULL)
stats->change(stat_routing_reply_dups, 1);
return 0; /* seen before, useless */
}
}
- MUTEX_UNLOCK(&lookup_exclusion);
+ MUTEX_UNLOCK(lookup_exclusion);
/* SECOND: check if valid */
ret = bs->put(bs->closure,
@@ -1624,7 +1633,7 @@
/* THIRD: compute content priority/value and
send remote reply (ITE processing) */
hostId = intern_pid(host);
- MUTEX_LOCK(&lookup_exclusion);
+ MUTEX_LOCK(lookup_exclusion);
if (equalsHashCode512(&ite->primaryKey,
&msg->primaryKey) ) {
prio = ite->priority;
@@ -1686,7 +1695,7 @@
if (stats != NULL)
stats->change(stat_routing_reply_drops, 1);
}
- MUTEX_UNLOCK(&lookup_exclusion);
+ MUTEX_UNLOCK(lookup_exclusion);
prio += claimReward(&msg->primaryKey);
/* FOURTH: update content priority in local datastore */
@@ -1907,7 +1916,7 @@
* lookup, forward or even indirect.
*/
static int handleQuery(const PeerIdentity * sender,
- const P2P_MESSAGE_HEADER * msg) {
+ const MESSAGE_HEADER * msg) {
QUERY_POLICY policy;
P2P_gap_query_MESSAGE * qmsg;
unsigned int queries;
@@ -2068,6 +2077,8 @@
static GAP_ServiceAPI api;
unsigned int i;
+ ectx = capi->ectx;
+ cfg = capi->cfg;
GE_ASSERT(ectx, sizeof(P2P_gap_reply_MESSAGE) == 68);
GE_ASSERT(ectx, sizeof(P2P_gap_query_MESSAGE) == 144);
@@ -2094,7 +2105,8 @@
stat_pending_rewards = stats->create(gettext_noop("# gap
rewards pending"));
stat_response_count = stats->create(gettext_noop("# gap
response weights"));
}
- init_pid_table(stats);
+ init_pid_table(ectx,
+ stats);
GROW(rewards,
rewardSize,
MAX_REWARD_TRACKS);
@@ -2117,7 +2129,7 @@
"TABLESIZE");
if (indirectionTableSize < MIN_INDIRECTION_TABLE_SIZE)
indirectionTableSize = MIN_INDIRECTION_TABLE_SIZE;
- MUTEX_CREATE(&lookup_exclusion);
+ lookup_exclusion = MUTEX_CREATE(NO);
ROUTING_indTable_
= MALLOC(sizeof(IndirectionTableEntry)
* indirectionTableSize);
@@ -2134,16 +2146,18 @@
queries[i].msg = NULL;
}
lock = coreAPI->getConnectionModuleLock();
- addCronJob(&ageRTD,
- 2 * cronMINUTES,
- 2 * cronMINUTES,
- NULL);
+ cron_add_job(capi->cron,
+ &ageRTD,
+ 2 * cronMINUTES,
+ 2 * cronMINUTES,
+ NULL);
- GE_LOG(ectx, GE_DEBUG | GE_REQUEST | GE_USER,
- _("`%s' registering handlers %d %d\n"),
- "gap",
- P2P_PROTO_gap_QUERY,
- P2P_PROTO_gap_RESULT);
+ GE_LOG(ectx,
+ GE_DEBUG | GE_REQUEST | GE_USER,
+ _("`%s' registering handlers %d %d\n"),
+ "gap",
+ P2P_PROTO_gap_QUERY,
+ P2P_PROTO_gap_RESULT);
capi->registerHandler(P2P_PROTO_gap_QUERY,
&handleQuery);
capi->registerHandler(P2P_PROTO_gap_RESULT,
@@ -2168,13 +2182,14 @@
coreAPI->unregisterHandler(P2P_PROTO_gap_QUERY,
&handleQuery);
coreAPI->unregisterHandler(P2P_PROTO_gap_RESULT,
- (MessagePartHandler) &useContent);
+ &useContent);
coreAPI->unregisterSendCallback(sizeof(P2P_gap_query_MESSAGE),
&fillInQuery);
- delCronJob(&ageRTD,
- 2 * cronMINUTES,
- NULL);
+ cron_del_job(coreAPI->cron,
+ &ageRTD,
+ 2 * cronMINUTES,
+ NULL);
for (i=0;i<indirectionTableSize;i++) {
ite = &ROUTING_indTable_[i];
@@ -2192,7 +2207,8 @@
0);
}
- MUTEX_DESTROY(&lookup_exclusion);
+ MUTEX_DESTROY(lookup_exclusion);
+ lookup_exclusion = NULL;
while (rtdList != NULL) {
pos = rtdList;
rtdList = rtdList->next;
@@ -2228,6 +2244,8 @@
coreAPI = NULL;
bs = NULL;
uri = NULL;
+ ectx = NULL;
+ cfg = NULL;
}
/* end of gap.c */
Modified: GNUnet/src/applications/gap/gap.h
===================================================================
--- GNUnet/src/applications/gap/gap.h 2006-08-03 22:02:24 UTC (rev 3210)
+++ GNUnet/src/applications/gap/gap.h 2006-08-07 02:59:36 UTC (rev 3211)
@@ -203,7 +203,7 @@
* be determined from the header size.
*/
typedef struct {
- P2P_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
/**
* Type of the query (block type).
@@ -237,7 +237,7 @@
* Return message for search result.
*/
typedef struct {
- P2P_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
HashCode512 primaryKey;
Modified: GNUnet/src/applications/gap/pid_table.c
===================================================================
--- GNUnet/src/applications/gap/pid_table.c 2006-08-03 22:02:24 UTC (rev
3210)
+++ GNUnet/src/applications/gap/pid_table.c 2006-08-07 02:59:36 UTC (rev
3211)
@@ -36,6 +36,8 @@
static int stat_pid_rc;
+static struct GE_Context * ectx;
+
typedef struct {
/** the identifier itself */
HashCode512 id;
@@ -47,7 +49,7 @@
static PID_Entry * table;
-static Mutex lock;
+static struct MUTEX * lock;
PID_INDEX intern_pid(const PeerIdentity * pid) {
@@ -57,17 +59,18 @@
if (pid == NULL)
return 0;
zero = size;
- MUTEX_LOCK(&lock);
+ MUTEX_LOCK(lock);
for (ret=1;ret<size;ret++) {
- if (equalsHashCode512(&pid->hashPubKey,
- &table[ret].id)) {
+ if (0 == memcmp(&pid->hashPubKey,
+ &table[ret].id,
+ sizeof(HashCode512))) {
table[ret].rc++;
if (stats != NULL) {
stats->change(stat_pid_rc, 1);
if (table[ret].rc == 1)
stats->change(stat_pid_entries, 1);
}
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
return ret;
} else if ( (zero == size) &&
(table[ret].rc == 0) ) {
@@ -89,7 +92,7 @@
stats->change(stat_pid_rc, 1);
stats->change(stat_pid_entries, 1);
}
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
return ret;
}
@@ -99,7 +102,7 @@
PID_INDEX id;
if (count == 0)
return;
- MUTEX_LOCK(&lock);
+ MUTEX_LOCK(lock);
for (i=count-1;i>=0;i--) {
id = ids[i];
GE_ASSERT(ectx, id < size);
@@ -109,7 +112,7 @@
(stats != NULL) )
stats->change(stat_pid_entries, -1);
}
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
if (stats != NULL)
stats->change(stat_pid_rc, - count);
}
@@ -117,7 +120,7 @@
void change_pid_rc(PID_INDEX id, int delta) {
if (id == 0)
return;
- MUTEX_LOCK(&lock);
+ MUTEX_LOCK(lock);
GE_ASSERT(ectx, id < size);
GE_ASSERT(ectx, table[id].rc > 0);
table[id].rc += delta;
@@ -126,7 +129,7 @@
if (table[id].rc == 0)
stats->change(stat_pid_entries, -1);
}
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
}
void resolve_pid(PID_INDEX id,
@@ -136,15 +139,17 @@
GE_BREAK(ectx, 0);
return;
}
- MUTEX_LOCK(&lock);
+ MUTEX_LOCK(lock);
GE_ASSERT(ectx, id < size);
GE_ASSERT(ectx, table[id].rc > 0);
pid->hashPubKey = table[id].id;
- MUTEX_UNLOCK(&lock);
+ MUTEX_UNLOCK(lock);
}
-void init_pid_table(Stats_ServiceAPI * s) {
+void init_pid_table(struct GE_Context * e,
+ Stats_ServiceAPI * s) {
+ ectx = e;
stats = s;
if (stats != NULL) {
stat_pid_entries
@@ -152,7 +157,7 @@
stat_pid_rc
= stats->create(gettext_noop("# total RC of interned peer IDs in pid
table"));
}
- MUTEX_CREATE(&lock);
+ lock = MUTEX_CREATE(NO);
}
@@ -161,7 +166,9 @@
size,
0);
stats = NULL;
- MUTEX_DESTROY(&lock);
+ MUTEX_DESTROY(lock);
+ lock = NULL;
+ ectx = NULL;
}
/* end of pid_table.c */
Modified: GNUnet/src/applications/gap/pid_table.h
===================================================================
--- GNUnet/src/applications/gap/pid_table.h 2006-08-03 22:02:24 UTC (rev
3210)
+++ GNUnet/src/applications/gap/pid_table.h 2006-08-07 02:59:36 UTC (rev
3211)
@@ -27,9 +27,10 @@
#include "gnunet_util.h"
#include "gnunet_stats_service.h"
-void init_pid_table(Stats_ServiceAPI * s);
+void init_pid_table(struct GE_Context * ectx,
+ Stats_ServiceAPI * s);
-void done_pid_table();
+void done_pid_table(void);
typedef unsigned int PID_INDEX;
Modified: GNUnet/src/applications/sqstore_sqlite/sqlite.c
===================================================================
--- GNUnet/src/applications/sqstore_sqlite/sqlite.c 2006-08-03 22:02:24 UTC
(rev 3210)
+++ GNUnet/src/applications/sqstore_sqlite/sqlite.c 2006-08-07 02:59:36 UTC
(rev 3211)
@@ -41,29 +41,38 @@
* a failure of the command 'cmd' with the message given
* by strerror(errno).
*/
-#define DIE_SQLITE(cmd) do { errexit(_("`%s' failed at %s:%d with error:
%s\n"), cmd, __FILE__, __LINE__, sqlite3_errmsg(getDBHandle()->dbh)); }
while(0);
+#define DIE_SQLITE(cmd) do { GE_LOG(ectx, GE_FATAL | GE_IMMEDIATE | GE_ADMIN,
_("`%s' failed at %s:%d with error: %s\n"), cmd, __FILE__, __LINE__,
sqlite3_errmsg(getDBHandle()->dbh)); abort(); } while(0);
/**
* Log an error message at log-level 'level' that indicates
* a failure of the command 'cmd' on file 'filename'
* with the message given by strerror(errno).
*/
-#define LOG_SQLITE(level, cmd) do { LOG(level, _("`%s' failed at %s:%d with
error: %s\n"), cmd, __FILE__, __LINE__, sqlite3_errmsg(getDBHandle()->dbh)); }
while(0);
+#define LOG_SQLITE(level, cmd) do { GE_LOG(ectx, level, _("`%s' failed at
%s:%d with error: %s\n"), cmd, __FILE__, __LINE__,
sqlite3_errmsg(getDBHandle()->dbh)); } while(0);
static Stats_ServiceAPI * stats;
+
static CoreAPIForApplication * coreAPI;
+
static unsigned int stat_size;
+static struct GE_Context * ectx;
/**
* @brief Wrapper for SQLite
*/
typedef struct {
- /* Native SQLite database handle - may not be shared between threads! */
+ /**
+ * Native SQLite database handle - may not be shared between threads!
+ */
sqlite3 *dbh;
- /* Thread ID owning this handle */
+ /**
+ * Thread ID owning this handle
+ */
pthread_t tid;
- /* Precompiled SQL */
+ /**
+ * Precompiled SQL
+ */
sqlite3_stmt *exists, *countContent, *updPrio, *insertContent;
} sqliteHandle;
@@ -71,31 +80,40 @@
* @brief Information about the database
*/
typedef struct {
- Mutex DATABASE_Lock_;
- /** filename of this bucket */
- char *fn;
- /** bytes used */
+ struct MUTEX * DATABASE_Lock_;
+ /**
+ * filename of this bucket
+ */
+ char * fn;
+
+ /**
+ * bytes used
+ */
double payload;
+
unsigned int lastSync;
- /* Open handles */
+ /**
+ * Open handles
+ */
unsigned int handle_count;
- /* List of open handles */
+ /**
+ * List of open handles
+ */
sqliteHandle *handles;
} sqliteDatabase;
static sqliteDatabase *db;
-static sqliteHandle *getDBHandle();
+static sqliteHandle * getDBHandle(void);
/**
* @brief Prepare a SQL statement
*/
-static int sq_prepare(
- const char *zSql, /* SQL statement, UTF-8 encoded */
- sqlite3_stmt **ppStmt) { /* OUT: Statement handle */
+static int sq_prepare(const char *zSql, /* SQL statement, UTF-8 encoded
*/
+ sqlite3_stmt **ppStmt) { /* OUT: Statement handle */
char * dummy;
return sqlite3_prepare(getDBHandle()->dbh,
zSql,
@@ -111,7 +129,7 @@
* We therefore (re)open the database in each thread.
* @return the native SQLite database handle
*/
-static sqliteHandle *getDBHandle() {
+static sqliteHandle * getDBHandle() {
unsigned int idx;
pthread_t this_tid;
sqliteHandle *ret = NULL;
@@ -176,7 +194,7 @@
" hash TEXT NOT NULL DEFAULT '',"
" value BLOB NOT NULL DEFAULT '')", NULL, NULL,
NULL) != SQLITE_OK) {
- LOG_SQLITE(LOG_ERROR, "sqlite_create");
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK, "sqlite_create");
sqlite3_finalize(stmt);
return NULL;
}
@@ -195,7 +213,7 @@
"anonLevel, expire, hash, value) VALUES "
"(?, ?, ?, ?, ?, ?, ?)",
&ret->insertContent) != SQLITE_OK) ) {
- LOG_SQLITE(LOG_ERROR,
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK,
"precompiling");
if (ret->countContent != NULL)
sqlite3_finalize(ret->countContent);
@@ -245,11 +263,11 @@
static unsigned long long getSize() {
double ret;
- MUTEX_LOCK(&db->DATABASE_Lock_);
+ MUTEX_LOCK(db->DATABASE_Lock_);
ret = db->payload;
if (stats)
stats->set(stat_size, ret);
- MUTEX_UNLOCK(&db->DATABASE_Lock_);
+ MUTEX_UNLOCK(db->DATABASE_Lock_);
return ret;
}
@@ -277,7 +295,7 @@
sqlite3_step(stmt);
sqlite3_finalize(stmt);
} else
- LOG_SQLITE(LOG_ERROR, "sq_prepare");
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK, "sq_prepare");
return NULL; /* error */
}
@@ -299,7 +317,7 @@
sqlite3_step(stmt);
sqlite3_finalize(stmt);
} else
- LOG_SQLITE(LOG_ERROR, "sq_prepare");
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK, "sq_prepare");
return NULL;
}
@@ -353,7 +371,7 @@
sqlite3_finalize(stmt);
if (i != SQLITE_OK) {
- LOG_SQLITE(LOG_ERROR,
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK,
"sqlite_getStat");
return SYSERR;
}
@@ -395,7 +413,7 @@
3,
RESERVED_BLOCK);
if (sqlite3_step(stmt) != SQLITE_DONE) {
- LOG_SQLITE(LOG_ERROR,
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK,
"sqlite_setStat");
sqlite3_finalize(stmt);
return SYSERR;
@@ -439,7 +457,7 @@
unsigned long long lastExp;
HashCode512 key;
- MUTEX_LOCK(&db->DATABASE_Lock_);
+ MUTEX_LOCK(db->DATABASE_Lock_);
/* For the rowid trick see
http://permalink.gmane.org/gmane.network.gnunet.devel/1363 */
@@ -469,8 +487,8 @@
strcat(scratch, " LIMIT 1)");
if (sq_prepare(scratch,
&stmt) != SQLITE_OK) {
- LOG_SQLITE(LOG_ERROR, "sqlite3_prepare");
- MUTEX_UNLOCK(&db->DATABASE_Lock_);
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK, "sqlite3_prepare");
+ MUTEX_UNLOCK(db->DATABASE_Lock_);
return SYSERR;
}
@@ -531,16 +549,16 @@
#endif
if (iter != NULL) {
- MUTEX_UNLOCK(&db->DATABASE_Lock_);
+ MUTEX_UNLOCK(db->DATABASE_Lock_);
if (SYSERR == iter(&datum->key,
&datum->value,
closure) ) {
count = SYSERR;
FREE(datum);
- MUTEX_LOCK(&db->DATABASE_Lock_);
+ MUTEX_LOCK(db->DATABASE_Lock_);
break;
}
- MUTEX_LOCK(&db->DATABASE_Lock_);
+ MUTEX_LOCK(db->DATABASE_Lock_);
}
key = datum->key;
lastPrio = ntohl(datum->value.prio);
@@ -553,7 +571,7 @@
}
}
sqlite3_finalize(stmt);
- MUTEX_UNLOCK(&db->DATABASE_Lock_);
+ MUTEX_UNLOCK(db->DATABASE_Lock_);
return count;
}
@@ -611,12 +629,12 @@
sqlite3_finalize(h->insertContent);
if (sqlite3_close(h->dbh) != SQLITE_OK)
- LOG_SQLITE(LOG_ERROR, "sqlite_close");
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK, "sqlite_close");
}
FREE(db->handles);
db->handle_count = 0;
- MUTEX_DESTROY(&db->DATABASE_Lock_);
+ MUTEX_DESTROY(db->DATABASE_Lock_);
FREE(db->fn);
FREE(db);
db = NULL;
@@ -665,7 +683,7 @@
&enc);
#endif
- MUTEX_LOCK(&db->DATABASE_Lock_);
+ MUTEX_LOCK(db->DATABASE_Lock_);
strcpy(scratch, "SELECT ");
if (iter == NULL)
@@ -687,8 +705,8 @@
if (sq_prepare(scratch,
&stmt) != SQLITE_OK) {
- LOG_SQLITE(LOG_ERROR, "sqlite_query");
- MUTEX_UNLOCK(&db->DATABASE_Lock_);
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK, "sqlite_query");
+ MUTEX_UNLOCK(db->DATABASE_Lock_);
return SYSERR;
}
@@ -735,17 +753,17 @@
count += sqlite3_column_int(stmt, 0);
}
if (ret != SQLITE_DONE) {
- LOG_SQLITE(LOG_ERROR, "sqlite_query");
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK, "sqlite_query");
sqlite3_finalize(stmt);
- MUTEX_UNLOCK(&db->DATABASE_Lock_);
+ MUTEX_UNLOCK(db->DATABASE_Lock_);
return SYSERR;
}
sqlite3_finalize(stmt);
} else
- LOG_SQLITE(LOG_ERROR, "sqlite_query");
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK, "sqlite_query");
- MUTEX_UNLOCK(&db->DATABASE_Lock_);
+ MUTEX_UNLOCK(db->DATABASE_Lock_);
#if DEBUG_SQLITE
GE_LOG(ectx, GE_DEBUG | GE_REQUEST | GE_USER, "SQLite: done reading
content\n");
@@ -787,7 +805,7 @@
return SYSERR;
}
- MUTEX_LOCK(&db->DATABASE_Lock_);
+ MUTEX_LOCK(db->DATABASE_Lock_);
if (db->lastSync > 1000)
syncStats();
@@ -815,16 +833,16 @@
n = sqlite3_step(stmt);
sqlite3_reset(stmt);
if (n != SQLITE_DONE) {
- LOG_SQLITE(LOG_ERROR,
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK,
"sqlite_query");
- MUTEX_UNLOCK(&db->DATABASE_Lock_);
+ MUTEX_UNLOCK(db->DATABASE_Lock_);
return SYSERR;
}
db->lastSync++;
/* row length = hash length + block length + numbers + column count +
estimated index size + 1 */
db->payload = db->payload + contentSize + sizeof(HashCode512) +
getIntSize(size) + getIntSize(type) +
getIntSize(prio) + getIntSize(anon) + getIntSize(expir) + 7 + 245 + 1;
- MUTEX_UNLOCK(&db->DATABASE_Lock_);
+ MUTEX_UNLOCK(db->DATABASE_Lock_);
#if DEBUG_SQLITE
GE_LOG(ectx, GE_DEBUG | GE_REQUEST | GE_USER,
@@ -860,7 +878,7 @@
&enc);
#endif
- MUTEX_LOCK(&db->DATABASE_Lock_);
+ MUTEX_LOCK(db->DATABASE_Lock_);
dbh = getDBHandle();
@@ -931,19 +949,19 @@
- getIntSize(size) - getIntSize(type) - getIntSize(prio)
- getIntSize(anon) - getIntSize(expir) - 7 - 245 - 1;
} else {
- LOG_SQLITE(LOG_ERROR, "sqlite3_prepare");
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK, "sqlite3_prepare");
}
}
deleted = ( (n == SQLITE_DONE) || (n == SQLITE_ROW) ) ?
sqlite3_changes(dbh->dbh) : SYSERR;
sqlite3_finalize(stmt);
if(n != SQLITE_DONE) {
- LOG_SQLITE(LOG_ERROR, "sqlite_query");
- MUTEX_UNLOCK(&db->DATABASE_Lock_);
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK, "sqlite_query");
+ MUTEX_UNLOCK(db->DATABASE_Lock_);
return SYSERR;
}
- MUTEX_UNLOCK(&db->DATABASE_Lock_);
+ MUTEX_UNLOCK(db->DATABASE_Lock_);
#if DEBUG_SQLITE
GE_LOG(ectx, GE_DEBUG | GE_REQUEST | GE_USER,
@@ -975,7 +993,7 @@
&enc);
#endif
- MUTEX_LOCK(&db->DATABASE_Lock_);
+ MUTEX_LOCK(db->DATABASE_Lock_);
dbh = getDBHandle();
contentSize = ntohl(value->size)-sizeof(Datastore_Value);
sqlite3_bind_int(dbh->updPrio,
@@ -1001,7 +1019,7 @@
n = sqlite3_step(dbh->updPrio);
sqlite3_reset(dbh->updPrio);
- MUTEX_UNLOCK(&db->DATABASE_Lock_);
+ MUTEX_UNLOCK(db->DATABASE_Lock_);
#if DEBUG_SQLITE
GE_LOG(ectx, GE_DEBUG | GE_REQUEST | GE_USER,
@@ -1019,6 +1037,7 @@
size_t nX;
sqliteHandle *dbh;
+ ectx = capi->ectx;
#if DEBUG_SQLITE
GE_LOG(ectx, GE_DEBUG | GE_REQUEST | GE_USER,
"SQLite: initializing database\n");
@@ -1031,24 +1050,41 @@
db->payload = 0;
db->lastSync = 0;
- afsdir = getFileName("FS", "DIR",
- _("Configuration file must specify directory for "
- "storing FS data in section `%s' under `%s'.\n"));
+ afsdir = NULL;
+ if (0 != GC_get_configuration_value_string(capi->cfg,
+ "FS",
+ "DIR",
+ NULL,
+ &afsdir)) {
+ FREE(db);
+ GE_LOG(ectx,
+ GE_ERROR | GE_USER | GE_ADMIN | GE_IMMEDIATE,
+ _("Configuration must specify directory in section `%s' entry
`%s'\n"),
+ "FS",
+ "DIR");
+ return NULL;
+ }
+
dir = MALLOC(strlen(afsdir) + 8 + 2); /* 8 = "content/" */
strcpy(dir, afsdir);
strcat(dir, "/content/");
FREE(afsdir);
- mkdirp(dir);
+ if (OK != disk_directory_create(ectx,
+ dir)) {
+ FREE(dir);
+ FREE(db);
+ return NULL;
+ }
nX = strlen(dir) + 6 + 4 + 256; /* 6 = "gnunet", 4 = ".dat" */
db->fn = MALLOC(strlen(dir) + 6 + 4 + 256);
SNPRINTF(db->fn, nX, "%s/gnunet.dat", dir);
FREE(dir);
- MUTEX_CREATE(&db->DATABASE_Lock_);
+ db->DATABASE_Lock_ = MUTEX_CREATE(NO);
dbh = getDBHandle();
if (!dbh) {
- LOG_SQLITE(LOG_ERROR, "db_handle");
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK, "db_handle");
FREE(db->fn);
FREE(dbh);
return NULL;
@@ -1056,7 +1092,7 @@
db->payload = getStat("PAYLOAD");
if (db->payload == SYSERR) {
- LOG_SQLITE(LOG_ERROR, "sqlite_payload");
+ LOG_SQLITE(GE_ERROR | GE_ADMIN | GE_USER | GE_BULK, "sqlite_payload");
FREE(db->fn);
FREE(db);
return NULL;
Modified: GNUnet/src/include/fs.h
===================================================================
--- GNUnet/src/include/fs.h 2006-08-03 22:02:24 UTC (rev 3210)
+++ GNUnet/src/include/fs.h 2006-08-07 02:59:36 UTC (rev 3211)
@@ -34,7 +34,7 @@
* on the type).
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
/**
* Priority of the search.
@@ -72,7 +72,7 @@
* of the Datastore_Value).
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
} CS_fs_reply_content_MESSAGE;
@@ -83,7 +83,7 @@
* number of bytes of content.
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
/**
* Priority for the on-demand encoded entry.
@@ -110,7 +110,7 @@
* by the filename to index.
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
unsigned int reserved;
@@ -128,7 +128,7 @@
* number of bytes of content.
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
/**
* Priority for the on-demand encoded entry.
@@ -167,7 +167,7 @@
* variable number of bytes of the content that is to be deleted.
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
} CS_fs_request_delete_MESSAGE;
@@ -176,7 +176,7 @@
* Client to server: unindex file.
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
/**
* Size of each block of the file.
@@ -195,7 +195,7 @@
* Client to server: test if file is indexed
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
unsigned int reserved;
Modified: GNUnet/src/include/gnunet_dht.h
===================================================================
--- GNUnet/src/include/gnunet_dht.h 2006-08-03 22:02:24 UTC (rev 3210)
+++ GNUnet/src/include/gnunet_dht.h 2006-08-07 02:59:36 UTC (rev 3211)
@@ -69,7 +69,7 @@
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
DHT_TableId table;
@@ -80,7 +80,7 @@
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
DHT_TableId table;
@@ -93,7 +93,7 @@
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
DHT_TableId table;
@@ -111,7 +111,7 @@
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
unsigned int type; /* nbo */
@@ -131,7 +131,7 @@
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
DHT_TableId table;
@@ -147,7 +147,7 @@
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
} CS_dht_request_iterate_MESSAGE;
@@ -158,7 +158,7 @@
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
unsigned int totalResults;
@@ -175,7 +175,7 @@
*/
typedef struct {
- CS_MESSAGE_HEADER header;
+ MESSAGE_HEADER header;
int status; /* NBO */
Modified: GNUnet/src/server/gnunet-update.c
===================================================================
--- GNUnet/src/server/gnunet-update.c 2006-08-03 22:02:24 UTC (rev 3210)
+++ GNUnet/src/server/gnunet-update.c 2006-08-07 02:59:36 UTC (rev 3211)
@@ -181,6 +181,8 @@
uapi.updateModule = &updateModule;
uapi.requestService = &requestService;
uapi.releaseService = &releaseService;
+ uapi.ectx = ectx;
+ uapi.cfg = cfg;
cron = cron_create(ectx);
initCore(ectx, cfg, cron, NULL);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r3211 - in GNUnet/src: applications/datastore applications/fs applications/fs/module applications/gap applications/sqstore_sqlite include server,
grothoff <=