+try_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ connect_task =
+ GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &try_connect,
+ NULL);
+ GNUNET_TRANSPORT_try_connect (p1.th, &p2.id, NULL, NULL); /*FIXME TRY_CONNECT change */
+}
+
+
+static size_t
+transmit_ready (void *cls, size_t size, void *buf)
+{
+ char *cbuf = buf;
+ struct TestMessage hdr;
+ unsigned int s;
+ unsigned int ret;
+
+ GNUNET_assert (size <= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE);
+ if (buf == NULL)
+ {
+ if (p1.ch != NULL)
+ GNUNET_break (NULL !=
+ GNUNET_CORE_notify_transmit_ready (p1.ch, GNUNET_NO, 0,
+ FAST_TIMEOUT, &p2.id,
+ get_size (tr_n),
+ &transmit_ready, &p1));
+ return 0;
+ }
+ GNUNET_assert (tr_n < TOTAL_MSGS);
+ ret = 0;
+ s = get_size (tr_n);
+ GNUNET_assert (size >= s);
+ GNUNET_assert (buf != NULL);
+ cbuf = buf;
+ do
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Sending message %u of size %u at offset %u\n", tr_n, s, ret);
+ hdr.header.size = htons (s);
+ hdr.header.type = htons (MTYPE);
+ hdr.num = htonl (tr_n);
+ memcpy (&cbuf[ret], &hdr, sizeof (struct TestMessage));
+ ret += sizeof (struct TestMessage);
+ memset (&cbuf[ret], tr_n, s - sizeof (struct TestMessage));
+ ret += s - sizeof (struct TestMessage);
+ tr_n++;
+ s = get_size (tr_n);
+ if (0 == GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 16))
+ break; /* sometimes pack buffer full, sometimes not */
+ }
+ while (size - ret >= s);
+ GNUNET_SCHEDULER_cancel (err_task);
+ err_task =
+ GNUNET_SCHEDULER_add_delayed (TIMEOUT, &terminate_task_error, NULL);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Returning total message block of size %u\n", ret);
+ total_bytes += ret;
+ return ret;
+}
+
+
+static void
+connect_notify (void *cls, const struct GNUNET_PeerIdentity *peer,
+ const struct GNUNET_ATS_Information *atsi,
+ unsigned int atsi_count)