Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit bf80ab7

Browse files
committedApr 10, 2025·
Add Control Plane URI env var override to the samples
1 parent 641c103 commit bf80ab7

9 files changed

+141
-25
lines changed
 

‎CMakeLists.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -432,16 +432,16 @@ if(BUILD_COMMON_CURL)
432432
FILES ${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc
433433
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
434434

435-
add_executable(kvsVideoOnlyRealtimeStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyRealtimeStreamingSample.c)
435+
add_executable(kvsVideoOnlyRealtimeStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyRealtimeStreamingSample.c ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/Common.c)
436436
target_link_libraries(kvsVideoOnlyRealtimeStreamingSample cproducer)
437437

438-
add_executable(kvsVideoOnlyOfflineStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyOfflineStreamingSample.c)
438+
add_executable(kvsVideoOnlyOfflineStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyOfflineStreamingSample.c ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/Common.c)
439439
target_link_libraries(kvsVideoOnlyOfflineStreamingSample cproducer)
440440

441-
add_executable(kvsAudioVideoStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioVideoStreamingSample.c)
441+
add_executable(kvsAudioVideoStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioVideoStreamingSample.c ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/Common.c)
442442
target_link_libraries(kvsAudioVideoStreamingSample cproducer)
443443

444-
add_executable(kvsAudioOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioOnlyStreamingSample.c)
444+
add_executable(kvsAudioOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioOnlyStreamingSample.c ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/Common.c)
445445
target_link_libraries(kvsAudioOnlyStreamingSample cproducer)
446446

447447
if (BUILD_TEST)

‎samples/Common.c

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#include "Samples.h"
2+
3+
VOID getEndpointOverride(PCHAR outUrl, SIZE_T maxLen)
4+
{
5+
const char* envValue = GETENV(CONTROL_PLANE_URI_ENV_VAR);
6+
7+
if (IS_NULL_OR_EMPTY_STRING(envValue)) {
8+
outUrl[0] = '\0';
9+
return;
10+
}
11+
12+
if (STRNCMP(envValue, "https://", 8) != 0) {
13+
SNPRINTF(outUrl, maxLen, "https://%s", envValue);
14+
return;
15+
}
16+
17+
SNPRINTF(outUrl, maxLen, "%s", envValue);
18+
}

‎samples/KvsAudioOnlyStreamingSample.c

+7-4
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ INT32 main(INT32 argc, CHAR* argv[])
104104
CHAR audioCodec[AUDIO_CODEC_NAME_MAX_LENGTH];
105105
BYTE aacAudioCpd[KVS_AAC_CPD_SIZE_BYTE];
106106
BYTE alawAudioCpd[KVS_PCM_CPD_SIZE_BYTE];
107+
CHAR endpointOverride[MAX_URI_CHAR_LEN];
107108

108109
MEMSET(&data, 0x00, SIZEOF(SampleCustomData));
109110

@@ -219,12 +220,14 @@ INT32 main(INT32 argc, CHAR* argv[])
219220
data.startTime = GETTIME();
220221
data.firstFrame = TRUE;
221222

223+
getEndpointOverride(endpointOverride, SIZEOF(endpointOverride));
222224
#ifdef IOT_CORE_ENABLE_CREDENTIALS
223-
CHK_STATUS(createDefaultCallbacksProviderWithIotCertificate(pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, cacertPath,
224-
pIotCoreRoleAlias, pIotCoreThingName, region, NULL, NULL, &pClientCallbacks));
225+
CHK_STATUS(createDefaultCallbacksProviderWithIotCertificateAndEndpointOverride(pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey,
226+
cacertPath, pIotCoreRoleAlias, pIotCoreThingName, region, NULL,
227+
NULL, GETENV(CONTROL_PLANE_URI_ENV_VAR), &pClientCallbacks));
225228
#else
226-
CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL,
227-
&pClientCallbacks));
229+
CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentialsAndEndpointOverride(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath,
230+
NULL, NULL, endpointOverride, &pClientCallbacks));
228231
#endif
229232

