in main/AppCommon.c [275:309]
static VOID onIceCandidateHandler(UINT64 userData, PCHAR candidateJson)
{
STATUS retStatus = STATUS_SUCCESS;
PStreamingSession pStreamingSession = (PStreamingSession) userData;
PSignalingMessage pMessage = NULL;
CHK(pStreamingSession != NULL, STATUS_APP_COMMON_NULL_ARG);
CHK(NULL != (pMessage = (PSignalingMessage) MEMCALLOC(1, SIZEOF(SignalingMessage))), STATUS_APP_COMMON_NOT_ENOUGH_MEMORY);
if (candidateJson == NULL) {
DLOGD("ice candidate gathering finished");
ATOMIC_STORE_BOOL(&pStreamingSession->candidateGatheringDone, TRUE);
// if application is master and non-trickle ice, send answer now.
if (getAppSignalingRole(&pStreamingSession->pAppConfiguration->appSignaling) == SIGNALING_CHANNEL_ROLE_TYPE_MASTER &&
!pStreamingSession->remoteCanTrickleIce) {
CHK_STATUS((createAnswer(pStreamingSession->pPeerConnection, &pStreamingSession->answerSessionDescriptionInit)));
CHK_STATUS((respondWithAnswer(pStreamingSession)));
DLOGD("time taken to send answer %" PRIu64 " ms", (GETTIME() - pStreamingSession->offerReceiveTime) / HUNDREDS_OF_NANOS_IN_A_MILLISECOND);
}
} else if (pStreamingSession->remoteCanTrickleIce && ATOMIC_LOAD_BOOL(&pStreamingSession->peerIdReceived)) {
pMessage->version = SIGNALING_MESSAGE_CURRENT_VERSION;
pMessage->messageType = SIGNALING_MESSAGE_TYPE_ICE_CANDIDATE;
STRNCPY(pMessage->peerClientId, pStreamingSession->peerId, MAX_SIGNALING_CLIENT_ID_LEN);
pMessage->payloadLen = (UINT32) STRNLEN(candidateJson, MAX_SIGNALING_MESSAGE_LEN);
STRNCPY(pMessage->payload, candidateJson, pMessage->payloadLen);
pMessage->correlationId[0] = '\0';
CHK_STATUS((sendAppSignalingMessage(&pStreamingSession->pAppConfiguration->appSignaling, pMessage)));
}
CleanUp:
SAFE_MEMFREE(pMessage);
CHK_LOG_ERR((retStatus));
}