mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2025-08-17 17:05:50 +00:00
Improve debugging and error codes
This commit is contained in:
parent
fc68cfd438
commit
a5f59d206e
@ -68,7 +68,7 @@ static void UdpPingThreadProc(void *context) {
|
||||
while (!PltIsThreadInterrupted(&udpPingThread)) {
|
||||
err = sendto(rtpSocket, pingData, sizeof(pingData), 0, (struct sockaddr*)&saddr, RemoteAddrLen);
|
||||
if (err != sizeof(pingData)) {
|
||||
Limelog("UDP ping thread terminating #1\n");
|
||||
Limelog("Audio Ping: sendto() failed: %d\n", (int)LastSocketError());
|
||||
ListenerCallbacks.connectionTerminated(LastSocketError());
|
||||
return;
|
||||
}
|
||||
@ -90,7 +90,6 @@ static int queuePacketToLbq(PQUEUED_AUDIO_PACKET *packet) {
|
||||
freePacketList(LbqFlushQueueItems(&packetQueue));
|
||||
}
|
||||
else if (err == LBQ_INTERRUPTED) {
|
||||
Limelog("Receive thread terminating #3\n");
|
||||
free(*packet);
|
||||
return 0;
|
||||
}
|
||||
@ -109,7 +108,7 @@ static void ReceiveThreadProc(void* context) {
|
||||
if (packet == NULL) {
|
||||
packet = (PQUEUED_AUDIO_PACKET) malloc(sizeof(*packet));
|
||||
if (packet == NULL) {
|
||||
Limelog("Receive thread terminating\n");
|
||||
Limelog("Audio Receive: malloc() failed\n");
|
||||
ListenerCallbacks.connectionTerminated(-1);
|
||||
return;
|
||||
}
|
||||
@ -117,7 +116,7 @@ static void ReceiveThreadProc(void* context) {
|
||||
|
||||
packet->size = (int) recv(rtpSocket, &packet->data[0], MAX_PACKET_SIZE, 0);
|
||||
if (packet->size <= 0) {
|
||||
Limelog("Receive thread terminating #2\n");
|
||||
Limelog("Audio Receive: recv() failed: %d\n", (int)LastSocketError());
|
||||
free(packet);
|
||||
ListenerCallbacks.connectionTerminated(LastSocketError());
|
||||
return;
|
||||
@ -172,7 +171,7 @@ static void DecoderThreadProc(void* context) {
|
||||
while (!PltIsThreadInterrupted(&decoderThread)) {
|
||||
err = LbqWaitForQueueElement(&packetQueue, (void**) &packet);
|
||||
if (err != LBQ_SUCCESS) {
|
||||
Limelog("Decoder thread terminating\n");
|
||||
// An exit signal was received
|
||||
return;
|
||||
}
|
||||
|
||||
@ -217,7 +216,7 @@ int startAudioStream(void) {
|
||||
|
||||
rtpSocket = bindUdpSocket(RemoteAddr.ss_family);
|
||||
if (rtpSocket == INVALID_SOCKET) {
|
||||
return LastSocketError();
|
||||
return LastSocketFail();
|
||||
}
|
||||
|
||||
err = PltCreateThread(UdpPingThreadProc, NULL, &udpPingThread);
|
||||
|
@ -134,6 +134,7 @@ static int resolveHostName(const char *host)
|
||||
hints.ai_flags = AI_ADDRCONFIG;
|
||||
err = getaddrinfo(host, NULL, &hints, &res);
|
||||
if (err != 0) {
|
||||
Limelog("getaddrinfo() failed: %d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -201,8 +201,8 @@ static void lossStatsThreadFunc(void* context) {
|
||||
|
||||
lossStatsPayload = malloc(payloadLengths[IDX_LOSS_STATS]);
|
||||
if (lossStatsPayload == NULL) {
|
||||
Limelog("Loss stats thread terminating #0\n");
|
||||
ListenerCallbacks.connectionTerminated(LastSocketError());
|
||||
Limelog("Loss Stats: malloc() failed\n");
|
||||
ListenerCallbacks.connectionTerminated(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -221,7 +221,7 @@ static void lossStatsThreadFunc(void* context) {
|
||||
if (!sendMessageAndForget(packetTypes[IDX_LOSS_STATS],
|
||||
payloadLengths[IDX_LOSS_STATS], lossStatsPayload)) {
|
||||
free(lossStatsPayload);
|
||||
Limelog("Loss stats thread terminating #1\n");
|
||||
Limelog("Loss Stats: Transaction failed: %d\n", (int)LastSocketError());
|
||||
ListenerCallbacks.connectionTerminated(LastSocketError());
|
||||
return;
|
||||
}
|
||||
@ -253,7 +253,7 @@ static void resyncThreadFunc(void* context) {
|
||||
|
||||
// Send the resync request and read the response
|
||||
if (!sendMessageAndDiscardReply(packetTypes[IDX_RESYNC], payloadLengths[IDX_RESYNC], payload)) {
|
||||
Limelog("Resync thread terminating #1\n");
|
||||
Limelog("Resync: Transaction failed: %d\n", (int)LastSocketError());
|
||||
ListenerCallbacks.connectionTerminated(LastSocketError());
|
||||
return;
|
||||
}
|
||||
@ -286,7 +286,7 @@ int startControlStream(void) {
|
||||
|
||||
ctlSock = connectTcpSocket(&RemoteAddr, RemoteAddrLen, 47995);
|
||||
if (ctlSock == INVALID_SOCKET) {
|
||||
return LastSocketError();
|
||||
return LastSocketFail();
|
||||
}
|
||||
|
||||
enableNoDelay(ctlSock);
|
||||
@ -295,14 +295,16 @@ int startControlStream(void) {
|
||||
if (!sendMessageAndDiscardReply(packetTypes[IDX_START_A],
|
||||
payloadLengths[IDX_START_A],
|
||||
preconstructedPayloads[IDX_START_A])) {
|
||||
return LastSocketError();
|
||||
Limelog("Start A failed: %d\n", (int)LastSocketError());
|
||||
return LastSocketFail();
|
||||
}
|
||||
|
||||
// Send START B
|
||||
if (!sendMessageAndDiscardReply(packetTypes[IDX_START_B],
|
||||
payloadLengths[IDX_START_B],
|
||||
preconstructedPayloads[IDX_START_B])) {
|
||||
return LastSocketError();
|
||||
Limelog("Start B failed: %d\n", (int)LastSocketError());
|
||||
return LastSocketFail();
|
||||
}
|
||||
|
||||
err = PltCreateThread(lossStatsThreadFunc, NULL, &lossStatsThread);
|
||||
|
@ -132,8 +132,6 @@ static void inputSendThreadProc(void* context) {
|
||||
|
||||
err = LbqWaitForQueueElement(&packetQueue, (void**) &holder);
|
||||
if (err != LBQ_SUCCESS) {
|
||||
Limelog("Input thread terminating #1\n");
|
||||
ListenerCallbacks.connectionTerminated(err);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -244,7 +242,7 @@ static void inputSendThreadProc(void* context) {
|
||||
(unsigned char*) encryptedBuffer, &encryptedSize);
|
||||
free(holder);
|
||||
if (err != OAES_RET_SUCCESS) {
|
||||
Limelog("Input thread terminating #2\n");
|
||||
Limelog("Input: Encryption failed: %d\n", (int)err);
|
||||
ListenerCallbacks.connectionTerminated(err);
|
||||
return;
|
||||
}
|
||||
@ -263,8 +261,8 @@ static void inputSendThreadProc(void* context) {
|
||||
err = send(inputSock, (const char*) &encryptedBuffer[OAES_DATA_OFFSET - sizeof(encryptedLengthPrefix)],
|
||||
encryptedSize + sizeof(encryptedLengthPrefix), 0);
|
||||
if (err <= 0) {
|
||||
Limelog("Input thread terminating #3\n");
|
||||
ListenerCallbacks.connectionTerminated(err);
|
||||
Limelog("Input: send() failed: %d\n", (int)LastSocketError());
|
||||
ListenerCallbacks.connectionTerminated(LastSocketError());
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -276,7 +274,7 @@ int startInputStream(void) {
|
||||
|
||||
inputSock = connectTcpSocket(&RemoteAddr, RemoteAddrLen, 35043);
|
||||
if (inputSock == INVALID_SOCKET) {
|
||||
return LastSocketError();
|
||||
return LastSocketFail();
|
||||
}
|
||||
|
||||
enableNoDelay(inputSock);
|
||||
|
@ -30,6 +30,7 @@ SOCKET bindUdpSocket(int addrfamily) {
|
||||
|
||||
s = socket(addrfamily, SOCK_DGRAM, IPPROTO_UDP);
|
||||
if (s == INVALID_SOCKET) {
|
||||
Limelog("socket() failed: %d\n", (int)LastSocketError());
|
||||
return INVALID_SOCKET;
|
||||
}
|
||||
|
||||
@ -40,6 +41,7 @@ SOCKET bindUdpSocket(int addrfamily) {
|
||||
sizeof(struct sockaddr_in) :
|
||||
sizeof(struct sockaddr_in6)) == SOCKET_ERROR) {
|
||||
err = LastSocketError();
|
||||
Limelog("bind() failed: %d\n", err);
|
||||
closesocket(s);
|
||||
SetLastSocketError(err);
|
||||
return INVALID_SOCKET;
|
||||
@ -68,6 +70,7 @@ SOCKET connectTcpSocket(struct sockaddr_storage *dstaddr, SOCKADDR_LEN addrlen,
|
||||
|
||||
s = socket(dstaddr->ss_family, SOCK_STREAM, IPPROTO_TCP);
|
||||
if (s == INVALID_SOCKET) {
|
||||
Limelog("socket() failed: %d\n", (int)LastSocketError());
|
||||
return INVALID_SOCKET;
|
||||
}
|
||||
|
||||
@ -81,6 +84,7 @@ SOCKET connectTcpSocket(struct sockaddr_storage *dstaddr, SOCKADDR_LEN addrlen,
|
||||
addr.sin6_port = htons(port);
|
||||
if (connect(s, (struct sockaddr*) &addr, addrlen) == SOCKET_ERROR) {
|
||||
err = LastSocketError();
|
||||
Limelog("connect() failed: %d\n", err);
|
||||
closesocket(s);
|
||||
SetLastSocketError(err);
|
||||
return INVALID_SOCKET;
|
||||
|
@ -33,6 +33,8 @@ typedef ssize_t SOCK_RET;
|
||||
typedef socklen_t SOCKADDR_LEN;
|
||||
#endif
|
||||
|
||||
#define LastSocketFail() ((LastSocketError() != 0) ? LastSocketError() : -1)
|
||||
|
||||
// IPv6 addresses have 2 extra characters for URL escaping
|
||||
#define URLSAFESTRING_LEN INET6_ADDRSTRLEN+2
|
||||
void addrToUrlSafeString(struct sockaddr_storage *addr, char* string);
|
||||
|
@ -78,15 +78,18 @@ static int initializeRtspRequest(PRTSP_MESSAGE msg, char* command, char* target)
|
||||
}
|
||||
|
||||
/* Send RTSP message and get response */
|
||||
static int transactRtspMessage(PRTSP_MESSAGE request, PRTSP_MESSAGE response) {
|
||||
static int transactRtspMessage(PRTSP_MESSAGE request, PRTSP_MESSAGE response, int* error) {
|
||||
SOCK_RET err;
|
||||
int ret = 0;
|
||||
int offset;
|
||||
char* serializedMessage = NULL;
|
||||
int messageLen;
|
||||
|
||||
*error = -1;
|
||||
|
||||
sock = connectTcpSocket(&RemoteAddr, RemoteAddrLen, 48010);
|
||||
if (sock == INVALID_SOCKET) {
|
||||
*error = LastSocketError();
|
||||
return ret;
|
||||
}
|
||||
enableNoDelay(sock);
|
||||
@ -94,12 +97,15 @@ static int transactRtspMessage(PRTSP_MESSAGE request, PRTSP_MESSAGE response) {
|
||||
serializedMessage = serializeRtspMessage(request, &messageLen);
|
||||
if (serializedMessage == NULL) {
|
||||
closesocket(sock);
|
||||
sock = INVALID_SOCKET;
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Send our message
|
||||
err = send(sock, serializedMessage, messageLen, 0);
|
||||
if (err == SOCKET_ERROR) {
|
||||
*error = LastSocketError();
|
||||
Limelog("Failed to send RTSP message: %d\n", *error);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
@ -147,13 +153,15 @@ void terminateRtspHandshake(void) {
|
||||
}
|
||||
|
||||
/* Send RTSP OPTIONS request */
|
||||
static int requestOptions(PRTSP_MESSAGE response) {
|
||||
static int requestOptions(PRTSP_MESSAGE response, int* error) {
|
||||
RTSP_MESSAGE request;
|
||||
int ret;
|
||||
|
||||
*error = -1;
|
||||
|
||||
ret = initializeRtspRequest(&request, "OPTIONS", rtspTargetUrl);
|
||||
if (ret != 0) {
|
||||
ret = transactRtspMessage(&request, response);
|
||||
ret = transactRtspMessage(&request, response, error);
|
||||
freeMessage(&request);
|
||||
}
|
||||
|
||||
@ -161,9 +169,11 @@ static int requestOptions(PRTSP_MESSAGE response) {
|
||||
}
|
||||
|
||||
/* Send RTSP DESCRIBE request */
|
||||
static int requestDescribe(PRTSP_MESSAGE response) {
|
||||
static int requestDescribe(PRTSP_MESSAGE response, int* error) {
|
||||
RTSP_MESSAGE request;
|
||||
int ret;
|
||||
|
||||
*error = -1;
|
||||
|
||||
ret = initializeRtspRequest(&request, "DESCRIBE", rtspTargetUrl);
|
||||
if (ret != 0) {
|
||||
@ -171,7 +181,7 @@ static int requestDescribe(PRTSP_MESSAGE response) {
|
||||
"application/sdp") &&
|
||||
addOption(&request, "If-Modified-Since",
|
||||
"Thu, 01 Jan 1970 00:00:00 GMT")) {
|
||||
ret = transactRtspMessage(&request, response);
|
||||
ret = transactRtspMessage(&request, response, error);
|
||||
}
|
||||
else {
|
||||
ret = 0;
|
||||
@ -183,9 +193,11 @@ static int requestDescribe(PRTSP_MESSAGE response) {
|
||||
}
|
||||
|
||||
/* Send RTSP SETUP request */
|
||||
static int setupStream(PRTSP_MESSAGE response, char* target) {
|
||||
static int setupStream(PRTSP_MESSAGE response, char* target, int* error) {
|
||||
RTSP_MESSAGE request;
|
||||
int ret;
|
||||
|
||||
*error = -1;
|
||||
|
||||
ret = initializeRtspRequest(&request, "SETUP", target);
|
||||
if (ret != 0) {
|
||||
@ -199,7 +211,7 @@ static int setupStream(PRTSP_MESSAGE response, char* target) {
|
||||
if (addOption(&request, "Transport", " ") &&
|
||||
addOption(&request, "If-Modified-Since",
|
||||
"Thu, 01 Jan 1970 00:00:00 GMT")) {
|
||||
ret = transactRtspMessage(&request, response);
|
||||
ret = transactRtspMessage(&request, response, error);
|
||||
}
|
||||
else {
|
||||
ret = 0;
|
||||
@ -213,14 +225,16 @@ static int setupStream(PRTSP_MESSAGE response, char* target) {
|
||||
}
|
||||
|
||||
/* Send RTSP PLAY request*/
|
||||
static int playStream(PRTSP_MESSAGE response, char* target) {
|
||||
static int playStream(PRTSP_MESSAGE response, char* target, int* error) {
|
||||
RTSP_MESSAGE request;
|
||||
int ret;
|
||||
|
||||
*error = -1;
|
||||
|
||||
ret = initializeRtspRequest(&request, "PLAY", target);
|
||||
if (ret != 0) {
|
||||
if (addOption(&request, "Session", sessionIdString)) {
|
||||
ret = transactRtspMessage(&request, response);
|
||||
ret = transactRtspMessage(&request, response, error);
|
||||
}
|
||||
else {
|
||||
ret = 0;
|
||||
@ -232,11 +246,13 @@ static int playStream(PRTSP_MESSAGE response, char* target) {
|
||||
}
|
||||
|
||||
/* Send RTSP ANNOUNCE message */
|
||||
static int sendVideoAnnounce(PRTSP_MESSAGE response, PSTREAM_CONFIGURATION streamConfig) {
|
||||
static int sendVideoAnnounce(PRTSP_MESSAGE response, int* error) {
|
||||
RTSP_MESSAGE request;
|
||||
int ret;
|
||||
int payloadLength;
|
||||
char payloadLengthStr[16];
|
||||
|
||||
*error = -1;
|
||||
|
||||
ret = initializeRtspRequest(&request, "ANNOUNCE", "streamid=video");
|
||||
if (ret != 0) {
|
||||
@ -259,7 +275,7 @@ static int sendVideoAnnounce(PRTSP_MESSAGE response, PSTREAM_CONFIGURATION strea
|
||||
goto FreeMessage;
|
||||
}
|
||||
|
||||
ret = transactRtspMessage(&request, response);
|
||||
ret = transactRtspMessage(&request, response, error);
|
||||
|
||||
FreeMessage:
|
||||
freeMessage(&request);
|
||||
@ -287,16 +303,17 @@ int performRtspHandshake(void) {
|
||||
|
||||
{
|
||||
RTSP_MESSAGE response;
|
||||
int error = -1;
|
||||
|
||||
if (!requestOptions(&response)) {
|
||||
Limelog("RTSP OPTIONS request failed\n");
|
||||
return -1;
|
||||
if (!requestOptions(&response, &error)) {
|
||||
Limelog("RTSP OPTIONS request failed: %d\n", error);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (response.message.response.statusCode != 200) {
|
||||
Limelog("RTSP OPTIONS request failed: %d\n",
|
||||
response.message.response.statusCode);
|
||||
return -1;
|
||||
return response.message.response.statusCode;
|
||||
}
|
||||
|
||||
freeMessage(&response);
|
||||
@ -304,16 +321,17 @@ int performRtspHandshake(void) {
|
||||
|
||||
{
|
||||
RTSP_MESSAGE response;
|
||||
int error = -1;
|
||||
|
||||
if (!requestDescribe(&response)) {
|
||||
Limelog("RTSP DESCRIBE request failed\n");
|
||||
return -1;
|
||||
if (!requestDescribe(&response, &error)) {
|
||||
Limelog("RTSP DESCRIBE request failed: %d\n", error);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (response.message.response.statusCode != 200) {
|
||||
Limelog("RTSP DESCRIBE request failed: %d\n",
|
||||
response.message.response.statusCode);
|
||||
return -1;
|
||||
return response.message.response.statusCode;
|
||||
}
|
||||
|
||||
freeMessage(&response);
|
||||
@ -322,16 +340,17 @@ int performRtspHandshake(void) {
|
||||
{
|
||||
RTSP_MESSAGE response;
|
||||
char* sessionId;
|
||||
int error = -1;
|
||||
|
||||
if (!setupStream(&response, "streamid=audio")) {
|
||||
Limelog("RTSP SETUP streamid=audio request failed\n");
|
||||
return -1;
|
||||
if (!setupStream(&response, "streamid=audio", &error)) {
|
||||
Limelog("RTSP SETUP streamid=audio request failed: %d\n", error);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (response.message.response.statusCode != 200) {
|
||||
Limelog("RTSP SETUP streamid=audio request failed: %d\n",
|
||||
response.message.response.statusCode);
|
||||
return -1;
|
||||
return response.message.response.statusCode;
|
||||
}
|
||||
|
||||
sessionId = getOptionContent(response.options, "Session");
|
||||
@ -348,16 +367,17 @@ int performRtspHandshake(void) {
|
||||
|
||||
{
|
||||
RTSP_MESSAGE response;
|
||||
int error = -1;
|
||||
|
||||
if (!setupStream(&response, "streamid=video")) {
|
||||
Limelog("RTSP SETUP streamid=video request failed\n");
|
||||
return -1;
|
||||
if (!setupStream(&response, "streamid=video", &error)) {
|
||||
Limelog("RTSP SETUP streamid=video request failed: %d\n", error);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (response.message.response.statusCode != 200) {
|
||||
Limelog("RTSP SETUP streamid=video request failed: %d\n",
|
||||
response.message.response.statusCode);
|
||||
return -1;
|
||||
return response.message.response.statusCode;
|
||||
}
|
||||
|
||||
freeMessage(&response);
|
||||
@ -365,16 +385,17 @@ int performRtspHandshake(void) {
|
||||
|
||||
{
|
||||
RTSP_MESSAGE response;
|
||||
int error = -1;
|
||||
|
||||
if (!sendVideoAnnounce(&response, &StreamConfig)) {
|
||||
Limelog("RTSP ANNOUNCE request failed\n");
|
||||
return -1;
|
||||
if (!sendVideoAnnounce(&response, &error)) {
|
||||
Limelog("RTSP ANNOUNCE request failed: %d\n", error);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (response.message.response.statusCode != 200) {
|
||||
Limelog("RTSP ANNOUNCE request failed: %d\n",
|
||||
response.message.response.statusCode);
|
||||
return -1;
|
||||
return response.message.response.statusCode;
|
||||
}
|
||||
|
||||
freeMessage(&response);
|
||||
@ -382,16 +403,17 @@ int performRtspHandshake(void) {
|
||||
|
||||
{
|
||||
RTSP_MESSAGE response;
|
||||
int error = -1;
|
||||
|
||||
if (!playStream(&response, "streamid=video")) {
|
||||
Limelog("RTSP PLAY streamid=video request failed\n");
|
||||
return -1;
|
||||
if (!playStream(&response, "streamid=video", &error)) {
|
||||
Limelog("RTSP PLAY streamid=video request failed: %d\n", error);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (response.message.response.statusCode != 200) {
|
||||
Limelog("RTSP PLAY streamid=video failed: %d\n",
|
||||
response.message.response.statusCode);
|
||||
return -1;
|
||||
return response.message.response.statusCode;
|
||||
}
|
||||
|
||||
freeMessage(&response);
|
||||
@ -399,16 +421,17 @@ int performRtspHandshake(void) {
|
||||
|
||||
{
|
||||
RTSP_MESSAGE response;
|
||||
int error = -1;
|
||||
|
||||
if (!playStream(&response, "streamid=audio")) {
|
||||
Limelog("RTSP PLAY streamid=audio request failed\n");
|
||||
return -1;
|
||||
if (!playStream(&response, "streamid=audio", &error)) {
|
||||
Limelog("RTSP PLAY streamid=audio request failed: %d\n", error);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (response.message.response.statusCode != 200) {
|
||||
Limelog("RTSP PLAY streamid=audio failed: %d\n",
|
||||
response.message.response.statusCode);
|
||||
return -1;
|
||||
return response.message.response.statusCode;
|
||||
}
|
||||
|
||||
freeMessage(&response);
|
||||
|
@ -185,7 +185,7 @@ static void reassembleAvcFrame(int frameNumber) {
|
||||
nalChainDataLength = 0;
|
||||
|
||||
if (LbqOfferQueueItem(&decodeUnitQueue, qdu, &qdu->entry) == LBQ_BOUND_EXCEEDED) {
|
||||
Limelog("Decode unit queue overflow\n");
|
||||
Limelog("Video decode unit queue overflow\n");
|
||||
|
||||
// Clear frame state and wait for an IDR
|
||||
nalChainHead = qdu->decodeUnit.bufferList;
|
||||
|
@ -49,7 +49,7 @@ static void UdpPingThreadProc(void *context) {
|
||||
while (!PltIsThreadInterrupted(&udpPingThread)) {
|
||||
err = sendto(rtpSocket, pingData, sizeof(pingData), 0, (struct sockaddr*)&saddr, RemoteAddrLen);
|
||||
if (err != sizeof(pingData)) {
|
||||
Limelog("UDP ping thread terminating #1\n");
|
||||
Limelog("Video Ping: send() failed: %d\n", (int)LastSocketError());
|
||||
ListenerCallbacks.connectionTerminated(LastSocketError());
|
||||
return;
|
||||
}
|
||||
@ -75,7 +75,7 @@ static void ReceiveThreadProc(void* context) {
|
||||
if (buffer == NULL) {
|
||||
buffer = (char*) malloc(bufferSize);
|
||||
if (buffer == NULL) {
|
||||
Limelog("Receive thread terminating\n");
|
||||
Limelog("Video Receive: malloc() failed\n");
|
||||
ListenerCallbacks.connectionTerminated(-1);
|
||||
return;
|
||||
}
|
||||
@ -83,7 +83,7 @@ static void ReceiveThreadProc(void* context) {
|
||||
|
||||
err = (int) recv(rtpSocket, buffer, receiveSize, 0);
|
||||
if (err <= 0) {
|
||||
Limelog("Receive thread terminating #2\n");
|
||||
Limelog("Video Receive: recv() failed: %d\n", (int)LastSocketError());
|
||||
ListenerCallbacks.connectionTerminated(LastSocketError());
|
||||
break;
|
||||
}
|
||||
@ -123,7 +123,6 @@ static void DecoderThreadProc(void* context) {
|
||||
PQUEUED_DECODE_UNIT qdu;
|
||||
while (!PltIsThreadInterrupted(&decoderThread)) {
|
||||
if (!getNextQueuedDecodeUnit(&qdu)) {
|
||||
Limelog("Decoder thread terminating\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user