230233
if (NULL != GETENV(ENABLE_FILE_LOGGING)) {

‎samples/KvsAudioVideoStreamingSample.c

+8-4
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ INT32 main(INT32 argc, CHAR* argv[])
188188
BYTE aacAudioCpd[KVS_AAC_CPD_SIZE_BYTE];
189189
BYTE alawAudioCpd[KVS_PCM_CPD_SIZE_BYTE];
190190
VIDEO_CODEC_ID videoCodecID = VIDEO_CODEC_ID_H264;
191+
CHAR endpointOverride[MAX_URI_CHAR_LEN];
191192

192193
MEMSET(&data, 0x00, SIZEOF(SampleCustomData));
193194

@@ -324,12 +325,15 @@ INT32 main(INT32 argc, CHAR* argv[])
324325

325326
data.startTime = GETTIME();
326327
data.firstFrame = TRUE;
328+
329+
getEndpointOverride(endpointOverride, SIZEOF(endpointOverride));
327330
#ifdef IOT_CORE_ENABLE_CREDENTIALS
328-
CHK_STATUS(createDefaultCallbacksProviderWithIotCertificate(pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, cacertPath,
329-
pIotCoreRoleAlias, pIotCoreThingName, region, NULL, NULL, &pClientCallbacks));
331+
CHK_STATUS(createDefaultCallbacksProviderWithIotCertificateAndEndpointOverride(pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey,
332+
cacertPath, pIotCoreRoleAlias, pIotCoreThingName, region, NULL,
333+
NULL, endpointOverride, &pClientCallbacks));
330334
#else
331-
CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL,
332-
&pClientCallbacks));
335+
CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentialsAndEndpointOverride(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath,
336+
NULL, NULL, endpointOverride, &pClientCallbacks));
333337
#endif
334338

335339
if (NULL != GETENV(ENABLE_FILE_LOGGING)) {

‎samples/KvsVideoOnlyOfflineStreamingSample.c

+7-4
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ INT32 main(INT32 argc, CHAR* argv[])
6565
CHAR videoCodec[VIDEO_CODEC_NAME_MAX_LENGTH];
6666
SNPRINTF(videoCodec, SIZEOF(videoCodec), "%s", VIDEO_CODEC_NAME_H265); // h264 video by default
6767
VIDEO_CODEC_ID videoCodecID = VIDEO_CODEC_ID_H264;
68+
CHAR endpointOverride[MAX_URI_CHAR_LEN];
6869

6970
#ifdef IOT_CORE_ENABLE_CREDENTIALS
7071
PCHAR pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, pIotCoreRoleAlias, pIotCoreThingName;
@@ -135,12 +136,14 @@ INT32 main(INT32 argc, CHAR* argv[])
135136

136137
startTime = GETTIME();
137138

139+
getEndpointOverride(endpointOverride, SIZEOF(endpointOverride));
138140
#ifdef IOT_CORE_ENABLE_CREDENTIALS
139-
CHK_STATUS(createDefaultCallbacksProviderWithIotCertificate(pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, cacertPath,
140-
pIotCoreRoleAlias, pIotCoreThingName, region, NULL, NULL, &pClientCallbacks));
141+
CHK_STATUS(createDefaultCallbacksProviderWithIotCertificateAndEndpointOverride(pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey,
142+
cacertPath, pIotCoreRoleAlias, pIotCoreThingName, region, NULL,
143+
NULL, endpointOverride, &pClientCallbacks));
141144
#else
142-
CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL,
143-
&pClientCallbacks));
145+
CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentialsAndEndpointOverride(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath,
146+
NULL, NULL, endpointOverride, &pClientCallbacks));
144147
#endif
145148

146149
if (NULL != GETENV(ENABLE_FILE_LOGGING)) {

‎samples/KvsVideoOnlyRealtimeStreamingSample.c

+7-4
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ INT32 main(INT32 argc, CHAR* argv[])
7171
CHAR videoCodec[VIDEO_CODEC_NAME_MAX_LENGTH];
7272
SNPRINTF(videoCodec, SIZEOF(videoCodec), "%s", VIDEO_CODEC_NAME_H264); // h264 video by default
7373
VIDEO_CODEC_ID videoCodecID = VIDEO_CODEC_ID_H264;
74+
CHAR endpointOverride[MAX_URI_CHAR_LEN];
7475

7576
#ifdef IOT_CORE_ENABLE_CREDENTIALS
7677
PCHAR pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, pIotCoreRoleAlias, pIotCoreThingName;
@@ -146,12 +147,14 @@ INT32 main(INT32 argc, CHAR* argv[])
146147

147148
startTime = GETTIME();
148149

150+
getEndpointOverride(endpointOverride, SIZEOF(endpointOverride));
149151
#ifdef IOT_CORE_ENABLE_CREDENTIALS
150-
CHK_STATUS(createDefaultCallbacksProviderWithIotCertificate(pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, cacertPath,
151-
pIotCoreRoleAlias, pIotCoreThingName, region, NULL, NULL, &pClientCallbacks));
152+
CHK_STATUS(createDefaultCallbacksProviderWithIotCertificateAndEndpointOverride(pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey,
153+
cacertPath, pIotCoreRoleAlias, pIotCoreThingName, region, NULL,
154+
NULL, endpointOverride, &pClientCallbacks));
152155
#else
153-
CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL,
154-
&pClientCallbacks));
156+
CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentialsAndEndpointOverride(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath,
157+
NULL, NULL, endpointOverride, &pClientCallbacks));
155158
#endif
156159

