#include "gnunet_program_lib.h"
#include "gnunet_scheduler_lib.h"
-#define VERBOSE GNUNET_YES
+#define VERBOSE GNUNET_NO
+
+#define TIMEOUT 3
#define START_ARM GNUNET_YES
static struct PeerContext p2;
+static GNUNET_SCHEDULER_TaskIdentifier timeout_task_id;
static int ok;
};
+static void
+shutdown_task (void *cls,
+ const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ GNUNET_CORE_disconnect (p1.ch);
+ p1.ch = NULL;
+ GNUNET_CORE_disconnect (p2.ch);
+ p2.ch = NULL;
+ ok = 0;
+}
+
+
+
static void
init_notify (void *cls,
struct PeerContext *p = cls;
GNUNET_assert (server != NULL);
- p->ch = server;
+ GNUNET_assert (p->ch == server);
if (cls == &p1)
{
/* connect p2 */
- GNUNET_CORE_connect (p2.cfg, 1,
- &p2,
- &init_notify,
- &connect_notify,
- &disconnect_notify,
- NULL,
- &inbound_notify,
- GNUNET_YES,
- &outbound_notify, GNUNET_YES, handlers);
+ p2.ch = GNUNET_CORE_connect (p2.cfg, 1,
+ &p2,
+ &init_notify,
+ &connect_notify,
+ &disconnect_notify,
+ NULL,
+ &inbound_notify,
+ GNUNET_YES,
+ &outbound_notify, GNUNET_YES, handlers);
}
else
{
GNUNET_assert (cls == &p2);
- GNUNET_CORE_disconnect (p1.ch);
- GNUNET_CORE_disconnect (p2.ch);
- ok = 0;
+ GNUNET_SCHEDULER_cancel (timeout_task_id);
+ GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
}
}
}
+static void
+timeout_task (void *cls,
+ const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ fprintf (stderr, "Timeout.\n");
+ if (p1.ch != NULL)
+ {
+ GNUNET_CORE_disconnect (p1.ch);
+ p1.ch = NULL;
+ }
+ if (p2.ch != NULL)
+ {
+ GNUNET_CORE_disconnect (p2.ch);
+ p2.ch = NULL;
+ }
+ ok = 42;
+}
+
+
+
static void
run (void *cls,
char *const *args,
OKPP;
setup_peer (&p1, "test_core_api_peer1.conf");
setup_peer (&p2, "test_core_api_peer2.conf");
- GNUNET_CORE_connect (p1.cfg, 1,
- &p1,
- &init_notify,
- &connect_notify,
- &disconnect_notify,
- NULL,
- &inbound_notify,
- GNUNET_YES, &outbound_notify, GNUNET_YES, handlers);
+ timeout_task_id = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, TIMEOUT),
+ &timeout_task,
+ NULL);
+ p1.ch = GNUNET_CORE_connect (p1.cfg, 1,
+ &p1,
+ &init_notify,
+ &connect_notify,
+ &disconnect_notify,
+ NULL,
+ &inbound_notify,
+ GNUNET_YES, &outbound_notify, GNUNET_YES, handlers);
}
struct GNUNET_GETOPT_CommandLineOption options[] = {
GNUNET_GETOPT_OPTION_END
};
+ GNUNET_DISK_directory_remove ("/tmp/test-gnunet-core-peer-1");
+ GNUNET_DISK_directory_remove ("/tmp/test-gnunet-core-peer-2");
ok = 1;
GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1,
#endif
NULL);
ret = check ();
-
+ GNUNET_DISK_directory_remove ("/tmp/test-gnunet-core-peer-1");
+ GNUNET_DISK_directory_remove ("/tmp/test-gnunet-core-peer-2");
return ret;
}