/*
This file is part of GNUnet.
- (C) 2009 Christian Grothoff (and other contributing authors)
+ (C) 2009, 2011 Christian Grothoff (and other contributing authors)
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 2, or (at your
+ by the Free Software Foundation; either version 3, or (at your
option) any later version.
GNUnet is distributed in the hope that it will be useful, but
* @author Christian Grothoff
*
* TODO:
- * - serialization/deserialization (& deserialization API)
* - metadata filename clean up code
* - metadata/ksk generation for directories from contained files
*/
* @param meta metadata for the file
* @param do_index GNUNET_YES for index, GNUNET_NO for insertion,
* GNUNET_SYSERR for simulation
- * @param anonymity what is the desired anonymity level for sharing?
- * @param priority what is the priority for OUR node to
- * keep this file available? Use 0 for maximum anonymity and
- * minimum reliability...
- * @param expirationTime when should this content expire?
+ * @param bo block options
* @return publish structure entry for the file
*/
struct GNUNET_FS_FileInformation *
const struct GNUNET_FS_Uri *keywords,
const struct GNUNET_CONTAINER_MetaData *meta,
int do_index,
- uint32_t anonymity,
- uint32_t priority,
- struct GNUNET_TIME_Absolute expirationTime)
+ const struct GNUNET_FS_BlockOptions *bo)
{
struct FileInfo *fi;
struct stat sbuf;
keywords,
meta,
do_index,
- anonymity,
- priority,
- expirationTime);
+ bo);
+ if (ret == NULL)
+ return NULL;
ret->h = h;
ret->filename = GNUNET_strdup (filename);
fn = filename;
fn = ss + 1;
GNUNET_CONTAINER_meta_data_insert (ret->meta,
"<gnunet>",
- EXTRACTOR_METATYPE_FILENAME,
+ EXTRACTOR_METATYPE_GNUNET_ORIGINAL_FILENAME,
EXTRACTOR_METAFORMAT_C_STRING,
"text/plain",
fn,
* @param meta metadata for the file
* @param do_index GNUNET_YES for index, GNUNET_NO for insertion,
* GNUNET_SYSERR for simulation
- * @param anonymity what is the desired anonymity level for sharing?
- * @param priority what is the priority for OUR node to
- * keep this file available? Use 0 for maximum anonymity and
- * minimum reliability...
- * @param expirationTime when should this content expire?
+ * @param bo block options
* @return publish structure entry for the file
*/
struct GNUNET_FS_FileInformation *
const struct GNUNET_FS_Uri *keywords,
const struct GNUNET_CONTAINER_MetaData *meta,
int do_index,
- uint32_t anonymity,
- uint32_t priority,
- struct GNUNET_TIME_Absolute expirationTime)
+ const struct GNUNET_FS_BlockOptions *bo)
{
if (GNUNET_YES == do_index)
{
keywords,
meta,
do_index,
- anonymity,
- priority,
- expirationTime);
+ bo);
}
* @param meta metadata for the file
* @param do_index GNUNET_YES for index, GNUNET_NO for insertion,
* GNUNET_SYSERR for simulation
- * @param anonymity what is the desired anonymity level for sharing?
- * @param priority what is the priority for OUR node to
- * keep this file available? Use 0 for maximum anonymity and
- * minimum reliability...
- * @param expirationTime when should this content expire?
+ * @param bo block options
* @return publish structure entry for the file
*/
struct GNUNET_FS_FileInformation *
const struct GNUNET_FS_Uri *keywords,
const struct GNUNET_CONTAINER_MetaData *meta,
int do_index,
- uint32_t anonymity,
- uint32_t priority,
- struct GNUNET_TIME_Absolute expirationTime)
+ const struct GNUNET_FS_BlockOptions *bo)
{
struct GNUNET_FS_FileInformation *ret;
if (ret->meta == NULL)
ret->meta = GNUNET_CONTAINER_meta_data_create ();
ret->keywords = (keywords == NULL) ? NULL : GNUNET_FS_uri_dup (keywords);
- ret->expirationTime = expirationTime;
ret->data.file.reader = reader;
ret->data.file.reader_cls = reader_cls;
ret->data.file.do_index = do_index;
ret->data.file.file_size = length;
- ret->anonymity = anonymity;
- ret->priority = priority;
+ ret->bo = *bo;
return ret;
}
char *emsg;
/**
- * Should files be indexed?
- */
- int do_index;
-
- /**
- * Desired anonymity level.
+ * Block options.
*/
- uint32_t anonymity;
+ const struct GNUNET_FS_BlockOptions *bo;
/**
- * Desired publishing priority.
- */
- uint32_t priority;
+ * Should files be indexed?
+ */
+ int do_index;
- /**
- * Expiration time for publication.
- */
- struct GNUNET_TIME_Absolute expiration;
};
dsc->scanner,
dsc->scanner_cls,
dsc->do_index,
- dsc->anonymity,
- dsc->priority,
- dsc->expiration,
+ dsc->bo,
&dsc->emsg);
if (NULL == fi)
{
GNUNET_FS_meta_data_extract_from_file (meta,
filename,
dsc->extractors);
- // FIXME: remove path from filename in metadata!
keywords = GNUNET_FS_uri_ksk_create_from_meta_data (meta);
ksk_uri = GNUNET_FS_uri_ksk_canonicalize (keywords);
fi = GNUNET_FS_file_information_create_from_file (dsc->h,
ksk_uri,
meta,
dsc->do_index,
- dsc->anonymity,
- dsc->priority,
- dsc->expiration);
+ dsc->bo);
GNUNET_CONTAINER_meta_data_destroy (meta);
GNUNET_FS_uri_destroy (keywords);
GNUNET_FS_uri_destroy (ksk_uri);
* @param h handle to the file sharing subsystem
* @param dirname name of the directory to scan
* @param do_index should files be indexed or inserted
- * @param anonymity desired anonymity level
- * @param priority priority for publishing
- * @param expirationTime expiration for publication
+ * @param bo block options
* @param proc function called on each entry
* @param proc_cls closure for proc
* @param emsg where to store an error message (on errors)
struct GNUNET_FS_Handle *h,
const char *dirname,
int do_index,
- uint32_t anonymity,
- uint32_t priority,
- struct GNUNET_TIME_Absolute expirationTime,
+ const struct GNUNET_FS_BlockOptions *bo,
GNUNET_FS_FileProcessor proc,
void *proc_cls,
char **emsg)
dsc.scanner = &GNUNET_FS_directory_scanner_default;
dsc.scanner_cls = cls;
dsc.do_index = do_index;
- dsc.anonymity = anonymity;
- dsc.priority = priority;
- dsc.expiration = expirationTime;
+ dsc.bo = bo;
if (-1 == GNUNET_DISK_directory_scan (dirname,
&dir_scan_cb,
&dsc))
* @param scanner function used to get a list of files in a directory
* @param scanner_cls closure for scanner
* @param do_index should files in the hierarchy be indexed?
- * @param anonymity what is the desired anonymity level for sharing?
- * @param priority what is the priority for OUR node to
- * keep this file available? Use 0 for maximum anonymity and
- * minimum reliability...
- * @param expirationTime when should this content expire?
+ * @param bo block options
* @param emsg where to store an error message
* @return publish structure entry for the directory, NULL on error
*/
GNUNET_FS_DirectoryScanner scanner,
void *scanner_cls,
int do_index,
- uint32_t anonymity,
- uint32_t priority,
- struct GNUNET_TIME_Absolute expirationTime,
+ const struct GNUNET_FS_BlockOptions *bo,
char **emsg)
{
struct GNUNET_FS_FileInformation *ret;
struct GNUNET_CONTAINER_MetaData *meta;
const char *fn;
const char *ss;
+ char *dn;
dc.entries = NULL;
meta = GNUNET_CONTAINER_meta_data_create ();
h,
filename,
do_index,
- anonymity,
- priority,
- expirationTime,
+ bo,
&dirproc,
&dc,
emsg);
client_info,
ksk,
meta,
- anonymity,
- priority,
- expirationTime);
+ bo);
GNUNET_CONTAINER_meta_data_destroy (meta);
ret->data.dir.entries = dc.entries;
while (dc.entries != NULL)
dc.entries = dc.entries->next;
}
fn = filename;
- while (NULL != (ss = strstr (fn,
- DIR_SEPARATOR_STR)))
+ while ( (NULL != (ss = strstr (fn,
+ DIR_SEPARATOR_STR))) &&
+ (strlen (ss) > 1) )
fn = ss + 1;
+ GNUNET_asprintf (&dn,
+ "%s/",
+ fn);
GNUNET_CONTAINER_meta_data_insert (ret->meta,
"<gnunet>",
- EXTRACTOR_METATYPE_FILENAME,
+ EXTRACTOR_METATYPE_GNUNET_ORIGINAL_FILENAME,
EXTRACTOR_METAFORMAT_C_STRING,
"text/plain",
- fn,
- strlen (fn) + 1);
+ dn,
+ strlen (dn) + 1);
+ GNUNET_free (dn);
ret->filename = GNUNET_strdup (filename);
return ret;
}
* @param meta metadata for the directory
* @param keywords under which keywords should this directory be available
* directly; can be NULL
- * @param anonymity what is the desired anonymity level for sharing?
- * @param priority what is the priority for OUR node to
- * keep this file available? Use 0 for maximum anonymity and
- * minimum reliability...
- * @param expirationTime when should this content expire?
+ * @param bo block options
* @return publish structure entry for the directory , NULL on error
*/
struct GNUNET_FS_FileInformation *
void *client_info,
const struct GNUNET_FS_Uri *keywords,
const struct GNUNET_CONTAINER_MetaData *meta,
- uint32_t anonymity,
- uint32_t priority,
- struct GNUNET_TIME_Absolute expirationTime)
+ const struct GNUNET_FS_BlockOptions *bo)
{
struct GNUNET_FS_FileInformation *ret;
ret->client_info = client_info;
ret->meta = GNUNET_CONTAINER_meta_data_duplicate (meta);
ret->keywords = GNUNET_FS_uri_dup (keywords);
- ret->expirationTime = expirationTime;
+ ret->bo = *bo;
ret->is_directory = GNUNET_YES;
- ret->anonymity = anonymity;
- ret->priority = priority;
return ret;
}
(dir->is_directory) ? dir->data.dir.dir_size : dir->data.file.file_size,
dir->meta,
&dir->keywords,
- &dir->anonymity,
- &dir->priority,
+ &dir->bo,
(dir->is_directory) ? &no : &dir->data.file.do_index,
- &dir->expirationTime,
&dir->client_info))
return;
if (! dir->is_directory)
(pos->is_directory) ? pos->data.dir.dir_size : pos->data.file.file_size,
pos->meta,
&pos->keywords,
- &pos->anonymity,
- &pos->priority,
+ &pos->bo,
(dir->is_directory) ? &no : &dir->data.file.do_index,
- &pos->expirationTime,
&pos->client_info))
break;
pos = pos->next;
fi->data.dir.dir_size,
fi->meta,
&fi->keywords,
- &fi->anonymity,
- &fi->priority,
+ &fi->bo,
&no,
- &fi->expirationTime,
&fi->client_info);
GNUNET_free_non_null (fi->data.dir.dir_data);
}
fi->data.file.file_size,
fi->meta,
&fi->keywords,
- &fi->anonymity,
- &fi->priority,
+ &fi->bo,
&fi->data.file.do_index,
- &fi->expirationTime,
&fi->client_info);
}
GNUNET_free_non_null (fi->filename);