ccnr_main.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <signal.h>
00024 #include <stddef.h>
00025 #include <stdarg.h>
00026 #include <stdio.h>
00027 #include <stdlib.h>
00028
00029 #include "ccnr_private.h"
00030
00031 #include "ccnr_init.h"
00032 #include "ccnr_dispatch.h"
00033 #include "ccnr_msg.h"
00034 #include "ccnr_stats.h"
00035
00036 static int
00037 stdiologger(void *loggerdata, const char *format, va_list ap)
00038 {
00039 FILE *fp = (FILE *)loggerdata;
00040 return(vfprintf(fp, format, ap));
00041 }
00042
00043 static struct ccnr_handle *global_h = NULL;
00044
00045 static void
00046 handle_signal(int sig)
00047 {
00048 if (global_h != NULL)
00049 global_h->running = 0;
00050 signal(sig, SIG_DFL);
00051 }
00052
00053 int
00054 main(int argc, char **argv)
00055 {
00056 int s;
00057
00058 if (argc > 1) {
00059 fprintf(stderr, "%s", ccnr_usage_message);
00060 exit(1);
00061 }
00062 signal(SIGPIPE, SIG_IGN);
00063 global_h = r_init_create(argv[0], stdiologger, stderr);
00064 if (global_h == NULL)
00065 exit(1);
00066 signal(SIGINT, &handle_signal);
00067 signal(SIGTERM, &handle_signal);
00068 r_dispatch_run(global_h);
00069 s = (global_h->running != 0);
00070 ccnr_msg(global_h, "exiting.");
00071 r_init_destroy(&global_h);
00072 exit(s);
00073 }