STATUS validateClientCallbacks()

in src/client/src/InputValidator.c [16:113]


STATUS validateClientCallbacks(PDeviceInfo pDeviceInfo, PClientCallbacks pClientCallbacks)
{
    STATUS retStatus = STATUS_SUCCESS;

    CHK(pClientCallbacks != NULL && pDeviceInfo != NULL, STATUS_NULL_ARG);
    CHK(pClientCallbacks->version <= CALLBACKS_CURRENT_VERSION, STATUS_INVALID_CALLBACKS_VERSION);

    // Most of the callbacks are optional
    // Check for presence of the Service call callbacks
    CHK(pClientCallbacks->createStreamFn != NULL && pClientCallbacks->describeStreamFn != NULL && pClientCallbacks->getStreamingEndpointFn != NULL &&
            pClientCallbacks->putStreamFn != NULL && pClientCallbacks->getStreamingTokenFn != NULL && pClientCallbacks->createDeviceFn != NULL,
        STATUS_SERVICE_CALL_CALLBACKS_MISSING);

    // If we have tags then the tagResource callback should be present
    CHK(pDeviceInfo->tagCount == 0 || pClientCallbacks->tagResourceFn != NULL, STATUS_SERVICE_CALL_CALLBACKS_MISSING);

    // Fix-up the basic callbacks by providing the default if none selected
    if (pClientCallbacks->getCurrentTimeFn == NULL) {
        pClientCallbacks->getCurrentTimeFn = kinesisVideoStreamDefaultGetCurrentTime;
    }

    if (pClientCallbacks->createMutexFn == NULL) {
        pClientCallbacks->createMutexFn = kinesisVideoStreamDefaultCreateMutex;
    }

    if (pClientCallbacks->lockMutexFn == NULL) {
        pClientCallbacks->lockMutexFn = kinesisVideoStreamDefaultLockMutex;
    }

    if (pClientCallbacks->unlockMutexFn == NULL) {
        pClientCallbacks->unlockMutexFn = kinesisVideoStreamDefaultUnlockMutex;
    }

    if (pClientCallbacks->tryLockMutexFn == NULL) {
        pClientCallbacks->tryLockMutexFn = kinesisVideoStreamDefaultTryLockMutex;
    }

    if (pClientCallbacks->freeMutexFn == NULL) {
        pClientCallbacks->freeMutexFn = kinesisVideoStreamDefaultFreeMutex;
    }

    if (pClientCallbacks->createConditionVariableFn == NULL) {
        pClientCallbacks->createConditionVariableFn = kinesisVideoStreamDefaultCreateConditionVariable;
    }

    if (pClientCallbacks->signalConditionVariableFn == NULL) {
        pClientCallbacks->signalConditionVariableFn = kinesisVideoStreamDefaultSignalConditionVariable;
    }

    if (pClientCallbacks->broadcastConditionVariableFn == NULL) {
        pClientCallbacks->broadcastConditionVariableFn = kinesisVideoStreamDefaultBroadcastConditionVariable;
    }

    if (pClientCallbacks->waitConditionVariableFn == NULL) {
        pClientCallbacks->waitConditionVariableFn = kinesisVideoStreamDefaultWaitConditionVariable;
    }

    if (pClientCallbacks->freeConditionVariableFn == NULL) {
        pClientCallbacks->freeConditionVariableFn = kinesisVideoStreamDefaultFreeConditionVariable;
    }

    if (pClientCallbacks->streamReadyFn == NULL) {
        pClientCallbacks->streamReadyFn = kinesisVideoStreamDefaultStreamReady;
    }

    if (pClientCallbacks->streamClosedFn == NULL) {
        pClientCallbacks->streamClosedFn = kinesisVideoStreamDefaultEndOfStream;
    }

    if (pClientCallbacks->clientReadyFn == NULL) {
        pClientCallbacks->clientReadyFn = kinesisVideoStreamDefaultClientReady;
    }

    if (pClientCallbacks->streamDataAvailableFn == NULL) {
        pClientCallbacks->streamDataAvailableFn = kinesisVideoStreamDefaultStreamDataAvailable;
    }

    if (pClientCallbacks->clientShutdownFn == NULL) {
        pClientCallbacks->clientShutdownFn = kinesisVideoStreamDefaultClientShutdown;
    }

    if (pClientCallbacks->streamShutdownFn == NULL) {
        pClientCallbacks->streamShutdownFn = kinesisVideoStreamDefaultStreamShutdown;
    }

    if (pClientCallbacks->getRandomNumberFn == NULL) {
        // Call to seed the number generator
        SRAND((UINT32) pClientCallbacks->getCurrentTimeFn(pClientCallbacks->customData));
        pClientCallbacks->getRandomNumberFn = kinesisVideoStreamDefaultGetRandomNumber;
    }

    if (pClientCallbacks->logPrintFn != NULL) {
        globalCustomLogPrintFn = pClientCallbacks->logPrintFn;
    }

CleanUp:
    return retStatus;
}