diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-01-28 14:52:48 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-01-28 14:52:48 +0000 |
commit | 4b9e92b8f0c33dd655abff1cda89b33aaf90ef16 (patch) | |
tree | 4dbe0b3109daad81b6f7c6845b152afd787576fc /src/include/gnunet_fs_service.h | |
parent | 0f5c5a8d55e8f3df8dcb8ddff61da621b6a482af (diff) | |
download | gnunet-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.h | 221 |
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); | |||
1760 | const char * | 1761 | const char * |
1761 | GNUNET_FS_file_information_get_filename (struct GNUNET_FS_FileInformation *s); | 1762 | GNUNET_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 | |||
1772 | GNUNET_FS_file_information_set_filename (struct GNUNET_FS_FileInformation *s, | 1774 | GNUNET_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 | */ | ||
1892 | typedef 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 | */ | ||
1909 | typedef 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 | */ | ||
1941 | int | ||
1942 | GNUNET_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 | */ | ||
1969 | struct GNUNET_FS_FileInformation * | ||
1970 | GNUNET_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 | */ | ||
2695 | enum GNUNET_FS_DirScannerProgressUpdateReason | 2602 | enum 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 | ||
2708 | typedef 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 | */ | ||
2656 | typedef 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 | */ | ||
2777 | struct GNUNET_FS_DirScanner; | 2732 | struct 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 | */ | ||
2745 | struct GNUNET_FS_DirScanner * | ||
2746 | GNUNET_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 | */ |
2789 | void | 2762 | void |
2790 | GNUNET_FS_directory_scan_finish (struct GNUNET_FS_DirScanner *ds, | 2763 | GNUNET_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, | |||
2804 | struct GNUNET_FS_ShareTreeItem * | 2778 | struct GNUNET_FS_ShareTreeItem * |
2805 | GNUNET_FS_directory_scan_cleanup (struct GNUNET_FS_DirScanner *ds); | 2779 | GNUNET_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 | */ |
2817 | struct GNUNET_FS_DirScanner * | ||
2818 | GNUNET_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 */ | ||
2824 | struct GNUNET_FS_ProcessMetadataContext; | 2785 | struct 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 | */ |
2834 | struct GNUNET_FS_ProcessMetadataContext * | 2796 | struct GNUNET_FS_ProcessMetadataContext * |
2835 | GNUNET_FS_trim_share_tree (struct GNUNET_FS_ShareTreeItem *toplevel, | 2797 | GNUNET_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 */ |