/src/strongswan/src/libstrongswan/utils/debug.c
Line | Count | Source |
1 | | /* |
2 | | * Copyright (C) 2006 Martin Willi |
3 | | * |
4 | | * Copyright (C) secunet Security Networks AG |
5 | | * |
6 | | * This program is free software; you can redistribute it and/or modify it |
7 | | * under the terms of the GNU General Public License as published by the |
8 | | * Free Software Foundation; either version 2 of the License, or (at your |
9 | | * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. |
10 | | * |
11 | | * This program is distributed in the hope that it will be useful, but |
12 | | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
13 | | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
14 | | * for more details. |
15 | | */ |
16 | | |
17 | | #include <stdarg.h> |
18 | | |
19 | | #include "debug.h" |
20 | | |
21 | | ENUM(debug_names, DBG_DMN, DBG_ANY, |
22 | | "DMN", |
23 | | "MGR", |
24 | | "IKE", |
25 | | "CHD", |
26 | | "JOB", |
27 | | "WCH", |
28 | | "CFG", |
29 | | "KNL", |
30 | | "NET", |
31 | | "ASN", |
32 | | "ENC", |
33 | | "TNC", |
34 | | "IMC", |
35 | | "IMV", |
36 | | "PTS", |
37 | | "TLS", |
38 | | "APP", |
39 | | "ESP", |
40 | | "LIB", |
41 | | "ANY", |
42 | | ); |
43 | | |
44 | | ENUM(debug_lower_names, DBG_DMN, DBG_ANY, |
45 | | "dmn", |
46 | | "mgr", |
47 | | "ike", |
48 | | "chd", |
49 | | "job", |
50 | | "wch", |
51 | | "cfg", |
52 | | "knl", |
53 | | "net", |
54 | | "asn", |
55 | | "enc", |
56 | | "tnc", |
57 | | "imc", |
58 | | "imv", |
59 | | "pts", |
60 | | "tls", |
61 | | "app", |
62 | | "esp", |
63 | | "lib", |
64 | | "any", |
65 | | ); |
66 | | |
67 | | /** |
68 | | * level logged by the default logger for specific groups, to simplify things |
69 | | * we store level-1, so initialization to 0 is like setting it to 1 |
70 | | */ |
71 | | static level_t default_level[DBG_MAX]; |
72 | | |
73 | | /** |
74 | | * stream logged to by the default logger |
75 | | */ |
76 | | static FILE *default_stream = NULL; |
77 | | |
78 | | /** |
79 | | * default dbg function which printf all to stderr |
80 | | */ |
81 | | void dbg_default(debug_t group, level_t level, char *fmt, ...) |
82 | 0 | { |
83 | 0 | if (!default_stream) |
84 | 0 | { |
85 | 0 | default_stream = stderr; |
86 | 0 | } |
87 | | /* levels are stored as level-1 */ |
88 | 0 | if (level <= default_level[group]+1) |
89 | 0 | { |
90 | 0 | va_list args; |
91 | |
|
92 | 0 | va_start(args, fmt); |
93 | 0 | vfprintf(default_stream, fmt, args); |
94 | 0 | fprintf(default_stream, "\n"); |
95 | 0 | va_end(args); |
96 | 0 | } |
97 | 0 | } |
98 | | |
99 | | /* |
100 | | * Described in header |
101 | | */ |
102 | | void dbg_default_set_level_group(debug_t group, level_t level) |
103 | 2 | { |
104 | 2 | if (group < DBG_ANY) |
105 | 0 | { |
106 | 0 | default_level[group] = level-1; |
107 | 0 | } |
108 | 2 | else |
109 | 2 | { |
110 | 40 | for (group = 0; group < DBG_MAX; group++) |
111 | 38 | { |
112 | 38 | default_level[group] = level-1; |
113 | 38 | } |
114 | 2 | } |
115 | 2 | } |
116 | | |
117 | | /* |
118 | | * Described in header |
119 | | */ |
120 | | level_t dbg_default_get_level_group(debug_t group) |
121 | 0 | { |
122 | 0 | if (group < DBG_ANY) |
123 | 0 | { |
124 | 0 | return default_level[group] + 1; |
125 | 0 | } |
126 | 0 | return default_level[0]; |
127 | 0 | } |
128 | | |
129 | | /* |
130 | | * Described in header |
131 | | */ |
132 | | void dbg_default_set_level(level_t level) |
133 | 2 | { |
134 | 2 | dbg_default_set_level_group(DBG_ANY, level); |
135 | 2 | } |
136 | | |
137 | | /* |
138 | | * Described in header |
139 | | */ |
140 | | void dbg_default_set_stream(FILE *stream) |
141 | 0 | { |
142 | 0 | default_stream = stream; |
143 | 0 | } |
144 | | |
145 | | /** |
146 | | * The registered debug hook. |
147 | | */ |
148 | | void (*dbg) (debug_t group, level_t level, char *fmt, ...) = dbg_default; |