]> git.ipfire.org Git - people/ms/strongswan.git/blame - Source/lib/utils/logger_manager.c
- fixed bad bugs in kernel interface
[people/ms/strongswan.git] / Source / 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"},
25c41f4d 54 {MAPPING_END, NULL},
9c6340cd 55};
ffd555f5 56
dec59822
MW
57struct {
58 char *name;
59 log_level_t level;
60 bool log_thread_ids;
dec59822 61} logger_defaults[] = {
5113680f
MW
62 { "PARSR", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* PARSER */
63 { "GNRAT", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* GENERATOR */
64 { "IKESA", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* IKE_SA */
65 { "SAMGR", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* IKE_SA_MANAGER */
66 { "CHDSA", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* CHILD_SA */
67 { "MESSG", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* MESSAGE */
68 { "TPOOL", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* THREAD_POOL */
69 { "WORKR", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* WORKER */
70 { "SCHED", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* SCHEDULER */
71 { "SENDR", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* SENDER */
72 { "RECVR", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* RECEIVER */
73 { "SOCKT", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* SOCKET */
74 { "TESTR", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* TESTER */
75 { "DAEMN", ERROR|CONTROL|AUDIT|LEVEL0, FALSE}, /* DAEMON */
76 { "CONFG", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* CONFIG */
77 { "ENCPL", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* ENCRYPTION_PAYLOAD */
78 { "PAYLD", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* PAYLOAD */
79 { "DERDC", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* DER_DECODER */
80 { "DEREC", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* DER_ENCODER */
8f1c27ba
MW
81 { "ASN_1", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* ASN1 */
82 { "XFRM ", ERROR|CONTROL|AUDIT|LEVEL0, TRUE }, /* XFRM */
dec59822 83};
ffd555f5 84
caf2a93a 85
5796aa16
MW
86typedef struct private_logger_manager_t private_logger_manager_t;
87
caf2a93a
JH
88/**
89 * Private data of logger_manager_t object.
90 */
5796aa16 91struct private_logger_manager_t {
ffd555f5
JH
92 /**
93 * Public data.
94 */
95 logger_manager_t public;
96
97 /**
dec59822 98 * Array of loggers, one for each context
ffd555f5 99 */
dec59822 100 logger_t *loggers[LOGGER_CONTEXT_ROOF];
ffd555f5
JH
101};
102
5113680f
MW
103/**
104 * The one and only instance of the logger manager
105 */
106static private_logger_manager_t private_logger_manager;
107
108/**
109 * Exported pointer for the logger manager
110 */
111logger_manager_t *logger_manager = (logger_manager_t *)&private_logger_manager;
112
083254bb 113/**
dec59822 114 * Implementation of logger_manager_t.get_logger.
083254bb 115 */
dec59822 116static logger_t *get_logger(private_logger_manager_t *this, logger_context_t context)
ffd555f5 117{
dec59822 118 return this->loggers[context];
ffd555f5
JH
119}
120
121/**
dec59822 122 * Implementation of logger_manager_t.get_log_level.
ffd555f5 123 */
dec59822 124static log_level_t get_log_level (private_logger_manager_t *this, logger_context_t context)
ffd555f5 125{
dec59822 126 return this->loggers[context]->get_level(this->loggers[context]);
ffd555f5
JH
127}
128
129/**
dec59822 130 * Implementation of private_logger_manager_t.enable_log_level.
ffd555f5 131 */
dec59822 132static void enable_log_level(private_logger_manager_t *this, logger_context_t context, log_level_t level)
efadbf79
MW
133{
134 if (context == ALL_LOGGERS)
135 {
136 for (context = 0; context < LOGGER_CONTEXT_ROOF; context++)
137 {
138 this->loggers[context]->enable_level(this->loggers[context], level);
139 }
140 }
141 else
142 {
143 this->loggers[context]->enable_level(this->loggers[context], level);
144 }
ffd555f5
JH
145}
146
147/**
dec59822 148 * Implementation of private_logger_manager_t.disable_log_level.
ffd555f5 149 */
dec59822 150static void disable_log_level(private_logger_manager_t *this, logger_context_t context, log_level_t level)
efadbf79
MW
151{
152 if (context == ALL_LOGGERS)
153 {
154 for (context = 0; context < LOGGER_CONTEXT_ROOF; context++)
155 {
156 this->loggers[context]->disable_level(this->loggers[context], level);
157 }
158 }
159 else
160 {
161 this->loggers[context]->disable_level(this->loggers[context], level);
162 }
163}
164
165/**
166 * Implementation of private_logger_manager_t.set_output.
167 */
168static void set_output(private_logger_manager_t *this, logger_context_t context, FILE *output)
ffd555f5 169{
efadbf79
MW
170 if (context == ALL_LOGGERS)
171 {
172 for (context = 0; context < LOGGER_CONTEXT_ROOF; context++)
173 {
174 this->loggers[context]->set_output(this->loggers[context], output);
175 }
176 }
177 else
178 {
179 this->loggers[context]->set_output(this->loggers[context], output);
180 }
ffd555f5
JH
181}
182
ffd555f5
JH
183
184/**
5113680f 185 * Creates the instance of the logger manager at library startup
ffd555f5 186 */
5113680f 187void __attribute__ ((constructor)) logger_manager_create()
ffd555f5 188{
dec59822 189 int i;
5113680f
MW
190
191 logger_manager->get_logger = (logger_t *(*)(logger_manager_t*,logger_context_t context))get_logger;
192 logger_manager->get_log_level = (log_level_t (*)(logger_manager_t *, logger_context_t)) get_log_level;
193 logger_manager->enable_log_level = (void (*)(logger_manager_t *, logger_context_t, log_level_t)) enable_log_level;
194 logger_manager->disable_log_level = (void (*)(logger_manager_t *, logger_context_t, log_level_t)) disable_log_level;
195 logger_manager->set_output = (void (*)(logger_manager_t *, logger_context_t, FILE*)) set_output;
196
dec59822 197 for (i = 0; i < LOGGER_CONTEXT_ROOF; i++)
ffd555f5 198 {
5113680f
MW
199 private_logger_manager.loggers[i] = logger_create(logger_defaults[i].name,
200 logger_defaults[i].level,
201 logger_defaults[i].log_thread_ids,
8f1c27ba 202 INITIAL_LOG_OUTPUT);
ffd555f5 203 }
5113680f 204
ffd555f5
JH
205}
206
5113680f
MW
207/**
208 * Destroy the logger manager at library exit
ffd555f5 209 */
5113680f 210void __attribute__ ((destructor)) logger_manager_destroy()
ffd555f5 211{
dec59822 212 int i;
dec59822
MW
213 for (i = 0; i < LOGGER_CONTEXT_ROOF; i++)
214 {
5113680f 215 private_logger_manager.loggers[i]->destroy(private_logger_manager.loggers[i]);
dec59822 216 }
ffd555f5 217}