aboutsummaryrefslogtreecommitdiff
path: root/src/include/gnunet_fs_service.h
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-01-28 14:52:48 +0000
committerChristian Grothoff <christian@grothoff.org>2012-01-28 14:52:48 +0000
commit4b9e92b8f0c33dd655abff1cda89b33aaf90ef16 (patch)
tree4dbe0b3109daad81b6f7c6845b152afd787576fc /src/include/gnunet_fs_service.h
parent0f5c5a8d55e8f3df8dcb8ddff61da621b6a482af (diff)
downloadgnunet-4b9e92b8f0c33dd655abff1cda89b33aaf90ef16.tar.gz
gnunet-4b9e92b8f0c33dd655abff1cda89b33aaf90ef16.zip
-change callback argument from char to int, as that is cleaner for a boolean; document API some
Diffstat (limited to 'src/include/gnunet_fs_service.h')
-rw-r--r--src/include/gnunet_fs_service.h221
1 files changed, 92 insertions, 129 deletions
diff --git a/src/include/gnunet_fs_service.h b/src/include/gnunet_fs_service.h
index 1584f283c..179a56529 100644
--- a/src/include/gnunet_fs_service.h
+++ b/src/include/gnunet_fs_service.h
@@ -53,8 +53,9 @@ extern "C"
53 * 6.0.0: with support for OR in KSKs 53 * 6.0.0: with support for OR in KSKs
54 * 6.1.x: with simplified namespace support 54 * 6.1.x: with simplified namespace support
55 * 9.0.0: CPS-style integrated API 55 * 9.0.0: CPS-style integrated API
56 * 9.1.1: asynchronous directory scanning
56 */ 57 */
57#define GNUNET_FS_VERSION 0x00090001 58#define GNUNET_FS_VERSION 0x00090101
58 59
59 60
60/* ******************** URI API *********************** */ 61/* ******************** URI API *********************** */
@@ -1760,6 +1761,7 @@ GNUNET_FS_file_information_get_id (struct GNUNET_FS_FileInformation *s);
1760const char * 1761const char *
1761GNUNET_FS_file_information_get_filename (struct GNUNET_FS_FileInformation *s); 1762GNUNET_FS_file_information_get_filename (struct GNUNET_FS_FileInformation *s);
1762 1763
1764
1763/** 1765/**
1764 * Set the filename in the file information structure. 1766 * Set the filename in the file information structure.
1765 * If filename was already set, frees it before setting the new one. 1767 * If filename was already set, frees it before setting the new one.
@@ -1772,6 +1774,7 @@ void
1772GNUNET_FS_file_information_set_filename (struct GNUNET_FS_FileInformation *s, 1774GNUNET_FS_file_information_set_filename (struct GNUNET_FS_FileInformation *s,
1773 const char *filename); 1775 const char *filename);
1774 1776
1777
1775/** 1778/**
1776 * Create an entry for a file in a publish-structure. 1779 * Create an entry for a file in a publish-structure.
1777 * 1780 *
@@ -1880,105 +1883,6 @@ GNUNET_FS_file_information_create_from_reader (struct GNUNET_FS_Handle *h,
1880 1883
1881 1884
1882/** 1885/**
1883 * Function that a "GNUNET_FS_DirectoryScanner" should call
1884 * for each entry in the directory.
1885 *
1886 * @param cls closure
1887 * @param filename name of the file (including path); must end
1888 * in a "/" (even on W32) if this is a directory
1889 * @param fi information about the file (should not be
1890 * used henceforth by the caller)
1891 */
1892typedef void (*GNUNET_FS_FileProcessor) (void *cls, const char *filename,
1893 struct GNUNET_FS_FileInformation * fi);
1894
1895
1896/**
1897 * Type of a function that will be used to scan a directory.
1898 *
1899 * @param cls closure
1900 * @param h handle to the file sharing subsystem
1901 * @param dirname name of the directory to scan
1902 * @param do_index should files be indexed or inserted
1903 * @param bo block options
1904 * @param proc function to call on each entry
1905 * @param proc_cls closure for proc
1906 * @param emsg where to store an error message (on errors)
1907 * @return GNUNET_OK on success
1908 */
1909typedef int (*GNUNET_FS_DirectoryScanner) (void *cls,
1910 struct GNUNET_FS_Handle * h,
1911 const char *dirname, int do_index,
1912 const struct GNUNET_FS_BlockOptions *
1913 bo, GNUNET_FS_FileProcessor proc,
1914 void *proc_cls, char **emsg);
1915
1916
1917
1918/**
1919 * Simple, useful default implementation of a directory scanner
1920 * (GNUNET_FS_DirectoryScanner). This implementation expects to get a
1921 * UNIX filename, will publish all files in the directory except hidden
1922 * files (those starting with a "."). Metadata will be extracted
1923 * using GNU libextractor; the specific list of plugins should be
1924 * specified in "cls", passing NULL will disable (!) metadata
1925 * extraction. Keywords will be derived from the metadata and
1926 * associated with directories as appropriate. This is strictly a
1927 * convenience function (however, if all tools use it, there will
1928 * be less of a chance of distinguishing users by the specific
1929 * user-interface they were using).
1930 *
1931 * @param cls must be of type "struct EXTRACTOR_Extractor*"
1932 * @param h handle to the file sharing subsystem
1933 * @param dirname name of the directory to scan
1934 * @param do_index should files be indexed or inserted
1935 * @param bo block options
1936 * @param proc function called on each entry
1937 * @param proc_cls closure for proc
1938 * @param emsg where to store an error message (on errors)
1939 * @return GNUNET_OK on success
1940 */
1941int
1942GNUNET_FS_directory_scanner_default (void *cls, struct GNUNET_FS_Handle *h,
1943 const char *dirname, int do_index,
1944 const struct GNUNET_FS_BlockOptions *bo,
1945 GNUNET_FS_FileProcessor proc,
1946 void *proc_cls, char **emsg);
1947
1948
1949/**
1950 * Create a publish-structure from an existing file hierarchy, inferring
1951 * and organizing keywords and metadata as much as possible. This
1952 * function primarily performs the recursive build and re-organizes
1953 * keywords and metadata; for automatically getting metadata
1954 * extraction, scanning of directories and creation of the respective
1955 * GNUNET_FS_FileInformation entries the default scanner should be
1956 * passed (GNUNET_FS_directory_scanner_default). This is strictly a
1957 * convenience function.
1958 *
1959 * @param h handle to the file sharing subsystem
1960 * @param client_info initial client-info value for this entry
1961 * @param filename name of the top-level file or directory
1962 * @param scanner function used to get a list of files in a directory
1963 * @param scanner_cls closure for scanner
1964 * @param do_index should files in the hierarchy be indexed?
1965 * @param bo block options
1966 * @param emsg where to store an error message
1967 * @return publish structure entry for the directory, NULL on error
1968 */
1969struct GNUNET_FS_FileInformation *
1970GNUNET_FS_file_information_create_from_directory (struct GNUNET_FS_Handle *h,
1971 void *client_info,
1972 const char *filename,
1973 GNUNET_FS_DirectoryScanner
1974 scanner, void *scanner_cls,
1975 int do_index,
1976 const struct
1977 GNUNET_FS_BlockOptions *bo,
1978 char **emsg);
1979
1980
1981/**
1982 * Create an entry for an empty directory in a publish-structure. 1886 * Create an entry for an empty directory in a publish-structure.
1983 * This function should be used by applications for which the 1887 * This function should be used by applications for which the
1984 * use of "GNUNET_FS_file_information_create_from_directory" 1888 * use of "GNUNET_FS_file_information_create_from_directory"
@@ -2692,22 +2596,69 @@ GNUNET_FS_directory_builder_finish (struct GNUNET_FS_DirectoryBuilder *bld,
2692 2596
2693/* ******************** DirScanner API *********************** */ 2597/* ******************** DirScanner API *********************** */
2694 2598
2599/**
2600 * Progress reasons of the directory scanner.
2601 */
2695enum GNUNET_FS_DirScannerProgressUpdateReason 2602enum GNUNET_FS_DirScannerProgressUpdateReason
2696{ 2603{
2604 /**
2605 * FIXME
2606 */
2697 GNUNET_FS_DIRSCANNER_FIRST = 0, 2607 GNUNET_FS_DIRSCANNER_FIRST = 0,
2608
2609 /**
2610 * FIXME
2611 */
2698 GNUNET_FS_DIRSCANNER_NEW_FILE = 1, 2612 GNUNET_FS_DIRSCANNER_NEW_FILE = 1,
2613
2614 /**
2615 * FIXME
2616 */
2699 GNUNET_FS_DIRSCANNER_DOES_NOT_EXIST = 2, 2617 GNUNET_FS_DIRSCANNER_DOES_NOT_EXIST = 2,
2618
2619 /**
2620 * FIXME
2621 */
2700 GNUNET_FS_DIRSCANNER_ASKED_TO_STOP = 3, 2622 GNUNET_FS_DIRSCANNER_ASKED_TO_STOP = 3,
2623
2624 /**
2625 * FIXME
2626 */
2701 GNUNET_FS_DIRSCANNER_FINISHED = 4, 2627 GNUNET_FS_DIRSCANNER_FINISHED = 4,
2628
2629 /**
2630 * FIXME
2631 */
2702 GNUNET_FS_DIRSCANNER_PROTOCOL_ERROR = 5, 2632 GNUNET_FS_DIRSCANNER_PROTOCOL_ERROR = 5,
2633
2634 /**
2635 * FIXME
2636 */
2703 GNUNET_FS_DIRSCANNER_SHUTDOWN = 6, 2637 GNUNET_FS_DIRSCANNER_SHUTDOWN = 6,
2638
2639 /**
2640 * FIXME
2641 */
2704 GNUNET_FS_DIRSCANNER_LAST = 7 2642 GNUNET_FS_DIRSCANNER_LAST = 7
2705}; 2643};
2706 2644
2707 2645
2708typedef int (* GNUNET_FS_DirScannerProgressCallback) ( 2646/**
2709 void *cls, struct GNUNET_FS_DirScanner *ds, const char *filename, 2647 * Function called over time as the directory scanner makes
2710 char is_directory, enum GNUNET_FS_DirScannerProgressUpdateReason reason); 2648 * progress on the job at hand.
2649 *
2650 * @param cls closure
2651 * @param ds handle to the directory scanner (NEEDED!?)
2652 * @param filename which file we are making progress on
2653 * @param is_directory GNUNET_YES if this is a directory
2654 * @param reason kind of progress we are making
2655 */
2656typedef int (*GNUNET_FS_DirScannerProgressCallback) (void *cls,
2657 struct GNUNET_FS_DirScanner *ds,
2658 const char *filename,
2659 int is_directory,
2660 enum GNUNET_FS_DirScannerProgressUpdateReason reason);
2661
2711 2662
2712/** 2663/**
2713 * A node of a directory tree (produced by dirscanner) 2664 * A node of a directory tree (produced by dirscanner)
@@ -2763,24 +2714,46 @@ struct GNUNET_FS_ShareTreeItem
2763 char *short_filename; 2714 char *short_filename;
2764 2715
2765 /** 2716 /**
2766 * 1 if this is a directory 2717 * Size of the file (if it is a file), in bytes
2767 */ 2718 */
2768 char is_directory; 2719 uint64_t file_size;
2769 2720
2770 /** 2721 /**
2771 * Size of the file (if it's a file), in bytes 2722 * GNUNET_YES if this is a directory
2772 */ 2723 */
2773 uint64_t file_size; 2724 int is_directory;
2725
2774}; 2726};
2775 2727
2776/* opaqe */ 2728
2729/**
2730 * Opaqe handle to an asynchronous directory scanning activity.
2731 */
2777struct GNUNET_FS_DirScanner; 2732struct GNUNET_FS_DirScanner;
2778 2733
2734
2735/**
2736 * Start a directory scanner thread.
2737 *
2738 * @param filename name of the directory to scan
2739 * @param GNUNET_YES to not to run libextractor on files (only build a tree)
2740 * @param ex if not NULL, must be a list of extra plugins for extractor
2741 * @param cb the callback to call when there are scanning progress messages
2742 * @param cb_cls closure for 'cb'
2743 * @return directory scanner object to be used for controlling the scanner
2744 */
2745struct GNUNET_FS_DirScanner *
2746GNUNET_FS_directory_scan_start (const char *filename,
2747 int disable_extractor,
2748 const char *ex,
2749 GNUNET_FS_DirScannerProgressCallback cb,
2750 void *cb_cls);
2751
2752
2779/** 2753/**
2780 * Signals the scanner to finish the scan as fast as possible. 2754 * Signals the scanner to finish the scan as fast as possible. Does
2781 * Does not block. 2755 * not block. Can close the pipe if asked to, but that is only used
2782 * Can close the pipe if asked to, but that is only used by the 2756 * by the internal call to this function during cleanup. The client
2783 * internal call to this function during cleanup. The client
2784 * must understand the consequences of closing the pipe too early. 2757 * must understand the consequences of closing the pipe too early.
2785 * 2758 *
2786 * @param ds directory scanner structure 2759 * @param ds directory scanner structure
@@ -2788,7 +2761,8 @@ struct GNUNET_FS_DirScanner;
2788 */ 2761 */
2789void 2762void
2790GNUNET_FS_directory_scan_finish (struct GNUNET_FS_DirScanner *ds, 2763GNUNET_FS_directory_scan_finish (struct GNUNET_FS_DirScanner *ds,
2791 int close_pipe); 2764 int close_pipe);
2765
2792 2766
2793/** 2767/**
2794 * Signals the scanner thread to finish (in case it isn't finishing 2768 * Signals the scanner thread to finish (in case it isn't finishing
@@ -2804,23 +2778,10 @@ GNUNET_FS_directory_scan_finish (struct GNUNET_FS_DirScanner *ds,
2804struct GNUNET_FS_ShareTreeItem * 2778struct GNUNET_FS_ShareTreeItem *
2805GNUNET_FS_directory_scan_cleanup (struct GNUNET_FS_DirScanner *ds); 2779GNUNET_FS_directory_scan_cleanup (struct GNUNET_FS_DirScanner *ds);
2806 2780
2781
2807/** 2782/**
2808 * Start a directory scanner thread. 2783 * opaque
2809 *
2810 * @param filename name of the directory to scan
2811 * @param GNUNET_YES to not to run libextractor on files (only build a tree)
2812 * @param ex if not NULL, must be a list of extra plugins for extractor
2813 * @param cb the callback to call when there are scanning progress messages
2814 * @param cls closure for 'cb'
2815 * @return directory scanner object to be used for controlling the scanner
2816 */ 2784 */
2817struct GNUNET_FS_DirScanner *
2818GNUNET_FS_directory_scan_start (const char *filename,
2819 int disable_extractor, const char *ex,
2820 GNUNET_FS_DirScannerProgressCallback cb, void *cls);
2821
2822
2823/* opaque */
2824struct GNUNET_FS_ProcessMetadataContext; 2785struct GNUNET_FS_ProcessMetadataContext;
2825 2786
2826/** 2787/**
@@ -2830,10 +2791,12 @@ struct GNUNET_FS_ProcessMetadataContext;
2830 * @param toplevel toplevel directory in the tree, returned by the scanner 2791 * @param toplevel toplevel directory in the tree, returned by the scanner
2831 * @param cb called after processing is done 2792 * @param cb called after processing is done
2832 * @param cls closure for 'cb' 2793 * @param cls closure for 'cb'
2794 * @return FIXME: what would this handle be used for?
2833 */ 2795 */
2834struct GNUNET_FS_ProcessMetadataContext * 2796struct GNUNET_FS_ProcessMetadataContext *
2835GNUNET_FS_trim_share_tree (struct GNUNET_FS_ShareTreeItem *toplevel, 2797GNUNET_FS_trim_share_tree (struct GNUNET_FS_ShareTreeItem *toplevel,
2836 GNUNET_SCHEDULER_Task cb, void *cls); 2798 GNUNET_SCHEDULER_Task cb, void *cls);
2799
2837 2800
2838 2801
2839#if 0 /* keep Emacsens' auto-indent happy */ 2802#if 0 /* keep Emacsens' auto-indent happy */