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/",
57 .slave_activate_time = 30.0f,
62 .sqlite_flush_max = 1048576,
65 .conf = "/opt/usr/live/%s/etc/%s.conf",
66 .image = "/opt/usr/share/live_magazine/",
67 .slave_log = "/opt/usr/share/live_magazine/log",
68 .reader = "/opt/usr/share/live_magazine/reader",
69 .always = "/opt/usr/share/live_magazine/always",
70 .script = "/opt/usr/live/%s/res/script/%s.edj",
71 .root = "/opt/usr/live/",
72 .script_port = "/usr/share/data-provider-master/plugin-script/",
73 .db = "/opt/dbspace/.livebox.db",
80 .provider_method = "pixmap",
82 .overwrite_content = 0,
86 .scale_width_factor = 1.0f,
87 .scale_height_factor = 1.0f,
90 static void conf_update_size(void)
92 ecore_x_window_size_get(0, &g_conf.width, &g_conf.height);
93 g_conf.scale_width_factor = (double)g_conf.width / (double)BASE_W;
94 g_conf.scale_height_factor = (double)g_conf.height / (double)BASE_H;
97 static void use_xmonitor(char *buffer)
99 g_conf.use_xmonitor = !strcasecmp(buffer, "true");
100 DbgPrint("Use xmonitor: %d\n", g_conf.use_xmonitor);
103 static void use_sw_backend_handler(char *buffer)
105 g_conf.use_sw_backend = !strcasecmp(buffer, "true");
106 DbgPrint("SW Backend: %d\n", g_conf.use_sw_backend);
109 static void provider_method_handler(char *buffer)
111 g_conf.provider_method = strdup(buffer);
112 if (!g_conf.provider_method)
113 ErrPrint("Heap: %s\n", strerror(errno));
115 DbgPrint("Method: %s\n", g_conf.provider_method);
118 static void debug_mode_handler(char *buffer)
120 g_conf.debug_mode = !strcasecmp(buffer, "true");
121 DbgPrint("Debug mode: %d\n", g_conf.debug_mode);
124 static void overwrite_content_handler(char *buffer)
126 g_conf.overwrite_content = !strcasecmp(buffer, "true");
127 DbgPrint("Overwrite Content: %d\n", g_conf.overwrite_content);
130 static void com_core_thread_handler(char *buffer)
132 g_conf.com_core_thread = !strcasecmp(buffer, "true");
133 DbgPrint("Com core thread: %d\n", g_conf.com_core_thread);
136 static void base_width_handler(char *buffer)
138 if (sscanf(buffer, "%d", &g_conf.base_width) != 1)
139 ErrPrint("Failed to parse the base_width\n");
141 DbgPrint("Base width: %d\n", g_conf.base_width);
144 static void base_height_handler(char *buffer)
146 if (sscanf(buffer, "%d", &g_conf.base_height) != 1)
147 ErrPrint("Failed to parse the base_height\n");
148 DbgPrint("Base height: %d\n", g_conf.base_height);
151 static void minimum_period_handler(char *buffer)
153 if (sscanf(buffer, "%lf", &g_conf.minimum_period) != 1)
154 ErrPrint("Failed to parse the minimum_period\n");
155 DbgPrint("Minimum period: %lf\n", g_conf.minimum_period);
158 static void script_handler(char *buffer)
160 g_conf.default_conf.script = strdup(buffer);
161 if (!g_conf.default_conf.script)
162 ErrPrint("Heap: %s\n", strerror(errno));
163 DbgPrint("Default script: %s\n", g_conf.default_conf.script);
166 static void default_abi_handler(char *buffer)
168 g_conf.default_conf.abi = strdup(buffer);
169 if (!g_conf.default_conf.abi)
170 ErrPrint("Heap: %s\n", strerror(errno));
171 DbgPrint("Default ABI: %s\n", g_conf.default_conf.abi);
174 static void default_group_handler(char *buffer)
176 g_conf.default_conf.pd_group = strdup(buffer);
177 if (!g_conf.default_conf.pd_group)
178 ErrPrint("Heap: %s\n", strerror(errno));
179 DbgPrint("Default PD Group: %s\n", g_conf.default_conf.pd_group);
182 static void default_period_handler(char *buffer)
184 if (sscanf(buffer, "%lf", &g_conf.default_conf.period) != 1)
185 ErrPrint("Failed to parse the default_period\n");
186 DbgPrint("Default Period: %lf\n", g_conf.default_conf.period);
189 static void default_packet_time_handler(char *buffer)
191 if (sscanf(buffer, "%lf", &g_conf.default_packet_time) != 1)
192 ErrPrint("Failed to parse the default_packet_time\n");
193 DbgPrint("Default packet time: %lf\n", g_conf.default_packet_time);
196 static void default_content_handler(char *buffer)
198 g_conf.default_content = strdup(buffer);
199 if (!g_conf.default_content)
200 ErrPrint("Heap: %s\n", strerror(errno));
201 DbgPrint("Default content: %s\n", g_conf.default_content);
204 static void default_title_handler(char *buffer)
206 g_conf.default_title = strdup(buffer);
207 if (!g_conf.default_title)
208 ErrPrint("Heap: %s\n", strerror(errno));
209 DbgPrint("Default title: %s\n", g_conf.default_title);
212 static void minimum_space_handler(char *buffer)
214 if (sscanf(buffer, "%lu", &g_conf.minimum_space) != 1)
215 ErrPrint("Failed to parse the minimum_space\n");
216 DbgPrint("Minimum space: %lu\n", g_conf.minimum_space);
219 static void replace_tag_handler(char *buffer)
221 g_conf.replace_tag = strdup(buffer);
222 if (!g_conf.replace_tag)
223 ErrPrint("Heap: %s\n", strerror(errno));
224 DbgPrint("Replace Tag: %s\n", g_conf.replace_tag);
227 static void slave_ttl_handler(char *buffer)
229 if (sscanf(buffer, "%lf", &g_conf.slave_ttl) != 1)
230 ErrPrint("Failed to parse the slave_ttl\n");
231 DbgPrint("Slave TTL: %lf\n", g_conf.slave_ttl);
234 static void slave_activate_time_handler(char *buffer)
236 if (sscanf(buffer, "%lf", &g_conf.slave_activate_time) != 1)
237 ErrPrint("Failed to parse the slave_activate_time\n");
238 DbgPrint("Slave activate time: %lf\n", g_conf.slave_activate_time);
241 static void max_log_line_handler(char *buffer)
243 if (sscanf(buffer, "%d", &g_conf.max_log_line) != 1)
244 ErrPrint("Failed to parse the max_log_line\n");
245 DbgPrint("Max log line: %d\n", g_conf.max_log_line);
248 static void max_log_file_handler(char *buffer)
250 if (sscanf(buffer, "%d", &g_conf.max_log_file) != 1)
251 ErrPrint("Failed to parse the max_log_file\n");
252 DbgPrint("Max log file: %d\n", g_conf.max_log_file);
255 static void sqlite_flush_max_handler(char *buffer)
257 if (sscanf(buffer, "%lu", &g_conf.sqlite_flush_max) != 1)
258 ErrPrint("Failed to parse the sqlite_flush_max\n");
259 DbgPrint("Flush size: %lu\n", g_conf.sqlite_flush_max);
262 static void db_path_handler(char *buffer)
264 g_conf.path.db = strdup(buffer);
266 ErrPrint("Heap: %s\n", strerror(errno));
267 DbgPrint("DB Path: %s\n", g_conf.path.db);
270 static void reader_path_handler(char *buffer)
272 g_conf.path.reader = strdup(buffer);
273 if (!g_conf.path.reader)
274 ErrPrint("Heap: %s\n", strerror(errno));
275 DbgPrint("Reader Path: %s\n", g_conf.path.reader);
278 static void always_path_handler(char *buffer)
280 g_conf.path.always = strdup(buffer);
281 if (!g_conf.path.always)
282 ErrPrint("Heap: %s\n", strerror(errno));
283 DbgPrint("Always Path: %s\n", g_conf.path.always);
286 static void log_path_handler(char *buffer)
288 g_conf.path.slave_log = strdup(buffer);
289 if (!g_conf.path.slave_log)
290 ErrPrint("Heap: %s\n", strerror(errno));
291 DbgPrint("LOG Path: %s\n", g_conf.path.slave_log);
294 static void script_port_path_handler(char *buffer)
296 g_conf.path.script_port = strdup(buffer);
297 if (!g_conf.path.script_port)
298 ErrPrint("Heap: %s\n", strerror(errno));
299 DbgPrint("Script Port PATH: %s\n", g_conf.path.script_port);
302 static void share_path_handler(char *buffer)
304 g_conf.path.image = strdup(buffer);
305 if (!g_conf.path.image)
306 ErrPrint("Heap: %s\n", strerror(errno));
307 DbgPrint("Shared folder: %s\n", g_conf.path.image);
310 static void ping_time_handler(char *buffer)
312 if (sscanf(buffer, "%lf", &g_conf.ping_time) != 1)
313 ErrPrint("Failed to parse the ping_time\n");
314 DbgPrint("Default ping time: %lf\n", g_conf.ping_time);
317 static void slave_max_loader(char *buffer)
319 if (sscanf(buffer, "%d", &g_conf.slave_max_load) != 1)
320 ErrPrint("Failed to parse the slave_max_load\n");
321 DbgPrint("Max load: %d\n", g_conf.slave_max_load);
324 HAPI int conf_loader(void)
343 static const struct token_parser {
345 void (*handler)(char *buffer);
346 } token_handler[] = {
348 .name = "base_width",
349 .handler = base_width_handler,
352 .name = "base_height",
353 .handler = base_height_handler,
356 .name = "minimum_period",
357 .handler = minimum_period_handler,
361 .handler = script_handler,
364 .name = "default_abi",
365 .handler = default_abi_handler,
368 .name = "default_group",
369 .handler = default_group_handler,
372 .name = "default_period",
373 .handler = default_period_handler,
376 .name = "default_packet_time",
377 .handler = default_packet_time_handler,
380 .name = "default_content",
381 .handler = default_content_handler,
384 .name = "default_title",
385 .handler = default_title_handler,
388 .name = "minimum_space",
389 .handler = minimum_space_handler,
392 .name = "replace_tag",
393 .handler = replace_tag_handler,
397 .handler = slave_ttl_handler,
400 .name = "slave_activate_time",
401 .handler = slave_activate_time_handler,
404 .name = "max_log_line",
405 .handler = max_log_line_handler,
408 .name = "max_log_file",
409 .handler = max_log_file_handler,
412 .name = "sqilte_flush_max",
413 .handler = sqlite_flush_max_handler,
417 .handler = db_path_handler,
421 .handler = log_path_handler,
424 .name = "reader_path",
425 .handler = reader_path_handler,
428 .name = "always_path",
429 .handler = always_path_handler,
432 .name = "share_path",
433 .handler = share_path_handler,
436 .name = "script_port_path",
437 .handler = script_port_path_handler,
440 .name = "ping_interval",
441 .handler = ping_time_handler,
444 .name = "slave_max_load",
445 .handler = slave_max_loader,
448 .name = "use_sw_backend",
449 .handler = use_sw_backend_handler,
452 .name = "use_xmonitor",
453 .handler = use_xmonitor,
456 .name = "provider_method",
457 .handler = provider_method_handler,
460 .name = "debug_mode",
461 .handler = debug_mode_handler,
464 .name = "overwrite_content",
465 .handler = overwrite_content_handler,
468 .name = "com_core_thread",
469 .handler = com_core_thread_handler,
479 fp = fopen("/usr/share/data-provider-master/conf.ini", "rt");
481 ErrPrint("Error: %s\n", strerror(errno));
493 if ((c == EOF) && (state == VALUE)) {
494 LOGD("[%s:%d] VALUE state EOF\n", __func__, __LINE__);
500 if (c == CR || c == LF || c == EOF) {
501 buffer[buffer_idx] = '\0';
507 linelen = -1; /* Will be ZERO by follwing increment code */
510 buffer[buffer_idx++] = c;
511 if (buffer_idx == (sizeof(buffer) - 1)) {
512 buffer[buffer_idx] = '\0';
518 if (linelen == 0 && c == '#') {
520 } else if (isspace(c)) {
521 /* Ignore empty space */
530 else if (!isspace(c))
536 buffer[buffer_idx] = '\0';
538 } else if (buffer_idx != 0) {
539 buffer[buffer_idx++] = c;
540 if (buffer_idx >= sizeof(buffer))
545 } else if (isspace(c)) {
546 if (buffer_idx == 0) {
548 } else if (quote == 1) {
549 buffer[buffer_idx++] = c;
550 if (buffer_idx >= sizeof(buffer))
553 buffer[buffer_idx] = '\0';
558 buffer[buffer_idx++] = c;
559 if (buffer_idx >= sizeof(buffer))
569 } else if (isspace(c)) {
573 if (token_handler[token_idx].name[ch_idx] != '\0')
579 /* Now start to find a token! */
583 if (token_handler[token_idx].name[ch_idx] == c) {
588 ungetc(token_handler[token_idx].name[ch_idx], fp);
592 if (token_handler[token_idx].name == NULL)
600 if (c == CR || c == LF || c == EOF) {
610 if (c == LF || c == CR || c == EOF) {
613 if (token_idx >= 0 && token_handler[token_idx].handler) {
614 buffer[buffer_idx] = '\0';
615 DbgPrint("BUFFER: [%s]\n", buffer);
616 token_handler[token_idx].handler(buffer);
625 } else if (isspace(c)) {