/* SilcTimer tests */ #include "silc.h" SilcSchedule schedule; SilcTimerStruct timer; SilcBool success = FALSE; SILC_TASK_CALLBACK(check); SILC_TASK_CALLBACK(restart) { SILC_LOG_DEBUG(("Timer is %s", silc_timer_is_running(&timer) ? "running" : "stopped")); SILC_LOG_DEBUG(("Restart timer")); silc_timer_continue(&timer); silc_schedule_task_add_timeout(schedule, check, NULL, 1, 0); } SILC_TASK_CALLBACK(check) { SilcUInt64 sec; SilcUInt32 usec; SilcTimeStruct t, st; char ts[32]; SILC_LOG_DEBUG(("Timer is %s", silc_timer_is_running(&timer) ? "running" : "stopped")); silc_timer_value(&timer, &sec, &usec); SILC_LOG_DEBUG(("Timer elapsed: %llu secs, %lu usec", sec, usec)); if (sec == 5) { SILC_LOG_DEBUG(("Stop timer")); silc_timer_stop(&timer); silc_timer_value(&timer, &sec, &usec); SILC_LOG_DEBUG(("Timer elapsed: %llu secs, %lu usec", sec, usec)); silc_timer_start_time(&timer, &st); silc_timer_value_time(&timer, &t); silc_time_universal_string(&st, ts, sizeof(ts)); SILC_LOG_DEBUG(("Start time: %s", ts)); silc_time_universal_string(&t, ts, sizeof(ts)); SILC_LOG_DEBUG(("End time: %s", ts)); success = TRUE; silc_schedule_stop(schedule); return; } if (sec == 2) { SILC_LOG_DEBUG(("Stopping timer, sleep 3 seconds")); silc_timer_stop(&timer); silc_schedule_task_add_timeout(schedule, restart, NULL, 3, 0); return; } silc_schedule_task_add_timeout(schedule, check, NULL, 0, 500000); } int main(int argc, char **argv) { if (argc > 1 && !strcmp(argv[1], "-d")) { silc_log_debug(TRUE); silc_log_quick(TRUE); silc_log_debug_hexdump(TRUE); silc_log_set_debug_string("*timer*,*errno*"); } schedule = silc_schedule_init(0, NULL, NULL); if (!schedule) goto err; silc_timer_synchronize(&timer); SILC_LOG_DEBUG(("sync_diff: %d", timer.sync_diff)); SILC_LOG_DEBUG(("sync_tdiff: %d", timer.sync_tdiff)); SILC_LOG_DEBUG(("Start timer")); silc_timer_start(&timer); silc_schedule_task_add_timeout(schedule, check, NULL, 1, 0); silc_schedule(schedule); silc_schedule_uninit(schedule); err: SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE")); fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE"); return success; }