Fix connection problems in libgamestream

This commit is contained in:
Iwan Timmer 2015-08-09 21:33:33 +02:00
parent dc83e8c9a1
commit 503a8982d8
8 changed files with 37 additions and 29 deletions

View File

@ -130,14 +130,14 @@ static int load_cert(const char* keyDirectory) {
return GS_OK; 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 *pairedText = NULL;
char *currentGameText = NULL; char *currentGameText = NULL;
char *versionText = NULL; char *versionText = NULL;
int ret = GS_INVALID; int ret = GS_INVALID;
char url[4096]; 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(); PHTTP_DATA data = http_create_data();
if (data == NULL) { if (data == NULL) {
@ -359,7 +359,7 @@ int gs_pair(PSERVER_DATA server, char* pin) {
return ret; return ret;
} }
int gs_applist(PSERVER_DATA server, PAPP_LIST list) { int gs_applist(PSERVER_DATA server, PAPP_LIST *list) {
int ret = GS_OK; int ret = GS_OK;
char url[4096]; char url[4096];
PHTTP_DATA data = http_create_data(); PHTTP_DATA data = http_create_data();
@ -416,7 +416,7 @@ int gs_quit_app(PSERVER_DATA server) {
return ret; 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); mkdir(keyDirectory, 00755);
if (load_unique_id(keyDirectory) != GS_OK) if (load_unique_id(keyDirectory) != GS_OK)
return GS_FAILED; return GS_FAILED;
@ -425,5 +425,5 @@ int gs_init(PSERVER_DATA server, const char *address, const char *keyDirectory)
return GS_FAILED; return GS_FAILED;
http_init(keyDirectory); http_init(keyDirectory);
return load_server_status(address, server); return load_server_status(server);
} }

View File

@ -32,8 +32,8 @@ typedef struct _SERVER_DATA {
int serverMajorVersion; int serverMajorVersion;
} SERVER_DATA, *PSERVER_DATA; } 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_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_pair(PSERVER_DATA server, char* pin);
int gs_quit_app(PSERVER_DATA server); int gs_quit_app(PSERVER_DATA server);

View File

@ -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) { int http_init(const char* keyDirectory) {
curl = curl_easy_init(); curl = curl_easy_init();
if (curl) if (!curl)
return GS_FAILED; return GS_FAILED;
char certificateFilePath[4096]; char certificateFilePath[4096];

View File

@ -49,6 +49,8 @@ static void XMLCALL _xml_start_applist_element(void *userData, const char *name,
if (app == NULL) if (app == NULL)
return; return;
app->id = 0;
app->name = NULL;
app->next = (PAPP_LIST) search->data; app->next = (PAPP_LIST) search->data;
search->data = app; search->data = app;
} else if (strcmp("ID", name) == 0 || strcmp("AppTitle", name) == 0) { } 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; 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; struct xml_query query;
query.memory = calloc(1, 1); query.memory = calloc(1, 1);
query.size = 0; query.size = 0;
@ -126,7 +128,7 @@ int xml_applist(char* data, size_t len, PAPP_LIST app_list) {
gs_error = XML_ErrorString(code); gs_error = XML_ErrorString(code);
return GS_INVALID; return GS_INVALID;
} }
app_list = (PAPP_LIST) query.data; *app_list = (PAPP_LIST) query.data;
return GS_OK; return GS_OK;
} }

View File

@ -27,4 +27,4 @@ typedef struct _APP_LIST {
} APP_LIST, *PAPP_LIST; } APP_LIST, *PAPP_LIST;
int xml_search(char* data, size_t len, char* node, char** result); 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);

View File

