]> git.ipfire.org Git - thirdparty/strongswan.git/blame - programs/charon/lib/utils/logger_manager.c
- import of strongswan-2.7.0
[thirdparty/strongswan.git] / programs / charon / lib / utils / logger_manager.c
CommitLineData
ffd555f5
JH
1/**
2 * @file logger_manager.c
3 *
caf2a93a 4 * @brief Implementation of logger_manager_t.
ffd555f5
JH
5 *
6 */
7
8/*
9 * Copyright (C) 2005 Jan Hutter, Martin Willi
10 * Hochschule fuer Technik Rapperswil
11 *
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
20 * for more details.
21 */
22
b85d20d1 23
ffd555f5 24#include "logger_manager.h"
b1953ccd
MW
25
26#include <daemon.h>
021c2322 27#include <definitions.h>
021c2322 28#include <utils/linked_list.h>
9c6340cd 29
d794bcdb
JH
30/**
31 * String mappings for logger_context_t
32 */
9c6340cd
JH
33mapping_t logger_context_t_mappings[] = {
34 {PARSER, "PARSER"},
dec59822 35 {GENERATOR, "GENERATOR"},
9c6340cd 36 {IKE_SA, "IKE_SA"},
dec59822
MW
37 {IKE_SA_MANAGER, "IKE_SA_MANAGER"},
38 {CHILD_SA, "CHILD_SA"},
39 {MESSAGE, "MESSAGE"},
40 {THREAD_POOL, "THREAD_POOL"},
41fc4f74 41 {WORKER, "WORKER"},
dec59822 42 {SCHEDULER, "SCHEDULER"},
41fc4f74 43 {SENDER, "SENDER"},
dec59822 44 {RECEIVER, "RECEIVER"},
41fc4f74 45 {SOCKET, "SOCKET"},
9c6340cd 46 {TESTER, "TESTER"},
f4358cb2 47 {DAEMON, "DAEMON"},
8a491129 48 {CONFIG, "CONFIG"},
dec59822
MW
49 {ENCRYPTION_PAYLOAD, "ENCRYPTION_PAYLOAD"},
50 {PAYLOAD, "PAYLOAD"},
9c781c15
MW
51 {DER_DECODER, "DER_DECODER"},
52 {DER_ENCODER, "DER_ENCODER"},
b5cb0210 53 {ASN1, "ASN1"},
9d7597bb
MW
54 {XFRM, "XFRM"},
55 {LEAK_DETECT, "LEAK_DETECT"},
25c41f4d 56 {MAPPING_END, NULL},
9c6340cd 57};
ffd555f5 58
dec59822
MW
59struct {
60 char *name;
61 log_level_t level;
62 bool log_thread_ids;
dec59822 63} logger_defaults[] = {
5113680f
MW
64 { "PARSR", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* PARSER */
65 { "GNRAT", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* GENERATOR */
66 { "IKESA", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* IKE_SA */
67 { "SAMGR", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* IKE_SA_MANAGER */
68 { "CHDSA", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* CHILD_SA */
69 { "MESSG", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* MESSAGE */
70 { "TPOOL", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* THREAD_POOL */
71 { "WORKR", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* WORKER */
72 { "SCHED", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* SCHEDULER */
73 { "SENDR", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* SENDER */
74 { "RECVR", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* RECEIVER */
75 { "SOCKT", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* SOCKET */
76 { "TESTR", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* TESTER */
77 { "DAEMN", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* DAEMON */
78 { "CONFG", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* CONFIG */
79 { "ENCPL", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* ENCRYPTION_PAYLOAD */
80 { "PAYLD", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* PAYLOAD */
81 { "DERDC", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* DER_DECODER */
82 { "DEREC", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* DER_ENCODER */
8f1c27ba
MW
83 { "ASN_1", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* ASN1 */
84 { "XFRM ", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* XFRM */
9d7597bb 85 { "LEAKD", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* LEAK_DETECT */
dec59822 86};
ffd555f5 87
caf2a93a 88
5796aa16
MW
89typedef struct private_logger_manager_t private_logger_manager_t;
90
caf2a93a
JH
91/**
92 * Private data of logger_manager_t object.
93 */
5796aa16 94struct private_logger_manager_t {
ffd555f5
JH
95 /**
96 * Public data.
97 */
98 logger_manager_t public;
99
100 /**
dec59822 101 * Array of loggers, one for each context
ffd555f5 102 */
dec59822 103 logger_t *loggers[LOGGER_CONTEXT_ROOF];
ffd555f5
JH
104};
105
5113680f
MW
106/**
107 * The one and only instance of the logger manager
108 */
109static private_logger_manager_t private_logger_manager;
110
111/**
112 * Exported pointer for the logger manager
113 */
114logger_manager_t *logger_manager = (logger_manager_t *)&private_logger_manager;
115
083254bb 116/**
dec59822 117 * Implementation of logger_manager_t.get_logger.
083254bb 118 */
dec59822 119static logger_t *get_logger(private_logger_manager_t *this, logger_context_t context)
ffd555f5 120{
dec59822 121 return this->loggers[context];
ffd555f5
JH
122}
123
124/**
dec59822 125 * Implementation of logger_manager_t.get_log_level.
ffd555f5 126 */
dec59822 127static log_level_t get_log_level (private_logger_manager_t *this, logger_context_t context)
ffd555f5 128{
dec59822 129 return this->loggers[context]->get_level(this->loggers[context]);
ffd555f5
JH
130}
131
132/**
dec59822 133 * Implementation of private_logger_manager_t.enable_log_level.
ffd555f5 134 */
dec59822 135static void enable_log_level(private_logger_manager_t *this, logger_context_t context, log_level_t level)
efadbf79
MW
136{
137 if (context == ALL_LOGGERS)
138 {
139 for (context = 0; context < LOGGER_CONTEXT_ROOF; context++)
140 {
141 this->loggers[context]->enable_level(this->loggers[context], level);
142 }
143 }
144 else
145 {
146 this->loggers[context]->enable_level(this->loggers[context], level);
147 }
ffd555f5
JH
148}
149
150/**
dec59822 151 * Implementation of private_logger_manager_t.disable_log_level.
ffd555f5 152 */
dec59822 153static void disable_log_level(private_logger_manager_t *this, logger_context_t context, log_level_t level)
efadbf79
MW
154{
155 if (context == ALL_LOGGERS)
156 {
157 for (context = 0; context < LOGGER_CONTEXT_ROOF; context++)
158 {
159 this->loggers[context]->disable_level(this->loggers[context], level);
160 }
161 }
162 else
163 {
164 this->loggers[context]->disable_level(this->loggers[context], level);
165 }
166}
167
168/**
169 * Implementation of private_logger_manager_t.set_output.
170 */
171static void set_output(private_logger_manager_t *this, logger_context_t context, FILE *output)
ffd555f5 172{
efadbf79
MW
173 if (context == ALL_LOGGERS)
174 {
175 for (context = 0; context < LOGGER_CONTEXT_ROOF; context++)
176 {
177 this->loggers[context]->set_output(this->loggers[context], output);
178 }
179 }
180 else
181 {
182 this->loggers[context]->set_output(this->loggers[context], output);
183 }
ffd555f5
JH
184}
185
ffd555f5
JH
186
187/**
5113680f 188 * Creates the instance of the logger manager at library startup
ffd555f5 189 */
6b3292da 190void logger_manager_init()
ffd555f5 191{
dec59822 192 int i;
5113680f
MW
193
194 logger_manager->get_logger = (logger_t *(*)(logger_manager_t*,logger_context_t context))get_logger;
195 logger_manager->get_log_level = (log_level_t (*)(logger_manager_t *, logger_context_t)) get_log_level;
196 logger_manager->enable_log_level = (void (*)(logger_manager_t *, logger_context_t, log_level_t)) enable_log_level;
197 logger_manager->disable_log_level = (void (*)(logger_manager_t *, logger_context_t, log_level_t)) disable_log_level;
198 logger_manager->set_output = (void (*)(logger_manager_t *, logger_context_t, FILE*)) set_output;
199
dec59822 200 for (i = 0; i < LOGGER_CONTEXT_ROOF; i++)
ffd555f5 201 {
5113680f
MW
202 private_logger_manager.loggers[i] = logger_create(logger_defaults[i].name,
203 logger_defaults[i].level,
204 logger_defaults[i].log_thread_ids,
8f1c27ba 205 INITIAL_LOG_OUTPUT);
ffd555f5 206 }
5113680f 207
ffd555f5
JH
208}
209
5113680f
MW
210/**
211 * Destroy the logger manager at library exit
ffd555f5 212 */
6b3292da 213void logger_manager_cleanup()
ffd555f5 214{
dec59822 215 int i;
dec59822
MW
216 for (i = 0; i < LOGGER_CONTEXT_ROOF; i++)
217 {
5113680f 218 private_logger_manager.loggers[i]->destroy(private_logger_manager.loggers[i]);
dec59822 219 }
ffd555f5 220}