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;
}