|
23 | 23 | #include <stdio.h>
|
24 | 24 | #include <glib.h>
|
25 | 25 | #include <libsoup/soup.h>
|
| 26 | +#include <json-c/json.h> |
| 27 | +#include <json-c/json_object.h> |
| 28 | +#include <json-c/json_object_iterator.h> |
26 | 29 |
|
27 | 30 | #include "gdial-config.h"
|
28 | 31 | #include "gdial-debug.h"
|
@@ -186,7 +189,20 @@ static void gdial_quit_thread(int signum)
|
186 | 189 | usleep(50000); //Sleeping 50 ms to allow existing request to finish processing.
|
187 | 190 | g_print(" calling g_main_loop_quit loop_: %p \r\n",loop_);
|
188 | 191 | if(loop_)g_main_loop_quit(loop_);
|
| 192 | +} |
189 | 193 |
|
| 194 | +static char* get_app_name(const char *config_name) |
| 195 | +{ |
| 196 | + static int prefix_len = strlen("/apps/"); |
| 197 | + static int suffix_len = strlen("/dial_data"); |
| 198 | + |
| 199 | + int size = strlen(config_name); |
| 200 | + int app_name_size = size - (prefix_len + suffix_len); |
| 201 | + char *app_name = malloc(app_name_size + 1); |
| 202 | + strncpy(app_name, config_name + prefix_len, app_name_size); |
| 203 | + app_name[app_name_size] = '\0'; |
| 204 | + |
| 205 | + return app_name; |
190 | 206 | }
|
191 | 207 |
|
192 | 208 | int main(int argc, char *argv[]) {
|
@@ -285,89 +301,36 @@ int main(int argc, char *argv[]) {
|
285 | 301 | }
|
286 | 302 | else {
|
287 | 303 | g_print("app_list to be enabled from command line %s\r\n", options_.app_list);
|
288 |
| - size_t app_list_len = strlen(options_.app_list); |
289 |
| - gchar *app_list_low = g_ascii_strdown(options_.app_list, app_list_len); |
290 |
| - if (g_strstr_len(app_list_low, app_list_len, "netflix")) { |
291 |
| - g_print("netflix is enabled from cmdline\r\n"); |
292 |
| - GList *allowed_origins = g_list_prepend(NULL, ".netflix.com"); |
293 |
| - gdial_rest_server_register_app(dial_rest_server, "Netflix", NULL, NULL, TRUE, TRUE, allowed_origins); |
294 |
| - g_list_free(allowed_origins); |
295 |
| - } |
296 |
| - else { |
297 |
| - g_print("netflix is not enabled from cmdline\r\n"); |
298 |
| - } |
299 | 304 |
|
300 |
| - if (g_strstr_len(app_list_low, app_list_len, "youtube")) { |
301 |
| - g_print("youtube is enabled from cmdline\r\n"); |
302 |
| - GList *allowed_origins = g_list_prepend(NULL, ".youtube.com"); |
303 |
| - gdial_rest_server_register_app(dial_rest_server, "YouTube", NULL, NULL, TRUE, TRUE, allowed_origins); |
304 |
| - g_list_free(allowed_origins); |
305 |
| - } |
306 |
| - else { |
307 |
| - g_print("youtube is not enabled from cmdline\r\n"); |
308 |
| - } |
| 305 | + struct json_object *root = json_tokener_parse(options_.app_list); |
| 306 | + struct json_object_iterator it = json_object_iter_begin(root); |
| 307 | + struct json_object_iterator it_end = json_object_iter_end(root); |
309 | 308 |
|
310 |
| - if (g_strstr_len(app_list_low, app_list_len, "youtubetv")) { |
311 |
| - g_print("youtubetv is enabled from cmdline\r\n"); |
312 |
| - GList *allowed_origins = g_list_prepend(NULL, ".youtube.com"); |
313 |
| - gdial_rest_server_register_app(dial_rest_server, "YouTubeTV", NULL, NULL, TRUE, TRUE, allowed_origins); |
314 |
| - g_list_free(allowed_origins); |
315 |
| - } |
316 |
| - else { |
317 |
| - g_print("youtubetv is not enabled from cmdline\r\n"); |
318 |
| - } |
| 309 | + while (!json_object_iter_equal(&it, &it_end)) { |
| 310 | + const char *config_name = json_object_iter_peek_name(&it); |
| 311 | + const char *app_name = get_app_name(config_name); |
| 312 | + g_print("%s is enabled from cmdline\r\n", app_name); |
319 | 313 |
|
320 |
| - if (g_strstr_len(app_list_low, app_list_len, "youtubekids")) { |
321 |
| - g_print("youtubekids is enabled from cmdline\r\n"); |
322 |
| - GList *allowed_origins = g_list_prepend(NULL, ".youtube.com"); |
323 |
| - gdial_rest_server_register_app(dial_rest_server, "YouTubeKids", NULL, NULL, TRUE, TRUE, allowed_origins); |
324 |
| - g_list_free(allowed_origins); |
325 |
| - } |
326 |
| - else { |
327 |
| - g_print("youtubekids is not enabled from cmdline\r\n"); |
328 |
| - } |
| 314 | + struct json_object *origins = json_object_iter_peek_value(&it); |
| 315 | + int arraylen = json_object_array_length(origins); |
329 | 316 |
|
330 |
| - if (g_strstr_len(app_list_low, app_list_len, "amazoninstantvideo")) { |
331 |
| - g_print("AmazonInstantVideo is enabled from cmdline\r\n"); |
332 |
| - GList *allowed_origins = g_list_prepend(NULL, ".amazonprime.com"); |
333 |
| - gdial_rest_server_register_app(dial_rest_server, "AmazonInstantVideo", NULL, NULL, TRUE, TRUE, allowed_origins); |
334 |
| - g_list_free(allowed_origins); |
335 |
| - } |
336 |
| - else { |
337 |
| - g_print("AmazonInstantVideo is not enabled from cmdline\r\n"); |
338 |
| - } |
| 317 | + GList *allowed_origins = NULL; |
| 318 | + for (int i = 0; i < arraylen; i++) { |
| 319 | + struct json_object *origin = json_object_array_get_idx(origins, i); |
| 320 | + char *origin_value = g_strdup(json_object_get_string(origin)); |
| 321 | + g_print("\t origin %s\r\n", origin_value); |
339 | 322 |
|
340 |
| - if (g_strstr_len(app_list_low, app_list_len, "spotify")) { |
341 |
| - g_print("spotify is enabled from cmdline\r\n"); |
342 |
| - GList *app_prefixes= g_list_prepend(NULL, "com.spotify"); |
343 |
| - GList *allowed_origins = g_list_prepend(NULL, ".spotify.com"); |
344 |
| - gdial_rest_server_register_app(dial_rest_server, "com.spotify.Spotify.TV", app_prefixes, NULL, TRUE, TRUE, allowed_origins); |
345 |
| - g_list_free(allowed_origins); |
346 |
| - g_list_free(app_prefixes); |
347 |
| - } |
348 |
| - else { |
349 |
| - g_print("spotify is not enabled from cmdline\r\n"); |
350 |
| - } |
| 323 | + allowed_origins = g_list_prepend(allowed_origins, origin_value); |
| 324 | + } |
351 | 325 |
|
352 |
| - if (g_strstr_len(app_list_low, app_list_len, "pairing")) { |
353 |
| - g_print("pairing is enabled from cmdline\r\n"); |
354 |
| - GList *allowed_origins = g_list_prepend(NULL, ".comcast.com"); |
355 |
| - gdial_rest_server_register_app(dial_rest_server, "Pairing", NULL, NULL, TRUE, TRUE, allowed_origins); |
356 |
| - g_list_free(allowed_origins); |
357 |
| - } |
358 |
| - else { |
359 |
| - g_print("pairing is not enabled from cmdline\r\n"); |
360 |
| - } |
| 326 | + gdial_rest_server_register_app(dial_rest_server, app_name, NULL, NULL, TRUE, TRUE, allowed_origins); |
| 327 | + g_list_free_full(allowed_origins, g_free); |
| 328 | + free(app_name); |
361 | 329 |
|
362 |
| - if (g_strstr_len(app_list_low, app_list_len, "system")) { |
363 |
| - g_print("system is enabled from cmdline\r\n"); |
364 |
| - gdial_rest_server_register_app(dial_rest_server, "system", NULL, NULL, TRUE, TRUE, NULL); |
365 |
| - } |
366 |
| - else { |
367 |
| - g_print("system is not enabled from cmdline\r\n"); |
| 330 | + json_object_iter_next(&it); |
368 | 331 | }
|
369 | 332 |
|
370 |
| - g_free(app_list_low); |
| 333 | + json_object_put(root); |
371 | 334 | }
|
372 | 335 |
|
373 | 336 | g_signal_connect(dial_rest_server, "invalid-uri", G_CALLBACK(signal_handler_rest_server_invalid_uri), NULL);
|
|
0 commit comments