gnunet_fs_service.h | gnunet_fs_service.h | |||
---|---|---|---|---|
skipping to change at line 29 | skipping to change at line 29 | |||
*/ | */ | |||
/** | /** | |||
* @file include/gnunet_fs_service.h | * @file include/gnunet_fs_service.h | |||
* @brief API for file-sharing via GNUnet | * @brief API for file-sharing via GNUnet | |||
* @author Christian Grothoff | * @author Christian Grothoff | |||
*/ | */ | |||
#ifndef GNUNET_FS_LIB_H | #ifndef GNUNET_FS_LIB_H | |||
#define GNUNET_FS_LIB_H | #define GNUNET_FS_LIB_H | |||
#include "gnunet_util_lib.h" | #include "gnunet_util_lib.h" | |||
#include "gnunet_scheduler_lib.h" | ||||
#ifdef __cplusplus | #ifdef __cplusplus | |||
extern "C" | extern "C" | |||
{ | { | |||
#if 0 /* keep Emacsens' auto-indent happy */ | #if 0 /* keep Emacsens' auto-indent happy */ | |||
} | } | |||
#endif | #endif | |||
#endif | #endif | |||
/** | /** | |||
skipping to change at line 55 | skipping to change at line 56 | |||
* 2.2.x: with directories | * 2.2.x: with directories | |||
* 3.0.x: with namespaces | * 3.0.x: with namespaces | |||
* 3.1.x: with namespace meta-data | * 3.1.x: with namespace meta-data | |||
* 3.2.x: with collections | * 3.2.x: with collections | |||
* 4.0.x: with expiration, variable meta-data, kblocks | * 4.0.x: with expiration, variable meta-data, kblocks | |||
* 4.1.x: with new error and configuration handling | * 4.1.x: with new error and configuration handling | |||
* 5.0.x: with location URIs | * 5.0.x: with location URIs | |||
* 6.0.0: with support for OR in KSKs | * 6.0.0: with support for OR in KSKs | |||
* 6.1.x: with simplified namespace support | * 6.1.x: with simplified namespace support | |||
* 9.0.0: CPS-style integrated API | * 9.0.0: CPS-style integrated API | |||
* 9.1.1: asynchronous directory scanning | ||||
*/ | */ | |||
#define GNUNET_FS_VERSION 0x00090001 | #define GNUNET_FS_VERSION 0x00090102 | |||
/* ******************** URI API *********************** */ | /* ******************** URI API *********************** */ | |||
#define GNUNET_FS_URI_PREFIX "gnunet://fs/" | #define GNUNET_FS_URI_PREFIX "gnunet://fs/" | |||
#define GNUNET_FS_URI_KSK_INFIX "ksk/" | #define GNUNET_FS_URI_KSK_INFIX "ksk/" | |||
#define GNUNET_FS_URI_SKS_INFIX "sks/" | #define GNUNET_FS_URI_SKS_INFIX "sks/" | |||
#define GNUNET_FS_URI_CHK_INFIX "chk/" | #define GNUNET_FS_URI_CHK_INFIX "chk/" | |||
#define GNUNET_FS_URI_LOC_INFIX "loc/" | #define GNUNET_FS_URI_LOC_INFIX "loc/" | |||
/** | /** | |||
skipping to change at line 988 | skipping to change at line 990 | |||
* Depth of the given block in the tree; | * Depth of the given block in the tree; | |||
* 0 would be the lowest level (DBLOCKS). | * 0 would be the lowest level (DBLOCKS). | |||
*/ | */ | |||
unsigned int depth; | unsigned int depth; | |||
/** | /** | |||
* How much trust did we offer for downloading this block? | * How much trust did we offer for downloading this block? | |||
*/ | */ | |||
unsigned int trust_offered; | unsigned int trust_offered; | |||
/** | ||||
* How much time passed between us asking for this block and | ||||
* actually getting it? GNUNET_TIME_UNIT_FOREVER_REL if unknown. | ||||
*/ | ||||
struct GNUNET_TIME_Relative block_download_duration; | ||||
} progress; | } progress; | |||
/** | /** | |||
* These values are only valid for | * These values are only valid for | |||
* GNUNET_FS_STATUS_DOWNLOAD_START events. | * GNUNET_FS_STATUS_DOWNLOAD_START events. | |||
*/ | */ | |||
struct | struct | |||
{ | { | |||
/** | /** | |||
skipping to change at line 1638 | skipping to change at line 1646 | |||
* Close our connection with the file-sharing service. | * Close our connection with the file-sharing service. | |||
* The callback given to GNUNET_FS_start will no longer be | * The callback given to GNUNET_FS_start will no longer be | |||
* called after this function returns. | * called after this function returns. | |||
* | * | |||
* @param h handle that was returned from GNUNET_FS_start | * @param h handle that was returned from GNUNET_FS_start | |||
*/ | */ | |||
void | void | |||
GNUNET_FS_stop (struct GNUNET_FS_Handle *h); | GNUNET_FS_stop (struct GNUNET_FS_Handle *h); | |||
/** | /** | |||
* Extract meta-data from a file. | ||||
* | ||||
* @param md metadata to set | ||||
* @param filename name of file to inspect | ||||
* @param extractors plugins to use | ||||
* @return GNUNET_SYSERR on error, otherwise the number | ||||
* of meta-data items obtained | ||||
*/ | ||||
int | ||||
GNUNET_FS_meta_data_extract_from_file (struct GNUNET_CONTAINER_MetaData *md | ||||
, | ||||
const char *filename, | ||||
struct EXTRACTOR_PluginList *extract | ||||
ors); | ||||
/** | ||||
* Function called on entries in a GNUNET_FS_FileInformation publish-struct ure. | * Function called on entries in a GNUNET_FS_FileInformation publish-struct ure. | |||
* | * | |||
* @param cls closure | * @param cls closure | |||
* @param fi the entry in the publish-structure | * @param fi the entry in the publish-structure | |||
* @param length length of the file or directory | * @param length length of the file or directory | |||
* @param meta metadata for the file or directory (can be modified) | * @param meta metadata for the file or directory (can be modified) | |||
* @param uri pointer to the keywords that will be used for this entry (can be modified) | * @param uri pointer to the keywords that will be used for this entry (can be modified) | |||
* @param bo block options (can be modified) | * @param bo block options (can be modified) | |||
* @param do_index should we index (can be modified) | * @param do_index should we index (can be modified) | |||
* @param client_info pointer to client context set upon creation (can be m odified) | * @param client_info pointer to client context set upon creation (can be m odified) | |||
skipping to change at line 1692 | skipping to change at line 1686 | |||
* | * | |||
* @param s structure to get the filename for | * @param s structure to get the filename for | |||
* @return NULL on error, otherwise filename that | * @return NULL on error, otherwise filename that | |||
* can be passed to "GNUNET_FS_file_information_recover" | * can be passed to "GNUNET_FS_file_information_recover" | |||
* to read this fi-struct from disk. | * to read this fi-struct from disk. | |||
*/ | */ | |||
const char * | const char * | |||
GNUNET_FS_file_information_get_id (struct GNUNET_FS_FileInformation *s); | GNUNET_FS_file_information_get_id (struct GNUNET_FS_FileInformation *s); | |||
/** | /** | |||
* Obtain the filename from the file information structure. | ||||
* | ||||
* @param s structure to get the filename for | ||||
* @return "filename" field of the structure (can be NULL) | ||||
*/ | ||||
const char * | ||||
GNUNET_FS_file_information_get_filename (struct GNUNET_FS_FileInformation * | ||||
s); | ||||
/** | ||||
* Set the filename in the file information structure. | ||||
* If filename was already set, frees it before setting the new one. | ||||
* Makes a copy of the argument. | ||||
* | ||||
* @param s structure to get the filename for | ||||
* @param filename filename to set | ||||
*/ | ||||
void | ||||
GNUNET_FS_file_information_set_filename (struct GNUNET_FS_FileInformation * | ||||
s, | ||||
const char *filename); | ||||
/** | ||||
* Create an entry for a file in a publish-structure. | * Create an entry for a file in a publish-structure. | |||
* | * | |||
* @param h handle to the file sharing subsystem | * @param h handle to the file sharing subsystem | |||
* @param client_info initial client-info value for this entry | * @param client_info initial client-info value for this entry | |||
* @param filename name of the file or directory to publish | * @param filename name of the file or directory to publish | |||
* @param keywords under which keywords should this file be available | * @param keywords under which keywords should this file be available | |||
* directly; can be NULL | * directly; can be NULL | |||
* @param meta metadata for the file | * @param meta metadata for the file | |||
* @param do_index GNUNET_YES for index, GNUNET_NO for insertion, | * @param do_index GNUNET_YES for index, GNUNET_NO for insertion, | |||
* GNUNET_SYSERR for simulation | * GNUNET_SYSERR for simulation | |||
skipping to change at line 1795 | skipping to change at line 1810 | |||
void *reader_cls, | void *reader_cls, | |||
const struct GNUNET_FS_Uri | const struct GNUNET_FS_Uri | |||
*keywords, | *keywords, | |||
const struct | const struct | |||
GNUNET_CONTAINER_MetaData *m eta, | GNUNET_CONTAINER_MetaData *m eta, | |||
int do_index, | int do_index, | |||
const struct | const struct | |||
GNUNET_FS_BlockOptions *bo); | GNUNET_FS_BlockOptions *bo); | |||
/** | /** | |||
* Function that a "GNUNET_FS_DirectoryScanner" should call | ||||
* for each entry in the directory. | ||||
* | ||||
* @param cls closure | ||||
* @param filename name of the file (including path); must end | ||||
* in a "/" (even on W32) if this is a directory | ||||
* @param fi information about the file (should not be | ||||
* used henceforth by the caller) | ||||
*/ | ||||
typedef void (*GNUNET_FS_FileProcessor) (void *cls, const char *filename, | ||||
struct GNUNET_FS_FileInformation * | ||||
fi); | ||||
/** | ||||
* Type of a function that will be used to scan a directory. | ||||
* | ||||
* @param cls closure | ||||
* @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 bo block options | ||||
* @param proc function to call on each entry | ||||
* @param proc_cls closure for proc | ||||
* @param emsg where to store an error message (on errors) | ||||
* @return GNUNET_OK on success | ||||
*/ | ||||
typedef int (*GNUNET_FS_DirectoryScanner) (void *cls, | ||||
struct GNUNET_FS_Handle * h, | ||||
const char *dirname, int do_inde | ||||
x, | ||||
const struct GNUNET_FS_BlockOpti | ||||
ons * | ||||
bo, GNUNET_FS_FileProcessor proc | ||||
, | ||||
void *proc_cls, char **emsg); | ||||
/** | ||||
* Simple, useful default implementation of a directory scanner | ||||
* (GNUNET_FS_DirectoryScanner). This implementation expects to get a | ||||
* UNIX filename, will publish all files in the directory except hidden | ||||
* files (those starting with a "."). Metadata will be extracted | ||||
* using GNU libextractor; the specific list of plugins should be | ||||
* specified in "cls", passing NULL will disable (!) metadata | ||||
* extraction. Keywords will be derived from the metadata and | ||||
* associated with directories as appropriate. This is strictly a | ||||
* convenience function (however, if all tools use it, there will | ||||
* be less of a chance of distinguishing users by the specific | ||||
* user-interface they were using). | ||||
* | ||||
* @param cls must be of type "struct EXTRACTOR_Extractor*" | ||||
* @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 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) | ||||
* @return GNUNET_OK on success | ||||
*/ | ||||
int | ||||
GNUNET_FS_directory_scanner_default (void *cls, struct GNUNET_FS_Handle *h, | ||||
const char *dirname, int do_index, | ||||
const struct GNUNET_FS_BlockOptions *b | ||||
o, | ||||
GNUNET_FS_FileProcessor proc, | ||||
void *proc_cls, char **emsg); | ||||
/** | ||||
* Create a publish-structure from an existing file hierarchy, inferring | ||||
* and organizing keywords and metadata as much as possible. This | ||||
* function primarily performs the recursive build and re-organizes | ||||
* keywords and metadata; for automatically getting metadata | ||||
* extraction, scanning of directories and creation of the respective | ||||
* GNUNET_FS_FileInformation entries the default scanner should be | ||||
* passed (GNUNET_FS_directory_scanner_default). This is strictly a | ||||
* convenience function. | ||||
* | ||||
* @param h handle to the file sharing subsystem | ||||
* @param client_info initial client-info value for this entry | ||||
* @param filename name of the top-level file or directory | ||||
* @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 bo block options | ||||
* @param emsg where to store an error message | ||||
* @return publish structure entry for the directory, NULL on error | ||||
*/ | ||||
struct GNUNET_FS_FileInformation * | ||||
GNUNET_FS_file_information_create_from_directory (struct GNUNET_FS_Handle * | ||||
h, | ||||
void *client_info, | ||||
const char *filename, | ||||
GNUNET_FS_DirectoryScanne | ||||
r | ||||
scanner, void *scanner_cl | ||||
s, | ||||
int do_index, | ||||
const struct | ||||
GNUNET_FS_BlockOptions *b | ||||
o, | ||||
char **emsg); | ||||
/** | ||||
* Create an entry for an empty directory in a publish-structure. | * Create an entry for an empty directory in a publish-structure. | |||
* This function should be used by applications for which the | * This function should be used by applications for which the | |||
* use of "GNUNET_FS_file_information_create_from_directory" | * use of "GNUNET_FS_file_information_create_from_directory" | |||
* is not appropriate. | * is not appropriate. | |||
* | * | |||
* @param h handle to the file sharing subsystem | * @param h handle to the file sharing subsystem | |||
* @param client_info initial client-info value for this entry | * @param client_info initial client-info value for this entry | |||
* @param keywords under which keywords should this directory be available | * @param keywords under which keywords should this directory be available | |||
* directly; can be NULL | * directly; can be NULL | |||
* @param meta metadata for the directory | * @param meta metadata for the directory | |||
* @param bo block options | * @param bo block options | |||
* @param filename name of the directory; can be NULL | ||||
* @return publish structure entry for the directory , NULL on error | * @return publish structure entry for the directory , NULL on error | |||
*/ | */ | |||
struct GNUNET_FS_FileInformation * | struct GNUNET_FS_FileInformation * | |||
GNUNET_FS_file_information_create_empty_directory (struct GNUNET_FS_Handle *h, | GNUNET_FS_file_information_create_empty_directory (struct GNUNET_FS_Handle *h, | |||
void *client_info, | void *client_info, | |||
const struct GNUNET_FS_U ri | const struct GNUNET_FS_U ri | |||
*keywords, | *keywords, | |||
const struct | const struct | |||
GNUNET_CONTAINER_MetaDat a | GNUNET_CONTAINER_MetaDat a | |||
*meta, | *meta, | |||
const struct | const struct | |||
GNUNET_FS_BlockOptions * | GNUNET_FS_BlockOptions * | |||
bo); | bo, | |||
const char *filename); | ||||
/** | /** | |||
* Test if a given entry represents a directory. | * Test if a given entry represents a directory. | |||
* | * | |||
* @param ent check if this FI represents a directory | * @param ent check if this FI represents a directory | |||
* @return GNUNET_YES if so, GNUNET_NO if not | * @return GNUNET_YES if so, GNUNET_NO if not | |||
*/ | */ | |||
int | int | |||
GNUNET_FS_file_information_is_directory (const struct GNUNET_FS_FileInforma tion | GNUNET_FS_file_information_is_directory (const struct GNUNET_FS_FileInforma tion | |||
*ent); | *ent); | |||
skipping to change at line 2034 | skipping to change at line 1957 | |||
* | * | |||
* @param cls closure | * @param cls closure | |||
* @param uri URI under which the block is now available, NULL on error | * @param uri URI under which the block is now available, NULL on error | |||
* @param emsg error message, NULL on success | * @param emsg error message, NULL on success | |||
*/ | */ | |||
typedef void (*GNUNET_FS_PublishContinuation) (void *cls, | typedef void (*GNUNET_FS_PublishContinuation) (void *cls, | |||
const struct GNUNET_FS_Uri * uri, | const struct GNUNET_FS_Uri * uri, | |||
const char *emsg); | const char *emsg); | |||
/** | /** | |||
* Handle to cancel publish KSK operation. | ||||
*/ | ||||
struct GNUNET_FS_PublishKskContext; | ||||
/** | ||||
* Publish a KBlock on GNUnet. | * Publish a KBlock on GNUnet. | |||
* | * | |||
* @param h handle to the file sharing subsystem | * @param h handle to the file sharing subsystem | |||
* @param ksk_uri keywords to use | * @param ksk_uri keywords to use | |||
* @param meta metadata to use | * @param meta metadata to use | |||
* @param uri URI to refer to in the KBlock | * @param uri URI to refer to in the KBlock | |||
* @param bo block options | * @param bo block options | |||
* @param options publication options | * @param options publication options | |||
* @param cont continuation | * @param cont continuation | |||
* @param cont_cls closure for cont | * @param cont_cls closure for cont | |||
* @return NULL on error ('cont' will still be called) | ||||
*/ | */ | |||
void | struct GNUNET_FS_PublishKskContext * | |||
GNUNET_FS_publish_ksk (struct GNUNET_FS_Handle *h, | GNUNET_FS_publish_ksk (struct GNUNET_FS_Handle *h, | |||
const struct GNUNET_FS_Uri *ksk_uri, | const struct GNUNET_FS_Uri *ksk_uri, | |||
const struct GNUNET_CONTAINER_MetaData *meta, | const struct GNUNET_CONTAINER_MetaData *meta, | |||
const struct GNUNET_FS_Uri *uri, | const struct GNUNET_FS_Uri *uri, | |||
const struct GNUNET_FS_BlockOptions *bo, | const struct GNUNET_FS_BlockOptions *bo, | |||
enum GNUNET_FS_PublishOptions options, | enum GNUNET_FS_PublishOptions options, | |||
GNUNET_FS_PublishContinuation cont, void *cont_cls); | GNUNET_FS_PublishContinuation cont, void *cont_cls); | |||
/** | /** | |||
* Abort the KSK publishing operation. | ||||
* | ||||
* @param pkc context of the operation to abort. | ||||
*/ | ||||
void | ||||
GNUNET_FS_publish_ksk_cancel (struct GNUNET_FS_PublishKskContext *pkc); | ||||
/** | ||||
* Handle to cancel publish SKS operation. | ||||
*/ | ||||
struct GNUNET_FS_PublishSksContext; | ||||
/** | ||||
* Publish an SBlock on GNUnet. | * Publish an SBlock on GNUnet. | |||
* | * | |||
* @param h handle to the file sharing subsystem | * @param h handle to the file sharing subsystem | |||
* @param namespace namespace to publish in | * @param namespace namespace to publish in | |||
* @param identifier identifier to use | * @param identifier identifier to use | |||
* @param update update identifier to use | * @param update update identifier to use | |||
* @param meta metadata to use | * @param meta metadata to use | |||
* @param uri URI to refer to in the SBlock | * @param uri URI to refer to in the SBlock | |||
* @param bo block options | * @param bo block options | |||
* @param options publication options | * @param options publication options | |||
* @param cont continuation | * @param cont continuation | |||
* @param cont_cls closure for cont | * @param cont_cls closure for cont | |||
* @return NULL on error ('cont' will still be called) | ||||
*/ | */ | |||
void | struct GNUNET_FS_PublishSksContext * | |||
GNUNET_FS_publish_sks (struct GNUNET_FS_Handle *h, | GNUNET_FS_publish_sks (struct GNUNET_FS_Handle *h, | |||
struct GNUNET_FS_Namespace *namespace, | struct GNUNET_FS_Namespace *namespace, | |||
const char *identifier, const char *update, | const char *identifier, const char *update, | |||
const struct GNUNET_CONTAINER_MetaData *meta, | const struct GNUNET_CONTAINER_MetaData *meta, | |||
const struct GNUNET_FS_Uri *uri, | const struct GNUNET_FS_Uri *uri, | |||
const struct GNUNET_FS_BlockOptions *bo, | const struct GNUNET_FS_BlockOptions *bo, | |||
enum GNUNET_FS_PublishOptions options, | enum GNUNET_FS_PublishOptions options, | |||
GNUNET_FS_PublishContinuation cont, void *cont_cls); | GNUNET_FS_PublishContinuation cont, void *cont_cls); | |||
/** | /** | |||
* Abort the SKS publishing operation. | ||||
* | ||||
* @param psc context of the operation to abort. | ||||
*/ | ||||
void | ||||
GNUNET_FS_publish_sks_cancel (struct GNUNET_FS_PublishSksContext *psc); | ||||
/** | ||||
* Type of a function called by "GNUNET_FS_get_indexed_files". | * Type of a function called by "GNUNET_FS_get_indexed_files". | |||
* | * | |||
* @param cls closure | * @param cls closure | |||
* @param filename the name of the file | * @param filename the name of the file, NULL for end of list | |||
* @param file_id hash of the contents of the indexed file | * @param file_id hash of the contents of the indexed file | |||
* @return GNUNET_OK to continue iteration, GNUNET_SYSERR to abort | * @return GNUNET_OK to continue iteration, GNUNET_SYSERR to abort | |||
*/ | */ | |||
typedef int (*GNUNET_FS_IndexedFileProcessor) (void *cls, const char *filen ame, | typedef int (*GNUNET_FS_IndexedFileProcessor) (void *cls, const char *filen ame, | |||
const GNUNET_HashCode * file _id); | const GNUNET_HashCode * file _id); | |||
/** | /** | |||
* Handle to cancel 'GNUNET_FS_get_indexed_files'. | ||||
*/ | ||||
struct GNUNET_FS_GetIndexedContext; | ||||
/** | ||||
* Iterate over all indexed files. | * Iterate over all indexed files. | |||
* | * | |||
* @param h handle to the file sharing subsystem | * @param h handle to the file sharing subsystem | |||
* @param iterator function to call on each indexed file | * @param iterator function to call on each indexed file | |||
* @param iterator_cls closure for iterator | * @param iterator_cls closure for iterator | |||
* @param cont continuation to call when done; | * @return NULL on error ('iter' is not called) | |||
* reason should be "TIMEOUT" (on | ||||
* error) or "PREREQ_DONE" (on success) | ||||
* @param cont_cls closure for cont | ||||
*/ | */ | |||
void | struct GNUNET_FS_GetIndexedContext * | |||
GNUNET_FS_get_indexed_files (struct GNUNET_FS_Handle *h, | GNUNET_FS_get_indexed_files (struct GNUNET_FS_Handle *h, | |||
GNUNET_FS_IndexedFileProcessor iterator, | GNUNET_FS_IndexedFileProcessor iterator, | |||
void *iterator_cls, GNUNET_SCHEDULER_Task cont | void *iterator_cls); | |||
, | ||||
void *cont_cls); | /** | |||
* Cancel iteration over all indexed files. | ||||
* | ||||
* @param gic operation to cancel | ||||
*/ | ||||
void | ||||
GNUNET_FS_get_indexed_files_cancel (struct GNUNET_FS_GetIndexedContext *gic | ||||
); | ||||
/** | /** | |||
* Unindex a file. | * Unindex a file. | |||
* | * | |||
* @param h handle to the file sharing subsystem | * @param h handle to the file sharing subsystem | |||
* @param filename file to unindex | * @param filename file to unindex | |||
* @param cctx initial value for the client context | * @param cctx initial value for the client context | |||
* @return NULL on error, otherwise handle | * @return NULL on error, otherwise handle | |||
*/ | */ | |||
struct GNUNET_FS_UnindexContext * | struct GNUNET_FS_UnindexContext * | |||
skipping to change at line 2127 | skipping to change at line 2087 | |||
/** | /** | |||
* Clean up after completion of an unindex operation. | * Clean up after completion of an unindex operation. | |||
* | * | |||
* @param uc handle | * @param uc handle | |||
*/ | */ | |||
void | void | |||
GNUNET_FS_unindex_stop (struct GNUNET_FS_UnindexContext *uc); | GNUNET_FS_unindex_stop (struct GNUNET_FS_UnindexContext *uc); | |||
/** | /** | |||
* Context for advertising a namespace. | ||||
*/ | ||||
struct GNUNET_FS_AdvertisementContext; | ||||
/** | ||||
* Publish an advertismement for a namespace. | * Publish an advertismement for a namespace. | |||
* | * | |||
* @param h handle to the file sharing subsystem | * @param h handle to the file sharing subsystem | |||
* @param ksk_uri keywords to use for advertisment | * @param ksk_uri keywords to use for advertisment | |||
* @param namespace handle for the namespace that should be advertised | * @param namespace handle for the namespace that should be advertised | |||
* @param meta meta-data for the namespace advertisement | * @param meta meta-data for the namespace advertisement | |||
* @param bo block options | * @param bo block options | |||
* @param rootEntry name of the root of the namespace | * @param rootEntry name of the root of the namespace | |||
* @param cont continuation | * @param cont continuation | |||
* @param cont_cls closure for cont | * @param cont_cls closure for cont | |||
* @return NULL on error ('cont' will still be called) | ||||
*/ | */ | |||
void | struct GNUNET_FS_AdvertisementContext * | |||
GNUNET_FS_namespace_advertise (struct GNUNET_FS_Handle *h, | GNUNET_FS_namespace_advertise (struct GNUNET_FS_Handle *h, | |||
struct GNUNET_FS_Uri *ksk_uri, | struct GNUNET_FS_Uri *ksk_uri, | |||
struct GNUNET_FS_Namespace *namespace, | struct GNUNET_FS_Namespace *namespace, | |||
const struct GNUNET_CONTAINER_MetaData *meta , | const struct GNUNET_CONTAINER_MetaData *meta , | |||
const struct GNUNET_FS_BlockOptions *bo, | const struct GNUNET_FS_BlockOptions *bo, | |||
const char *rootEntry, | const char *rootEntry, | |||
GNUNET_FS_PublishContinuation cont, | GNUNET_FS_PublishContinuation cont, | |||
void *cont_cls); | void *cont_cls); | |||
/** | /** | |||
* Abort the namespace advertisement operation. | ||||
* | ||||
* @param ac context of the operation to abort. | ||||
*/ | ||||
void | ||||
GNUNET_FS_namespace_advertise_cancel (struct GNUNET_FS_AdvertisementContext | ||||
*ac); | ||||
/** | ||||
* Create a namespace with the given name; if one already | * Create a namespace with the given name; if one already | |||
* exists, return a handle to the existing namespace. | * exists, return a handle to the existing namespace. | |||
* | * | |||
* @param h handle to the file sharing subsystem | * @param h handle to the file sharing subsystem | |||
* @param name name to use for the namespace | * @param name name to use for the namespace | |||
* @return handle to the namespace, NULL on error | * @return handle to the namespace, NULL on error | |||
*/ | */ | |||
struct GNUNET_FS_Namespace * | struct GNUNET_FS_Namespace * | |||
GNUNET_FS_namespace_create (struct GNUNET_FS_Handle *h, const char *name); | GNUNET_FS_namespace_create (struct GNUNET_FS_Handle *h, const char *name); | |||
/** | /** | |||
* Duplicate a namespace handle. | ||||
* | ||||
* @param ns namespace handle | ||||
* @return duplicated handle to the namespace | ||||
*/ | ||||
struct GNUNET_FS_Namespace * | ||||
GNUNET_FS_namespace_dup (struct GNUNET_FS_Namespace *ns); | ||||
/** | ||||
* Delete a namespace handle. Can be used for a clean shutdown (free | * Delete a namespace handle. Can be used for a clean shutdown (free | |||
* memory) or also to freeze the namespace to prevent further | * memory) or also to freeze the namespace to prevent further | |||
* insertions by anyone. | * insertions by anyone. | |||
* | * | |||
* @param namespace handle to the namespace that should be deleted / freed | * @param namespace handle to the namespace that should be deleted / freed | |||
* @param freeze prevents future insertions; creating a namespace | * @param freeze prevents future insertions; creating a namespace | |||
* with the same name again will create a fresh namespace instead | * with the same name again will create a fresh namespace instead | |||
* | * | |||
* @return GNUNET_OK on success, GNUNET_SYSERR on error | * @return GNUNET_OK on success, GNUNET_SYSERR on error | |||
*/ | */ | |||
skipping to change at line 2555 | skipping to change at line 2538 | |||
* | * | |||
* @param bld directory to finish | * @param bld directory to finish | |||
* @param rsize set to the number of bytes needed | * @param rsize set to the number of bytes needed | |||
* @param rdata set to the encoded directory | * @param rdata set to the encoded directory | |||
* @return GNUNET_OK on success | * @return GNUNET_OK on success | |||
*/ | */ | |||
int | int | |||
GNUNET_FS_directory_builder_finish (struct GNUNET_FS_DirectoryBuilder *bld, | GNUNET_FS_directory_builder_finish (struct GNUNET_FS_DirectoryBuilder *bld, | |||
size_t * rsize, void **rdata); | size_t * rsize, void **rdata); | |||
/* ******************** DirScanner API *********************** */ | ||||
/** | ||||
* Progress reasons of the directory scanner. | ||||
*/ | ||||
enum GNUNET_FS_DirScannerProgressUpdateReason | ||||
{ | ||||
/** | ||||
* We've started processing a file or directory. | ||||
*/ | ||||
GNUNET_FS_DIRSCANNER_FILE_START = 0, | ||||
/** | ||||
* We're having trouble accessing a file (soft-error); it will | ||||
* be ignored. | ||||
*/ | ||||
GNUNET_FS_DIRSCANNER_FILE_IGNORED, | ||||
/** | ||||
* We've found all files (in the pre-pass). | ||||
*/ | ||||
GNUNET_FS_DIRSCANNER_ALL_COUNTED, | ||||
/** | ||||
* We've finished extracting meta data from a file. | ||||
*/ | ||||
GNUNET_FS_DIRSCANNER_EXTRACT_FINISHED, | ||||
/** | ||||
* Last call to the progress function: we have finished scanning | ||||
* the directory. | ||||
*/ | ||||
GNUNET_FS_DIRSCANNER_FINISHED, | ||||
/** | ||||
* There was an internal error. Application should abort the scan. | ||||
*/ | ||||
GNUNET_FS_DIRSCANNER_INTERNAL_ERROR | ||||
}; | ||||
/** | ||||
* Function called over time as the directory scanner makes | ||||
* progress on the job at hand. | ||||
* | ||||
* @param cls closure | ||||
* @param filename which file we are making progress on | ||||
* @param is_directory GNUNET_YES if this is a directory, | ||||
* GNUNET_NO if this is a file | ||||
* GNUNET_SYSERR if it is neither (or unknown) | ||||
* @param reason kind of progress we are making | ||||
*/ | ||||
typedef void (*GNUNET_FS_DirScannerProgressCallback) (void *cls, | ||||
const char *filename, | ||||
int is_directory, | ||||
enum GNUNET_FS_DirScan | ||||
nerProgressUpdateReason reason); | ||||
/** | ||||
* A node of a directory tree (produced by dirscanner) | ||||
*/ | ||||
struct GNUNET_FS_ShareTreeItem | ||||
{ | ||||
/** | ||||
* This is a doubly-linked list | ||||
*/ | ||||
struct GNUNET_FS_ShareTreeItem *prev; | ||||
/** | ||||
* This is a doubly-linked list | ||||
*/ | ||||
struct GNUNET_FS_ShareTreeItem *next; | ||||
/** | ||||
* This is a doubly-linked tree | ||||
* NULL for top-level entries. | ||||
*/ | ||||
struct GNUNET_FS_ShareTreeItem *parent; | ||||
/** | ||||
* This is a doubly-linked tree | ||||
* NULL for files and empty directories | ||||
*/ | ||||
struct GNUNET_FS_ShareTreeItem *children_head; | ||||
/** | ||||
* This is a doubly-linked tree | ||||
* NULL for files and empty directories | ||||
*/ | ||||
struct GNUNET_FS_ShareTreeItem *children_tail; | ||||
/** | ||||
* Metadata for this file or directory | ||||
*/ | ||||
struct GNUNET_CONTAINER_MetaData *meta; | ||||
/** | ||||
* Keywords for this file or directory (derived from metadata). | ||||
*/ | ||||
struct GNUNET_FS_Uri *ksk_uri; | ||||
/** | ||||
* Name of the file/directory | ||||
*/ | ||||
char *filename; | ||||
/** | ||||
* Base name of the file/directory. | ||||
*/ | ||||
char *short_filename; | ||||
/** | ||||
* GNUNET_YES if this is a directory | ||||
*/ | ||||
int is_directory; | ||||
}; | ||||
/** | ||||
* Opaqe handle to an asynchronous directory scanning activity. | ||||
*/ | ||||
struct GNUNET_FS_DirScanner; | ||||
/** | ||||
* Start a directory scanner. | ||||
* | ||||
* @param filename name of the directory to scan | ||||
* @param disable_extractor GNUNET_YES to not to run libextractor on files | ||||
(only build a tree) | ||||
* @param ex if not NULL, must be a list of extra plugins for extractor | ||||
* @param cb the callback to call when there are scanning progress messages | ||||
* @param cb_cls closure for 'cb' | ||||
* @return directory scanner object to be used for controlling the scanner | ||||
*/ | ||||
struct GNUNET_FS_DirScanner * | ||||
GNUNET_FS_directory_scan_start (const char *filename, | ||||
int disable_extractor, | ||||
const char *ex, | ||||
GNUNET_FS_DirScannerProgressCallback cb, | ||||
void *cb_cls); | ||||
/** | ||||
* Abort the scan. Must not be called from within the progress_callback | ||||
* function. | ||||
* | ||||
* @param ds directory scanner structure | ||||
*/ | ||||
void | ||||
GNUNET_FS_directory_scan_abort (struct GNUNET_FS_DirScanner *ds); | ||||
/** | ||||
* Obtain the result of the scan after the scan has signalled | ||||
* completion. Must not be called prior to completion. The 'ds' is | ||||
* freed as part of this call. | ||||
* | ||||
* @param ds directory scanner structure | ||||
* @return the results of the scan (a directory tree) | ||||
*/ | ||||
struct GNUNET_FS_ShareTreeItem * | ||||
GNUNET_FS_directory_scan_get_result (struct GNUNET_FS_DirScanner *ds); | ||||
/** | ||||
* Process a share item tree, moving frequent keywords up and | ||||
* copying frequent metadata up. | ||||
* | ||||
* @param toplevel toplevel directory in the tree, returned by the scanner | ||||
*/ | ||||
void | ||||
GNUNET_FS_share_tree_trim (struct GNUNET_FS_ShareTreeItem *toplevel); | ||||
/** | ||||
* Release memory of a share item tree. | ||||
* | ||||
* @param toplevel toplevel of the tree to be freed | ||||
*/ | ||||
void | ||||
GNUNET_FS_share_tree_free (struct GNUNET_FS_ShareTreeItem *toplevel); | ||||
#if 0 /* keep Emacsens' auto-indent happy */ | #if 0 /* keep Emacsens' auto-indent happy */ | |||
{ | { | |||
#endif | #endif | |||
#ifdef __cplusplus | #ifdef __cplusplus | |||
} | } | |||
#endif | #endif | |||
#endif | #endif | |||
End of changes. 27 change blocks. | ||||
134 lines changed or deleted | 288 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |