int KvsApp_setoption()

in src/source/app/kvsapp.c [996:1202]


int KvsApp_setoption(KvsAppHandle handle, const char *pcOptionName, const char *pValue)
{
    int res = ERRNO_NONE;
    KvsApp_t *pKvs = (KvsApp_t *)handle;

    if (pKvs == NULL || pcOptionName == NULL)
    {
        res = ERRNO_FAIL;
    }
    else
    {
        if (strcmp(pcOptionName, (const char *)OPTION_AWS_ACCESS_KEY_ID) == 0)
        {
            if (mallocAndStrcpy_s(&(pKvs->pAwsAccessKeyId), pValue) != 0)
            {
                LogError("Failed to set pAwsAccessKeyId");
                res = ERRNO_FAIL;
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_AWS_SECRET_ACCESS_KEY) == 0)
        {
            if (mallocAndStrcpy_s(&(pKvs->pAwsSecretAccessKey), pValue) != 0)
            {
                LogError("Failed to set pAwsSecretAccessKey");
                res = ERRNO_FAIL;
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_IOT_CREDENTIAL_HOST) == 0)
        {
            if (mallocAndStrcpy_s(&(pKvs->pIotCredentialHost), pValue) != 0)
            {
                LogError("Failed to set pIotX509RootCa");
                res = ERRNO_FAIL;
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_IOT_ROLE_ALIAS) == 0)
        {
            if (mallocAndStrcpy_s(&(pKvs->pIotRoleAlias), pValue) != 0)
            {
                LogError("Failed to set pIotX509RootCa");
                res = ERRNO_FAIL;
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_IOT_THING_NAME) == 0)
        {
            if (mallocAndStrcpy_s(&(pKvs->pIotThingName), pValue) != 0)
            {
                LogError("Failed to set pIotX509RootCa");
                res = ERRNO_FAIL;
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_IOT_X509_ROOTCA) == 0)
        {
            if (mallocAndStrcpy_s(&(pKvs->pIotX509RootCa), pValue) != 0)
            {
                LogError("Failed to set pIotX509RootCa");
                res = ERRNO_FAIL;
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_IOT_X509_CERT) == 0)
        {
            if (mallocAndStrcpy_s(&(pKvs->pIotX509Certificate), pValue) != 0)
            {
                LogError("Failed to set pIotX509Certificate");
                res = ERRNO_FAIL;
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_IOT_X509_KEY) == 0)
        {
            if (mallocAndStrcpy_s(&(pKvs->pIotX509PrivateKey), pValue) != 0)
            {
                LogError("Failed to set pIotX509PrivateKey");
                res = ERRNO_FAIL;
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_KVS_DATA_RETENTION_IN_HOURS) == 0)
        {
            if (pValue == NULL)
            {
                LogError("Invalid value for KVS data retention in hours");
                res = ERRNO_FAIL;
            }
            else
            {
                pKvs->uDataRetentionInHours = *((unsigned int *)(pValue));
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_KVS_VIDEO_TRACK_INFO) == 0)
        {
            if (pValue == NULL)
            {
                LogError("Invalid value set to KVS video track info");
                res = ERRNO_FAIL;
            }
            else if ((pKvs->pVideoTrackInfo = prvCopyVideoTrackInfo((VideoTrackInfo_t *)pValue)) == NULL)
            {
                LogError("failed to copy video track info");
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_KVS_AUDIO_TRACK_INFO) == 0)
        {
            if (pValue == NULL)
            {
                LogError("Invalid value set to KVS audio track info");
                res = ERRNO_FAIL;
            }
            else if ((pKvs->pAudioTrackInfo = prvCopyAudioTrackInfo((AudioTrackInfo_t *)pValue)) == NULL)
            {
                LogError("failed to copy audio track info");
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_STREAM_POLICY) == 0)
        {
            if (pValue == NULL)
            {
                LogError("Invalid value set to stream strategy");
                res = ERRNO_FAIL;
            }
            else
            {
                KvsApp_streamPolicy_t xPolicy = *((KvsApp_streamPolicy_t *)pValue);
                if (xPolicy < STREAM_POLICY_NONE || xPolicy >= STREAM_POLICY_MAX)
                {
                    LogError("Invalid policy val: %d", xPolicy);
                }
                else
                {
                    pKvs->xStrategy.xPolicy = xPolicy;
                    if (pKvs->xStrategy.xPolicy == STREAM_POLICY_RING_BUFFER)
                    {
                        pKvs->xStrategy.xRingBufferPara.uMemLimit = DEFAULT_RING_BUFFER_MEM_LIMIT;
                    }
                }
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_STREAM_POLICY_RING_BUFFER_MEM_LIMIT) == 0)
        {
            if (pValue == NULL)
            {
                LogError("Invalid value set to parameter of ring buffer policy");
                res = ERRNO_FAIL;
            }
            else if (pKvs->xStrategy.xPolicy != STREAM_POLICY_RING_BUFFER)
            {
                LogError("Cannot set parameter to policy: %d ", (int)(pKvs->xStrategy.xPolicy));
                res = ERRNO_FAIL;
            }
            else
            {
                size_t uMemLimit = *((size_t *)pValue);
                pKvs->xStrategy.xRingBufferPara.uMemLimit = uMemLimit;
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_NETIO_CONNECTION_TIMEOUT) == 0)
        {
            if (pValue == NULL)
            {
                LogError("Invalid value set to connection timeout");
                res = ERRNO_FAIL;
            }
            else
            {
                unsigned int uConnectionTimeoutMs = *((unsigned int *)pValue);
                pKvs->xServicePara.uRecvTimeoutMs = uConnectionTimeoutMs;
                pKvs->xServicePara.uSendTimeoutMs = uConnectionTimeoutMs;
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_NETIO_STREAMING_RECV_TIMEOUT) == 0)
        {
            if (pValue == NULL)
            {
                LogError("Invalid value set to streaming recv timeout");
                res = ERRNO_FAIL;
            }
            else
            {
                unsigned int uRecvTimeoutMs = *((unsigned int *)pValue);
                pKvs->xPutMediaPara.uRecvTimeoutMs = uRecvTimeoutMs;

                /* Try to update receive timeout if it's already streaming. */
                Kvs_putMediaUpdateRecvTimeout(pKvs->xPutMediaHandle, uRecvTimeoutMs);
            }
        }
        else if (strcmp(pcOptionName, (const char *)OPTION_NETIO_STREAMING_SEND_TIMEOUT) == 0)
        {
            if (pValue == NULL)
            {
                LogError("Invalid value set to streaming send timeout");
                res = ERRNO_FAIL;
            }
            else
            {
                unsigned int uSendTimeoutMs = *((unsigned int *)pValue);
                pKvs->xPutMediaPara.uSendTimeoutMs = uSendTimeoutMs;

                /* Try to update send timeout if it's already streaming. */
                Kvs_putMediaUpdateSendTimeout(pKvs->xPutMediaHandle, uSendTimeoutMs);
            }
        }
        else
        {
            /* TODO: Propagate this option to KVS stream. */
        }
    }

    return res;
}