{"video/x-msvideo", ".avi"},
{NULL, NULL},
};
-
+ char *ret;
unsigned int i;
char *mime;
+ char *base;
const char *ext;
-
- ext = "";
- mime = NULL;
- // FIXME: get mime from meta data
+
+ ret = GNUNET_CONTAINER_meta_data_get_by_type (md,
+ EXTRACTOR_METATYPE_FILENAME);
+ if (ret != NULL)
+ return ret;
+ ext = NULL;
+ mime = GNUNET_CONTAINER_meta_data_get_by_type (md,
+ EXTRACTOR_METATYPE_MIMETYPE);
if (mime != NULL)
{
i = 0;
mime);
else
ext = mimeMap[i][1];
+ GNUNET_free (mime);
}
- // FIXME: try to get some base name...
-#if 0
- const char *key;
- const char *mime;
- char *path;
- unsigned int j;
- char *renameTo;
- char *ret;
- size_t max;
- struct stat filestat;
-
- key = EXTRACTOR_extractLast (EXTRACTOR_TITLE, list);
- if (key == NULL)
- key = EXTRACTOR_extractLast (EXTRACTOR_SOFTWARE, list);
- if (key == NULL)
- key = EXTRACTOR_extractLast (EXTRACTOR_DESCRIPTION, list);
- if (key == NULL)
- key = EXTRACTOR_extractLast (EXTRACTOR_COMMENT, list);
- if (key == NULL)
- key = EXTRACTOR_extractLast (EXTRACTOR_SUBJECT, list);
- if (key == NULL)
- key = EXTRACTOR_extractLast (EXTRACTOR_ALBUM, list);
- if (key == NULL)
- key = EXTRACTOR_extractLast (EXTRACTOR_UNKNOWN, list);
- mime = EXTRACTOR_extractLast (EXTRACTOR_MIMETYPE, list);
- if (mime != NULL)
- {
- }
- if (key == NULL)
- {
- key = &filename[strlen (filename) - 1];
- while ((key != filename) && (key[0] != DIR_SEPARATOR))
- key--;
- if (key[0] == DIR_SEPARATOR)
- key++;
- }
- GNUNET_snprintf (renameTo,
- max,
- "%s%s%.*s%s",
- path,
- (path[strlen (path) - 1] !=
- DIR_SEPARATOR) ? DIR_SEPARATOR_STR : "",
- GNUNET_MIN (255 - strlen (mime),
- PATH_MAX - strlen (path) - 64), key,
- (strcasecmp
- (renameTo + strlen (renameTo) - strlen (mime),
- mime) != 0) ? mime : "");
-
-
- }
- for (i = strlen (renameTo) - 1; i >= 0; i--)
- if (!isprint (renameTo[i]))
- renameTo[i] = '_';
- else if (renameTo[i] == '.' && i > 0 && renameTo[i - 1] == '.')
- {
- /* remove .. to avoid directory traversal */
- renameTo[i - 1] = renameTo[i] = '_';
- i--;
- }
-#endif
-
- GNUNET_break (0); // FIXME: not implemented
- return NULL;
+ base = GNUNET_CONTAINER_meta_data_get_first_by_types (md,
+ EXTRACTOR_METATYPE_TITLE,
+ EXTRACTOR_METATYPE_BOOK_TITLE,
+ EXTRACTOR_METATYPE_ORIGINAL_TITLE,
+ EXTRACTOR_METATYPE_PACKAGE_NAME,
+ EXTRACTOR_METATYPE_URL,
+ EXTRACTOR_METATYPE_URI,
+ EXTRACTOR_METATYPE_DESCRIPTION,
+ EXTRACTOR_METATYPE_ISRC,
+ EXTRACTOR_METATYPE_JOURNAL_NAME,
+ EXTRACTOR_METATYPE_AUTHOR_NAME,
+ EXTRACTOR_METATYPE_SUBJECT,
+ EXTRACTOR_METATYPE_ALBUM,
+ EXTRACTOR_METATYPE_ARTIST,
+ EXTRACTOR_METATYPE_KEYWORDS,
+ EXTRACTOR_METATYPE_COMMENT,
+ EXTRACTOR_METATYPE_UNKNOWN,
+ -1);
+ if ( (base == NULL) &&
+ (ext == NULL) )
+ return NULL;
+ if (base == NULL)
+ return GNUNET_strdup (ext);
+ if (ext == NULL)
+ return base;
+ GNUNET_asprintf (&ret,
+ "%s%s",
+ base,
+ ext);
+ GNUNET_free (base);
+ return ret;
}
{
struct GNUNET_FS_DownloadContext *dc = cls;
struct GNUNET_FS_DownloadContext *cpos;
+ struct GNUNET_DISK_FileHandle *fh;
char *fn;
char *us;
char *ext;
else
{
dn = GNUNET_strdup (dc->filename);
- GNUNET_break ( (strlen (dn) < strlen (GNUNET_FS_DIRECTORY_EXT)) ||
- (NULL ==
+ GNUNET_break ( (strlen (dn) >= strlen (GNUNET_FS_DIRECTORY_EXT)) &&
+ (NULL !=
strstr (dn + strlen(dn) - strlen(GNUNET_FS_DIRECTORY_EXT),
GNUNET_FS_DIRECTORY_EXT)) );
- dn[strlen(dn) - strlen (GNUNET_FS_DIRECTORY_EXT)] = '\0';
+ if ( (strlen (dn) >= strlen (GNUNET_FS_DIRECTORY_EXT)) &&
+ (NULL !=
+ strstr (dn + strlen(dn) - strlen(GNUNET_FS_DIRECTORY_EXT),
+ GNUNET_FS_DIRECTORY_EXT)) )
+ dn[strlen(dn) - strlen (GNUNET_FS_DIRECTORY_EXT)] = '\0';
if ( (GNUNET_YES == GNUNET_FS_meta_data_test_for_directory (meta)) &&
( (strlen (filename) < strlen (GNUNET_FS_DIRECTORY_EXT)) ||
(NULL ==
{
if (full_name != NULL)
{
- /* determine on-disk filename, write data! */
- GNUNET_break (0); // FIXME: not implemented
+ fh = GNUNET_DISK_file_open (full_name,
+ GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_TRUNCATE | GNUNET_DISK_OPEN_CREATE,
+ GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE);
+ if (fh == NULL)
+ {
+ GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
+ "open",
+ full_name);
+ GNUNET_free (full_name);
+ GNUNET_free_non_null (fn);
+ return;
+ }
+ if (length !=
+ GNUNET_DISK_file_write (fh,
+ data,
+ length))
+ {
+ GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
+ "write",
+ full_name);
+ }
+ GNUNET_DISK_file_close (fh);
}
else
{
( (strlen (dc->filename) >= strlen (GNUNET_FS_DIRECTORY_EXT)) &&
(NULL !=
strstr (dc->filename + strlen(dc->filename) - strlen(GNUNET_FS_DIRECTORY_EXT),
- GNUNET_FS_DIRECTORY_EXT)) ) ) ) ) )
- {
- GNUNET_FS_directory_list_contents (prc->size,
- pt,
- off,
- &trigger_recursive_download,
- dc);
- }
-
+ GNUNET_FS_DIRECTORY_EXT)) ) ) ) ) )
+ GNUNET_FS_directory_list_contents (prc->size,
+ pt,
+ off,
+ &trigger_recursive_download,
+ dc);
+
}
pi.status = GNUNET_FS_STATUS_DOWNLOAD_PROGRESS;
}
if ( (0 != (dc->options & GNUNET_FS_DOWNLOAD_OPTION_RECURSIVE)) &&
- (GNUNET_NO != GNUNET_FS_meta_data_test_for_directory (dc->meta)) )
+ ( (GNUNET_YES == GNUNET_FS_meta_data_test_for_directory (dc->meta)) ||
+ ( (dc->meta == NULL) &&
+ ( (NULL == dc->filename) ||
+ ( (strlen (dc->filename) >= strlen (GNUNET_FS_DIRECTORY_EXT)) &&
+ (NULL !=
+ strstr (dc->filename + strlen(dc->filename) - strlen(GNUNET_FS_DIRECTORY_EXT),
+ GNUNET_FS_DIRECTORY_EXT)) ) ) ) ) )
full_recursive_download (dc);
if (dc->child_head == NULL)
{
struct FileInfo *fi;
struct stat sbuf;
struct GNUNET_FS_FileInformation *ret;
+ const char *fn;
+ const char *ss;
if (0 != STAT (filename, &sbuf))
{
priority,
expirationTime);
ret->data.file.filename = GNUNET_strdup (filename);
+ fn = filename;
+ while (NULL != (ss = strstr (fn,
+ DIR_SEPARATOR_STR)))
+ fn = ss + 1;
+ GNUNET_CONTAINER_meta_data_insert (ret->meta,
+ "<gnunet>",
+ EXTRACTOR_METATYPE_FILENAME,
+ EXTRACTOR_METAFORMAT_C_STRING,
+ "text/plain",
+ fn,
+ strlen (fn) + 1);
return ret;
}
struct EntryProcCls dc;
struct GNUNET_FS_Uri *ksk;
struct GNUNET_CONTAINER_MetaData *meta;
-
-
+ const char *fn;
+ const char *ss;
dc.entries = NULL;
meta = GNUNET_CONTAINER_meta_data_create ();
GNUNET_FS_meta_data_make_directory (meta);
-
scanner (scanner_cls,
filename,
do_index,
GNUNET_FS_file_information_sync (dc.entries);
dc.entries = dc.entries->next;
}
+ fn = filename;
+ while (NULL != (ss = strstr (fn,
+ DIR_SEPARATOR_STR)))
+ fn = ss + 1;
+ GNUNET_CONTAINER_meta_data_insert (ret->meta,
+ "<gnunet>",
+ EXTRACTOR_METATYPE_FILENAME,
+ EXTRACTOR_METAFORMAT_C_STRING,
+ "text/plain",
+ fn,
+ strlen (fn) + 1);
+ ret->data.dir.dirname = GNUNET_strdup (filename);
GNUNET_FS_file_information_sync (ret);
return ret;
}
("add an additional keyword for the top-level file or directory"
" (this option can be specified multiple times)"),
1, &GNUNET_FS_getopt_set_keywords, &topKeywords},
- // *: option not yet used... (can handle in a pass over FI)
{'m', "meta", "TYPE:VALUE",
gettext_noop ("set the meta-data for the given TYPE to the given VALUE"),
1, &GNUNET_FS_getopt_set_metadata, &meta},
gettext_noop
("publish the files under the pseudonym NAME (place file into namespace)"),
1, &GNUNET_GETOPT_set_string, &pseudonym},
- // *: option not yet used... (need FS API support!)
{'s', "simulate-only", NULL,
gettext_noop ("only simulate the process but do not do any "
"actual publishing (useful to compute URIs)"),
gettext_noop ("set the ID of this version of the publication"
" (for namespace insertions only)"),
1, &GNUNET_GETOPT_set_string, &this_id},
- // *: option not yet used... (need FS API support!)
{'u', "uri", "URI",
gettext_noop ("URI to be published (can be used instead of passing a "
"file to add keywords to the file with the respective URI)"),
}
/* end of gnunet-publish.c */
-
-////////////////////////////////////////////////////////////////
-
-#if 0
-/**
- * Print progess message.
- */
-static void *
-printstatus (void *ctx, const GNUNET_FSUI_Event * event)
-{
- unsigned long long delta;
- char *fstring;
-
- switch (event->type)
- {
- case GNUNET_FSUI_upload_progress:
- if (*verboselevel)
- {
- char *ret;
- GNUNET_CronTime now;
-
- now = GNUNET_get_time ();
- delta = event->data.UploadProgress.eta - now;
- if (event->data.UploadProgress.eta < now)
- delta = 0;
- ret = GNUNET_get_time_interval_as_fancy_string (delta);
- PRINTF (_("%16llu of %16llu bytes inserted "
- "(estimating %6s to completion) - %s\n"),
- event->data.UploadProgress.completed,
- event->data.UploadProgress.total,
- ret, event->data.UploadProgress.filename);
- GNUNET_free (ret);
- }
- break;
- case GNUNET_FSUI_upload_completed:
- if (*verboselevel)
- {
- delta = GNUNET_get_time () - start_time;
- PRINTF (_("Upload of `%s' complete, "
- "%llu bytes took %llu seconds (%8.3f KiB/s).\n"),
- event->data.UploadCompleted.filename,
- event->data.UploadCompleted.total,
- delta / GNUNET_CRON_SECONDS,
- (delta == 0)
- ? (double) (-1.0)
- : (double) (event->data.UploadCompleted.total
- / 1024.0 * GNUNET_CRON_SECONDS / delta));
- }
- fstring = GNUNET_ECRS_uri_to_string (event->data.UploadCompleted.uri);
- printf (_("File `%s' has URI: %s\n"),
- event->data.UploadCompleted.filename, fstring);
- GNUNET_free (fstring);
- if (ul == event->data.UploadCompleted.uc.pos)
- {
- postProcess (event->data.UploadCompleted.uri);
- errorCode = 0;
- GNUNET_shutdown_initiate ();
- }
- break;
- case GNUNET_FSUI_upload_aborted:
- printf (_("\nUpload aborted.\n"));
- errorCode = 2;
- GNUNET_shutdown_initiate ();
- break;
- case GNUNET_FSUI_upload_error:
- printf (_("\nError uploading file: %s"),
- event->data.UploadError.message);
- errorCode = 3;
- GNUNET_shutdown_initiate ();
- break;
- case GNUNET_FSUI_upload_started:
- case GNUNET_FSUI_upload_stopped:
- break;
- default:
- printf (_("\nUnexpected event: %d\n"), event->type);
- GNUNET_GE_BREAK (ectx, 0);
- break;
- }
- return NULL;
-}
-#endif
-
-/* end of gnunet-publish.c */