2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
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.
26 HAPI struct conf g_conf = {
33 .minimum_period = 1.0f,
35 .default_conf.script = "edje",
36 .default_conf.abi = "c",
37 .default_conf.pd_group = "disclosure",
38 .default_conf.period = -1.0f,
40 .launch_key.name = "name",
41 .launch_key.secured = "secured",
42 .launch_key.abi = "abi",
44 .default_packet_time = 0.0001f,
49 .default_content = "default",
52 .minimum_space = 5242880,
54 .replace_tag = "/APPID/",
61 .sqlite_flush_max = 1048576,
64 .conf = "/opt/usr/live/%s/etc/%s.conf",
65 .image = "/opt/usr/share/live_magazine/",
66 .slave_log = "/opt/usr/share/live_magazine/log",
67 .script = "/opt/usr/live/%s/res/script/%s.edj",
68 .root = "/opt/usr/live/",
69 .script_port = "/opt/usr/live/script_port/",
70 .db = "/opt/dbspace/.livebox.db",
75 .vconf_sys_cluster = "file/private/org.tizen.data-provider-master/cluster",
76 .max_pended_ctx_events = 256,
79 .provider_method = "pixmap",
81 .overwrite_content = 0,
85 static void conf_update_size(void)
87 ecore_x_window_size_get(0, &g_conf.width, &g_conf.height);
90 static void use_sw_backend_handler(char *buffer)
92 g_conf.use_sw_backend = !strcasecmp(buffer, "true");
93 DbgPrint("SW Backend: %d\n", g_conf.use_sw_backend);
96 static void provider_method_handler(char *buffer)
98 g_conf.provider_method = strdup(buffer);
99 if (!g_conf.provider_method)
100 ErrPrint("Heap: %s\n", strerror(errno));
102 DbgPrint("Method: %s\n", g_conf.provider_method);
105 static void debug_mode_handler(char *buffer)
107 g_conf.debug_mode = !strcasecmp(buffer, "true");
108 DbgPrint("Debug mode: %d\n", g_conf.debug_mode);
111 static void overwrite_content_handler(char *buffer)
113 g_conf.overwrite_content = !strcasecmp(buffer, "true");
114 DbgPrint("Overwrite Content: %d\n", g_conf.overwrite_content);
117 static void com_core_thread_handler(char *buffer)
119 g_conf.com_core_thread = !strcasecmp(buffer, "true");
120 DbgPrint("Com core thread: %d\n", g_conf.com_core_thread);
123 static void base_width_handler(char *buffer)
125 if (sscanf(buffer, "%d", &g_conf.base_width) != 1)
126 ErrPrint("Failed to parse the base_width\n");
128 DbgPrint("Base width: %d\n", g_conf.base_width);
131 static void base_height_handler(char *buffer)
133 if (sscanf(buffer, "%d", &g_conf.base_height) != 1)
134 ErrPrint("Failed to parse the base_height\n");
135 DbgPrint("Base height: %d\n", g_conf.base_height);
138 static void minimum_period_handler(char *buffer)
140 if (sscanf(buffer, "%lf", &g_conf.minimum_period) != 1)
141 ErrPrint("Failed to parse the minimum_period\n");
142 DbgPrint("Minimum period: %lf\n", g_conf.minimum_period);
145 static void script_handler(char *buffer)
147 g_conf.default_conf.script = strdup(buffer);
148 if (!g_conf.default_conf.script)
149 ErrPrint("Heap: %s\n", strerror(errno));
150 DbgPrint("Default script: %s\n", g_conf.default_conf.script);
153 static void default_abi_handler(char *buffer)
155 g_conf.default_conf.abi = strdup(buffer);
156 if (!g_conf.default_conf.abi)
157 ErrPrint("Heap: %s\n", strerror(errno));
158 DbgPrint("Default ABI: %s\n", g_conf.default_conf.abi);
161 static void default_group_handler(char *buffer)
163 g_conf.default_conf.pd_group = strdup(buffer);
164 if (!g_conf.default_conf.pd_group)
165 ErrPrint("Heap: %s\n", strerror(errno));
166 DbgPrint("Default PD Group: %s\n", g_conf.default_conf.pd_group);
169 static void default_period_handler(char *buffer)
171 if (sscanf(buffer, "%lf", &g_conf.default_conf.period) != 1)
172 ErrPrint("Failed to parse the default_period\n");
173 DbgPrint("Default Period: %lf\n", g_conf.default_conf.period);
176 static void default_packet_time_handler(char *buffer)
178 if (sscanf(buffer, "%lf", &g_conf.default_packet_time) != 1)
179 ErrPrint("Failed to parse the default_packet_time\n");
180 DbgPrint("Default packet time: %lf\n", g_conf.default_packet_time);
183 static void default_content_handler(char *buffer)
185 g_conf.default_content = strdup(buffer);
186 if (!g_conf.default_content)
187 ErrPrint("Heap: %s\n", strerror(errno));
188 DbgPrint("Default content: %s\n", g_conf.default_content);
191 static void default_title_handler(char *buffer)
193 g_conf.default_title = strdup(buffer);
194 if (!g_conf.default_title)
195 ErrPrint("Heap: %s\n", strerror(errno));
196 DbgPrint("Default title: %s\n", g_conf.default_title);
199 static void minimum_space_handler(char *buffer)
201 if (sscanf(buffer, "%lu", &g_conf.minimum_space) != 1)
202 ErrPrint("Failed to parse the minimum_space\n");
203 DbgPrint("Minimum space: %lu\n", g_conf.minimum_space);
206 static void replace_tag_handler(char *buffer)
208 g_conf.replace_tag = strdup(buffer);
209 if (!g_conf.replace_tag)
210 ErrPrint("Heap: %s\n", strerror(errno));
211 DbgPrint("Replace Tag: %s\n", g_conf.replace_tag);
214 static void slave_ttl_handler(char *buffer)
216 if (sscanf(buffer, "%lf", &g_conf.slave_ttl) != 1)
217 ErrPrint("Failed to parse the slave_ttl\n");
218 DbgPrint("Slave TTL: %s\n", g_conf.slave_ttl);
221 static void max_log_line_handler(char *buffer)
223 if (sscanf(buffer, "%d", &g_conf.max_log_line) != 1)
224 ErrPrint("Failed to parse the max_log_line\n");
225 DbgPrint("Max log line: %d\n", g_conf.max_log_line);
228 static void max_log_file_handler(char *buffer)
230 if (sscanf(buffer, "%d", &g_conf.max_log_file) != 1)
231 ErrPrint("Failed to parse the max_log_file\n");
232 DbgPrint("Max log file: %d\n", g_conf.max_log_file);
235 static void sqlite_flush_max_handler(char *buffer)
237 if (sscanf(buffer, "%lu", &g_conf.sqlite_flush_max) != 1)
238 ErrPrint("Failed to parse the sqlite_flush_max\n");
239 DbgPrint("Flush size: %lu\n", g_conf.sqlite_flush_max);
242 static void db_path_handler(char *buffer)
244 g_conf.path.db = strdup(buffer);
246 ErrPrint("Heap: %s\n", strerror(errno));
247 DbgPrint("DB Path: %s\n", g_conf.path.db);
250 static void log_path_handler(char *buffer)
252 g_conf.path.slave_log = strdup(buffer);
253 if (!g_conf.path.slave_log)
254 ErrPrint("Heap: %s\n", strerror(errno));
255 DbgPrint("LOG Path: %s\n", g_conf.path.slave_log);
258 static void script_port_path_handler(char *buffer)
260 g_conf.path.script_port = strdup(buffer);
261 if (!g_conf.path.script_port)
262 ErrPrint("Heap: %s\n", strerror(errno));
263 DbgPrint("Script Port PATH: %s\n", g_conf.path.script_port);
266 static void share_path_handler(char *buffer)
268 g_conf.path.image = strdup(buffer);
269 if (!g_conf.path.image)
270 ErrPrint("Heap: %s\n", strerror(errno));
271 DbgPrint("Shared folder: %s\n", g_conf.path.image);
274 static void ping_time_handler(char *buffer)
276 if (sscanf(buffer, "%lf", &g_conf.ping_time) != 1)
277 ErrPrint("Failed to parse the ping_time\n");
278 DbgPrint("Default ping time: %lf\n", g_conf.ping_time);
281 static void slave_max_loader(char *buffer)
283 if (sscanf(buffer, "%d", &g_conf.slave_max_load) != 1)
284 ErrPrint("Failed to parse the slave_max_load\n");
285 DbgPrint("Max load: %d\n", g_conf.slave_max_load);
288 static void vconf_sys_cluster_handler(char *buffer)
290 g_conf.vconf_sys_cluster = strdup(buffer);
291 if (!g_conf.vconf_sys_cluster)
292 ErrPrint("Heap %s\n", strerror(errno));
293 DbgPrint("System cluster vconf key: %s\n", g_conf.vconf_sys_cluster);
296 static void max_pended_ctx_event_handler(char *buffer)
298 if (sscanf(buffer, "%d", &g_conf.max_pended_ctx_events) != 1)
299 ErrPrint("Failed to parse the max_pended_ctx_events\n");
300 DbgPrint("Maximum pended event: %d\n", g_conf.max_pended_ctx_events);
303 HAPI int conf_loader(void)
322 static const struct token_parser {
324 void (*handler)(char *buffer);
325 } token_handler[] = {
327 .name = "base_width",
328 .handler = base_width_handler,
331 .name = "base_height",
332 .handler = base_height_handler,
335 .name = "minimum_period",
336 .handler = minimum_period_handler,
340 .handler = script_handler,
343 .name = "default_abi",
344 .handler = default_abi_handler,
347 .name = "default_group",
348 .handler = default_group_handler,
351 .name = "default_period",
352 .handler = default_period_handler,
355 .name = "default_packet_time",
356 .handler = default_packet_time_handler,
359 .name = "default_content",
360 .handler = default_content_handler,
363 .name = "default_title",
364 .handler = default_title_handler,
367 .name = "minimum_space",
368 .handler = minimum_space_handler,
371 .name = "replace_tag",
372 .handler = replace_tag_handler,
376 .handler = slave_ttl_handler,
379 .name = "max_log_line",
380 .handler = max_log_line_handler,
383 .name = "max_log_file",
384 .handler = max_log_file_handler,
387 .name = "sqilte_flush_max",
388 .handler = sqlite_flush_max_handler,
392 .handler = db_path_handler,
396 .handler = log_path_handler,
399 .name = "share_path",
400 .handler = share_path_handler,
403 .name = "script_port_path",
404 .handler = script_port_path_handler,
407 .name = "ping_interval",
408 .handler = ping_time_handler,
411 .name = "slave_max_load",
412 .handler = slave_max_loader,
415 .name = "vconf_sys_cluster",
416 .handler = vconf_sys_cluster_handler,
419 .name = "max_pended_ctx_event",
420 .handler = max_pended_ctx_event_handler,
423 .name = "use_sw_backend",
424 .handler = use_sw_backend_handler,
427 .name = "provider_method",
428 .handler = provider_method_handler,
431 .name = "debug_mode",
432 .handler = debug_mode_handler,
435 .name = "overwrite_content",
436 .handler = overwrite_content_handler,
439 .name = "com_core_thread",
440 .handler = com_core_thread_handler,
450 fp = fopen("/usr/share/data-provider-master/conf.ini", "rt");
452 ErrPrint("Error: %s\n", strerror(errno));
464 if ((c == EOF) && (state == VALUE)) {
465 LOGD("[%s:%d] VALUE state EOF\n", __func__, __LINE__);
471 if (c == CR || c == LF || c == EOF) {
472 buffer[buffer_idx] = '\0';
478 linelen = -1; /* Will be ZERO by follwing increment code */
481 buffer[buffer_idx++] = c;
482 if (buffer_idx == (sizeof(buffer) - 1)) {
483 buffer[buffer_idx] = '\0';
489 if (linelen == 0 && c == '#') {
491 } else if (isspace(c)) {
492 /* Ignore empty space */
501 else if (!isspace(c))
507 buffer[buffer_idx] = '\0';
509 } else if (buffer_idx != 0) {
510 buffer[buffer_idx++] = c;
511 if (buffer_idx >= sizeof(buffer))
516 } else if (isspace(c)) {
517 if (buffer_idx == 0) {
519 } else if (quote == 1) {
520 buffer[buffer_idx++] = c;
521 if (buffer_idx >= sizeof(buffer))
524 buffer[buffer_idx] = '\0';
529 buffer[buffer_idx++] = c;
530 if (buffer_idx >= sizeof(buffer))
540 } else if (isspace(c)) {
544 if (token_handler[token_idx].name[ch_idx] != '\0')
550 /* Now start to find a token! */
554 if (token_handler[token_idx].name[ch_idx] == c) {
559 ungetc(token_handler[token_idx].name[ch_idx], fp);
563 if (token_handler[token_idx].name == NULL)
571 if (c == CR || c == LF || c == EOF) {
581 if (c == LF || c == CR || c == EOF) {
584 if (token_idx >= 0 && token_handler[token_idx].handler) {
585 buffer[buffer_idx] = '\0';
586 DbgPrint("BUFFER: [%s]\n", buffer);
587 token_handler[token_idx].handler(buffer);
596 } else if (isspace(c)) {