annotate freeDiameterd/main.c @ 928:5053f1abcf5d

Updated copyright information
author Sebastien Decugis <sdecugis@freediameter.net>
date Sun, 03 Mar 2013 07:57:34 +0100
parents a7e0a7ab769c
children 155d45d06530
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 * *
928
5053f1abcf5d Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents: 900
diff changeset
5 * Copyright (c) 2012, 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
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
36 #include <freeDiameter/freeDiameter-host.h>
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
37 #include <freeDiameter/libfdcore.h>
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
38
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
39 #include <signal.h>
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
40 #include <getopt.h>
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
41 #include <locale.h>
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
42
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
43
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 9
diff changeset
44 /* forward declarations */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 9
diff changeset
45 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
46 static void * catch_signals(void * arg);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
47 static pthread_t signals_thr;
213
890a9b6379f0 Fix initialization order for gnutls
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 212
diff changeset
48
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
49 static char *conffile = NULL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
50 static int gnutls_debug = 0;
899
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
51 static int fd_msg_log_enabled = 0; /* all logs disabled by default, this field is a bitfield of enabled FD_MSG_LOG_* */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
52
501
e5f06199cee7 New command-line option to enable GNUTLS debugging
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 453
diff changeset
53 /* gnutls debug */
e5f06199cee7 New command-line option to enable GNUTLS debugging
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 453
diff changeset
54 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
55 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
56 }
e5f06199cee7 New command-line option to enable GNUTLS debugging
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 453
diff changeset
57
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
58
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
59 /* freeDiameter starting point */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
60 int main(int argc, char * argv[])
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
61 {
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
62 int ret;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
63 sigset_t sig_all;
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
64
683
d59effdf5256 Improve management of the signals in freeDiameterd
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
65 /* 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
66 sigfillset(&sig_all);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
67 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
68 ASSERT(ret == 0);
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
69
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
70 /* Parse the command-line */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
71 ret = main_cmdline(argc, argv);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
72 if (ret != 0) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
73 return ret;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
74 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
75
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
76 /* Initialize the core library */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
77 ret = fd_core_initialize();
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
78 if (ret != 0) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
79 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
80 return ret;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
81 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
82
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
83 /* Set gnutls debug level ? */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
84 if (gnutls_debug) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
85 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
86 gnutls_global_set_log_level (gnutls_debug);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
87 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
88 }
899
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
89
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
90 /* set messages logging */
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
91 if (fd_msg_log_enabled) {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
92 if (fd_msg_log_enabled & (1 << FD_MSG_LOG_DROPPED)) {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
93 CHECK_FCT( fd_msg_log_config(FD_MSG_LOG_DROPPED, FD_MSG_LOGTO_DEBUGONLY, NULL) );
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
94 }
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
95 if (fd_msg_log_enabled & (1 << FD_MSG_LOG_RECEIVED)) {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
96 CHECK_FCT( fd_msg_log_config(FD_MSG_LOG_RECEIVED, FD_MSG_LOGTO_DEBUGONLY, NULL) );
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
97 }
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
98 if (fd_msg_log_enabled & (1 << FD_MSG_LOG_SENT)) {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
99 CHECK_FCT( fd_msg_log_config(FD_MSG_LOG_SENT, FD_MSG_LOGTO_DEBUGONLY, NULL) );
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
100 }
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
101 if (fd_msg_log_enabled & (1 << FD_MSG_LOG_NODELIVER)) {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
102 CHECK_FCT( fd_msg_log_config(FD_MSG_LOG_NODELIVER, FD_MSG_LOGTO_DEBUGONLY, NULL) );
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
103 }
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
104 if (fd_msg_log_enabled & (1 << FD_MSG_LOG_TIMING)) {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
105 CHECK_FCT( fd_msg_log_config(FD_MSG_LOG_TIMING, FD_MSG_LOGTO_DEBUGONLY, NULL) );
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
106 }
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
107 }
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
108
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
109 /* Allow SIGINT and SIGTERM from this point to terminate the application */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
110 CHECK_POSIX( pthread_create(&signals_thr, NULL, catch_signals, NULL) );
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
111
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
112 /* Parse the configuration file */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
113 CHECK_FCT( fd_core_parseconf(conffile) );
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
114
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
115 /* Start the servers */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
116 CHECK_FCT( fd_core_start() );
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
117
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
118 TRACE_DEBUG(INFO, FD_PROJECT_BINARY " daemon initialized.");
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
119
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
120 /* Now, just wait for termination */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
121 CHECK_FCT( fd_core_wait_shutdown_complete() );
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
122
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
123 /* 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
124 fd_thr_term(&signals_thr);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
125
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
126 return 0;
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
127 }
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
128
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
129
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
130 /* Display package version */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
131 static void main_version_core(void)
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
132 {
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
133 printf("%s, version %d.%d.%d"
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
134 #ifdef HG_VERSION
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
135 " (r%s"
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
136 # ifdef PACKAGE_HG_REVISION
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
137 "/%s"
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
138 # endif /* PACKAGE_HG_VERSION */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
139 ")"
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
140 #endif /* HG_VERSION */
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
141 " (libfdcore: %s)\n",
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
142 FD_PROJECT_NAME, FD_PROJECT_VERSION_MAJOR, FD_PROJECT_VERSION_MINOR, FD_PROJECT_VERSION_REV
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
143 #ifdef HG_VERSION
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
144 , HG_VERSION
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
145 # ifdef PACKAGE_HG_REVISION
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
146 , PACKAGE_HG_REVISION
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
147 # endif /* PACKAGE_HG_VERSION */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
148 #endif /* HG_VERSION */
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
149 , fd_core_version());
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
150 }
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
151
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
152 /* Display package version and general info */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
153 static void main_version(void)
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
154 {
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
155 main_version_core();
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
156 printf( "%s\n", FD_PROJECT_COPYRIGHT);
335
603791d2dcc4 Updated website information
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 304
diff changeset
157 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
158 " 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
159 }
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
160
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
161 /* Print command-line options */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
162 static void main_help( void )
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 main_version_core();
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
165 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
166 " used for Authentication, Authorization, and Accounting (AAA).\n");
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
167 printf("\nUsage: " FD_PROJECT_BINARY " [OPTIONS]...\n");
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
168 printf( " -h, --help Print help and exit\n"
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
169 " -V, --version Print version and exit\n"
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
170 " -c, --config=filename Read configuration from this file instead of the \n"
899
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
171 " default location (" DEFAULT_CONF_PATH "/" FD_DEFAULT_CONF_FILENAME ").\n"
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
172 " -M, --enable_msg_log=( DROPPED | RECEIVED | SENT | NODELIVER | TIMING )\n"
900
a7e0a7ab769c Fix typo
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
173 " Enable logging of these messages in the output.\n");
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
174 printf( "\nDebug:\n"
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
175 " These options are mostly useful for developers\n"
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
176 " -l, --dbglocale Set the locale for error messages\n"
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
177 " -d, --debug Increase verbosity of debug messages\n"
502
a9a938287b49 Updated help message
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 501
diff changeset
178 " -q, --quiet Decrease verbosity then remove debug messages\n"
a9a938287b49 Updated help message
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 501
diff changeset
179 " --dbg_gnutls <int> Enable GNU TLS debug at level <int>\n");
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
180 }
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
181
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
182 /* Parse the command-line */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
183 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
184 {
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
185 int c;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
186 int option_index = 0;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
187 char * locale;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
188
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
189 struct option long_options[] = {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
190 { "help", no_argument, NULL, 'h' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
191 { "version", no_argument, NULL, 'V' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
192 { "config", required_argument, NULL, 'c' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
193 { "debug", no_argument, NULL, 'd' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
194 { "quiet", no_argument, NULL, 'q' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
195 { "dbglocale", optional_argument, NULL, 'l' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
196 { "dbg_func", required_argument, NULL, 'f' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
197 { "dbg_file", required_argument, NULL, 'F' },
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
198 { "dbg_gnutls", required_argument, NULL, 'g' },
899
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
199 { "enable_msg_log", optional_argument, NULL, 'M' },
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
200 { NULL, 0, NULL, 0 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
201 };
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 /* Loop on arguments */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
204 while (1) {
899
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
205 c = getopt_long (argc, argv, "hVc:dql:M:", long_options, &option_index);
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
206 if (c == -1)
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
207 break; /* Exit from the loop. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
208
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
209 switch (c) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
210 case 'h': /* Print help and exit. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
211 main_help();
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
212 exit(0);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
213
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
214 case 'V': /* Print version and exit. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
215 main_version();
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
216 exit(0);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
217
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
218 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
219 if (optarg == NULL ) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
220 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
221 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
222 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
223 conffile = optarg;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
224 break;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
225
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
226 case 'l': /* Change the locale. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
227 locale = setlocale(LC_ALL, optarg?:"");
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
228 if (!locale) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
229 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
230 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
231 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
232 break;
899
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
233
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
234 case 'M': /* disable logging of these messages */
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
235 if (optarg) {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
236 if (!strcmp(optarg, "DROPPED")) {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
237 fd_msg_log_enabled |= 1 << FD_MSG_LOG_DROPPED;
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
238 } else
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
239 if (!strcmp(optarg, "RECEIVED")) {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
240 fd_msg_log_enabled |= 1 << FD_MSG_LOG_RECEIVED;
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
241 } else
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
242 if (!strcmp(optarg, "SENT")) {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
243 fd_msg_log_enabled |= 1 << FD_MSG_LOG_SENT;
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
244 } else
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
245 if (!strcmp(optarg, "NODELIVER")) {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
246 fd_msg_log_enabled |= 1 << FD_MSG_LOG_NODELIVER;
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
247 } else
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
248 if (!strcmp(optarg, "TIMING")) {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
249 fd_msg_log_enabled |= 1 << FD_MSG_LOG_TIMING;
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
250 } else {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
251 main_help();
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
252 exit(0);
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
253 }
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
254 } else {
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
255 fd_msg_log_enabled = -1; /* all logs enabled */
40d5e8002b12 Disable all logs by default, activate required logs by command-line switch. To be improved when file logging is supported
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
256 }
235
8773740401a5 Centralized signal handlers management in the library
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 218
diff changeset
257
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
258 case 'd': /* Increase verbosity of debug messages. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
259 fd_g_debug_lvl++;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
260 break;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
261
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
262 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
263 #ifdef DEBUG
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
264 fd_debug_one_function = optarg;
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;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
270
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);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
274 #else /* DEBUG */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
275 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
276 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
277 #endif /* DEBUG */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
278 break;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
279
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
280 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
281 gnutls_debug = (int)atoi(optarg);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
282 break;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
283
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
284 case 'q': /* Decrease verbosity then remove debug messages. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
285 fd_g_debug_lvl--;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
286 break;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
287
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
288 case '?': /* Invalid option. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
289 /* `getopt_long' already printed an error message. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
290 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
291 return EINVAL;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
292
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
293 default: /* bug: option not considered. */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
294 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
295 ASSERT(0);
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 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
299
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
300 return 0;
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
301 }
628
e1c6f45f5fcd Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 502
diff changeset
302
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
303 /* Handle some signals */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
304 static void * catch_signals(void * arg)
628
e1c6f45f5fcd Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 502
diff changeset
305 {
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
306 sigset_t ss;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
307 fd_log_threadname ( "signals catcher" );
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
308
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
309 sigemptyset(&ss);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
310
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
311 /* Signals that terminate the daemon */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
312 sigaddset(&ss, SIGTERM);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
313 sigaddset(&ss, SIGINT);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
314
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
315 /* Signals that send an event */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
316 sigaddset(&ss, SIGUSR1);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
317 sigaddset(&ss, SIGUSR2);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
318
683
d59effdf5256 Improve management of the signals in freeDiameterd
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
319 /* 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
320 CHECK_SYS_DO( pthread_sigmask( SIG_SETMASK, &ss, NULL ), goto out );
d59effdf5256 Improve management of the signals in freeDiameterd
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
321
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
322 /* 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
323 while (1) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
324 int sig, *ps;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
325
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
326 /* Wait to receive the next signal */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
327 CHECK_POSIX_DO( sigwait(&ss, &sig), break );
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
328
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
329 TRACE_DEBUG(FULL, "Signal %d caught", sig);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
330
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
331 switch (sig) {
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
332 case SIGUSR1:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
333 case SIGUSR2:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
334 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
335 *ps = sig;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
336 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
337 break;
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
338
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
339 case SIGINT:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
340 case SIGTERM:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
341 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
342
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
343 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
344 }
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
345 out:
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
346 /* Better way to handle this ? */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
347 ASSERT(0);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
348 return NULL;
628
e1c6f45f5fcd Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 502
diff changeset
349 }
"Welcome to our mercurial repository"