aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon/logger_manager.h
blob: 4a2707732edefa044950b1ba1597fbf566a795d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/**
 * @file logger_manager.h
 *
 * @brief Logger manager. Manages globaly all logger objects
 *
 */

/*
 * Copyright (C) 2005 Jan Hutter, Martin Willi
 * Hochschule fuer Technik Rapperswil
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2 of the License, or (at your
 * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

#ifndef LOGGER_MANAGER_H_
#define LOGGER_MANAGER_H_

#include <pthread.h>

#include "logger.h"

/**
 * @brief Context of a specific logger 
 */
typedef enum logger_context_e logger_context_t;

enum logger_context_e{
	PARSER,
	GENERATOR,
	IKE_SA,
	MESSAGE,
	THREAD_POOL,
	WORKER_THREAD,
	EVENT_THREAD,
	SENDER_THREAD,
	RECEIVER_THREAD,
	TESTER,
};


/**
 * @brief The logger_manager_t object
 */
typedef struct logger_manager_s logger_manager_t;

struct logger_manager_s {
	
	/**
	 * @brief Gets a logger_t object for a specific logger context.
	 * 
	 * @warning logger_t objects which are not destroyed over function
	 * #logger_manager_s.destroy_logger are destroyed in logger_managers 
	 * destroy function. Don't use logger_t's own destroy function with 
	 * managed logger_t objects.
	 *
	 * @param this			logger_manager_t object
	 * @param context		logger_context to use the logger for.
	 * @param[out] logger	pointer to a a place where the new logger is stored
	 * @param name			name for the new logger. Context name is already included 
	 * 						and has not to be specified.
	 * @return
	 * 		 				- logger_t on SUCCESS
	 * 						- NULL otherwise
	 */
	logger_t *(*create_logger) (logger_manager_t *this, logger_context_t context, char *name);
	
	
	/**
	 * @brief Destroys a logger_t object which is not used anymore
	 * 
	 * @warning logger_t objects which are not destroyed over function
	 * #logger_manager_s.destroy_logger are destroyed in logger_managers 
	 * destroy function.
	 *
	 * @param this		logger_manager_t object
	 * @param logger		pointer to the logger which has to be destroyed
	 * @return
	 * 		 			- SUCCESS
	 * 					- OUT_OF_RES
	 * 					- NOT_FOUND
	 */
	status_t (*destroy_logger) (logger_manager_t *this,logger_t *logger);
	
	/**
	 * Returns the set logger_level of a specific context or 0.
	 * @param this 			calling object
	 * @param context 		context to check level
	 * @return logger_level 	for the given logger_context
	 */
	logger_level_t (*get_logger_level) (logger_manager_t *this, logger_context_t context);
	
	/**
	 * Enables a logger_level of a specific context.
	 * @param this 			calling object
	 * @param context 		context to set level
 	 * @param logger_level 	logger_level to eanble
 	 * @return SUCCESS
	 */
	status_t (*enable_logger_level) (logger_manager_t *this, logger_context_t context,logger_level_t logger_level);
		

	/**
	 * Disables a logger_level of a specific context.
	 * @param this 			calling object
	 * @param context 		context to set level
 	 * @param logger_level 	logger_level to disable
 	 * @return SUCCESS
	 */
	status_t (*disable_logger_level) (logger_manager_t *this, logger_context_t context,logger_level_t logger_level);


	/**
	 * @brief destroys a logger_manager_t object.
	 *
	 * @param this		logger_manager_t object
	 * @return
	 * 		 			- SUCCESS in any case
	 */
	status_t (*destroy) (logger_manager_t *this);
};

/**
 * @brief Constructor to create a logger_manager_t object.
 *
 * @param default_log_level 	default log level for a context
 * @return 					logger_manager_t object or NULL if failed
 * 
 */
logger_manager_t *logger_manager_create(logger_level_t default_log_level);


#endif /*LOGGER_MANAGER_H_*/