annotate freeDiameterd/main.c @ 1409:cbd9dbc85476

freeDiameter: improve syslog logging Change -d and -q to control syslog level, as per stdout logging. Syslog to LOG_DAEMON. Actually syslog to LOG_DEBUG, now that -d/-q are used.
author Luke Mewburn <luke@mewburn.net>
date Tue, 18 Feb 2020 17:09:13 +1100
parents 23e224d22f45
children 4ddd4dcd6bb6
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 {
1409
cbd9dbc85476 freeDiameter: improve syslog logging
Luke Mewburn <luke@mewburn.net>
parents: 1408
diff changeset
68 if (loglevel < fd_g_debug_lvl) {
cbd9dbc85476 freeDiameter: improve syslog logging
Luke Mewburn <luke@mewburn.net>
parents: 1408
diff changeset
69 return;
cbd9dbc85476 freeDiameter: improve syslog logging
Luke Mewburn <luke@mewburn.net>
parents: 1408
diff changeset
70 }
cbd9dbc85476 freeDiameter: improve syslog logging
Luke Mewburn <luke@mewburn.net>
parents: 1408
diff changeset
71
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
72 int level;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
73
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
74 switch (loglevel) {
1407
d4a4ab5239c7 add log level FD_LOG_INFO
Luke Mewburn <luke@mewburn.net>
parents: 1389
diff changeset
75 case FD_LOG_INFO:
d4a4ab5239c7 add log level FD_LOG_INFO
Luke Mewburn <luke@mewburn.net>
parents: 1389
diff changeset
76 level = LOG_INFO;
d4a4ab5239c7 add log level FD_LOG_INFO
Luke Mewburn <luke@mewburn.net>
parents: 1389
diff changeset
77 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
78 case FD_LOG_NOTICE:
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
79 level = LOG_NOTICE;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
80 break;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
81 case FD_LOG_ERROR:
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
82 level = LOG_ERR;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
83 break;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
84 case FD_LOG_FATAL:
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
85 level = LOG_CRIT;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
86 break;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
87 default:
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
88 /* fallthrough */
1409
cbd9dbc85476 freeDiameter: improve syslog logging
Luke Mewburn <luke@mewburn.net>
parents: 1408
diff changeset
89 case FD_LOG_ANNOYING:
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
90 case FD_LOG_DEBUG:
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
91 level = LOG_DEBUG;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
92 break;
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
1409
cbd9dbc85476 freeDiameter: improve syslog logging
Luke Mewburn <luke@mewburn.net>
parents: 1408
diff changeset
95 vsyslog(level | LOG_DAEMON, format, args);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
96 }
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
97
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
98
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
99 /* freeDiameter starting point */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
100 int main(int argc, char * argv[])
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
101 {
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
102 int ret;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
103 sigset_t sig_all;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
104
683
d59effdf5256 Improve management of the signals in freeDiameterd
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
105 /* 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
106 sigfillset(&sig_all);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
107 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
108 ASSERT(ret == 0);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
109
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
110 /* Parse the command-line */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
111 ret = main_cmdline(argc, argv);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
112 if (ret != 0) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
113 return ret;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
114 }
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
115
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
116 if (daemon_mode) {
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
117 TRACE_DEBUG(INFO, "entering background mode");
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
118 CHECK_POSIX_DO( daemon(1, 0), goto error );
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
119 }
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
120
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
121 /* Initialize the core library */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
122 ret = fd_core_initialize();
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
123 if (ret != 0) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
124 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
125 return ret;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
126 }
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
127
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
128 /* Set gnutls debug level ? */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
129 if (gnutls_debug) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
130 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
131 gnutls_global_set_log_level (gnutls_debug);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
132 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
133 }
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 /* 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
136 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
137
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
138 /* 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
139 CHECK_FCT_DO( fd_core_start(), goto error );
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
140
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
141 /* 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
142 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
143
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
144 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
145
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
146 /* Now, just wait for termination */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
147 CHECK_FCT( fd_core_wait_shutdown_complete() );
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
148
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
149 /* 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
150 fd_thr_term(&signals_thr);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
151
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
152 return 0;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
153 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
154 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
155 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
156 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
157 return -1;
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
158 }
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
159
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
160
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
161 /* Display package version */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
162 static void main_version_core(void)
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
163 {
1159
05f74dc19c49 Include source rev number in version information when available
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1134
diff changeset
164 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
165 }
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 /* Display package version and general info */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
168 static void main_version(void)
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
169 {
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
170 main_version_core();
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
171 printf( "%s\n", FD_PROJECT_COPYRIGHT);
335
603791d2dcc4 Updated website information
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 304
diff changeset
172 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
173 " 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
174 }
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 /* Print command-line options */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
177 static void main_help( void )
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
178 {
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
179 main_version_core();
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
180 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
181 " used for Authentication, Authorization, and Accounting (AAA).\n");
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
182 printf("\nUsage: " FD_PROJECT_BINARY " [OPTIONS]...\n");
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
183 printf( " -h, --help Print help and exit\n"
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
184 " -V, --version Print version and exit\n"
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
185 " -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
186 " 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
187 " -D, --daemon Start program in background\n"
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
188 " -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
189 printf( "\nDebug:\n"
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
190 " These options are mostly useful for developers\n"
1409
cbd9dbc85476 freeDiameter: improve syslog logging
Luke Mewburn <luke@mewburn.net>
parents: 1408
diff changeset
191 " -d, --debug Increase verbosity of log messages\n"
1134
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
192 " -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
193 " -F, --dbg_file <file.c> Enable all traces within the file <file.c> (basename match)\n"
1408
23e224d22f45 freeDiameterd: add -g to help
Luke Mewburn <luke@mewburn.net>
parents: 1407
diff changeset
194 " -g, --dbg_gnutls <int> Enable GNU TLS debug at level <int>\n"
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
195 " -l, --dbglocale Set the locale for error messages\n"
1409
cbd9dbc85476 freeDiameter: improve syslog logging
Luke Mewburn <luke@mewburn.net>
parents: 1408
diff changeset
196 " -q, --quiet Decrease verbosity of log messages\n"
1134
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
197 );
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
198 }
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 /* Parse the command-line */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
201 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
202 {
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
203 int c;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
204 int option_index = 0;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
205 char * locale;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
206
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
207 struct option long_options[] = {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
208 { "help", no_argument, NULL, 'h' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
209 { "version", no_argument, NULL, 'V' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
210 { "config", required_argument, NULL, 'c' },
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
211 { "syslog", no_argument, NULL, 's' },
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
212 { "daemon", no_argument, NULL, 'D' },
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
213 { "debug", no_argument, NULL, 'd' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
214 { "quiet", no_argument, NULL, 'q' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
215 { "dbglocale", optional_argument, NULL, 'l' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
216 { "dbg_func", required_argument, NULL, 'f' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
217 { "dbg_file", required_argument, NULL, 'F' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
218 { "dbg_gnutls", required_argument, NULL, 'g' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
219 { NULL, 0, NULL, 0 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
220 };
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
221
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
222 /* Loop on arguments */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
223 while (1) {
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
224 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
225 if (c == -1)
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
226 break; /* Exit from the loop. */
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
227
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
228 switch (c) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
229 case 'h': /* Print help and exit. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
230 main_help();
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
231 exit(0);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
232
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
233 case 'V': /* Print version and exit. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
234 main_version();
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
235 exit(0);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
236
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
237 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
238 if (optarg == NULL ) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
239 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
240 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
241 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
242 conffile = optarg;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
243 break;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
244
1389
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
245 case 'D':
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
246 daemon_mode = 1;
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
247 break;
de90cf7f381e freeDiameterd: add background (daemon) mode
Thomas Klausner <tk@giga.or.at>
parents: 1339
diff changeset
248
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
249 case 'l': /* Change the locale. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
250 locale = setlocale(LC_ALL, optarg?:"");
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
251 if (!locale) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
252 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
253 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
254 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
255 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
256
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
257 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
258 fd_g_debug_lvl--;
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
259 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
260
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
261 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
262 #ifdef DEBUG
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
263 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
264 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
265 #else /* DEBUG */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
266 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
267 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
268 #endif /* DEBUG */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
269 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
270
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
271 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
272 #ifdef DEBUG
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
273 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
274 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
275 #else /* DEBUG */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
276 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
277 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
278 #endif /* DEBUG */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
279 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
280
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
281 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
282 gnutls_debug = (int)atoi(optarg);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
283 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
284
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
285 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
286 fd_g_debug_lvl++;
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
287 break;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
288
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
289 case 's': /* Write log data using syslog(3) */
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
290 if (fd_log_handler_register(syslog_logger) != 0) {
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
291 fprintf(stderr, "Cannot initialize syslog logger\n");
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
292 return EINVAL;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
293 }
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
294 break;
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
295
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
296 case '?': /* Invalid option. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
297 /* `getopt_long' already printed an error message. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
298 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
299 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
300
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
301 default: /* bug: option not considered. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
302 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
303 ASSERT(0);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
304 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
305 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
306 }
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
307
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
308 return 0;
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
309 }
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 /* Handle some signals */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
312 static void * catch_signals(void * arg)
628
e1c6f45f5fcd Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 502
diff changeset
313 {
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
314 sigset_t ss;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
315 fd_log_threadname ( "signals catcher" );
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
316
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
317 sigemptyset(&ss);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
318
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
319 /* Signals that terminate the daemon */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
320 sigaddset(&ss, SIGTERM);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
321 sigaddset(&ss, SIGINT);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
322
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
323 /* Signals that send an event */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
324 sigaddset(&ss, SIGUSR1);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
325 sigaddset(&ss, SIGUSR2);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
326
683
d59effdf5256 Improve management of the signals in freeDiameterd
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
327 /* 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
328 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
329
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
330 /* 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
331 while (1) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
332 int sig, *ps;
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 /* Wait to receive the next signal */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
335 CHECK_POSIX_DO( sigwait(&ss, &sig), break );
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
336
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
337 TRACE_DEBUG(FULL, "Signal %d caught", sig);
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
338
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
339 switch (sig) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
340 case SIGUSR1:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
341 case SIGUSR2:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
342 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
343 *ps = sig;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
344 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
345 break;
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
346
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
347 case SIGINT:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
348 case SIGTERM:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
349 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
350
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
351 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
352 }
1339
e70ce64ce689 freeDiameterd: support syslog() logging.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
353 out:
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
354 /* Better way to handle this ? */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
355 ASSERT(0);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
356 return NULL;
628
e1c6f45f5fcd Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 502
diff changeset
357 }
"Welcome to our mercurial repository"