mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2025-08-18 01:15:46 +00:00
91 lines
2.4 KiB
C
91 lines
2.4 KiB
C
#include "Limelight-internal.h"
|
|
|
|
#define ENET_SERVICE_RETRIES 10
|
|
|
|
// This function wraps enet_host_service() and hides the fact that it must be called
|
|
// multiple times for retransmissions to work correctly. It is meant to be a drop-in
|
|
// replacement for enet_host_service().
|
|
int serviceEnetHost(ENetHost* client, ENetEvent* event, enet_uint32 timeoutMs) {
|
|
int i;
|
|
int ret = -1;
|
|
|
|
// We need to call enet_host_service() multiple times to make sure retransmissions happen
|
|
for (i = 0; i < ENET_SERVICE_RETRIES; i++) {
|
|
ret = enet_host_service(client, event, timeoutMs / ENET_SERVICE_RETRIES);
|
|
if (ret != 0 || timeoutMs == 0) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
int isBeforeSignedInt(int numA, int numB, int ambiguousCase) {
|
|
// This should be the common case for most callers
|
|
if (numA == numB) {
|
|
return 0;
|
|
}
|
|
|
|
// If numA and numB have the same signs,
|
|
// we can just do a regular comparison.
|
|
if ((numA < 0 && numB < 0) || (numA >= 0 && numB >= 0)) {
|
|
return numA < numB;
|
|
}
|
|
else {
|
|
// The sign switch is ambiguous
|
|
return ambiguousCase;
|
|
}
|
|
}
|
|
|
|
int extractVersionQuadFromString(const char* string, int* quad) {
|
|
char versionString[128];
|
|
char* nextDot;
|
|
char* nextNumber;
|
|
int i;
|
|
|
|
strcpy(versionString, string);
|
|
nextNumber = versionString;
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
if (i == 3) {
|
|
nextDot = strchr(nextNumber, '\0');
|
|
}
|
|
else {
|
|
nextDot = strchr(nextNumber, '.');
|
|
}
|
|
if (nextDot == NULL) {
|
|
return -1;
|
|
}
|
|
|
|
// Cut the string off at the next dot
|
|
*nextDot = '\0';
|
|
|
|
quad[i] = atoi(nextNumber);
|
|
|
|
// Move on to the next segment
|
|
nextNumber = nextDot + 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void LiInitializeStreamConfiguration(PSTREAM_CONFIGURATION streamConfig) {
|
|
memset(streamConfig, 0, sizeof(*streamConfig));
|
|
}
|
|
|
|
void LiInitializeVideoCallbacks(PDECODER_RENDERER_CALLBACKS drCallbacks) {
|
|
memset(drCallbacks, 0, sizeof(*drCallbacks));
|
|
}
|
|
|
|
void LiInitializeAudioCallbacks(PAUDIO_RENDERER_CALLBACKS arCallbacks) {
|
|
memset(arCallbacks, 0, sizeof(*arCallbacks));
|
|
}
|
|
|
|
void LiInitializeConnectionCallbacks(PCONNECTION_LISTENER_CALLBACKS clCallbacks) {
|
|
memset(clCallbacks, 0, sizeof(*clCallbacks));
|
|
}
|
|
|
|
void LiInitializeServerInformation(PSERVER_INFORMATION serverInfo) {
|
|
memset(serverInfo, 0, sizeof(*serverInfo));
|
|
}
|