2 * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include "download-agent-debug.h"
21 #include "download-agent-utils.h"
23 #define STRING_IT(x) #x
24 #define TURN_ON_LOG(channel) (DALogBitMap |= (0x1<<(channel)))
28 char *__get_log_env(void);
29 char **__parsing_log_env(char *in_log_env);
30 char *__copying_str(char *source, int length);
31 char *__get_channel_name_from_enum(da_log_channel channel_enum);
33 da_result_t init_log_mgr(void) {
34 da_result_t ret = DA_RESULT_OK;
35 static da_bool_t did_log_mgr_init = DA_FALSE;
36 char *log_env = DA_NULL;
37 char **parsed_log_env = DA_NULL;
38 char **cur_parsed_log_env = DA_NULL;
44 did_log_mgr_init = DA_TRUE;
46 log_env = __get_log_env();
48 /* If no environment values are found, do behave like all logs are turned on except for Soup log */
49 DALogBitMap = ~(0x1 << Soup);
55 parsed_log_env = __parsing_log_env(log_env);
57 char *channel_keyward = DA_NULL;
58 for (cur_parsed_log_env = parsed_log_env; *cur_parsed_log_env; cur_parsed_log_env++) {
59 if (!*cur_parsed_log_env)
61 for (i = 0; i < DA_LOG_CHANNEL_MAX; i++) {
62 channel_keyward = __get_channel_name_from_enum(i);
63 if (channel_keyward && !strcmp(*cur_parsed_log_env,
69 free(*cur_parsed_log_env);
80 char *__get_log_env(void) {
81 char *log_env = DA_NULL;
83 /* environment value has higher priority than configure file */
84 log_env = getenv(DA_DEBUG_ENV_KEY);
85 if (log_env && strlen(log_env))
86 return strdup(log_env);
88 if (read_data_from_file(DA_DEBUG_CONFIG_FILE_PATH, &log_env))
94 char **__parsing_log_env(char *in_log_env) {
95 char **out_parsed_result = DA_NULL;
97 char **temp_result_array = DA_NULL;
98 char **cur_temp_result_array = DA_NULL;
99 int how_many_item = 0;
100 int how_many_delimeter = 0;
102 char delimiter = ',';
104 char *org_str = in_log_env;
105 char *cur_char = org_str;
106 char *start = org_str;
113 /* counting delimiter to know how many items should be memory allocated.
114 * This causes two round of loop (counting delimiter and real operation).
115 * But I think it is tolerable, because input parameter is from console.
116 * And it is also a reason why we should not use fixed length array.
117 * Users are hard to input very long environment, but it is possible. */
118 for (cur_char = org_str; *cur_char; cur_char++) {
119 if (*cur_char == delimiter)
120 how_many_delimeter++;
122 how_many_item = how_many_delimeter + 1;
123 temp_result_array = (char**) calloc(1, how_many_item + 1);
124 if (!(temp_result_array))
127 cur_temp_result_array = temp_result_array;
130 if (*cur_char == delimiter) {
132 target_len = (int) (end - start);
133 *cur_temp_result_array++ = __copying_str(start,
137 } else if (!(*cur_char)) {
139 target_len = (int) (end - start);
140 *cur_temp_result_array++ = __copying_str(start,
142 *cur_temp_result_array = DA_NULL;
148 out_parsed_result = temp_result_array;
150 return out_parsed_result;
153 char *__copying_str(char *source, int length) {
154 char *copied_str = DA_NULL;
155 char *cur_pos = DA_NULL;
156 char white_space = ' ';
157 char end_of_line = 10; /* ASCII for LF */
160 if (!source || !(length > 0))
163 copied_str = (char*) calloc(1, length + 1);
165 cur_pos = copied_str;
166 for (i = 0; i < length; i++) {
167 if ((source[i] != white_space) && (source[i]
169 *cur_pos++ = source[i];
176 char *__get_channel_name_from_enum(da_log_channel channel_enum) {
177 switch (channel_enum) {
179 return STRING_IT(Soup);
181 return STRING_IT(HTTPManager);
183 return STRING_IT(FileManager);
185 return STRING_IT(DRMManager);
186 case DownloadManager:
187 return STRING_IT(DownloadManager);
189 return STRING_IT(ClientNoti);
190 case HTTPMessageHandler:
191 return STRING_IT(HTTPMessageHandler);
193 return STRING_IT(Encoding);
195 return STRING_IT(QueueManager);
197 return STRING_IT(Parsing);
199 return STRING_IT(Thread);
201 return STRING_IT(Default);