mirror of
https://github.com/moonlight-stream/moonlight-embedded.git
synced 2025-07-01 15:25:35 +00:00
Libgamestream doesn't print to console
This commit is contained in:
parent
06265eddad
commit
6c087f40dc
@ -47,6 +47,8 @@ static X509 *cert;
|
||||
static char cert_hex[4096];
|
||||
static EVP_PKEY *privateKey;
|
||||
|
||||
const char* gs_error;
|
||||
|
||||
static int load_unique_id(const char* keyDirectory) {
|
||||
char uniqueFilePath[4096];
|
||||
sprintf(uniqueFilePath, "%s/%s", keyDirectory, UNIQUE_FILE_NAME);
|
||||
@ -94,12 +96,12 @@ static int load_cert(const char* keyDirectory) {
|
||||
}
|
||||
|
||||
if (fd == NULL) {
|
||||
fprintf(stderr, "Can't open certificate file\n");
|
||||
gs_error = "Can't open certificate file";
|
||||
return GS_FAILED;
|
||||
}
|
||||
|
||||
if (!(cert = PEM_read_X509(fd, NULL, NULL, NULL))) {
|
||||
fprintf(stderr, "Error loading cert into memory.\n");
|
||||
gs_error = "Error loading cert into memory";
|
||||
return GS_FAILED;
|
||||
}
|
||||
|
||||
@ -117,7 +119,7 @@ static int load_cert(const char* keyDirectory) {
|
||||
|
||||
fd = fopen(keyFilePath, "r");
|
||||
if (fd == NULL) {
|
||||
fprintf(stderr, "Error loading key into memory.\n");
|
||||
gs_error = "Error loading key into memory";
|
||||
return GS_FAILED;
|
||||
}
|
||||
|
||||
@ -194,66 +196,38 @@ static int sign_it(const char *msg, size_t mlen, unsigned char **sig, size_t *sl
|
||||
*slen = 0;
|
||||
|
||||
EVP_MD_CTX *ctx = EVP_MD_CTX_create();
|
||||
if (ctx == NULL) {
|
||||
fprintf(stderr, "EVP_MD_CTX_create failed, error 0x%lx\n", ERR_get_error());
|
||||
return -1;
|
||||
}
|
||||
if (ctx == NULL)
|
||||
return GS_FAILED;
|
||||
|
||||
const EVP_MD *md = EVP_get_digestbyname("SHA256");
|
||||
if (md == NULL) {
|
||||
fprintf(stderr, "EVP_get_digestbyname failed, error 0x%lx\n", ERR_get_error());
|
||||
if (md == NULL)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
int rc = EVP_DigestInit_ex(ctx, md, NULL);
|
||||
if (rc != 1) {
|
||||
fprintf(stderr, "EVP_DigestInit_ex failed, error 0x%lx\n", ERR_get_error());
|
||||
if (rc != 1)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
rc = EVP_DigestSignInit(ctx, NULL, md, NULL, pkey);
|
||||
if (rc != 1) {
|
||||
fprintf(stderr, "EVP_DigestSignInit failed, error 0x%lx\n", ERR_get_error());
|
||||
if (rc != 1)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
rc = EVP_DigestSignUpdate(ctx, msg, mlen);
|
||||
if (rc != 1) {
|
||||
fprintf(stderr, "EVP_DigestSignUpdate failed, error 0x%lx\n", ERR_get_error());
|
||||
if (rc != 1)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
size_t req = 0;
|
||||
rc = EVP_DigestSignFinal(ctx, NULL, &req);
|
||||
if (rc != 1) {
|
||||
fprintf(stderr, "EVP_DigestSignFinal failed (1), error 0x%lx\n", ERR_get_error());
|
||||
if (rc != 1 || !(req > 0))
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!(req > 0)) {
|
||||
fprintf(stderr, "EVP_DigestSignFinal failed (2), error 0x%lx\n", ERR_get_error());
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
*sig = OPENSSL_malloc(req);
|
||||
if (*sig == NULL) {
|
||||
fprintf(stderr, "OPENSSL_malloc failed, error 0x%lx\n", ERR_get_error());
|
||||
if (*sig == NULL)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
*slen = req;
|
||||
rc = EVP_DigestSignFinal(ctx, *sig, slen);
|
||||
if (rc != 1) {
|
||||
fprintf(stderr, "EVP_DigestSignFinal failed (3), return code %d, error 0x%lx\n", rc,
|
||||
ERR_get_error());
|
||||
if (rc != 1 || req != *slen)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (req != *slen) {
|
||||
fprintf(stderr, "EVP_DigestSignFinal failed, mismatched signature sizes %ld, %ld\n",
|
||||
req, *slen);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
result = GS_OK;
|
||||
|
||||
@ -269,17 +243,15 @@ int gs_pair(PSERVER_DATA server, char* pin) {
|
||||
char url[4096];
|
||||
|
||||
if (server->paired) {
|
||||
fprintf(stderr, "Already paired\n");
|
||||
gs_error = "Already paired";
|
||||
return GS_WRONG_STATE;
|
||||
}
|
||||
|
||||
if (server->currentGame != 0) {
|
||||
fprintf(stderr, "The computer is currently in a game. You must close the game before pairing.\n");
|
||||
gs_error = "The computer is currently in a game. You must close the game before pairing";
|
||||
return GS_WRONG_STATE;
|
||||
}
|
||||
|
||||
printf("Please enter the following PIN on the target PC: %s\n", pin);
|
||||
|
||||
unsigned char salt_data[16];
|
||||
char salt_hex[33];
|
||||
RAND_bytes(salt_data, 16);
|
||||
@ -357,7 +329,7 @@ int gs_pair(PSERVER_DATA server, char* pin) {
|
||||
unsigned char *signature = NULL;
|
||||
size_t s_len;
|
||||
if (sign_it(client_secret_data, 16, &signature, &s_len, privateKey) != GS_OK) {
|
||||
fprintf(stderr, "Failed to sign data\n");
|
||||
gs_error = "Failed to sign data";
|
||||
ret = GS_FAILED;
|
||||
goto cleanup;
|
||||
}
|
||||
|
@ -17,6 +17,8 @@
|
||||
* along with Moonlight; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "errors.h"
|
||||
|
||||
#include <avahi-client/client.h>
|
||||
#include <avahi-client/lookup.h>
|
||||
|
||||
@ -33,7 +35,7 @@ static AvahiSimplePoll *simple_poll = NULL;
|
||||
|
||||
static void client_callback(AvahiClient *c, AvahiClientState state, void *userdata) {
|
||||
if (state == AVAHI_CLIENT_FAILURE) {
|
||||
fprintf(stderr, "Server connection failure: %s\n", avahi_strerror(avahi_client_errno(c)));
|
||||
gs_error = "Server connection failure";
|
||||
avahi_simple_poll_quit(simple_poll);
|
||||
}
|
||||
}
|
||||
@ -58,12 +60,12 @@ static void browse_callback(AvahiServiceBrowser *b, AvahiIfIndex interface, Avah
|
||||
|
||||
switch (event) {
|
||||
case AVAHI_BROWSER_FAILURE:
|
||||
fprintf(stderr, "(Discover) %s\n", avahi_strerror(avahi_client_errno(avahi_service_browser_get_client(b))));
|
||||
gs_error = "Server browser failure";
|
||||
avahi_simple_poll_quit(simple_poll);
|
||||
break;
|
||||
case AVAHI_BROWSER_NEW:
|
||||
if (!(avahi_service_resolver_new(c, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, 0, resolve_callback, userdata)))
|
||||
fprintf(stderr, "Failed to resolve service '%s': %s\n", name, avahi_strerror(avahi_client_errno(c)));
|
||||
gs_error = "Failed to resolve service";
|
||||
|
||||
break;
|
||||
case AVAHI_BROWSER_REMOVE:
|
||||
@ -76,19 +78,19 @@ void gs_discover_server(char* dest) {
|
||||
AvahiServiceBrowser *sb = NULL;
|
||||
|
||||
if (!(simple_poll = avahi_simple_poll_new())) {
|
||||
fprintf(stderr, "Failed to create simple poll object.\n");
|
||||
gs_error = "Failed to create simple poll object";
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
int error;
|
||||
client = avahi_client_new(avahi_simple_poll_get(simple_poll), 0, client_callback, NULL, &error);
|
||||
if (!client) {
|
||||
fprintf(stderr, "Failed to create client: %s\n", avahi_strerror(error));
|
||||
gs_error = "Failed to create client";
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!(sb = avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_nvstream._tcp", NULL, 0, browse_callback, dest))) {
|
||||
fprintf(stderr, "Failed to create service browser: %s\n", avahi_strerror(avahi_client_errno(client)));
|
||||
gs_error = "Failed to create service browser";
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
@ -25,3 +25,5 @@
|
||||
#define GS_INVALID -3
|
||||
#define GS_WRONG_STATE -4
|
||||
#define GS_IO_ERROR -5
|
||||
|
||||
const char* gs_error;
|
||||
|
@ -48,9 +48,6 @@ CERT_KEY_PAIR mkcert_generate() {
|
||||
mkcert(&x509, &pkey, NUM_BITS, SERIAL, NUM_YEARS);
|
||||
|
||||
p12 = PKCS12_create("limelight", "GameStream", pkey, x509, NULL, 0, 0, 0, 0, 0);
|
||||
if (p12 == NULL) {
|
||||
fprintf(stderr, "Error generating a valid PKCS12 certificate.\n");
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
ENGINE_cleanup();
|
||||
|
@ -46,10 +46,8 @@ static void XMLCALL _xml_start_applist_element(void *userData, const char *name,
|
||||
struct xml_query *search = (struct xml_query*) userData;
|
||||
if (strcmp("App", name) == 0) {
|
||||
PAPP_LIST app = malloc(sizeof(APP_LIST));
|
||||
if (app == NULL) {
|
||||
fprintf(stderr, "Not enough memory\n");
|
||||
if (app == NULL)
|
||||
return;
|
||||
}
|
||||
|
||||
app->next = (PAPP_LIST) search->data;
|
||||
search->data = app;
|
||||
@ -81,10 +79,8 @@ static void XMLCALL _xml_write_data(void *userData, const XML_Char *s, int len)
|
||||
struct xml_query *search = (struct xml_query*) userData;
|
||||
if (search->start > 0) {
|
||||
search->memory = realloc(search->memory, search->size + len + 1);
|
||||
if(search->memory == NULL) {
|
||||
fprintf(stderr, "Not enough memory\n");
|
||||
if(search->memory == NULL)
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(&(search->memory[search->size]), s, len);
|
||||
search->size += len;
|
||||
@ -104,7 +100,7 @@ int xml_search(char* data, size_t len, char* node, char** result) {
|
||||
XML_SetCharacterDataHandler(parser, _xml_write_data);
|
||||
if (! XML_Parse(parser, data, len, 1)) {
|
||||
int code = XML_GetErrorCode(parser);
|
||||
fprintf(stderr, "XML Error: %s\n", XML_ErrorString(code));
|
||||
gs_error = XML_ErrorString(code);
|
||||
free(search.memory);
|
||||
return GS_INVALID;
|
||||
} else if (search.memory == NULL)
|
||||
@ -127,7 +123,7 @@ int xml_applist(char* data, size_t len, PAPP_LIST app_list) {
|
||||
XML_SetCharacterDataHandler(parser, _xml_write_data);
|
||||
if (! XML_Parse(parser, data, len, 1)) {
|
||||
int code = XML_GetErrorCode(parser);
|
||||
fprintf(stderr, "XML Error %s\n", XML_ErrorString(code));
|
||||
gs_error = XML_ErrorString(code);
|
||||
return GS_INVALID;
|
||||
}
|
||||
app_list = (PAPP_LIST) query.data;
|
||||
|
@ -304,7 +304,12 @@ int main(int argc, char* argv[]) {
|
||||
} else if (strcmp("pair", action) == 0) {
|
||||
char pin[5];
|
||||
sprintf(pin, "%d%d%d%d", (int)random() % 10, (int)random() % 10, (int)random() % 10, (int)random() % 10);
|
||||
gs_pair(server, &pin[0]);
|
||||
printf("Please enter the following PIN on the target PC: %s\n", pin);
|
||||
if (gs_pair(server, &pin[0]) != GS_OK) {
|
||||
fprintf("Failed to pair to server: %s\n", gs_error);
|
||||
} else {
|
||||
printf("Succesfully paired\n");
|
||||
}
|
||||
} else if (strcmp("quit", action) == 0) {
|
||||
pair_check(server);
|
||||
gs_quit_app(server);
|
||||
|
Loading…
x
Reference in New Issue
Block a user