157160
if (NULL != GETENV(ENABLE_FILE_LOGGING)) {

‎samples/Samples.h

+4
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,13 @@ extern "C" {
1919
#define IOT_CORE_THING_NAME ((PCHAR) "AWS_IOT_CORE_THING_NAME")
2020
#define IOT_CORE_CERTIFICATE_ID ((PCHAR) "AWS_IOT_CORE_CERTIFICATE_ID")
2121

22+
#define CONTROL_PLANE_URI_ENV_VAR ((PCHAR) "CONTROL_PLANE_URI")
23+
2224
#define FILE_LOGGING_BUFFER_SIZE (100 * 1024)
2325
#define MAX_NUMBER_OF_LOG_FILES 5
2426

27+
VOID getEndpointOverride(PCHAR, SIZE_T);
28+
2529
#ifdef __cplusplus
2630
}
2731
#endif

‎src/include/com/amazonaws/kinesis/video/cproducer/Include.h

+45
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,28 @@ typedef enum {
321321
*/
322322
PUBLIC_API STATUS createDefaultCallbacksProviderWithAwsCredentials(PCHAR, PCHAR, PCHAR, UINT64, PCHAR, PCHAR, PCHAR, PCHAR, PClientCallbacks*);
323323

324+
/**
325+
* Creates a default callbacks provider based on static AWS credentials
326+
*
327+
* NOTE: The caller is responsible for releasing the structure by calling
328+
* the corresponding {@link freeCallbackProvider} API.
329+
*
330+
* @param[in] PCHAR Access Key Id
331+
* @param[in] PCHAR Secret Key
332+
* @param[in,opt] PCHAR Session Token
333+
* @param[in] UINT64 Expiration of the token. MAX_UINT64 if non-expiring
334+
* @param[in,opt] PCHAR AWS region
335+
* @param[in,opt] PCHAR CA Cert Path
336+
* @param[in,opt] PCHAR User agent name (Use NULL)
337+
* @param[in,out] PCHAR Custom user agent to be used in the API calls
338+
* @param[in,opt] PCHAR Control Plane endpoint override
339+
* @param[out] PClientCallbacks* Returned pointer to callbacks provider
340+
*
341+
* @return STATUS code of the execution
342+
*/
343+
PUBLIC_API STATUS createDefaultCallbacksProviderWithAwsCredentialsAndEndpointOverride(PCHAR, PCHAR, PCHAR, UINT64, PCHAR, PCHAR, PCHAR, PCHAR, PCHAR,
344+
PClientCallbacks*);
345+
324346
/**
325347
* Creates a default callbacks provider that uses iot certificate as auth method.
326348
*
@@ -342,6 +364,29 @@ PUBLIC_API STATUS createDefaultCallbacksProviderWithAwsCredentials(PCHAR, PCHAR,
342364
*/
343365
PUBLIC_API STATUS createDefaultCallbacksProviderWithIotCertificate(PCHAR, PCHAR, PCHAR, PCHAR, PCHAR, PCHAR, PCHAR, PCHAR, PCHAR, PClientCallbacks*);
344366

367+
/**
368+
* Creates a default callbacks provider that uses iot certificate as auth method.
369+
*
370+
* NOTE: The caller is responsible for releasing the structure by calling
371+
* the corresponding {@link freeCallbackProvider} API.
372+
*
373+
* @param[in] PCHAR IoT endpoint to use for the auth
374+
* @param[in] PCHAR Credential cert path
375+
* @param[in] PCHAR Private key path
376+
* @param[in,opt] PCHAR CA Cert path
377+
* @param[in] PCHAR Role alias name
378+
* @param[in] PCHAR IoT Thing name
379+
* @param[in,opt] PCHAR AWS region
380+
* @param[in,opt] PCHAR User agent name (Use NULL)
381+
* @param[in,opt] PCHAR Custom user agent to be used in the API calls
382+
* @param[in,opt] PCHAR Control Plane endpoint override
383+
* @param[out] PClientCallbacks* Returned pointer to callbacks provider
384+
*
385+
* @return STATUS code of the execution
386+
*/
387+
PUBLIC_API STATUS createDefaultCallbacksProviderWithIotCertificateAndEndpointOverride(PCHAR, PCHAR, PCHAR, PCHAR, PCHAR, PCHAR, PCHAR, PCHAR, PCHAR,
388+
PCHAR, PClientCallbacks* ppClientCallbacks);
389+
345390
/**
346391
* Creates a default callbacks provider that uses iot certificate as auth method.
347392
*

‎src/source/CallbacksProvider.c

+41-5
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,30 @@ STATUS createDefaultCallbacksProviderWithAwsCredentials(PCHAR accessKeyId, PCHAR
6868
PClientCallbacks* ppClientCallbacks)
6969
{
7070
ENTERS();
71+
72+
STATUS retStatus = STATUS_SUCCESS;
73+
74+
CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentialsAndEndpointOverride(
75+
accessKeyId, secretKey, sessionToken, expiration, region, caCertPath, userAgentPostfix, customUserAgent, EMPTY_STRING, ppClientCallbacks));
76+
CleanUp:
77+
CHK_LOG_ERR(retStatus);
78+
LEAVES();
79+
return retStatus;
80+
}
81+
82+
STATUS createDefaultCallbacksProviderWithAwsCredentialsAndEndpointOverride(PCHAR accessKeyId, PCHAR secretKey, PCHAR sessionToken, UINT64 expiration,
83+
PCHAR region, PCHAR caCertPath, PCHAR userAgentPostfix,
84+
PCHAR customUserAgent, char* endpointOverride,
85+
PClientCallbacks* ppClientCallbacks)
86+
{
87+
ENTERS();
7188
STATUS retStatus = STATUS_SUCCESS;
7289
PCallbacksProvider pCallbacksProvider = NULL;
7390
PAuthCallbacks pAuthCallbacks = NULL;
7491
PStreamCallbacks pStreamCallbacks = NULL;
7592

7693
CHK_STATUS(createAbstractDefaultCallbacksProvider(DEFAULT_CALLBACK_CHAIN_COUNT, API_CALL_CACHE_TYPE_ALL, ENDPOINT_UPDATE_PERIOD_SENTINEL_VALUE,
77-
region, EMPTY_STRING, caCertPath, userAgentPostfix, customUserAgent, ppClientCallbacks));
94+
region, endpointOverride, caCertPath, userAgentPostfix, customUserAgent, ppClientCallbacks));
7895

7996
pCallbacksProvider = (PCallbacksProvider) *ppClientCallbacks;
8097

@@ -109,9 +126,27 @@ STATUS createDefaultCallbacksProviderWithAwsCredentials(PCHAR accessKeyId, PCHAR
109126
return retStatus;
110127
}
111128

112-
STATUS createDefaultCallbacksProviderWithIotCertificate(PCHAR endpoint, PCHAR iotCertPath, PCHAR privateKeyPath, PCHAR caCertPath, PCHAR roleAlias,
113-
PCHAR streamName, PCHAR region, PCHAR userAgentPostfix, PCHAR customUserAgent,
114-
PClientCallbacks* ppClientCallbacks)
129+
STATUS createDefaultCallbacksProviderWithIotCertificate(PCHAR iotDataPlaneEndpoint, PCHAR iotCertPath, PCHAR privateKeyPath, PCHAR caCertPath,
130+
PCHAR roleAlias, PCHAR streamName, PCHAR region, PCHAR userAgentPostfix,
131+
PCHAR customUserAgent, PClientCallbacks* ppClientCallbacks)
132+
{
133+
ENTERS();
134+
135+
STATUS retStatus = STATUS_SUCCESS;
136+
137+
CHK_STATUS(createDefaultCallbacksProviderWithIotCertificateAndEndpointOverride(iotDataPlaneEndpoint, iotCertPath, privateKeyPath, caCertPath,
138+
roleAlias, streamName, region, userAgentPostfix, customUserAgent,
139+
EMPTY_STRING, ppClientCallbacks));
140+
CleanUp:
141+
CHK_LOG_ERR(retStatus);
142+
LEAVES();
143+
return retStatus;
144+
}
145+
146+
STATUS createDefaultCallbacksProviderWithIotCertificateAndEndpointOverride(PCHAR endpoint, PCHAR iotCertPath, PCHAR privateKeyPath, PCHAR caCertPath,
147+
PCHAR roleAlias, PCHAR streamName, PCHAR region, PCHAR userAgentPostfix,
148+
PCHAR customUserAgent, PCHAR kvsControlPlaneEndpointOverride,
149+
PClientCallbacks* ppClientCallbacks)
115150
{
116151
ENTERS();
117152
STATUS retStatus = STATUS_SUCCESS;
@@ -120,7 +155,8 @@ STATUS createDefaultCallbacksProviderWithIotCertificate(PCHAR endpoint, PCHAR io
120155
PStreamCallbacks pStreamCallbacks = NULL;
121156

122157
CHK_STATUS(createAbstractDefaultCallbacksProvider(DEFAULT_CALLBACK_CHAIN_COUNT, API_CALL_CACHE_TYPE_ALL, ENDPOINT_UPDATE_PERIOD_SENTINEL_VALUE,
123-
region, EMPTY_STRING, caCertPath, userAgentPostfix, customUserAgent, ppClientCallbacks));
158+
region, kvsControlPlaneEndpointOverride, caCertPath, userAgentPostfix, customUserAgent,
159+
ppClientCallbacks));
124160

125161
pCallbacksProvider = (PCallbacksProvider) *ppClientCallbacks;
126162

0 commit comments

Comments
 (0)
Please sign in to comment.