diff options
Diffstat (limited to 'src/fs/gnunet-search.c')
-rw-r--r-- | src/fs/gnunet-search.c | 173 |
1 files changed, 94 insertions, 79 deletions
diff --git a/src/fs/gnunet-search.c b/src/fs/gnunet-search.c index 3995b1b5b..7d6ff4c6b 100644 --- a/src/fs/gnunet-search.c +++ b/src/fs/gnunet-search.c | |||
@@ -92,11 +92,10 @@ item_printer (void *cls, | |||
92 | #if HAVE_LIBEXTRACTOR | 92 | #if HAVE_LIBEXTRACTOR |
93 | printf ("\t%20s: %s\n", | 93 | printf ("\t%20s: %s\n", |
94 | dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN, | 94 | dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN, |
95 | EXTRACTOR_metatype_to_string (type)), data); | 95 | EXTRACTOR_metatype_to_string (type)), |
96 | #else | ||
97 | printf ("\t%20d: %s\n", | ||
98 | type, | ||
99 | data); | 96 | data); |
97 | #else | ||
98 | printf ("\t%20d: %s\n", type, data); | ||
100 | #endif | 99 | #endif |
101 | return 0; | 100 | return 0; |
102 | } | 101 | } |
@@ -118,13 +117,14 @@ clean_task (void *cls) | |||
118 | GNUNET_free (output_filename); | 117 | GNUNET_free (output_filename); |
119 | return; | 118 | return; |
120 | } | 119 | } |
121 | if (dsize != | 120 | if (dsize != GNUNET_DISK_fn_write (output_filename, |
122 | GNUNET_DISK_fn_write (output_filename, ddata, dsize, | 121 | ddata, |
123 | GNUNET_DISK_PERM_USER_READ | | 122 | dsize, |
124 | GNUNET_DISK_PERM_USER_WRITE)) | 123 | GNUNET_DISK_PERM_USER_READ | |
124 | GNUNET_DISK_PERM_USER_WRITE)) | ||
125 | { | 125 | { |
126 | FPRINTF (stderr, | 126 | fprintf (stderr, |
127 | _("Failed to write directory with search results to `%s'\n"), | 127 | _ ("Failed to write directory with search results to `%s'\n"), |
128 | output_filename); | 128 | output_filename); |
129 | } | 129 | } |
130 | GNUNET_free_non_null (ddata); | 130 | GNUNET_free_non_null (ddata); |
@@ -165,31 +165,35 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info) | |||
165 | NULL); | 165 | NULL); |
166 | uri = GNUNET_FS_uri_to_string (info->value.search.specifics.result.uri); | 166 | uri = GNUNET_FS_uri_to_string (info->value.search.specifics.result.uri); |
167 | printf ("#%u:\n", ++cnt); | 167 | printf ("#%u:\n", ++cnt); |
168 | filename = | 168 | filename = GNUNET_CONTAINER_meta_data_get_by_type ( |
169 | GNUNET_CONTAINER_meta_data_get_by_type (info->value.search. | 169 | info->value.search.specifics.result.meta, |
170 | specifics.result.meta, | 170 | EXTRACTOR_METATYPE_GNUNET_ORIGINAL_FILENAME); |
171 | EXTRACTOR_METATYPE_GNUNET_ORIGINAL_FILENAME); | 171 | is_directory = GNUNET_FS_meta_data_test_for_directory ( |
172 | is_directory = | 172 | info->value.search.specifics.result.meta); |
173 | GNUNET_FS_meta_data_test_for_directory (info->value.search. | ||
174 | specifics.result.meta); | ||
175 | if (NULL != filename) | 173 | if (NULL != filename) |
176 | { | 174 | { |
177 | while ( (filename[0] != '\0') && | 175 | while ((filename[0] != '\0') && ('/' == filename[strlen (filename) - 1])) |
178 | ('/' == filename[strlen(filename)-1]) ) | 176 | filename[strlen (filename) - 1] = '\0'; |
179 | filename[strlen(filename)-1] = '\0'; | ||
180 | GNUNET_DISK_filename_canonicalize (filename); | 177 | GNUNET_DISK_filename_canonicalize (filename); |
181 | if (GNUNET_YES == is_directory) | 178 | if (GNUNET_YES == is_directory) |
182 | printf ("gnunet-download -o \"%s%s\" -R %s\n", filename, GNUNET_FS_DIRECTORY_EXT, uri); | 179 | printf ("gnunet-download -o \"%s%s\" -R %s\n", |
180 | filename, | ||
181 | GNUNET_FS_DIRECTORY_EXT, | ||
182 | uri); | ||
183 | else | 183 | else |
184 | printf ("gnunet-download -o \"%s\" %s\n", filename, uri); | 184 | printf ("gnunet-download -o \"%s\" %s\n", filename, uri); |
185 | } | 185 | } |
186 | else if (GNUNET_YES == is_directory) | 186 | else if (GNUNET_YES == is_directory) |
187 | printf ("gnunet-download -o \"collection%s\" -R %s\n", GNUNET_FS_DIRECTORY_EXT, uri); | 187 | printf ("gnunet-download -o \"collection%s\" -R %s\n", |
188 | GNUNET_FS_DIRECTORY_EXT, | ||
189 | uri); | ||
188 | else | 190 | else |
189 | printf ("gnunet-download %s\n", uri); | 191 | printf ("gnunet-download %s\n", uri); |
190 | if (verbose) | 192 | if (verbose) |
191 | GNUNET_CONTAINER_meta_data_iterate (info->value.search.specifics. | 193 | GNUNET_CONTAINER_meta_data_iterate (info->value.search.specifics.result |
192 | result.meta, &item_printer, NULL); | 194 | .meta, |
195 | &item_printer, | ||
196 | NULL); | ||
193 | printf ("\n"); | 197 | printf ("\n"); |
194 | fflush (stdout); | 198 | fflush (stdout); |
195 | GNUNET_free_non_null (filename); | 199 | GNUNET_free_non_null (filename); |
@@ -204,7 +208,8 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info) | |||
204 | /* ignore */ | 208 | /* ignore */ |
205 | break; | 209 | break; |
206 | case GNUNET_FS_STATUS_SEARCH_ERROR: | 210 | case GNUNET_FS_STATUS_SEARCH_ERROR: |
207 | FPRINTF (stderr, _("Error searching: %s.\n"), | 211 | fprintf (stderr, |
212 | _ ("Error searching: %s.\n"), | ||
208 | info->value.search.specifics.error.message); | 213 | info->value.search.specifics.error.message); |
209 | GNUNET_SCHEDULER_shutdown (); | 214 | GNUNET_SCHEDULER_shutdown (); |
210 | break; | 215 | break; |
@@ -212,7 +217,7 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info) | |||
212 | GNUNET_SCHEDULER_add_now (&clean_task, NULL); | 217 | GNUNET_SCHEDULER_add_now (&clean_task, NULL); |
213 | break; | 218 | break; |
214 | default: | 219 | default: |
215 | FPRINTF (stderr, _("Unexpected status: %d\n"), info->status); | 220 | fprintf (stderr, _ ("Unexpected status: %d\n"), info->status); |
216 | break; | 221 | break; |
217 | } | 222 | } |
218 | return NULL; | 223 | return NULL; |
@@ -247,7 +252,9 @@ timeout_task (void *cls) | |||
247 | * @param c configuration | 252 | * @param c configuration |
248 | */ | 253 | */ |
249 | static void | 254 | static void |
250 | run (void *cls, char *const *args, const char *cfgfile, | 255 | run (void *cls, |
256 | char *const *args, | ||
257 | const char *cfgfile, | ||
251 | const struct GNUNET_CONFIGURATION_Handle *c) | 258 | const struct GNUNET_CONFIGURATION_Handle *c) |
252 | { | 259 | { |
253 | struct GNUNET_FS_Uri *uri; | 260 | struct GNUNET_FS_Uri *uri; |
@@ -260,17 +267,22 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
260 | uri = GNUNET_FS_uri_ksk_create_from_args (argc, (const char **) args); | 267 | uri = GNUNET_FS_uri_ksk_create_from_args (argc, (const char **) args); |
261 | if (NULL == uri) | 268 | if (NULL == uri) |
262 | { | 269 | { |
263 | FPRINTF (stderr, "%s", _("Could not create keyword URI from arguments.\n")); | 270 | fprintf (stderr, |
271 | "%s", | ||
272 | _ ("Could not create keyword URI from arguments.\n")); | ||
264 | ret = 1; | 273 | ret = 1; |
265 | return; | 274 | return; |
266 | } | 275 | } |
267 | cfg = c; | 276 | cfg = c; |
268 | ctx = | 277 | ctx = GNUNET_FS_start (cfg, |
269 | GNUNET_FS_start (cfg, "gnunet-search", &progress_cb, NULL, | 278 | "gnunet-search", |
270 | GNUNET_FS_FLAGS_NONE, GNUNET_FS_OPTIONS_END); | 279 | &progress_cb, |
280 | NULL, | ||
281 | GNUNET_FS_FLAGS_NONE, | ||
282 | GNUNET_FS_OPTIONS_END); | ||
271 | if (NULL == ctx) | 283 | if (NULL == ctx) |
272 | { | 284 | { |
273 | FPRINTF (stderr, _("Could not initialize `%s' subsystem.\n"), "FS"); | 285 | fprintf (stderr, _ ("Could not initialize `%s' subsystem.\n"), "FS"); |
274 | GNUNET_FS_uri_destroy (uri); | 286 | GNUNET_FS_uri_destroy (uri); |
275 | ret = 1; | 287 | ret = 1; |
276 | return; | 288 | return; |
@@ -284,17 +296,14 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
284 | GNUNET_FS_uri_destroy (uri); | 296 | GNUNET_FS_uri_destroy (uri); |
285 | if (NULL == sc) | 297 | if (NULL == sc) |
286 | { | 298 | { |
287 | FPRINTF (stderr, "%s", _("Could not start searching.\n")); | 299 | fprintf (stderr, "%s", _ ("Could not start searching.\n")); |
288 | GNUNET_FS_stop (ctx); | 300 | GNUNET_FS_stop (ctx); |
289 | ret = 1; | 301 | ret = 1; |
290 | return; | 302 | return; |
291 | } | 303 | } |
292 | if (0 != timeout.rel_value_us) | 304 | if (0 != timeout.rel_value_us) |
293 | tt = GNUNET_SCHEDULER_add_delayed (timeout, | 305 | tt = GNUNET_SCHEDULER_add_delayed (timeout, &timeout_task, NULL); |
294 | &timeout_task, | 306 | GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); |
295 | NULL); | ||
296 | GNUNET_SCHEDULER_add_shutdown (&shutdown_task, | ||
297 | NULL); | ||
298 | } | 307 | } |
299 | 308 | ||
300 | 309 | ||
@@ -308,49 +317,55 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
308 | int | 317 | int |
309 | main (int argc, char *const *argv) | 318 | main (int argc, char *const *argv) |
310 | { | 319 | { |
311 | struct GNUNET_GETOPT_CommandLineOption options[] = { | 320 | struct GNUNET_GETOPT_CommandLineOption options[] = |
312 | GNUNET_GETOPT_option_uint ('a', | 321 | {GNUNET_GETOPT_option_uint ('a', |
313 | "anonymity", | 322 | "anonymity", |
314 | "LEVEL", | 323 | "LEVEL", |
315 | gettext_noop ("set the desired LEVEL of receiver-anonymity"), | 324 | gettext_noop ( |
316 | &anonymity), | 325 | "set the desired LEVEL of receiver-anonymity"), |
317 | GNUNET_GETOPT_option_flag ('n', | 326 | &anonymity), |
318 | "no-network", | 327 | GNUNET_GETOPT_option_flag ( |
319 | gettext_noop ("only search the local peer (no P2P network search)"), | 328 | 'n', |
320 | &local_only), | 329 | "no-network", |
321 | GNUNET_GETOPT_option_string ('o', | 330 | gettext_noop ("only search the local peer (no P2P network search)"), |
322 | "output", | 331 | &local_only), |
323 | "PREFIX", | 332 | GNUNET_GETOPT_option_string ( |
324 | gettext_noop ("write search results to file starting with PREFIX"), | 333 | 'o', |
325 | &output_filename), | 334 | "output", |
326 | GNUNET_GETOPT_option_relative_time ('t', | 335 | "PREFIX", |
327 | "timeout", | 336 | gettext_noop ("write search results to file starting with PREFIX"), |
328 | "DELAY", | 337 | &output_filename), |
329 | gettext_noop ("automatically terminate search after DELAY"), | 338 | GNUNET_GETOPT_option_relative_time ( |
330 | &timeout), | 339 | 't', |
331 | GNUNET_GETOPT_option_verbose (&verbose), | 340 | "timeout", |
332 | GNUNET_GETOPT_option_uint ('N', | 341 | "DELAY", |
333 | "results", | 342 | gettext_noop ("automatically terminate search after DELAY"), |
334 | "VALUE", | 343 | &timeout), |
335 | gettext_noop ("automatically terminate search " | 344 | GNUNET_GETOPT_option_verbose (&verbose), |
336 | "after VALUE results are found"), | 345 | GNUNET_GETOPT_option_uint ('N', |
337 | &results_limit), | 346 | "results", |
338 | GNUNET_GETOPT_OPTION_END | 347 | "VALUE", |
339 | }; | 348 | gettext_noop ("automatically terminate search " |
340 | 349 | "after VALUE results are found"), | |
341 | if (GNUNET_OK != | 350 | &results_limit), |
342 | GNUNET_STRINGS_get_utf8_args (argc, argv, | 351 | GNUNET_GETOPT_OPTION_END}; |
343 | &argc, &argv)) | 352 | |
353 | if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) | ||
344 | return 2; | 354 | return 2; |
345 | 355 | ||
346 | ret = (GNUNET_OK == | 356 | ret = |
347 | GNUNET_PROGRAM_run (argc, | 357 | (GNUNET_OK == |
348 | argv, | 358 | GNUNET_PROGRAM_run (argc, |
349 | "gnunet-search [OPTIONS] KEYWORD", | 359 | argv, |
350 | gettext_noop | 360 | "gnunet-search [OPTIONS] KEYWORD", |
351 | ("Search GNUnet for files that were published on GNUnet"), | 361 | gettext_noop ( |
352 | options, &run, NULL)) ? ret : 1; | 362 | "Search GNUnet for files that were published on GNUnet"), |
353 | GNUNET_free ((void*) argv); | 363 | options, |
364 | &run, | ||
365 | NULL)) | ||
366 | ? ret | ||
367 | : 1; | ||
368 | GNUNET_free ((void *) argv); | ||
354 | return ret; | 369 | return ret; |
355 | } | 370 | } |
356 | 371 | ||