Mercurial > hg > freeDiameter
annotate freeDiameterd/main.c @ 1327:82b386714795
Set callback data also when only setting expire callback (and not answer callback as well).
It is used when calling the expire callback, so not setting it makes no sense.
author | Thomas Klausner <tk@giga.or.at> |
---|---|
date | Mon, 27 Nov 2017 15:21:20 +0100 |
parents | 84a3c9c4b834 |
children | e70ce64ce689 |
rev | line source |
---|---|
0 | 1 /********************************************************************************************************* |
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 | 4 * * |
1305
84a3c9c4b834
Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1303
diff
changeset
|
5 * Copyright (c) 2015, WIDE Project and NICT * |
0 | 6 * All rights reserved. * |
7 * * | |
8 * Redistribution and use of this software in source and binary forms, with or without modification, are * | |
9 * permitted provided that the following conditions are met: * | |
10 * * | |
11 * * Redistributions of source code must retain the above * | |
12 * copyright notice, this list of conditions and the * | |
13 * following disclaimer. * | |
14 * * | |
15 * * Redistributions in binary form must reproduce the above * | |
16 * copyright notice, this list of conditions and the * | |
17 * following disclaimer in the documentation and/or other * | |
18 * materials provided with the distribution. * | |
19 * * | |
20 * * Neither the name of the WIDE Project or NICT nor the * | |
21 * names of its contributors may be used to endorse or * | |
22 * promote products derived from this software without * | |
23 * specific prior written permission of WIDE Project and * | |
24 * NICT. * | |
25 * * | |
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * | |
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * | |
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * | |
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * | |
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * | |
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * | |
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * | |
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * | |
34 *********************************************************************************************************/ | |
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 | 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; |
8
3e143f047f78
Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
3
diff
changeset
|
51 |
501
e5f06199cee7
New command-line option to enable GNUTLS debugging
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
453
diff
changeset
|
52 /* gnutls debug */ |
e5f06199cee7
New command-line option to enable GNUTLS debugging
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
453
diff
changeset
|
53 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
|
54 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
|
55 } |
e5f06199cee7
New command-line option to enable GNUTLS debugging
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
453
diff
changeset
|
56 |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
57 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
58 /* freeDiameter starting point */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
59 int main(int argc, char * argv[]) |
8
3e143f047f78
Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
3
diff
changeset
|
60 { |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
61 int ret; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
62 sigset_t sig_all; |
8
3e143f047f78
Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
3
diff
changeset
|
63 |
683
d59effdf5256
Improve management of the signals in freeDiameterd
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
662
diff
changeset
|
64 /* 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
|
65 sigfillset(&sig_all); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
66 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
|
67 ASSERT(ret == 0); |
8
3e143f047f78
Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
3
diff
changeset
|
68 |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
69 /* Parse the command-line */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
70 ret = main_cmdline(argc, argv); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
71 if (ret != 0) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
72 return ret; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
73 } |
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 /* Initialize the core library */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
76 ret = fd_core_initialize(); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
77 if (ret != 0) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
78 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
|
79 return ret; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
80 } |
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 /* Set gnutls debug level ? */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
83 if (gnutls_debug) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
84 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
|
85 gnutls_global_set_log_level (gnutls_debug); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
86 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
|
87 } |
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
|
88 |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
89 /* 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
|
90 CHECK_FCT_DO( fd_core_parseconf(conffile), goto error ); |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
91 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
92 /* 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
|
93 CHECK_FCT_DO( fd_core_start(), goto error ); |
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
|
94 |
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
|
95 /* 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
|
96 CHECK_POSIX_DO( pthread_create(&signals_thr, NULL, catch_signals, NULL), goto error ); |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
97 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
98 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
|
99 |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
100 /* Now, just wait for termination */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
101 CHECK_FCT( fd_core_wait_shutdown_complete() ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
102 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
103 /* 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
|
104 fd_thr_term(&signals_thr); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
105 |
8
3e143f047f78
Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
3
diff
changeset
|
106 return 0; |
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
|
107 error: |
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
|
108 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
|
109 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
|
110 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
|
111 return -1; |
14
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
112 } |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
113 |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
114 |
14
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
115 /* Display package version */ |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
116 static void main_version_core(void) |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
117 { |
1159
05f74dc19c49
Include source rev number in version information when available
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1134
diff
changeset
|
118 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
|
119 } |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
120 |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
121 /* Display package version and general info */ |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
122 static void main_version(void) |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
123 { |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
124 main_version_core(); |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
125 printf( "%s\n", FD_PROJECT_COPYRIGHT); |
335
603791d2dcc4
Updated website information
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
304
diff
changeset
|
126 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
|
127 " 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
|
128 } |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
129 |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
130 /* Print command-line options */ |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
131 static void main_help( 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 main_version_core(); |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
134 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
|
135 " used for Authentication, Authorization, and Accounting (AAA).\n"); |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
136 printf("\nUsage: " FD_PROJECT_BINARY " [OPTIONS]...\n"); |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
137 printf( " -h, --help Print help and exit\n" |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
138 " -V, --version Print version and exit\n" |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
139 " -c, --config=filename Read configuration from this file instead of the \n" |
1078
74bba7975864
Cleanup the timing data and fd_msg_log feature that will be replaced by the new hooks mechanism. Kept the calls to fd_msg_log in comments to find the locations easily. WORK IN PROGRESS.
Sebastien Decugis <sdecugis@freediameter.net>
parents:
931
diff
changeset
|
140 " default location (" DEFAULT_CONF_PATH "/" FD_DEFAULT_CONF_FILENAME ").\n"); |
14
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
141 printf( "\nDebug:\n" |
14cf6daf716d
Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
13
diff
changeset
|
142 " These options are mostly useful for developers\n" |
1134
51ce5a30df2d
Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1088
diff
changeset
|
143 " -l, --dbglocale Set the locale for error messages\n" |
51ce5a30df2d
Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1088
diff
changeset
|
144 " -d, --debug Increase verbosity of debug messages if default logger is used\n" |
51ce5a30df2d
Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1088
diff
changeset
|
145 " -q, --quiet Decrease verbosity if default logger is used\n" |
51ce5a30df2d
Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1088
diff
changeset
|
146 " -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
|
147 " -F, --dbg_file <file.c> Enable all traces within the file <file.c> (basename match)\n" |
51ce5a30df2d
Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1088
diff
changeset
|
148 " --dbg_gnutls <int> Enable GNU TLS debug at level <int>\n" |
51ce5a30df2d
Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1088
diff
changeset
|
149 ); |
8
3e143f047f78
Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
3
diff
changeset
|
150 } |
3e143f047f78
Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
3
diff
changeset
|
151 |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
152 /* Parse the command-line */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
153 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
|
154 { |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
155 int c; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
156 int option_index = 0; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
157 char * locale; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
158 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
159 struct option long_options[] = { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
160 { "help", no_argument, NULL, 'h' }, |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
161 { "version", no_argument, NULL, 'V' }, |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
162 { "config", required_argument, NULL, 'c' }, |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
163 { "debug", no_argument, NULL, 'd' }, |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
164 { "quiet", no_argument, NULL, 'q' }, |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
165 { "dbglocale", optional_argument, NULL, 'l' }, |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
166 { "dbg_func", required_argument, NULL, 'f' }, |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
167 { "dbg_file", required_argument, NULL, 'F' }, |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
168 { "dbg_gnutls", required_argument, NULL, 'g' }, |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
169 { NULL, 0, NULL, 0 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
170 }; |
8
3e143f047f78
Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
3
diff
changeset
|
171 |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
172 /* Loop on arguments */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
173 while (1) { |
1302
d8c998e7c535
Fix command-line parsing
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1182
diff
changeset
|
174 c = getopt_long (argc, argv, "hVc:dql:f:F:g:", long_options, &option_index); |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
175 if (c == -1) |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
176 break; /* Exit from the loop. */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
177 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
178 switch (c) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
179 case 'h': /* Print help and exit. */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
180 main_help(); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
181 exit(0); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
182 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
183 case 'V': /* Print version and exit. */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
184 main_version(); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
185 exit(0); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
186 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
187 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
|
188 if (optarg == NULL ) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
189 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
|
190 return EINVAL; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
191 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
192 conffile = optarg; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
193 break; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
194 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
195 case 'l': /* Change the locale. */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
196 locale = setlocale(LC_ALL, optarg?:""); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
197 if (!locale) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
198 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
|
199 return EINVAL; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
200 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
201 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
|
202 |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
203 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
|
204 fd_g_debug_lvl--; |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
205 break; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
206 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
207 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
|
208 #ifdef DEBUG |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
209 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
|
210 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
|
211 #else /* DEBUG */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
212 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
|
213 return EINVAL; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
214 #endif /* DEBUG */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
215 break; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
216 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
217 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
|
218 #ifdef DEBUG |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
219 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
|
220 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
|
221 #else /* DEBUG */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
222 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
|
223 return EINVAL; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
224 #endif /* DEBUG */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
225 break; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
226 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
227 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
|
228 gnutls_debug = (int)atoi(optarg); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
229 break; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
230 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
231 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
|
232 fd_g_debug_lvl++; |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
233 break; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
234 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
235 case '?': /* Invalid option. */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
236 /* `getopt_long' already printed an error message. */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
237 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
|
238 return EINVAL; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
239 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
240 default: /* bug: option not considered. */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
241 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
|
242 ASSERT(0); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
243 return EINVAL; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
244 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
245 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
246 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
247 return 0; |
8
3e143f047f78
Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
3
diff
changeset
|
248 } |
628
e1c6f45f5fcd
Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
502
diff
changeset
|
249 |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
250 /* Handle some signals */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
251 static void * catch_signals(void * arg) |
628
e1c6f45f5fcd
Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
502
diff
changeset
|
252 { |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
253 sigset_t ss; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
254 fd_log_threadname ( "signals catcher" ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
255 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
256 sigemptyset(&ss); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
257 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
258 /* Signals that terminate the daemon */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
259 sigaddset(&ss, SIGTERM); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
260 sigaddset(&ss, SIGINT); |
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 /* Signals that send an event */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
263 sigaddset(&ss, SIGUSR1); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
264 sigaddset(&ss, SIGUSR2); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
265 |
683
d59effdf5256
Improve management of the signals in freeDiameterd
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
662
diff
changeset
|
266 /* 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
|
267 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
|
268 |
658
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
269 /* 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
|
270 while (1) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
271 int sig, *ps; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
272 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
273 /* Wait to receive the next signal */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
274 CHECK_POSIX_DO( sigwait(&ss, &sig), break ); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
275 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
276 TRACE_DEBUG(FULL, "Signal %d caught", sig); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
277 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
278 switch (sig) { |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
279 case SIGUSR1: |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
280 case SIGUSR2: |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
281 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
|
282 *ps = sig; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
283 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
|
284 break; |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
285 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
286 case SIGINT: |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
287 case SIGTERM: |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
288 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
|
289 |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
290 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
291 } |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
292 out: |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
293 /* Better way to handle this ? */ |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
294 ASSERT(0); |
f198d16fa7f4
Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
628
diff
changeset
|
295 return NULL; |
628
e1c6f45f5fcd
Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
502
diff
changeset
|
296 } |