mirror of
https://github.com/moonlight-stream/moonlight-embedded.git
synced 2025-07-01 23:35:47 +00:00
Fix connection problems in libgamestream
This commit is contained in:
parent
dc83e8c9a1
commit
503a8982d8
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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];
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
13
src/config.c
13
src/config.c
@ -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;
|
||||||
|
@ -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);
|
||||||
|
27
src/main.c
27
src/main.c
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user