4 * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Jungki Kwak <jungki.kwak@samsung.com>, Keunsoon Lee <keunsoon.lee@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
20 * @file download-agent-debug.c
21 * @brief for log system on Download Agent
22 * @author Keunsoon Lee (keunsoon.lee@samsung.com)
23 * @author Jungki Kwak (jungki.kwak@samsung.com)
29 #include "download-agent-debug.h"
30 #include "download-agent-utils.h"
32 #define STRING_IT(x) #x
33 #define TURN_ON_LOG(channel) (DALogBitMap |= (0x1<<(channel)))
37 char *__get_log_env(void);
38 char **__parsing_log_env(char *in_log_env);
39 char *__copying_str(char *source, int length);
40 char *__get_channel_name_from_enum(da_log_channel channel_enum);
42 da_result_t init_log_mgr(void) {
43 da_result_t ret = DA_RESULT_OK;
44 static da_bool_t did_log_mgr_init = DA_FALSE;
45 char *log_env = DA_NULL;
46 char **parsed_log_env = DA_NULL;
47 char **cur_parsed_log_env = DA_NULL;
53 did_log_mgr_init = DA_TRUE;
55 log_env = __get_log_env();
57 /* If no environment values are found, do behave like all logs are turned on except for Soup log */
58 DALogBitMap = ~(0x1 << Soup);
64 parsed_log_env = __parsing_log_env(log_env);
66 char *channel_keyward = DA_NULL;
67 for (cur_parsed_log_env = parsed_log_env; *cur_parsed_log_env; cur_parsed_log_env++) {
68 if (!*cur_parsed_log_env)
70 for (i = 0; i < DA_LOG_CHANNEL_MAX; i++) {
71 channel_keyward = __get_channel_name_from_enum(i);
72 if (channel_keyward && !strcmp(*cur_parsed_log_env,
78 free(*cur_parsed_log_env);
89 char *__get_log_env(void) {
90 char *log_env = DA_NULL;
92 /* environment value has higher priority than configure file */
93 log_env = getenv(DA_DEBUG_ENV_KEY);
94 if (log_env && strlen(log_env))
95 return strdup(log_env);
97 if (read_data_from_file(DA_DEBUG_CONFIG_FILE_PATH, &log_env))
103 char **__parsing_log_env(char *in_log_env) {
104 char **out_parsed_result = DA_NULL;
106 char **temp_result_array = DA_NULL;
107 char **cur_temp_result_array = DA_NULL;
108 int how_many_item = 0;
109 int how_many_delimeter = 0;
111 char delimiter = ',';
113 char *org_str = in_log_env;
114 char *cur_char = org_str;
115 char *start = org_str;
122 /* counting delimiter to know how many items should be memory allocated.
123 * This causes two round of loop (counting delimiter and real operation).
124 * But I think it is tolerable, because input parameter is from console.
125 * And it is also a reason why we should not use fixed length array.
126 * Users are hard to input very long environment, but it is possible. */
127 for (cur_char = org_str; *cur_char; cur_char++) {
128 if (*cur_char == delimiter)
129 how_many_delimeter++;
131 how_many_item = how_many_delimeter + 1;
132 temp_result_array = (char**) calloc(1, how_many_item + 1);
133 if (!(temp_result_array))
136 cur_temp_result_array = temp_result_array;
139 if (*cur_char == delimiter) {
141 target_len = (int) (end - start);
142 *cur_temp_result_array++ = __copying_str(start,
146 } else if (!(*cur_char)) {
148 target_len = (int) (end - start);
149 *cur_temp_result_array++ = __copying_str(start,
151 *cur_temp_result_array = DA_NULL;
157 out_parsed_result = temp_result_array;
159 return out_parsed_result;
162 char *__copying_str(char *source, int length) {
163 char *copied_str = DA_NULL;
164 char *cur_pos = DA_NULL;
165 char white_space = ' ';
166 char end_of_line = 10; /* ASCII for LF */
169 if (!source || !(length > 0))
172 copied_str = (char*) calloc(1, length + 1);
174 cur_pos = copied_str;
175 for (i = 0; i < length; i++) {
176 if ((source[i] != white_space) && (source[i]
178 *cur_pos++ = source[i];
185 char *__get_channel_name_from_enum(da_log_channel channel_enum) {
186 switch (channel_enum) {
188 return STRING_IT(Soup);
190 return STRING_IT(HTTPManager);
192 return STRING_IT(InstallManager);
194 return STRING_IT(FileManager);
195 case DownloadManager:
196 return STRING_IT(DownloadManager);
198 return STRING_IT(ClientNoti);
199 case HTTPMessageHandler:
200 return STRING_IT(HTTPMessageHandler);
202 return STRING_IT(Encoding);
204 return STRING_IT(QueueManager);
206 return STRING_IT(Parsing);
208 return STRING_IT(Thread);
210 return STRING_IT(Default);