@ -163,7 +163,9 @@ static void parse_argument(int c, char* value, PCONFIGURATION config) {
config->localaudio = true; config->localaudio = true;
break; break;
case 'o': case 'o':
config_file_parse(value, config); if (!config_file_parse(value, config))
exit(EXIT_FAILURE);
break; break;
case 'p': case 'p':
config->platform = value; 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"); FILE* fd = fopen(filename, "r");
if (fd == NULL) { if (fd == NULL) {
fprintf(stderr, "Can't open configuration file: %s\n", filename); fprintf(stderr, "Can't open configuration file: %s\n", filename);
exit(EXIT_FAILURE); return false;
} }
char *line = NULL; char *line = NULL;
@ -214,6 +216,7 @@ void config_file_parse(char* filename, PCONFIGURATION config) {
} }
} }
} }
return true;
} }
void config_save(char* filename, PCONFIGURATION config) { 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) { if (argc == 2 && access(argv[1], F_OK) == 0) {
config->action = "stream"; config->action = "stream";
config_file_parse(argv[1], config); if (!config_file_parse(argv[1], config))
exit(EXIT_FAILURE);
} else { } else {
int option_index = 0; int option_index = 0;
int c; int c;

View File

@ -45,5 +45,5 @@ typedef struct _CONFIGURATION {
bool inputAdded; 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); void config_parse(int argc, char* argv[], PCONFIGURATION config);

View File

@ -47,8 +47,8 @@
#include <openssl/rand.h> #include <openssl/rand.h>
static void applist(PSERVER_DATA server) { static void applist(PSERVER_DATA server) {
PAPP_LIST list; PAPP_LIST list = NULL;
if (gs_applist(server, list) != GS_OK) { if (gs_applist(server, &list) != GS_OK) {
fprintf(stderr, "Can't get app list\n"); fprintf(stderr, "Can't get app list\n");
return; return;
} }
@ -60,8 +60,8 @@ static void applist(PSERVER_DATA server) {
} }
static int get_app_id(PSERVER_DATA server, const char *name) { static int get_app_id(PSERVER_DATA server, const char *name) {
PAPP_LIST list; PAPP_LIST list = NULL;
if (gs_applist(server, list) != GS_OK) { if (gs_applist(server, &list) != GS_OK) {
fprintf(stderr, "Can't get app list\n"); fprintf(stderr, "Can't get app list\n");
return -1; return -1;
} }
@ -183,17 +183,18 @@ int main(int argc, char* argv[]) {
sprintf(host_config_file, "hosts/%s.conf", config.address); sprintf(host_config_file, "hosts/%s.conf", config.address);
config_file_parse(host_config_file, &config); config_file_parse(host_config_file, &config);
PSERVER_DATA server; SERVER_DATA server;
if (gs_init(server, config.address, config.key_dir) != GS_OK) { server.address = config.address;
if (gs_init(&server, config.key_dir) != GS_OK) {
fprintf(stderr, "Can't connect to server %s\n", config.address); fprintf(stderr, "Can't connect to server %s\n", config.address);
exit(-1); exit(-1);
} }
if (strcmp("list", config.action) == 0) { if (strcmp("list", config.action) == 0) {
pair_check(server); pair_check(&server);
applist(server); applist(&server);
} else if (strcmp("stream", config.action) == 0) { } else if (strcmp("stream", config.action) == 0) {
pair_check(server); pair_check(&server);
if (IS_EMBEDDED(system)) { if (IS_EMBEDDED(system)) {
for (int i=0;i<config.inputsCount;i++) for (int i=0;i<config.inputsCount;i++)
evdev_create(config.inputs[i].path, config.inputs[i].mapping); evdev_create(config.inputs[i].path, config.inputs[i].mapping);
@ -209,19 +210,19 @@ int main(int argc, char* argv[]) {
sdlinput_init(); sdlinput_init();
#endif #endif
stream(server, &config, system); stream(&server, &config, system);
} else if (strcmp("pair", config.action) == 0) { } else if (strcmp("pair", config.action) == 0) {
char pin[5]; char pin[5];
sprintf(pin, "%d%d%d%d", (int)random() % 10, (int)random() % 10, (int)random() % 10, (int)random() % 10); sprintf(pin, "%d%d%d%d", (int)random() % 10, (int)random() % 10, (int)random() % 10, (int)random() % 10);
printf("Please enter the following PIN on the target PC: %s\n", pin); printf("Please enter the following PIN on the target PC: %s\n", pin);
if (gs_pair(server, &pin[0]) != GS_OK) { if (gs_pair(&server, &pin[0]) != GS_OK) {
fprintf(stderr, "Failed to pair to server: %s\n", gs_error); fprintf(stderr, "Failed to pair to server: %s\n", gs_error);
} else { } else {
printf("Succesfully paired\n"); printf("Succesfully paired\n");
} }
} else if (strcmp("quit", config.action) == 0) { } else if (strcmp("quit", config.action) == 0) {
pair_check(server); pair_check(&server);
gs_quit_app(server); gs_quit_app(&server);
} else } else
fprintf(stderr, "%s is not a valid action\n", config.action); fprintf(stderr, "%s is not a valid action\n", config.action);
} }