annotate freeDiameterd/main.c @ 1389:de90cf7f381e

freeDiameterd: add background (daemon) mode
author Thomas Klausner <tk@giga.or.at>
date Tue, 15 Oct 2019 16:26:23 +0200
parents e70ce64ce689
children d4a4ab5239c7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1 /*********************************************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2 * Software License Agreement (BSD License) *
740
4a9f08d6b6ba Updated my mail address
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 683
diff changeset
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> *
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 * *
1305
84a3c9c4b834 Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1303
diff changeset
5 * Copyright (c) 2015, WIDE Project and NICT *
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
6 * All rights reserved. *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
7 * *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
8 * Redistribution and use of this software in source and binary forms, with or without modification, are *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
9 * permitted provided that the following conditions are met: *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
10 * *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
11 * * Redistributions of source code must retain the above *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
12 * copyright notice, this list of conditions and the *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
13 * following disclaimer. *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
14 * *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
15 * * Redistributions in binary form must reproduce the above *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
16 * copyright notice, this list of conditions and the *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
17 * following disclaimer in the documentation and/or other *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
18 * materials provided with the distribution. *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
19 * *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
20 * * Neither the name of the WIDE Project or NICT nor the *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
21 * names of its contributors may be used to endorse or *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
22 * promote products derived from this software without *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
23 * specific prior written permission of WIDE Project and *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
24 * NICT. *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
25 * *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
34 *********************************************************************************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
35
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
36 #if defined(__GLIBC__)
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
37 #define _BSD_SOURCE /* for vsyslog */
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
38 #endif
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
39
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
40 #include <freeDiameter/freeDiameter-host.h>
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
41 #include <freeDiameter/libfdcore.h>
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
42
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
43 #include <signal.h>
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
44 #include <getopt.h>
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
45 #include <locale.h>
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
46 #include <syslog.h>
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
47 #include <stdarg.h>
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
48 #include <stdlib.h>
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
49 #include <unistd.h>
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
50
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 9
diff changeset
51 /* forward declarations */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 9
diff changeset
52 static int main_cmdline(int argc, char *argv[]);
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
53 static void * catch_signals(void * arg);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
54 static pthread_t signals_thr;
213
890a9b6379f0 Fix initialization order for gnutls
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 212
diff changeset
55
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
56 static char *conffile = NULL;
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
57 static int daemon_mode = 0;
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
58 static int gnutls_debug = 0;
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
59
501
e5f06199cee7 New command-line option to enable GNUTLS debugging
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 453
diff changeset
60 /* gnutls debug */
e5f06199cee7 New command-line option to enable GNUTLS debugging
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 453
diff changeset
61 static void fd_gnutls_debug(int level, const char * str) {
e5f06199cee7 New command-line option to enable GNUTLS debugging
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 453
diff changeset
62 fd_log_debug(" [gnutls:%d] %s", level, str);
e5f06199cee7 New command-line option to enable GNUTLS debugging
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 453
diff changeset
63 }
e5f06199cee7 New command-line option to enable GNUTLS debugging
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 453
diff changeset
64
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
65
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
66 static void syslog_logger(int loglevel, const char * format, va_list args)
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
67 {
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
68 int level;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
69
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
70 switch (loglevel) {
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
71 case FD_LOG_NOTICE:
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
72 level = LOG_NOTICE;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
73 break;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
74 case FD_LOG_ERROR:
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
75 level = LOG_ERR;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
76 break;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
77 case FD_LOG_FATAL:
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
78 level = LOG_CRIT;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
79 break;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
80 default:
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
81 /* fallthrough */
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
82 case FD_LOG_DEBUG:
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
83 /* some systems log LOG_DEBUG to a file; but
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
84 * freeDiameter debug output is too verbose */
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
85 return;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
86 #if 0
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
87 level = LOG_DEBUG;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
88 break;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
89 #endif
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
90 }
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
91
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
92 vsyslog(level, format, args);
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
93 }
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
94
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
95
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
96 /* freeDiameter starting point */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
97 int main(int argc, char * argv[])
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
98 {
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
99 int ret;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
100 sigset_t sig_all;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
101
683
d59effdf5256 Improve management of the signals in freeDiameterd
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
102 /* Block all signals from the current thread and all its future children -- we will catch everything in catch_signals */
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
103 sigfillset(&sig_all);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
104 ret = pthread_sigmask(SIG_BLOCK, &sig_all, NULL);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
105 ASSERT(ret == 0);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
106
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
107 /* Parse the command-line */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
108 ret = main_cmdline(argc, argv);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
109 if (ret != 0) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
110 return ret;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
111 }
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
112
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
113 if (daemon_mode) {
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
114 TRACE_DEBUG(INFO, "entering background mode");
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
115 CHECK_POSIX_DO( daemon(1, 0), goto error );
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
116 }
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
117
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
118 /* Initialize the core library */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
119 ret = fd_core_initialize();
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
120 if (ret != 0) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
121 fprintf(stderr, "An error occurred during freeDiameter core library initialization.\n");
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
122 return ret;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
123 }
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
124
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
125 /* Set gnutls debug level ? */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
126 if (gnutls_debug) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
127 gnutls_global_set_log_function((gnutls_log_func)fd_gnutls_debug);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
128 gnutls_global_set_log_level (gnutls_debug);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
129 TRACE_DEBUG(INFO, "Enabled GNUTLS debug at level %d", gnutls_debug);
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
130 }
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
131
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
132 /* Parse the configuration file */
1182
cc96a4dfb3d1 Early shutdown situation: detect the race condition and delay the shutdown in freeDiameterd. Alternative would be to initialize in a separate thread that we can cancel before calling shutdown.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1159
diff changeset
133 CHECK_FCT_DO( fd_core_parseconf(conffile), goto error );
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
134
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
135 /* Start the servers */
1182
cc96a4dfb3d1 Early shutdown situation: detect the race condition and delay the shutdown in freeDiameterd. Alternative would be to initialize in a separate thread that we can cancel before calling shutdown.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1159
diff changeset
136 CHECK_FCT_DO( fd_core_start(), goto error );
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
137
1182
cc96a4dfb3d1 Early shutdown situation: detect the race condition and delay the shutdown in freeDiameterd. Alternative would be to initialize in a separate thread that we can cancel before calling shutdown.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1159
diff changeset
138 /* Allow SIGINT and SIGTERM from this point to terminate the application */
cc96a4dfb3d1 Early shutdown situation: detect the race condition and delay the shutdown in freeDiameterd. Alternative would be to initialize in a separate thread that we can cancel before calling shutdown.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1159
diff changeset
139 CHECK_POSIX_DO( pthread_create(&signals_thr, NULL, catch_signals, NULL), goto error );
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
140
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
141 TRACE_DEBUG(INFO, FD_PROJECT_BINARY " daemon initialized.");
1182
cc96a4dfb3d1 Early shutdown situation: detect the race condition and delay the shutdown in freeDiameterd. Alternative would be to initialize in a separate thread that we can cancel before calling shutdown.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1159
diff changeset
142
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
143 /* Now, just wait for termination */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
144 CHECK_FCT( fd_core_wait_shutdown_complete() );
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
145
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
146 /* Just in case it was not the result of a signal, we cancel signals_thr */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
147 fd_thr_term(&signals_thr);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
148
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
149 return 0;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
150 error:
1182
cc96a4dfb3d1 Early shutdown situation: detect the race condition and delay the shutdown in freeDiameterd. Alternative would be to initialize in a separate thread that we can cancel before calling shutdown.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1159
diff changeset
151 CHECK_FCT_DO( fd_core_shutdown(), );
cc96a4dfb3d1 Early shutdown situation: detect the race condition and delay the shutdown in freeDiameterd. Alternative would be to initialize in a separate thread that we can cancel before calling shutdown.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1159
diff changeset
152 CHECK_FCT( fd_core_wait_shutdown_complete() );
cc96a4dfb3d1 Early shutdown situation: detect the race condition and delay the shutdown in freeDiameterd. Alternative would be to initialize in a separate thread that we can cancel before calling shutdown.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1159
diff changeset
153 fd_thr_term(&signals_thr);
cc96a4dfb3d1 Early shutdown situation: detect the race condition and delay the shutdown in freeDiameterd. Alternative would be to initialize in a separate thread that we can cancel before calling shutdown.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1159
diff changeset
154 return -1;
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
155 }
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
156
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
157
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
158 /* Display package version */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
159 static void main_version_core(void)
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
160 {
1159
05f74dc19c49 Include source rev number in version information when available
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1134
diff changeset
161 printf("%s, version %s\n", FD_PROJECT_NAME, fd_core_version);
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
162 }
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
163
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
164 /* Display package version and general info */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
165 static void main_version(void)
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
166 {
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
167 main_version_core();
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
168 printf( "%s\n", FD_PROJECT_COPYRIGHT);
335
603791d2dcc4 Updated website information
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 304
diff changeset
169 printf( "\nSee " FD_PROJECT_NAME " homepage at http://www.freediameter.net/\n"
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
170 " for information, updates and bug reports on this software.\n");
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
171 }
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
172
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
173 /* Print command-line options */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
174 static void main_help( void )
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
175 {
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
176 main_version_core();
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
177 printf( " This daemon is an implementation of the Diameter protocol\n"
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
178 " used for Authentication, Authorization, and Accounting (AAA).\n");
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
179 printf("\nUsage: " FD_PROJECT_BINARY " [OPTIONS]...\n");
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
180 printf( " -h, --help Print help and exit\n"
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
181 " -V, --version Print version and exit\n"
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
182 " -c, --config=filename Read configuration from this file instead of the \n"
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
183 " default location (" DEFAULT_CONF_PATH "/" FD_DEFAULT_CONF_FILENAME ")\n"
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
184 " -D, --daemon Start program in background\n"
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
185 " -s, --syslog Write log output to syslog (instead of stdout)\n");
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
186 printf( "\nDebug:\n"
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
187 " These options are mostly useful for developers\n"
1134
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
188 " -d, --debug Increase verbosity of debug messages if default logger is used\n"
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
189 " --dbg_gnutls <int> Enable GNU TLS debug at level <int>\n"
1134
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
190 " -f, --dbg_func <func> Enable all traces within the function <func>\n"
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
191 " -F, --dbg_file <file.c> Enable all traces within the file <file.c> (basename match)\n"
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
192 " -l, --dbglocale Set the locale for error messages\n"
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
193 " -q, --quiet Decrease verbosity if default logger is used\n"
1134
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
194 );
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
195 }
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
196
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
197 /* Parse the command-line */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
198 static int main_cmdline(int argc, char *argv[])
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
199 {
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
200 int c;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
201 int option_index = 0;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
202 char * locale;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
203
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
204 struct option long_options[] = {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
205 { "help", no_argument, NULL, 'h' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
206 { "version", no_argument, NULL, 'V' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
207 { "config", required_argument, NULL, 'c' },
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
208 { "syslog", no_argument, NULL, 's' },
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
209 { "daemon", no_argument, NULL, 'D' },
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
210 { "debug", no_argument, NULL, 'd' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
211 { "quiet", no_argument, NULL, 'q' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
212 { "dbglocale", optional_argument, NULL, 'l' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
213 { "dbg_func", required_argument, NULL, 'f' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
214 { "dbg_file", required_argument, NULL, 'F' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
215 { "dbg_gnutls", required_argument, NULL, 'g' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
216 { NULL, 0, NULL, 0 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
217 };
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
218
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
219 /* Loop on arguments */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
220 while (1) {
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
221 c = getopt_long (argc, argv, "hVc:Ddql:f:F:g:s", long_options, &option_index);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
222 if (c == -1)
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
223 break; /* Exit from the loop. */
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
224
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
225 switch (c) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
226 case 'h': /* Print help and exit. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
227 main_help();
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
228 exit(0);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
229
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
230 case 'V': /* Print version and exit. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
231 main_version();
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
232 exit(0);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
233
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
234 case 'c': /* Read configuration from this file instead of the default location.. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
235 if (optarg == NULL ) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
236 fprintf(stderr, "Missing argument with --config directive\n");
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
237 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
238 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
239 conffile = optarg;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
240 break;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
241
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
242 case 'D':
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
243 daemon_mode = 1;
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
244 break;
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
245
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
246 case 'l': /* Change the locale. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
247 locale = setlocale(LC_ALL, optarg?:"");
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
248 if (!locale) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
249 fprintf(stderr, "Unable to set locale (%s)\n", optarg);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
250 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
251 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
252 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
253
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
254 case 'd': /* Increase verbosity of debug messages. */
1088
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1081
diff changeset
255 fd_g_debug_lvl--;
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
256 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
257
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
258 case 'f': /* Full debug for the function with this name. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
259 #ifdef DEBUG
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
260 fd_debug_one_function = optarg;
1303
090390e89b1d Fix --dbg-file and --dbg-function usage. However there is something weird on MacOS X still...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1302
diff changeset
261 fd_g_debug_lvl = FD_LOG_DEBUG;
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
262 #else /* DEBUG */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
263 fprintf(stderr, "Error: must compile with DEBUG support to use --dbg_func feature!\n");
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
264 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
265 #endif /* DEBUG */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
266 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
267
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
268 case 'F': /* Full debug for the file with this name. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
269 #ifdef DEBUG
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
270 fd_debug_one_file = basename(optarg);
1303
090390e89b1d Fix --dbg-file and --dbg-function usage. However there is something weird on MacOS X still...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1302
diff changeset
271 fd_g_debug_lvl = FD_LOG_DEBUG;
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
272 #else /* DEBUG */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
273 fprintf(stderr, "Error: must compile with DEBUG support to use --dbg_file feature!\n");
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
274 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
275 #endif /* DEBUG */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
276 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
277
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
278 case 'g': /* Set a debug level and function for GNU TLS calls. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
279 gnutls_debug = (int)atoi(optarg);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
280 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
281
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
282 case 'q': /* Decrease verbosity then remove debug messages. */
1088
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1081
diff changeset
283 fd_g_debug_lvl++;
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
284 break;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
285
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
286 case 's': /* Write log data using syslog(3) */
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
287 if (fd_log_handler_register(syslog_logger) != 0) {
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
288 fprintf(stderr, "Cannot initialize syslog logger\n");
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
289 return EINVAL;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
290 }
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
291 break;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
292
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
293 case '?': /* Invalid option. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
294 /* `getopt_long' already printed an error message. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
295 fprintf(stderr, "getopt_long found an invalid character\n");
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
296 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
297
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
298 default: /* bug: option not considered. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
299 fprintf(stderr, "A command-line option is missing in parser: %c\n", c);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
300 ASSERT(0);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
301 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
302 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
303 }
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
304
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
305 return 0;
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
306 }
628
e1c6f45f5fcd Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 502
diff changeset
307
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
308 /* Handle some signals */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
309 static void * catch_signals(void * arg)
628
e1c6f45f5fcd Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 502
diff changeset
310 {
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
311 sigset_t ss;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
312 fd_log_threadname ( "signals catcher" );
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
313
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
314 sigemptyset(&ss);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
315
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
316 /* Signals that terminate the daemon */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
317 sigaddset(&ss, SIGTERM);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
318 sigaddset(&ss, SIGINT);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
319
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
320 /* Signals that send an event */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
321 sigaddset(&ss, SIGUSR1);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
322 sigaddset(&ss, SIGUSR2);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
323
683
d59effdf5256 Improve management of the signals in freeDiameterd
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
324 /* We unblock all other signals, so that their default handler is used (such as SIGTSTP) */
d59effdf5256 Improve management of the signals in freeDiameterd
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
325 CHECK_SYS_DO( pthread_sigmask( SIG_SETMASK, &ss, NULL ), goto out );
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
326
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
327 /* Now loop on the reception of the signal */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
328 while (1) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
329 int sig, *ps;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
330
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
331 /* Wait to receive the next signal */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
332 CHECK_POSIX_DO( sigwait(&ss, &sig), break );
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
333
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
334 TRACE_DEBUG(FULL, "Signal %d caught", sig);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
335
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
336 switch (sig) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
337 case SIGUSR1:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
338 case SIGUSR2:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
339 CHECK_MALLOC_DO( ps = malloc(sizeof(int)), goto out);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
340 *ps = sig;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
341 CHECK_FCT_DO( fd_event_send(fd_g_config->cnf_main_ev, FDEV_TRIGGER, sizeof(int), ps), goto out );
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
342 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
343
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
344 case SIGINT:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
345 case SIGTERM:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
346 CHECK_FCT_DO( fd_core_shutdown(), goto out );
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
347
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
348 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
349 }
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
350 out:
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
351 /* Better way to handle this ? */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
352 ASSERT(0);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
353 return NULL;
628
e1c6f45f5fcd Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 502
diff changeset
354 }
"Welcome to our mercurial repository"