From 503a8982d87596b965de0f3b05f534f6de455e62 Mon Sep 17 00:00:00 2001 From: Iwan Timmer Date: Sun, 9 Aug 2015 21:33:33 +0200 Subject: [PATCH] Fix connection problems in libgamestream --- libgamestream/client.c | 10 +++++----- libgamestream/client.h | 4 ++-- libgamestream/http.c | 2 +- libgamestream/xml.c | 6 ++++-- libgamestream/xml.h | 2 +- src/config.c | 13 +++++++++---- src/config.h | 2 +- src/main.c | 27 ++++++++++++++------------- 8 files changed, 37 insertions(+), 29 deletions(-) diff --git a/libgamestream/client.c b/libgamestream/client.c index aac2e18..54cae74 100644 --- a/libgamestream/client.c +++ b/libgamestream/client.c @@ -130,14 +130,14 @@ static int load_cert(const char* keyDirectory) { return GS_OK; } -static int load_server_status(const char *address, PSERVER_DATA server) { +static int load_server_status(PSERVER_DATA server) { char *pairedText = NULL; char *currentGameText = NULL; char *versionText = NULL; int ret = GS_INVALID; char url[4096]; - sprintf(url, "https://%s:47984/serverinfo?uniqueid=%s", address, unique_id); + sprintf(url, "https://%s:47984/serverinfo?uniqueid=%s", server->address, unique_id); PHTTP_DATA data = http_create_data(); if (data == NULL) { @@ -359,7 +359,7 @@ int gs_pair(PSERVER_DATA server, char* pin) { return ret; } -int gs_applist(PSERVER_DATA server, PAPP_LIST list) { +int gs_applist(PSERVER_DATA server, PAPP_LIST *list) { int ret = GS_OK; char url[4096]; PHTTP_DATA data = http_create_data(); @@ -416,7 +416,7 @@ int gs_quit_app(PSERVER_DATA server) { return ret; } -int gs_init(PSERVER_DATA server, const char *address, const char *keyDirectory) { +int gs_init(PSERVER_DATA server, const char *keyDirectory) { mkdir(keyDirectory, 00755); if (load_unique_id(keyDirectory) != GS_OK) return GS_FAILED; @@ -425,5 +425,5 @@ int gs_init(PSERVER_DATA server, const char *address, const char *keyDirectory) return GS_FAILED; http_init(keyDirectory); - return load_server_status(address, server); + return load_server_status(server); } diff --git a/libgamestream/client.h b/libgamestream/client.h index f0b3064..2d5706d 100644 --- a/libgamestream/client.h +++ b/libgamestream/client.h @@ -32,8 +32,8 @@ typedef struct _SERVER_DATA { int serverMajorVersion; } SERVER_DATA, *PSERVER_DATA; -int gs_init(PSERVER_DATA server, const char *address, const char *keyDirectory); +int gs_init(PSERVER_DATA server, const char *keyDirectory); int gs_start_app(PSERVER_DATA server, PSTREAM_CONFIGURATION config, int appId, bool sops, bool localaudio); -int gs_applist(PSERVER_DATA server, PAPP_LIST app_list); +int gs_applist(PSERVER_DATA server, PAPP_LIST *app_list); int gs_pair(PSERVER_DATA server, char* pin); int gs_quit_app(PSERVER_DATA server); diff --git a/libgamestream/http.c b/libgamestream/http.c index 174ca54..fc9e725 100644 --- a/libgamestream/http.c +++ b/libgamestream/http.c @@ -46,7 +46,7 @@ static size_t _write_curl(void *contents, size_t size, size_t nmemb, void *userp int http_init(const char* keyDirectory) { curl = curl_easy_init(); - if (curl) + if (!curl) return GS_FAILED; char certificateFilePath[4096]; diff --git a/libgamestream/xml.c b/libgamestream/xml.c index 3f4ea7f..374a324 100644 --- a/libgamestream/xml.c +++ b/libgamestream/xml.c @@ -49,6 +49,8 @@ static void XMLCALL _xml_start_applist_element(void *userData, const char *name, if (app == NULL) return; + app->id = 0; + app->name = NULL; app->next = (PAPP_LIST) search->data; search->data = app; } else if (strcmp("ID", name) == 0 || strcmp("AppTitle", name) == 0) { @@ -111,7 +113,7 @@ int xml_search(char* data, size_t len, char* node, char** result) { return GS_OK; } -int xml_applist(char* data, size_t len, PAPP_LIST app_list) { +int xml_applist(char* data, size_t len, PAPP_LIST *app_list) { struct xml_query query; query.memory = calloc(1, 1); query.size = 0; @@ -126,7 +128,7 @@ int xml_applist(char* data, size_t len, PAPP_LIST app_list) { gs_error = XML_ErrorString(code); return GS_INVALID; } - app_list = (PAPP_LIST) query.data; + *app_list = (PAPP_LIST) query.data; return GS_OK; } diff --git a/libgamestream/xml.h b/libgamestream/xml.h index ca35489..99f488c 100644 --- a/libgamestream/xml.h +++ b/libgamestream/xml.h @@ -27,4 +27,4 @@ typedef struct _APP_LIST { } APP_LIST, *PAPP_LIST; int xml_search(char* data, size_t len, char* node, char** result); -int xml_applist(char* data, size_t len, PAPP_LIST app_list); +int xml_applist(char* data, size_t len, PAPP_LIST *app_list); diff --git a/src/config.c b/src/config.c index e0c316e..493f051 100644 --- a/src/config.c +++ b/src/config.c @@ -163,7 +163,9 @@ static void parse_argument(int c, char* value, PCONFIGURATION config) { config->localaudio = true; break; case 'o': - config_file_parse(value, config); + if (!config_file_parse(value, config)) + exit(EXIT_FAILURE); + break; case 'p': config->platform = value; @@ -186,11 +188,11 @@ static void parse_argument(int c, char* value, PCONFIGURATION config) { } } -void config_file_parse(char* filename, PCONFIGURATION config) { +bool config_file_parse(char* filename, PCONFIGURATION config) { FILE* fd = fopen(filename, "r"); if (fd == NULL) { fprintf(stderr, "Can't open configuration file: %s\n", filename); - exit(EXIT_FAILURE); + return false; } char *line = NULL; @@ -214,6 +216,7 @@ void config_file_parse(char* filename, PCONFIGURATION config) { } } } + return true; } void config_save(char* filename, PCONFIGURATION config) { @@ -269,7 +272,9 @@ void config_parse(int argc, char* argv[], PCONFIGURATION config) { if (argc == 2 && access(argv[1], F_OK) == 0) { config->action = "stream"; - config_file_parse(argv[1], config); + if (!config_file_parse(argv[1], config)) + exit(EXIT_FAILURE); + } else { int option_index = 0; int c; diff --git a/src/config.h b/src/config.h index 5104c7e..5211608 100644 --- a/src/config.h +++ b/src/config.h @@ -45,5 +45,5 @@ typedef struct _CONFIGURATION { bool inputAdded; -void config_file_parse(char* filename, PCONFIGURATION config); +bool config_file_parse(char* filename, PCONFIGURATION config); void config_parse(int argc, char* argv[], PCONFIGURATION config); diff --git a/src/main.c b/src/main.c index bd5c3fa..7010cc1 100644 --- a/src/main.c +++ b/src/main.c @@ -47,8 +47,8 @@ #include static void applist(PSERVER_DATA server) { - PAPP_LIST list; - if (gs_applist(server, list) != GS_OK) { + PAPP_LIST list = NULL; + if (gs_applist(server, &list) != GS_OK) { fprintf(stderr, "Can't get app list\n"); return; } @@ -60,8 +60,8 @@ static void applist(PSERVER_DATA server) { } static int get_app_id(PSERVER_DATA server, const char *name) { - PAPP_LIST list; - if (gs_applist(server, list) != GS_OK) { + PAPP_LIST list = NULL; + if (gs_applist(server, &list) != GS_OK) { fprintf(stderr, "Can't get app list\n"); return -1; } @@ -183,17 +183,18 @@ int main(int argc, char* argv[]) { sprintf(host_config_file, "hosts/%s.conf", config.address); config_file_parse(host_config_file, &config); - PSERVER_DATA server; - if (gs_init(server, config.address, config.key_dir) != GS_OK) { + SERVER_DATA server; + server.address = config.address; + if (gs_init(&server, config.key_dir) != GS_OK) { fprintf(stderr, "Can't connect to server %s\n", config.address); exit(-1); } if (strcmp("list", config.action) == 0) { - pair_check(server); - applist(server); + pair_check(&server); + applist(&server); } else if (strcmp("stream", config.action) == 0) { - pair_check(server); + pair_check(&server); if (IS_EMBEDDED(system)) { for (int i=0;i