mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2025-08-18 01:15:46 +00:00
Merge branch 'master' of https://github.com/limelight-stream/limelight-common-c
Conflicts: limelight-common/InputStream.c
This commit is contained in:
commit
d139c85d95
@ -15,7 +15,7 @@
|
|||||||
FB290E5F19B37A8B004C83CF /* Input.h in Headers */ = {isa = PBXBuildFile; fileRef = FB290E3B19B37A8B004C83CF /* Input.h */; };
|
FB290E5F19B37A8B004C83CF /* Input.h in Headers */ = {isa = PBXBuildFile; fileRef = FB290E3B19B37A8B004C83CF /* Input.h */; };
|
||||||
FB290E6019B37A8B004C83CF /* InputStream.c in Sources */ = {isa = PBXBuildFile; fileRef = FB290E3C19B37A8B004C83CF /* InputStream.c */; };
|
FB290E6019B37A8B004C83CF /* InputStream.c in Sources */ = {isa = PBXBuildFile; fileRef = FB290E3C19B37A8B004C83CF /* InputStream.c */; };
|
||||||
FB290E6119B37A8B004C83CF /* Limelight-internal.h in Headers */ = {isa = PBXBuildFile; fileRef = FB290E3F19B37A8B004C83CF /* Limelight-internal.h */; };
|
FB290E6119B37A8B004C83CF /* Limelight-internal.h in Headers */ = {isa = PBXBuildFile; fileRef = FB290E3F19B37A8B004C83CF /* Limelight-internal.h */; };
|
||||||
FB290E6219B37A8B004C83CF /* Limelight.h in Headers */ = {isa = PBXBuildFile; fileRef = FB290E4019B37A8B004C83CF /* Limelight.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
FB290E6219B37A8B004C83CF /* Limelight.h in Headers */ = {isa = PBXBuildFile; fileRef = FB290E4019B37A8B004C83CF /* Limelight.h */; };
|
||||||
FB290E6319B37A8B004C83CF /* LinkedBlockingQueue.c in Sources */ = {isa = PBXBuildFile; fileRef = FB290E4119B37A8B004C83CF /* LinkedBlockingQueue.c */; };
|
FB290E6319B37A8B004C83CF /* LinkedBlockingQueue.c in Sources */ = {isa = PBXBuildFile; fileRef = FB290E4119B37A8B004C83CF /* LinkedBlockingQueue.c */; };
|
||||||
FB290E6419B37A8B004C83CF /* LinkedBlockingQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = FB290E4219B37A8B004C83CF /* LinkedBlockingQueue.h */; };
|
FB290E6419B37A8B004C83CF /* LinkedBlockingQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = FB290E4219B37A8B004C83CF /* LinkedBlockingQueue.h */; };
|
||||||
FB290E6519B37A8B004C83CF /* oaes_base64.c in Sources */ = {isa = PBXBuildFile; fileRef = FB290E4519B37A8B004C83CF /* oaes_base64.c */; };
|
FB290E6519B37A8B004C83CF /* oaes_base64.c in Sources */ = {isa = PBXBuildFile; fileRef = FB290E4519B37A8B004C83CF /* oaes_base64.c */; };
|
||||||
@ -264,6 +264,7 @@
|
|||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "Mac Developer";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
@ -283,6 +284,7 @@
|
|||||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@ -302,6 +304,7 @@
|
|||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application";
|
||||||
COPY_PHASE_STRIP = YES;
|
COPY_PHASE_STRIP = YES;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
@ -314,13 +317,16 @@
|
|||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||||
|
PROVISIONING_PROFILE = "";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
FB290E3319B37A4E004C83CF /* Debug */ = {
|
FB290E3319B37A4E004C83CF /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
EXECUTABLE_PREFIX = lib;
|
EXECUTABLE_PREFIX = lib;
|
||||||
ONLY_ACTIVE_ARCH = NO;
|
ONLY_ACTIVE_ARCH = NO;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@ -332,6 +338,7 @@
|
|||||||
FB290E3419B37A4E004C83CF /* Release */ = {
|
FB290E3419B37A4E004C83CF /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
CODE_SIGN_IDENTITY = "iPhone Distribution";
|
||||||
EXECUTABLE_PREFIX = lib;
|
EXECUTABLE_PREFIX = lib;
|
||||||
ONLY_ACTIVE_ARCH = NO;
|
ONLY_ACTIVE_ARCH = NO;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
@ -107,22 +107,24 @@ static PNVCTL_PACKET_HEADER readNvctlPacket(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int sendMessageAndForget(short ptype, short paylen, const void* payload) {
|
static int sendMessageAndForget(short ptype, short paylen, const void* payload) {
|
||||||
NVCTL_PACKET_HEADER header;
|
PNVCTL_PACKET_HEADER packet;
|
||||||
SOCK_RET err;
|
SOCK_RET err;
|
||||||
|
|
||||||
header.type = ptype;
|
packet = malloc(sizeof(*packet) + paylen);
|
||||||
header.payloadLength = paylen;
|
if (packet == NULL) {
|
||||||
err = send(ctlSock, (char*) &header, sizeof(header), 0);
|
|
||||||
if (err != sizeof(header)) {
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (payload != NULL) {
|
packet->type = ptype;
|
||||||
err = send(ctlSock, payload, paylen, 0);
|
packet->payloadLength = paylen;
|
||||||
if (err != paylen) {
|
memcpy(&packet[1], payload, paylen);
|
||||||
|
|
||||||
|
err = send(ctlSock, (char*) packet, sizeof(*packet) + paylen, 0);
|
||||||
|
free(packet);
|
||||||
|
|
||||||
|
if (err != sizeof(*packet)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -90,6 +90,8 @@ void destroyInputStream(void) {
|
|||||||
initialized = 0;
|
initialized = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define OAES_DATA_OFFSET 32
|
||||||
|
|
||||||
/* Input thread proc */
|
/* Input thread proc */
|
||||||
static void inputSendThreadProc(void* context) {
|
static void inputSendThreadProc(void* context) {
|
||||||
SOCK_RET err;
|
SOCK_RET err;
|
||||||
@ -118,21 +120,20 @@ static void inputSendThreadProc(void* context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// The first 32-bytes of the output are internal OAES stuff that we want to ignore
|
// The first 32-bytes of the output are internal OAES stuff that we want to ignore
|
||||||
encryptedSize -= 32;
|
encryptedSize -= OAES_DATA_OFFSET;
|
||||||
|
|
||||||
// Send the encrypted length first
|
// Overwrite the last 4 bytes before the encrypted data with the length so
|
||||||
|
// we can send the message all at once. GFE can choke if it gets the header
|
||||||
|
// before the rest of the message.
|
||||||
encryptedLengthPrefix = htonl((unsigned long) encryptedSize);
|
encryptedLengthPrefix = htonl((unsigned long) encryptedSize);
|
||||||
err = send(inputSock, (const char*) &encryptedLengthPrefix, sizeof(encryptedLengthPrefix), 0);
|
memcpy(&encryptedBuffer[OAES_DATA_OFFSET - sizeof(encryptedLengthPrefix)],
|
||||||
if (err <= 0) {
|
&encryptedLengthPrefix, sizeof(encryptedLengthPrefix));
|
||||||
Limelog("Input thread terminating #3\n");
|
|
||||||
listenerCallbacks->connectionTerminated(err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send the encrypted payload
|
// Send the encrypted payload
|
||||||
err = send(inputSock, (const char*) &encryptedBuffer[32], encryptedSize, 0);
|
err = send(inputSock, (const char*) &encryptedBuffer[OAES_DATA_OFFSET - sizeof(encryptedLengthPrefix)],
|
||||||
|
encryptedSize + sizeof(encryptedLengthPrefix), 0);
|
||||||
if (err <= 0) {
|
if (err <= 0) {
|
||||||
Limelog("Input thread terminating #4\n");
|
Limelog("Input thread terminating #3\n");
|
||||||
listenerCallbacks->connectionTerminated(err);
|
listenerCallbacks->connectionTerminated(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,9 @@
|
|||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# define LC_POSIX
|
# define LC_POSIX
|
||||||
|
# if defined(__APPLE__)
|
||||||
|
# define LC_DARWIN
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -21,6 +21,13 @@ SOCKET bindUdpSocket(void) {
|
|||||||
return INVALID_SOCKET;
|
return INVALID_SOCKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LC_DARWIN
|
||||||
|
// Disable SIGPIPE on iOS
|
||||||
|
val = 1;
|
||||||
|
setsockopt(s, SOL_SOCKET, SO_NOSIGPIPE, (char* )&val, sizeof(val));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Set the receive buffer to 64KB by default
|
||||||
val = 65536;
|
val = 65536;
|
||||||
setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char*) &val, sizeof(val));
|
setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char*) &val, sizeof(val));
|
||||||
|
|
||||||
@ -31,12 +38,21 @@ SOCKET connectTcpSocket(IP_ADDRESS dstaddr, unsigned short port) {
|
|||||||
SOCKET s;
|
SOCKET s;
|
||||||
struct sockaddr_in addr;
|
struct sockaddr_in addr;
|
||||||
int err;
|
int err;
|
||||||
|
#ifdef LC_DARWIN
|
||||||
|
int val;
|
||||||
|
#endif
|
||||||
|
|
||||||
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
||||||
if (s == INVALID_SOCKET) {
|
if (s == INVALID_SOCKET) {
|
||||||
return INVALID_SOCKET;
|
return INVALID_SOCKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LC_DARWIN
|
||||||
|
// Disable SIGPIPE on iOS
|
||||||
|
val = 1;
|
||||||
|
setsockopt(s, SOL_SOCKET, SO_NOSIGPIPE, (char* )&val, sizeof(val));
|
||||||
|
#endif
|
||||||
|
|
||||||
memset(&addr, 0, sizeof(addr));
|
memset(&addr, 0, sizeof(addr));
|
||||||
addr.sin_family = AF_INET;
|
addr.sin_family = AF_INET;
|
||||||
addr.sin_port = htons(port);
|
addr.sin_port = htons(port);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user