static TestResult * construct_test_result (RcvMsg * rmsg, int waserror) { TestResult *tr; if (rmsg == NULL) return NULL; tr = tr_create (); if (rmsg->msg != NULL || waserror) { if (rmsg->failctx != CK_CTX_INVALID) { tr->ctx = rmsg->failctx; } else { tr->ctx = rmsg->lastctx; } tr->msg = rmsg->msg; rmsg->msg = NULL; tr_set_loc_by_ctx (tr, tr->ctx, rmsg); } else if (rmsg->lastctx == CK_CTX_SETUP) { tr->ctx = CK_CTX_SETUP; tr->msg = NULL; tr_set_loc_by_ctx (tr, CK_CTX_SETUP, rmsg); } else { tr->ctx = CK_CTX_TEST; tr->msg = NULL; tr->duration = rmsg->duration; tr_set_loc_by_ctx (tr, CK_CTX_TEST, rmsg); } return tr; }
static TestResult *construct_test_result (RcvMsg *rmsg, int waserror) { TestResult *tr; if (rmsg == NULL) return NULL; tr = tr_create(); if (rmsg->msg != NULL || waserror) { tr->ctx = (cur_fork_status () == CK_FORK) ? rmsg->lastctx : rmsg->failctx; tr->msg = rmsg->msg; rmsg->msg = NULL; tr_set_loc_by_ctx (tr, tr->ctx, rmsg); } else if (rmsg->lastctx == CK_CTX_SETUP) { tr->ctx = CK_CTX_SETUP; tr->msg = NULL; tr_set_loc_by_ctx (tr, CK_CTX_SETUP, rmsg); } else { tr->ctx = CK_CTX_TEST; tr->msg = NULL; tr_set_loc_by_ctx (tr, CK_CTX_TEST, rmsg); } return tr; }
int main(int argc, char *argv[]) { TALLOC_CTX *main_ctx=NULL; TR_INSTANCE *tr = NULL; struct cmdline_args opts; struct event_base *ev_base; struct tr_socket_event tids_ev; struct event *cfgwatch_ev; configure_signals(); /* we're going to be multithreaded, so disable null context tracking */ talloc_set_abort_fn(tr_abort); talloc_disable_null_tracking(); #if TALLOC_DEBUG_ENABLE talloc_set_log_fn(tr_talloc_log); #endif /* TALLOC_DEBUG_ENABLE */ main_ctx=talloc_new(NULL); /* Use standalone logging */ tr_log_open(); /***** parse command-line arguments *****/ /* set defaults */ opts.config_dir="."; /* parse the command line*/ argp_parse(&argp, argc, argv, 0, 0, &opts); /* process options */ remove_trailing_slash(opts.config_dir); /***** create a Trust Router instance *****/ if (NULL == (tr = tr_create(main_ctx))) { tr_crit("Unable to create Trust Router instance, exiting."); return 1; } /***** initialize the trust path query server instance *****/ if (NULL == (tr->tids = tids_create (tr))) { tr_crit("Error initializing Trust Path Query Server instance."); return 1; } /***** initialize the trust router protocol server instance *****/ if (NULL == (tr->trps = trps_new(tr))) { tr_crit("Error initializing Trust Router Protocol Server instance."); return 1; } /***** process configuration *****/ tr->cfgwatch=tr_cfgwatch_create(tr); if (tr->cfgwatch == NULL) { tr_crit("Unable to create configuration watcher object, exiting."); return 1; } tr->cfgwatch->config_dir=opts.config_dir; tr->cfgwatch->cfg_mgr=tr->cfg_mgr; tr->cfgwatch->update_cb=tr_config_changed; /* handle configuration changes */ tr->cfgwatch->update_cookie=(void *)tr; if (0 != tr_read_and_apply_config(tr->cfgwatch)) { tr_crit("Error reading configuration, exiting."); return 1; } /***** Set up the event loop *****/ ev_base=tr_event_loop_init(); /* Set up the event loop */ if (ev_base==NULL) { tr_crit("Error initializing event loop."); return 1; } /* already set config_dir, fstat_list and n_files earlier */ if (0 != tr_cfgwatch_event_init(ev_base, tr->cfgwatch, &cfgwatch_ev)) { tr_crit("Error initializing configuration file watcher."); return 1; } /*tr_status_event_init();*/ /* install status reporting events */ /* install TID server events */ if (0 != tr_tids_event_init(ev_base, tr->tids, tr->cfg_mgr, tr->trps, &tids_ev)) { tr_crit("Error initializing Trust Path Query Server instance."); return 1; } /* install TRP handler events */ if (TRP_SUCCESS != tr_trps_event_init(ev_base, tr)) { tr_crit("Error initializing Trust Path Query Server instance."); return 1; } tr_event_loop_run(ev_base); /* does not return until we are done */ tr_destroy(tr); /* thanks to talloc, should destroy everything */ talloc_free(main_ctx); return 0; }