160 if (NULL != identity)
219 _ (
"Publishing `%s' at %llu/%llu (%s remaining)\n"),
231 .progress_directory.eta,
234 _ (
"Publishing `%s' at %llu/%llu (%s remaining)\n"),
237 info->
value.
publish.specifics.progress_directory.completed,
246 _ (
"Error publishing: %s.\n"),
254 _ (
"Publishing `%s' done.\n"),
258 fprintf (stdout,
_ (
"URI is `%s'.\n"), suri);
260 if (NULL != info->
value.
publish.specifics.completed.sks_uri)
264 fprintf (stdout,
_ (
"Namespace URI is `%s'.\n"), suri);
279 fprintf (stderr,
"%s",
_ (
"Starting cleanup after abort\n"));
286 fprintf (stderr,
"%s",
_ (
"Cleanup after abort completed.\n"));
291 fprintf (stderr,
"%s",
_ (
"Cleanup after abort failed.\n"));
299 fprintf (stderr,
_ (
"Unexpected status: %d\n"), info->
status);
324 const char *data_mime_type,
333 #if HAVE_LIBEXTRACTOR 334 fprintf (stdout,
"\t%s - %s\n", EXTRACTOR_metatype_to_string (type), data);
336 fprintf (stdout,
"\t%d - %s\n", type, data);
353 fprintf (stdout,
"\t%s\n", keyword);
396 if (NULL != topKeywords)
425 fprintf (stdout,
_ (
"Meta data for file `%s' (%s)\n"), fn, fs);
427 fprintf (stdout,
_ (
"Keywords for file `%s' (%s)\n"), fn, fs);
432 fprintf (stdout,
"%s",
"\n");
456 fprintf (stderr,
"%s\n", emsg);
482 fprintf (stderr,
"%s\n", emsg);
485 if (NULL ==
namespace)
523 if (NULL == item->
meta)
582 fprintf (stderr,
"%s",
_ (
"Could not publish\n"));
595 if (NULL !=
namespace)
611 fprintf (stderr,
"%s",
_ (
"Could not start publishing.\n"));
644 fprintf (stdout,
_ (
"Scanning directory `%s'.\n"), filename);
646 fprintf (stdout,
_ (
"Scanning file `%s'.\n"), filename);
652 _ (
"There was trouble processing file `%s', skipping it.\n"),
658 fprintf (stdout,
"%s",
_ (
"Preprocessing complete.\n"));
664 _ (
"Extracting meta data from file `%s' complete.\n"),
670 fprintf (stdout,
"%s",
_ (
"Meta data extraction has finished.\n"));
678 fprintf (stdout,
"%s",
_ (
"Error scanning directory.\n"));
703 if ((NULL !=
pseudonym) && (NULL ==
namespace))
705 fprintf (stderr,
_ (
"Selected pseudonym `%s' unknown\n"),
pseudonym);
715 fprintf (stderr,
_ (
"Failed to parse URI: %s\n"), emsg);
734 if (0 != access (args0, R_OK))
737 _ (
"Failed to access `%s': %s\n"),
754 "Failed to start meta directory scanner. Is gnunet-helper-publish-fs installed?\n"));
779 const char *args0 = cls;
810 printf (
_ (
"Cannot extract metadata from a URI!\n"));
815 ((NULL == args[0]) || (NULL != args[1])))
817 printf (
_ (
"You must specify one and only one filename for insertion.\n"));
821 if ((NULL !=
uri_string) && (NULL != args[0]))
823 printf (
_ (
"You must NOT specify an URI and a filename.\n"));
832 _ (
"Option `%s' is required when using option `%s'.\n"),
844 _ (
"Option `%s' makes no sense without option `%s'.\n"),
853 _ (
"Option `%s' makes no sense without option `%s'.\n"),
869 fprintf (stderr,
_ (
"Could not initialize `%s' subsystem.\n"),
"FS");
889 main (
int argc,
char *
const *argv)
896 "set the desired LEVEL of sender-anonymity"),
901 gettext_noop (
"do not use libextractor to add keywords or metadata"),
904 "enable-creation-time",
906 "enable adding the creation time to the " 907 "metadata of the uploaded file"),
912 "print list of extracted keywords that would " 913 "be used, but do not perform upload"),
920 "add an additional keyword for the top-level " 921 "file or directory (this option can be specified multiple times)"),
927 gettext_noop (
"set the meta-data for the given TYPE to the given VALUE"),
932 gettext_noop (
"do not index, perform full insertion (stores " 933 "entire file in encrypted form in GNUnet database)"),
940 "published in the future (for namespace insertions only)"),
946 "specify the priority of the content"),
952 "publish the files under the pseudonym " 953 "NAME (place file into namespace)"),
959 "set the desired replication LEVEL"),
964 "only simulate the process but do not do " 965 "any actual publishing (useful to compute URIs)"),
971 "set the ID of this version of the publication " 972 "(for namespace insertions only)"),
979 "URI to be published (can be used instead of passing a " 980 "file to add keywords to the file with the respective URI)"),
996 "gnunet-publish [OPTIONS] FILENAME",
struct GNUNET_IDENTITY_Handle * GNUNET_IDENTITY_connect(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_IDENTITY_Callback cb, void *cb_cls)
Connect to the identity service.
struct GNUNET_TIME_Absolute expiration_time
At what time should the block expire? Data blocks (DBLOCKS and IBLOCKS) may still be used even if the...
struct GNUNET_TIME_Absolute GNUNET_TIME_year_to_time(unsigned int year)
Convert a year to an expiration time of January 1st of that year.
void GNUNET_FS_share_tree_trim(struct GNUNET_FS_ShareTreeItem *toplevel)
Process a share item tree, moving frequent keywords up and copying frequent metadata up...
struct GNUNET_FS_FileInformation * GNUNET_FS_file_information_create_empty_directory(struct GNUNET_FS_Handle *h, void *client_info, const struct GNUNET_FS_Uri *keywords, const struct GNUNET_CONTAINER_MetaData *meta, const struct GNUNET_FS_BlockOptions *bo, const char *filename)
Create an entry for an empty directory in a publish-structure.
EXTRACTOR_MetaFormat
Format in which the extracted meta data is presented.
void GNUNET_FS_publish_stop(struct GNUNET_FS_PublishContext *pc)
Stop an upload.
void GNUNET_FS_unindex_stop(struct GNUNET_FS_UnindexContext *uc)
Clean up after completion of an unindex operation.
enum GNUNET_GenericReturnValue GNUNET_PROGRAM_run(int argc, char *const *argv, const char *binaryName, const char *binaryHelp, const struct GNUNET_GETOPT_CommandLineOption *options, GNUNET_PROGRAM_Main task, void *task_cls)
Run a standard GNUnet command startup sequence (initialize loggers and configuration, parse options).
Notification that we started to unindex a file.
struct GNUNET_FS_Uri * GNUNET_FS_uri_ksk_create_from_args(unsigned int argc, const char **argv)
Create an FS URI from a user-supplied command line of keywords.
static void directory_trim_complete(struct GNUNET_FS_ShareTreeItem *directory_scan_result)
We've finished scanning the directory and optimized the meta data.
void GNUNET_FS_meta_data_make_directory(struct GNUNET_CONTAINER_MetaData *md)
Set the MIMETYPE information for the given metadata to "application/gnunet-directory".
Notification that we are making progress sharing a file structure.
void GNUNET_FS_uri_ksk_add_keyword(struct GNUNET_FS_Uri *uri, const char *keyword, int is_mandatory)
Add the given keyword to the set of keywords represented by the URI.
static struct GNUNET_FS_FileInformation * get_file_information(struct GNUNET_FS_ShareTreeItem *item)
Iterate over the results from the directory scan and extract the desired information for the publishi...
struct GNUNET_FS_PublishContext * GNUNET_FS_publish_start(struct GNUNET_FS_Handle *h, struct GNUNET_FS_FileInformation *fi, const struct GNUNET_CRYPTO_EcdsaPrivateKey *ns, const char *nid, const char *nuid, enum GNUNET_FS_PublishOptions options)
Publish a file or directory.
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)
Start a directory scanner thread.
char * GNUNET_STRINGS_byte_size_fancy(unsigned long long size)
Convert a given filesize into a fancy human-readable format.
struct GNUNET_FS_Uri * GNUNET_FS_uri_parse(const char *uri, char **emsg)
Convert a UTF-8 String to a URI.
Notification that we made progress unindexing a file.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_shutdown(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run on shutdown, that is when a CTRL-C signal is received, or when GNUNET_SCHEDULER_shutdown() is being invoked.
Master context for most FS operations.
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_verbose(unsigned int *level)
Define the '-V' verbosity option.
int GNUNET_FS_file_information_add(struct GNUNET_FS_FileInformation *dir, struct GNUNET_FS_FileInformation *ent)
Add an entry to a directory in a publish-structure.
int GNUNET_STRINGS_get_utf8_args(int argc, char *const *argv, int *u8argc, char *const **u8argv)
Returns utf-8 encoded arguments.
static size_t data_size
Number of bytes in data.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_FS_PublishSksContext * GNUNET_FS_publish_sks(struct GNUNET_FS_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *ns, const char *identifier, const char *update, const struct GNUNET_CONTAINER_MetaData *meta, const struct GNUNET_FS_Uri *uri, const struct GNUNET_FS_BlockOptions *bo, enum GNUNET_FS_PublishOptions options, GNUNET_FS_PublishContinuation cont, void *cont_cls)
Publish an SBlock on GNUnet.
static int meta_printer(void *cls, const char *plugin_name, enum EXTRACTOR_MetaType type, enum EXTRACTOR_MetaFormat format, const char *data_mime_type, const char *data, size_t data_size)
Print metadata entries (except binary metadata and the filename).
static int extract_only
Command-line option to only perform meta data extraction, but not publish.
static struct GNUNET_FS_Handle * ctx
Handle for interaction with file-sharing service.
Last option in the VARARG list.
#define GNUNET_FS_DIRECTORY_MIME
A private key for an identity as per LSD0001.
struct GNUNET_FS_FileInformation * GNUNET_FS_file_information_create_from_file(struct GNUNET_FS_Handle *h, void *client_info, const char *filename, const struct GNUNET_FS_Uri *keywords, const struct GNUNET_CONTAINER_MetaData *meta, int do_index, const struct GNUNET_FS_BlockOptions *bo)
Create an entry for a file in a publish-structure.
struct GNUNET_FS_Uri * ksk_uri
Keywords for this file or directory (derived from metadata).
static int publish_inspector(void *cls, struct GNUNET_FS_FileInformation *fi, uint64_t length, struct GNUNET_CONTAINER_MetaData *m, struct GNUNET_FS_Uri **uri, struct GNUNET_FS_BlockOptions *bo, int *do_index, void **client_info)
Function called on all entries before the publication.
int main(int argc, char *const *argv)
The main function to publish content to GNUnet.
0-terminated, UTF-8 encoded string.
An opaque structure a pointer to which is returned to the caller to be used to control the scanner...
Definition of a command line option.
Private ECC key encoded for transmission.
EXTRACTOR_MetaType
Enumeration defining various sources of keywords.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
void GNUNET_FS_stop(struct GNUNET_FS_Handle *h)
Close our connection with the file-sharing service.
enum GNUNET_GenericReturnValue GNUNET_CONFIGURATION_get_value_string(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
Get a configuration value that should be a string.
struct GNUNET_GETOPT_CommandLineOption GNUNET_FS_GETOPT_METADATA(char shortName, const char *name, const char *argumentHelp, const char *description, struct GNUNET_CONTAINER_MetaData **meta)
Allow user to specify metadata.
We've found all files (in the pre-pass).
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_OPTION_END
static void uri_ksk_continuation(void *cls, const struct GNUNET_FS_Uri *ksk_uri, const char *emsg)
Function called upon completion of the publishing of the UBLOCK for the KSK URI.
struct GNUNET_FS_Handle * GNUNET_FS_start(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *client_name, GNUNET_FS_ProgressCallback upcb, void *upcb_cls, enum GNUNET_FS_Flags flags,...)
Setup a connection to the file-sharing service.
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_string(char shortName, const char *name, const char *argumentHelp, const char *description, char **str)
Allow user to specify a string.
Notification that we have stopped the process of uploading a file structure; no further events will b...
char * GNUNET_FS_uri_to_string(const struct GNUNET_FS_Uri *uri)
Convert a URI to a UTF-8 String.
static int enable_creation_time
Command-line option to disable adding creation time.
static void uri_sks_continuation(void *cls, const struct GNUNET_FS_Uri *sks_uri, const char *emsg)
Function called upon completion of the publishing of the UBLOCK for the SKS URI.
static struct GNUNET_FS_Uri * uri
Value of URI provided on command-line (when not publishing a file but just creating UBlocks to refer ...
static struct GNUNET_ARM_MonitorHandle * m
Monitor connection with ARM.
uint32_t anonymity_level
At which anonymity level should the block be shared? (0: no anonymity, 1: normal GAP, >1: with cover traffic).
struct GNUNET_FS_PublishKskContext * GNUNET_FS_publish_ksk(struct GNUNET_FS_Handle *h, const struct GNUNET_FS_Uri *ksk_uri, const struct GNUNET_CONTAINER_MetaData *meta, const struct GNUNET_FS_Uri *uri, const struct GNUNET_FS_BlockOptions *bo, enum GNUNET_FS_PublishOptions options, GNUNET_FS_PublishContinuation cont, void *cont_cls)
Publish a CHK under various keywords on GNUnet.
struct GNUNET_FS_ShareTreeItem * next
This is a doubly-linked list.
int GNUNET_FS_uri_ksk_get_keywords(const struct GNUNET_FS_Uri *uri, GNUNET_FS_KeywordIterator iterator, void *iterator_cls)
Iterate over all keywords in this keyword URI.
Notification that we have started to publish a file structure.
static char * uri_string
Value of URI provided on command-line (when not publishing a file but just creating UBlocks to refer ...
struct GNUNET_CRYPTO_EcdsaPrivateKey ecdsa_key
An ECDSA identity key.
union GNUNET_FS_ProgressInfo::@25 value
Values that depend on the event type.
static void * progress_cb(void *cls, const struct GNUNET_FS_ProgressInfo *info)
Called by FS client to give information about the progress of an operation.
static struct GNUNET_FS_Uri * topKeywords
Keywords provided via command-line option.
A node of a directory tree (produced by dirscanner)
static struct GNUNET_OS_Process * p
Helper process we started.
Notification that we are making progress sharing a directory.
struct GNUNET_FS_ShareTreeItem * children_head
This is a doubly-linked tree NULL for files and empty directories.
static char * fn
Filename of the unique file.
enum GNUNET_FS_Status status
Specific status code (determines the event type).
struct GNUNET_FS_ProgressInfo::@25::GNUNET_FS_UnindexEvent unindex
const char * GNUNET_STRINGS_relative_time_to_string(struct GNUNET_TIME_Relative delta, int do_round)
Give relative time in human-readable fancy format.
static void do_stop_task(void *cls)
We are finished with the publishing operation, clean up all FS state.
static int ret
Global return value from main().
void GNUNET_IDENTITY_disconnect(struct GNUNET_IDENTITY_Handle *h)
Disconnect from identity service.
void GNUNET_FS_directory_scan_abort(struct GNUNET_FS_DirScanner *ds)
Abort the scan.
void GNUNET_FS_uri_destroy(struct GNUNET_FS_Uri *uri)
Free URI.
There was an internal error.
Handle for controlling a publication process.
struct GNUNET_FS_ProgressInfo::@25::GNUNET_FS_PublishStatusEvent publish
GNUNET_FS_DirScannerProgressUpdateReason
Progress reasons of the directory scanner.
#define GNUNET_free_nz(ptr)
Wrapper around free.
struct GNUNET_GETOPT_CommandLineOption GNUNET_FS_GETOPT_KEYWORDS(char shortName, const char *name, const char *argumentHelp, const char *description, struct GNUNET_FS_Uri **topKeywords)
Allow user to specify keywords.
static struct GNUNET_IDENTITY_Handle * identity
Which namespace do we publish to? NULL if we do not publish to a namespace.
static int keyword_printer(void *cls, const char *keyword, int is_mandatory)
Iterator printing keywords.
static const struct GNUNET_CONFIGURATION_Handle * cfg
Handle to our configuration.
Notification that the unindexing of this file was stopped (final event for this action).
static int do_insert
Command-line option for 'inserting'.
Last call to the progress function: we have finished scanning the directory.
Settings for publishing a block (which may of course also apply to an entire directory or file)...
Notification that the unindexing of this file was completed.
Notification that we completed sharing a file structure.
uint32_t type
Type of public key.
int is_directory
GNUNET_YES if this is a directory
static void run(void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c)
Main function that will be run by the scheduler.
char * filename
Name of the file/directory.
int GNUNET_FS_meta_data_test_for_directory(const struct GNUNET_CONTAINER_MetaData *md)
Does the meta-data claim that this is a directory? Checks if the mime-type is that of a GNUnet direct...
static struct GNUNET_FS_Handle * fs
Handle to FS service.
struct GNUNET_CONTAINER_MetaData * meta
Metadata for this file or directory.
static char * this_id
Command-line option for namespace publishing: identifier for this publication.
We've started processing a file or directory.
uint32_t replication_level
How often should we try to migrate the block to other peers? Only used if "CONTENT_PUSHING" is set to...
unsigned int GNUNET_TIME_get_current_year(void)
Return the current year (i.e.
static struct GNUNET_FS_PublishContext * pc
Handle to FS-publishing operation.
struct GNUNET_FS_FileInformation * fi
File-structure that is being shared.
Notification that an error was encountered sharing a file structure.
static char * next_id
Command-line option for namespace publishing: identifier for updates to this publication.
static struct GNUNET_OS_Process * child
The child process we spawn.
struct GNUNET_IDENTITY_PrivateKey pk
Private key from command line option, or NULL.
void GNUNET_FS_file_information_inspect(struct GNUNET_FS_FileInformation *dir, GNUNET_FS_FileInformationProcessor proc, void *proc_cls)
Inspect a file or directory in a publish-structure.
void GNUNET_FS_share_tree_free(struct GNUNET_FS_ShareTreeItem *toplevel)
Release memory of a share item tree.
A Universal Resource Identifier (URI), opaque.
const struct GNUNET_IDENTITY_PrivateKey * GNUNET_IDENTITY_ego_get_private_key(const struct GNUNET_IDENTITY_Ego *ego)
Obtain the ECC key associated with a ego.
static struct GNUNET_CONTAINER_MetaData * meta
Meta-data provided via command-line option.
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_flag(char shortName, const char *name, const char *description, int *val)
Allow user to specify a flag (which internally means setting an integer to 1/GNUNET_YES/GNUNET_OK.
We've finished extracting meta data from a file.
void GNUNET_FS_file_information_destroy(struct GNUNET_FS_FileInformation *fi, GNUNET_FS_FileInformationProcessor cleaner, void *cleaner_cls)
Destroy publish-structure.
static int disable_extractor
Command-line option to disable meta data extraction.
uint32_t content_priority
How important is it for us to store the block? If we run out of space, the highest-priority, non-expired blocks will be kept.
static void identity_cb(void *cls, struct GNUNET_IDENTITY_Ego *ego, void **ctx, const char *name)
Function called by identity service with known pseudonyms.
static unsigned int verbose
Command line option 'verbose' set.
static void identity_continuation(const char *args0)
Continuation proceeding with initialization after identity subsystem has been initialized.
struct GNUNET_FS_Uri * GNUNET_FS_uri_ksk_merge(const struct GNUNET_FS_Uri *u1, const struct GNUNET_FS_Uri *u2)
Merge the sets of keywords from two KSK URIs.
enum GNUNET_TESTBED_UnderlayLinkModelType type
the type of this model
struct GNUNET_FS_ShareTreeItem * GNUNET_FS_directory_scan_get_result(struct GNUNET_FS_DirScanner *ds)
Obtain the result of the scan after the scan has signalled completion.
static struct GNUNET_FS_DirScanner * ds
Handle to the directory scanner (for recursive insertions).
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_uint(char shortName, const char *name, const char *argumentHelp, const char *description, unsigned int *val)
Allow user to specify an unsigned int.
static void directory_scan_cb(void *cls, const char *filename, int is_directory, enum GNUNET_FS_DirScannerProgressUpdateReason reason)
Function called by the directory scanner as we build the tree that we will need to publish later...
static int do_simulate
Command-line option to merely simulate publishing operation.
No options (use defaults for everything).
uint32_t data
The data value.
Notification that we encountered an error unindexing a file.
static char * plugin_name
Name of our plugin.
static struct GNUNET_FS_BlockOptions bo
Options we set for published blocks.
static char * pseudonym
Command-line option identifying the pseudonym to use for the publication.
#define GNUNET_free(ptr)
Wrapper around free.
Argument given to the progress callback with information about what is going on.
We're having trouble accessing a file (soft-error); it will be ignored.
#define gettext_noop(String)