gnunet-fuse

GNUnet file-sharing directory mounting via FUSE
Log | Files | Refs | Submodules | README | LICENSE

commit 9f51323d3d19a9663515a6c94b0eb6f06b20601f
parent db729e7c0cf6c138466301357b595d6e9d396001
Author: Mauricio Günther <mauricio@140774ce-b5e7-0310-ab8b-a85725594a96>
Date:   Mon, 26 Mar 2012 15:12:34 +0000

-n.w.c


Diffstat:
Msrc/ext/gnunet-fuse.c | 37+++----------------------------------
Msrc/ext/gnunet-fuse.h | 6++++--
Msrc/ext/readdir.c | 53++++++++++++++++++++++++++++-------------------------
3 files changed, 35 insertions(+), 61 deletions(-)

diff --git a/src/ext/gnunet-fuse.c b/src/ext/gnunet-fuse.c @@ -33,7 +33,7 @@ #include <gnunet/gnunet_container_lib.h> #include <gnunet/gnunet_crypto_lib.h> -struct GNUNET_CONTAINER_MultiHashMap *map; +//struct GNUNET_CONTAINER_MultiHashMap *map; static int ret; @@ -140,42 +140,11 @@ run (void *cls, } - /* Store a key-value pair in the map. */ - struct path_uri *t; - - t = GNUNET_malloc (sizeof (struct path_uri)); - - GNUNET_CONTAINER_multihashmap_put (map, directory, source, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); - - +/* create MultiHashMap */ +unsigned int len = strlen(directory); -/* create MultiHashMap struct GNUNET_CONTAINER_MultiHashMap *map; -unsigned int len = strlen(path); - -map = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_MultiHashMap)); map = GNUNET_CONTAINER_multihashmap_create (len); -*/ - -/* compute key - -int size = sizeof(block); -struct path_uri * r; - -GNUNET_CRYPTO_hash (path, len, r); -*/ - - -/* Store a key-value pair in the map. - -struct path_uri *t; - -t = GNUNET_malloc (sizeof (struct path_uri)); - -GNUNET_CONTAINER_multihashmap_put (map, t->path, t->source, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); - - -*/ /* main function of fuse */ diff --git a/src/ext/gnunet-fuse.h b/src/ext/gnunet-fuse.h @@ -49,16 +49,18 @@ static char *directory; /* struct containing mapped Path, with URI and other Information like Attributes etc. */ -struct path_uri +struct GNUNET_FUSE_path_info { /* uri to corresponding path */ char* source; /* pathname */ char* path; /* key */ - int key; + GNUNET_HashCode hash; /*name of temporary file */ char* tmpfile; +/*file attributes*/ + struct stat; }; diff --git a/src/ext/readdir.c b/src/ext/readdir.c @@ -27,15 +27,18 @@ * Introduced in version 2.3 */ +//#include <string.h> +//#include <errno.h> +//#include <glib.h> +//#include <GNUnet/gnunet_ecrs_lib.h> + #include <sys/types.h> #include <sys/mman.h> #include <fcntl.h> #include <unistd.h> -//#include <string.h> -//#include <errno.h> -//#include <glib.h> + #include <fuse.h> -//#include <GNUnet/gnunet_ecrs_lib.h> + #include <gnunet-fuse.h> #include <gnunet/gnunet_fs_service.h> #include <gnunet/gnunet_container_lib.h> @@ -67,6 +70,8 @@ static struct GNUNET_FS_Handle *ctx; struct GNUNET_CONTAINER_MultiHashMap *map; +struct GNUNET_FS_Uri *uri; + static void @@ -164,13 +169,13 @@ return NULL; void readdir_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext* tc) { - struct GNUNET_FS_Uri *uri; + char *emsg; enum GNUNET_FS_DownloadOptions options; - uri = GNUNET_FS_uri_parse(w->source, &emsg); + if (NULL == uri) { @@ -219,38 +224,36 @@ void readdir_task (void *cls, int gn_readdir(const char *path, void *buf, fuse_fill_dir_t filler, - off_t offset, struct fuse_file_info *fi) + off_t offset, struct fuse_file_info *fi) { (void) fi; (void) offset; + struct GNUNET_FUSE_path_info *r; + int len = strlen(path); + int exist = 0; + r = GNUNET_malloc (sizeof (struct GNUNET_FUSE_path_info)); - /* create MultiHashMap */ - unsigned int len = strlen(); - - map = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_MultiHashMap)); - map = GNUNET_CONTAINER_multihashmap_create (len); - + exist = GNUNET_CONTAINER_multihashmap_contains (map, r->hash,); + if ( exist == GNUNET_NO) - /* compute key */ - struct path_uri * r; +/* compute key */ + GNUNET_CRYPTO_hash (r->path, len, r->hash); - GNUNET_CRYPTO_hash (r->path, len, r->key); - - - /* find value with given key */ - - w = GNUNET_malloc (sizeof (struct path_uri)); - w->tmpfile = GNUNET_DISK_mktemp("gnunet-fuse-tempfile"); - w->source = GNUNET_CONTAINER_multihashmap_get (map, w->path); +/* Store a key-value pair in the map */ + GNUNET_CONTAINER_multihashmap_put (map, directory, source, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); +/* store to temporary file */ + r->tmpfile = GNUNET_DISK_mktemp("gnunet-fuse-tempfile"); +/* find value with given key */ + r->source = GNUNET_CONTAINER_multihashmap_get (map, r->path); +/* parse uri from given source */ + uri = GNUNET_FS_uri_parse(r->source, &emsg); GNUNET_SCHEDULER_run(&readdir_task, NULL); - - filler(buf, ".", NULL, 0); filler(buf, "..", NULL, 0);