- struct ConnectContext *cc = cls;
-
- if (emsg != NULL)
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- _("Failed to connect peers: %s\n"),
- emsg);
- GNUNET_SCHEDULER_add_continuation (cc->sched,
- cc->cont,
- cc->cont_cls,
- (emsg != NULL)
- ? GNUNET_SCHEDULER_REASON_TIMEOUT
- : GNUNET_SCHEDULER_REASON_PREREQ_DONE);
- GNUNET_free (cc);
+ struct TestPublishOperation *po = cls;
+ struct GNUNET_FS_FileInformation *fi;
+ struct GNUNET_DISK_FileHandle *fh;
+ char *em;
+ uint64_t off;
+ char buf[DBLOCK_SIZE];
+ size_t bsize;
+ struct GNUNET_FS_BlockOptions bo;
+
+ if (NULL == ca_result)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to connect to FS for publishing: %s\n", emsg);
+ po->publish_cont (po->publish_cont_cls,
+ NULL, NULL);
+ GNUNET_TESTBED_operation_done (po->fs_op);
+ GNUNET_free (po);
+ return;
+ }
+ po->fs = ca_result;
+
+ bo.expiration_time = GNUNET_TIME_relative_to_absolute (CONTENT_LIFETIME);
+ bo.anonymity_level = po->anonymity;
+ bo.content_priority = 42;
+ bo.replication_level = 1;
+ if (GNUNET_YES == po->do_index)
+ {
+ po->publish_tmp_file = GNUNET_DISK_mktemp ("fs-test-publish-index");
+ GNUNET_assert (po->publish_tmp_file != NULL);
+ fh = GNUNET_DISK_file_open (po->publish_tmp_file,
+ GNUNET_DISK_OPEN_WRITE |
+ GNUNET_DISK_OPEN_CREATE,
+ GNUNET_DISK_PERM_USER_READ |
+ GNUNET_DISK_PERM_USER_WRITE);
+ GNUNET_assert (NULL != fh);
+ off = 0;
+ while (off < po->size)
+ {
+ bsize = GNUNET_MIN (sizeof (buf), po->size - off);
+ emsg = NULL;
+ GNUNET_assert (bsize == file_generator (&po->publish_seed, off, bsize, buf, &em));
+ GNUNET_assert (em == NULL);
+ GNUNET_assert (bsize == GNUNET_DISK_file_write (fh, buf, bsize));
+ off += bsize;
+ }
+ GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fh));
+ fi = GNUNET_FS_file_information_create_from_file (po->fs, po,
+ po->publish_tmp_file,
+ NULL, NULL, po->do_index,
+ &bo);
+ GNUNET_assert (NULL != fi);
+ }
+ else
+ {
+ fi = GNUNET_FS_file_information_create_from_reader (po->fs, po,
+ po->size,
+ &file_generator, &po->publish_seed,
+ NULL, NULL,
+ po->do_index, &bo);
+ GNUNET_assert (NULL != fi);
+ }
+ po->publish_context =
+ GNUNET_FS_publish_start (po->fs, fi, NULL, NULL, NULL,
+ GNUNET_FS_PUBLISH_OPTION_NONE);