2 * Copyright 2013 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (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://floralicense.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.
21 #include <livebox-errno.h>
27 HAPI struct conf g_conf = {
34 .minimum_period = 1.0f,
36 .default_conf.script = "edje",
37 .default_conf.abi = "c",
38 .default_conf.pd_group = "disclosure",
39 .default_conf.period = -1.0f,
41 .launch_key.name = "name",
42 .launch_key.secured = "secured",
43 .launch_key.abi = "abi",
45 .default_packet_time = 0.0001f,
50 .default_content = "default",
53 .minimum_space = 5242880,
55 .replace_tag = "/APPID/",
58 .slave_activate_time = 30.0f,
63 .sqlite_flush_max = 1048576,
66 .conf = "/opt/usr/live/%s/etc/%s.conf",
67 .image = "/opt/usr/share/live_magazine/",
68 .slave_log = "/opt/usr/share/live_magazine/log",
69 .reader = "/opt/usr/share/live_magazine/reader",
70 .always = "/opt/usr/share/live_magazine/always",
71 .script = "/opt/usr/live/%s/res/script/%s.edj",
72 .root = "/opt/usr/live/",
73 .script_port = "/usr/share/data-provider-master/plugin-script/",
74 .db = "/opt/dbspace/.livebox.db",
75 .input = "/dev/input/event1",
82 .provider_method = "pixmap",
84 .overwrite_content = 0,
88 .scale_width_factor = 1.0f,
89 .scale_height_factor = 1.0f,
90 .pd_request_timeout = 5.0f,
93 static void conf_update_size(void)
95 ecore_x_window_size_get(0, &g_conf.width, &g_conf.height);
96 g_conf.scale_width_factor = (double)g_conf.width / (double)BASE_W;
97 g_conf.scale_height_factor = (double)g_conf.height / (double)BASE_H;
100 static void use_xmonitor(char *buffer)
102 g_conf.use_xmonitor = !strcasecmp(buffer, "true");
103 DbgPrint("Use xmonitor: %d\n", g_conf.use_xmonitor);
106 static void use_sw_backend_handler(char *buffer)
108 g_conf.use_sw_backend = !strcasecmp(buffer, "true");
109 DbgPrint("SW Backend: %d\n", g_conf.use_sw_backend);
112 static void provider_method_handler(char *buffer)
114 g_conf.provider_method = strdup(buffer);
115 if (!g_conf.provider_method)
116 ErrPrint("Heap: %s\n", strerror(errno));
118 DbgPrint("Method: %s\n", g_conf.provider_method);
121 static void debug_mode_handler(char *buffer)
123 g_conf.debug_mode = !strcasecmp(buffer, "true");
124 DbgPrint("Debug mode: %d\n", g_conf.debug_mode);
127 static void overwrite_content_handler(char *buffer)
129 g_conf.overwrite_content = !strcasecmp(buffer, "true");
130 DbgPrint("Overwrite Content: %d\n", g_conf.overwrite_content);
133 static void com_core_thread_handler(char *buffer)
135 g_conf.com_core_thread = !strcasecmp(buffer, "true");
136 DbgPrint("Com core thread: %d\n", g_conf.com_core_thread);
139 static void base_width_handler(char *buffer)
141 if (sscanf(buffer, "%d", &g_conf.base_width) != 1)
142 ErrPrint("Failed to parse the base_width\n");
144 DbgPrint("Base width: %d\n", g_conf.base_width);
147 static void base_height_handler(char *buffer)
149 if (sscanf(buffer, "%d", &g_conf.base_height) != 1)
150 ErrPrint("Failed to parse the base_height\n");
151 DbgPrint("Base height: %d\n", g_conf.base_height);
154 static void minimum_period_handler(char *buffer)
156 if (sscanf(buffer, "%lf", &g_conf.minimum_period) != 1)
157 ErrPrint("Failed to parse the minimum_period\n");
158 DbgPrint("Minimum period: %lf\n", g_conf.minimum_period);
161 static void script_handler(char *buffer)
163 g_conf.default_conf.script = strdup(buffer);
164 if (!g_conf.default_conf.script)
165 ErrPrint("Heap: %s\n", strerror(errno));
166 DbgPrint("Default script: %s\n", g_conf.default_conf.script);
169 static void default_abi_handler(char *buffer)
171 g_conf.default_conf.abi = strdup(buffer);
172 if (!g_conf.default_conf.abi)
173 ErrPrint("Heap: %s\n", strerror(errno));
174 DbgPrint("Default ABI: %s\n", g_conf.default_conf.abi);
177 static void default_group_handler(char *buffer)
179 g_conf.default_conf.pd_group = strdup(buffer);
180 if (!g_conf.default_conf.pd_group)
181 ErrPrint("Heap: %s\n", strerror(errno));
182 DbgPrint("Default PD Group: %s\n", g_conf.default_conf.pd_group);
185 static void default_period_handler(char *buffer)
187 if (sscanf(buffer, "%lf", &g_conf.default_conf.period) != 1)
188 ErrPrint("Failed to parse the default_period\n");
189 DbgPrint("Default Period: %lf\n", g_conf.default_conf.period);
192 static void default_packet_time_handler(char *buffer)
194 if (sscanf(buffer, "%lf", &g_conf.default_packet_time) != 1)
195 ErrPrint("Failed to parse the default_packet_time\n");
196 DbgPrint("Default packet time: %lf\n", g_conf.default_packet_time);
199 static void default_content_handler(char *buffer)
201 g_conf.default_content = strdup(buffer);
202 if (!g_conf.default_content)
203 ErrPrint("Heap: %s\n", strerror(errno));
204 DbgPrint("Default content: %s\n", g_conf.default_content);
207 static void default_title_handler(char *buffer)
209 g_conf.default_title = strdup(buffer);
210 if (!g_conf.default_title)
211 ErrPrint("Heap: %s\n", strerror(errno));
212 DbgPrint("Default title: %s\n", g_conf.default_title);
215 static void minimum_space_handler(char *buffer)
217 if (sscanf(buffer, "%lu", &g_conf.minimum_space) != 1)
218 ErrPrint("Failed to parse the minimum_space\n");
219 DbgPrint("Minimum space: %lu\n", g_conf.minimum_space);
222 static void replace_tag_handler(char *buffer)
224 g_conf.replace_tag = strdup(buffer);
225 if (!g_conf.replace_tag)
226 ErrPrint("Heap: %s\n", strerror(errno));
227 DbgPrint("Replace Tag: %s\n", g_conf.replace_tag);
230 static void slave_ttl_handler(char *buffer)
232 if (sscanf(buffer, "%lf", &g_conf.slave_ttl) != 1)
233 ErrPrint("Failed to parse the slave_ttl\n");
234 DbgPrint("Slave TTL: %lf\n", g_conf.slave_ttl);
237 static void slave_activate_time_handler(char *buffer)
239 if (sscanf(buffer, "%lf", &g_conf.slave_activate_time) != 1)
240 ErrPrint("Failed to parse the slave_activate_time\n");
241 DbgPrint("Slave activate time: %lf\n", g_conf.slave_activate_time);
244 static void max_log_line_handler(char *buffer)
246 if (sscanf(buffer, "%d", &g_conf.max_log_line) != 1)
247 ErrPrint("Failed to parse the max_log_line\n");
248 DbgPrint("Max log line: %d\n", g_conf.max_log_line);
251 static void max_log_file_handler(char *buffer)
253 if (sscanf(buffer, "%d", &g_conf.max_log_file) != 1)
254 ErrPrint("Failed to parse the max_log_file\n");
255 DbgPrint("Max log file: %d\n", g_conf.max_log_file);
258 static void sqlite_flush_max_handler(char *buffer)
260 if (sscanf(buffer, "%lu", &g_conf.sqlite_flush_max) != 1)
261 ErrPrint("Failed to parse the sqlite_flush_max\n");
262 DbgPrint("Flush size: %lu\n", g_conf.sqlite_flush_max);
265 static void db_path_handler(char *buffer)
267 g_conf.path.db = strdup(buffer);
269 ErrPrint("Heap: %s\n", strerror(errno));
270 DbgPrint("DB Path: %s\n", g_conf.path.db);
273 static void reader_path_handler(char *buffer)
275 g_conf.path.reader = strdup(buffer);
276 if (!g_conf.path.reader)
277 ErrPrint("Heap: %s\n", strerror(errno));
278 DbgPrint("Reader Path: %s\n", g_conf.path.reader);
281 static void always_path_handler(char *buffer)
283 g_conf.path.always = strdup(buffer);
284 if (!g_conf.path.always)
285 ErrPrint("Heap: %s\n", strerror(errno));
286 DbgPrint("Always Path: %s\n", g_conf.path.always);
289 static void log_path_handler(char *buffer)
291 g_conf.path.slave_log = strdup(buffer);
292 if (!g_conf.path.slave_log)
293 ErrPrint("Heap: %s\n", strerror(errno));
294 DbgPrint("LOG Path: %s\n", g_conf.path.slave_log);
297 static void script_port_path_handler(char *buffer)
299 g_conf.path.script_port = strdup(buffer);
300 if (!g_conf.path.script_port)
301 ErrPrint("Heap: %s\n", strerror(errno));
302 DbgPrint("Script Port PATH: %s\n", g_conf.path.script_port);
305 static void share_path_handler(char *buffer)
307 g_conf.path.image = strdup(buffer);
308 if (!g_conf.path.image)
309 ErrPrint("Heap: %s\n", strerror(errno));
310 DbgPrint("Shared folder: %s\n", g_conf.path.image);
313 static void input_path_handler(char *buffer)
315 g_conf.path.input = strdup(buffer);
316 if (!g_conf.path.input)
317 ErrPrint("Heap: %s\n", strerror(errno));
318 DbgPrint("Input device: %s\n", g_conf.path.input);
321 static void ping_time_handler(char *buffer)
323 if (sscanf(buffer, "%lf", &g_conf.ping_time) != 1)
324 ErrPrint("Failed to parse the ping_time\n");
325 DbgPrint("Default ping time: %lf\n", g_conf.ping_time);
328 static void slave_max_loader(char *buffer)
330 if (sscanf(buffer, "%d", &g_conf.slave_max_load) != 1)
331 ErrPrint("Failed to parse the slave_max_load\n");
332 DbgPrint("Max load: %d\n", g_conf.slave_max_load);
335 static void pd_request_timeout_handler(char *buffer)
337 if (sscanf(buffer, "%lf", &g_conf.pd_request_timeout) != 1)
338 ErrPrint("Failed to parse the request_timeout\n");
339 DbgPrint("Default PD request timeout: %lf\n", g_conf.pd_request_timeout);
342 HAPI int conf_loader(void)
361 static const struct token_parser {
363 void (*handler)(char *buffer);
364 } token_handler[] = {
366 .name = "base_width",
367 .handler = base_width_handler,
370 .name = "base_height",
371 .handler = base_height_handler,
374 .name = "minimum_period",
375 .handler = minimum_period_handler,
379 .handler = script_handler,
382 .name = "default_abi",
383 .handler = default_abi_handler,
386 .name = "default_group",
387 .handler = default_group_handler,
390 .name = "default_period",
391 .handler = default_period_handler,
394 .name = "default_packet_time",
395 .handler = default_packet_time_handler,
398 .name = "default_content",
399 .handler = default_content_handler,
402 .name = "default_title",
403 .handler = default_title_handler,
406 .name = "minimum_space",
407 .handler = minimum_space_handler,
410 .name = "replace_tag",
411 .handler = replace_tag_handler,
415 .handler = slave_ttl_handler,
418 .name = "slave_activate_time",
419 .handler = slave_activate_time_handler,
422 .name = "max_log_line",
423 .handler = max_log_line_handler,
426 .name = "max_log_file",
427 .handler = max_log_file_handler,
430 .name = "sqilte_flush_max",
431 .handler = sqlite_flush_max_handler,
435 .handler = db_path_handler,
439 .handler = log_path_handler,
442 .name = "reader_path",
443 .handler = reader_path_handler,
446 .name = "always_path",
447 .handler = always_path_handler,
450 .name = "share_path",
451 .handler = share_path_handler,
454 .name = "script_port_path",
455 .handler = script_port_path_handler,
458 .name = "ping_interval",
459 .handler = ping_time_handler,
462 .name = "slave_max_load",
463 .handler = slave_max_loader,
466 .name = "use_sw_backend",
467 .handler = use_sw_backend_handler,
470 .name = "use_xmonitor",
471 .handler = use_xmonitor,
474 .name = "provider_method",
475 .handler = provider_method_handler,
478 .name = "debug_mode",
479 .handler = debug_mode_handler,
482 .name = "overwrite_content",
483 .handler = overwrite_content_handler,
486 .name = "com_core_thread",
487 .handler = com_core_thread_handler,
491 .handler = input_path_handler,
494 .name = "pd_request_timeout",
495 .handler = pd_request_timeout_handler,
505 fp = fopen("/usr/share/data-provider-master/conf.ini", "rt");
507 ErrPrint("Error: %s\n", strerror(errno));
508 return LB_STATUS_ERROR_IO;
519 if ((c == EOF) && (state == VALUE)) {
520 DbgPrint("[%s:%d] VALUE state EOF\n", __func__, __LINE__);
526 if (c == CR || c == LF || c == EOF) {
527 buffer[buffer_idx] = '\0';
533 linelen = -1; /* Will be ZERO by follwing increment code */
536 buffer[buffer_idx++] = c;
537 if (buffer_idx == (sizeof(buffer) - 1)) {
538 buffer[buffer_idx] = '\0';
544 if (linelen == 0 && c == '#') {
546 } else if (isspace(c)) {
547 /* Ignore empty space */
556 else if (!isspace(c))
562 buffer[buffer_idx] = '\0';
564 } else if (buffer_idx != 0) {
565 buffer[buffer_idx++] = c;
566 if (buffer_idx >= sizeof(buffer))
571 } else if (isspace(c)) {
572 if (buffer_idx == 0) {
574 } else if (quote == 1) {
575 buffer[buffer_idx++] = c;
576 if (buffer_idx >= sizeof(buffer))
579 buffer[buffer_idx] = '\0';
584 buffer[buffer_idx++] = c;
585 if (buffer_idx >= sizeof(buffer))
595 } else if (isspace(c)) {
599 if (token_handler[token_idx].name[ch_idx] != '\0')
605 /* Now start to find a token! */
609 if (token_handler[token_idx].name[ch_idx] == c) {
614 ungetc(token_handler[token_idx].name[ch_idx], fp);
618 if (token_handler[token_idx].name == NULL)
626 if (c == CR || c == LF || c == EOF) {
636 if (c == LF || c == CR || c == EOF) {
639 if (token_idx >= 0 && token_handler[token_idx].handler) {
640 buffer[buffer_idx] = '\0';
641 DbgPrint("BUFFER: [%s]\n", buffer);
642 token_handler[token_idx].handler(buffer);
651 } else if (isspace(c)) {
666 ErrPrint("fclose: %s\n", strerror(errno));
667 return LB_STATUS_SUCCESS;