4#ifndef __KINESIS_VIDEO_WEBRTC_SIGNALING_CLIENT__
5#define __KINESIS_VIDEO_WEBRTC_SIGNALING_CLIENT__
14#define SIGNALING_REQUEST_ID_HEADER_NAME KVS_REQUEST_ID_HEADER_NAME ":"
17#define SIGNALING_CLIENT_FROM_CUSTOM_DATA(h) ((PSignalingClient) (h))
18#define CUSTOM_DATA_FROM_SIGNALING_CLIENT(p) ((UINT64) (p))
21#define ICE_CONFIGURATION_REFRESH_GRACE_PERIOD (30 * HUNDREDS_OF_NANOS_IN_A_SECOND)
24#define SIGNALING_CLIENT_SHUTDOWN_TIMEOUT ((2 + SIGNALING_SERVICE_API_CALL_TIMEOUT_IN_SECONDS) * HUNDREDS_OF_NANOS_IN_A_SECOND)
27#define SIGNALING_CLIENT_STATE_UNKNOWN_STR "Unknown"
28#define SIGNALING_CLIENT_STATE_NEW_STR "New"
29#define SIGNALING_CLIENT_STATE_GET_CREDENTIALS_STR "Get Security Credentials"
30#define SIGNALING_CLIENT_STATE_DESCRIBE_STR "Describe Channel"
31#define SIGNALING_CLIENT_STATE_CREATE_STR "Create Channel"
32#define SIGNALING_CLIENT_STATE_GET_ENDPOINT_STR "Get Channel Endpoint"
33#define SIGNALING_CLIENT_STATE_GET_ICE_CONFIG_STR "Get ICE Server Configuration"
34#define SIGNALING_CLIENT_STATE_READY_STR "Ready"
35#define SIGNALING_CLIENT_STATE_CONNECTING_STR "Connecting"
36#define SIGNALING_CLIENT_STATE_CONNECTED_STR "Connected"
37#define SIGNALING_CLIENT_STATE_DISCONNECTED_STR "Disconnected"
38#define SIGNALING_CLIENT_STATE_DELETE_STR "Delete"
39#define SIGNALING_CLIENT_STATE_DELETED_STR "Deleted"
40#define SIGNALING_CLIENT_STATE_DESCRIBE_MEDIA_STR "Describe Media Storage"
41#define SIGNALING_CLIENT_STATE_JOIN_SESSION_STR "Join Session"
42#define SIGNALING_CLIENT_STATE_JOIN_SESSION_WAITING_STR "Join Session Waiting"
43#define SIGNALING_CLIENT_STATE_JOIN_SESSION_CONNECTED_STR "Join Session Connected"
46#define SIGNALING_ICE_CONFIG_REFRESH_ERROR_MSG "Failed refreshing ICE server configuration with status code 0x%08x."
49#define SIGNALING_RECONNECT_ERROR_MSG "Failed to reconnect with status code 0x%08x."
52#define SIGNALING_MAX_ERROR_MESSAGE_LEN 512
55#define SIGNALING_ASYNC_ICE_CONFIG_REFRESH_DELAY (50 * HUNDREDS_OF_NANOS_IN_A_MILLISECOND)
58#define LWS_PROTOCOL_COUNT 2
63#define SIGNALING_CLOCKSKEW_HASH_TABLE_BUCKET_LENGTH 2
64#define SIGNALING_CLOCKSKEW_HASH_TABLE_BUCKET_COUNT MIN_HASH_BUCKET_COUNT
67#define SIGNALING_API_LATENCY_CALCULATION(pClient, time, isCpApi) \
68 MUTEX_LOCK((pClient)->diagnosticsLock); \
70 (pClient)->diagnostics.cpApiLatency = \
71 EMA_ACCUMULATOR_GET_NEXT((pClient)->diagnostics.cpApiLatency, SIGNALING_GET_CURRENT_TIME((pClient)) - (time)); \
73 (pClient)->diagnostics.dpApiLatency = \
74 EMA_ACCUMULATOR_GET_NEXT((pClient)->diagnostics.dpApiLatency, SIGNALING_GET_CURRENT_TIME((pClient)) - (time)); \
76 MUTEX_UNLOCK((pClient)->diagnosticsLock);
78#define SIGNALING_UPDATE_ERROR_COUNT(pClient, status) \
79 if ((pClient) != NULL && STATUS_FAILED(status)) { \
80 ATOMIC_INCREMENT(&(pClient)->diagnostics.numberOfErrors); \
83#define IS_CURRENT_TIME_CALLBACK_SET(pClient) ((pClient) != NULL && ((pClient)->signalingClientCallbacks.getCurrentTimeFn != NULL))
85#define SIGNALING_GET_CURRENT_TIME(pClient) \
86 (IS_CURRENT_TIME_CALLBACK_SET((pClient)) \
87 ? ((pClient)->signalingClientCallbacks.getCurrentTimeFn((pClient)->signalingClientCallbacks.customData)) \
90#define DEFAULT_CREATE_SIGNALING_CLIENT_RETRY_ATTEMPTS 7
92#define SIGNALING_STATE_MACHINE_NAME (PCHAR) "SIGNALING"
400#define TO_SIGNALING_CLIENT_HANDLE(p) ((SIGNALING_CLIENT_HANDLE) (p))
401#define FROM_SIGNALING_CLIENT_HANDLE(h) (IS_VALID_SIGNALING_CLIENT_HANDLE(h) ? (PSignalingClient) (h) : NULL)
STATUS freeClientRetryStrategy(PSignalingClient)
Definition Signaling.c:465
STATUS signalingRemoveOngoingMessage(PSignalingClient, PCHAR)
Definition Signaling.c:913
STATUS signalingSendMessageSync(PSignalingClient, PSignalingMessage)
Definition Signaling.c:505
STATUS uninitializeThreadTracker(PThreadTracker)
Definition Signaling.c:1026
struct __LwsCallInfo * PLwsCallInfo
Definition Signaling.h:121
STATUS getIceConfig(PSignalingClient, UINT64)
Definition Signaling.c:1287
STATUS createSignalingSync(PSignalingClientInfoInternal, PChannelInfo, PSignalingClientCallbacks, PAwsCredentialProvider, PSignalingClient *)
Definition Signaling.c:48
STATUS configureRetryStrategyForSignalingStateMachine(PSignalingClient)
Definition Signaling.c:441
STATUS signalingGetIceConfigInfo(PSignalingClient, UINT32, PIceConfigInfo *)
Definition Signaling.c:566
STATUS describeMediaStorageConf(PSignalingClient, UINT64)
Definition Signaling.c:1460
struct SignalingDiagnostics PSignalingDiagnostics
STATUS setupDefaultRetryStrategyForSignalingStateMachine(PSignalingClient)
Definition Signaling.c:421
STATUS signalingDeleteSync(PSignalingClient)
Definition Signaling.c:689
struct SignalingClientInfoInternal * PSignalingClientInfoInternal
STATUS validateSignalingClientInfo(PSignalingClient, PSignalingClientInfoInternal)
Definition Signaling.c:737
STATUS describeChannel(PSignalingClient, UINT64)
Definition Signaling.c:1069
STATUS refreshIceConfiguration(PSignalingClient)
Definition Signaling.c:817
STATUS createChannel(PSignalingClient, UINT64)
Definition Signaling.c:1135
struct ThreadTracker * PThreadTracker
STATUS validateIceConfiguration(PSignalingClient)
Definition Signaling.c:785
#define LWS_PROTOCOL_COUNT
Definition Signaling.h:58
STATUS signalingGetOngoingMessage(PSignalingClient, PCHAR, PCHAR, PSignalingMessage *)
Definition Signaling.c:957
STATUS signalingDisconnectSync(PSignalingClient)
Definition Signaling.c:664
STATUS connectSignalingChannel(PSignalingClient, UINT64)
Definition Signaling.c:1370
STATUS awaitForThreadTermination(PThreadTracker, UINT64)
Definition Signaling.c:1043
STATUS joinStorageSession(PSignalingClient, UINT64)
Definition Signaling.c:1415
STATUS deleteChannel(PSignalingClient, UINT64)
Definition Signaling.c:1328
STATUS(* SignalingApiCallHookFunc)(UINT64)
Definition Signaling.h:124
STATUS signalingFetchSync(PSignalingClient)
Definition Signaling.c:588
VOID releaseSignalingClient(PSignalingClient)
Definition Signaling.c:384
STATUS signalingGetMetrics(PSignalingClient, PSignalingClientMetrics)
Definition Signaling.c:1533
STATUS signalingConnectSync(PSignalingClient)
Definition Signaling.c:625
STATUS validateSignalingCallbacks(PSignalingClient, PSignalingClientCallbacks)
Definition Signaling.c:718
STATUS terminateOngoingOperations(PSignalingClient)
Definition Signaling.c:484
STATUS freeSignaling(PSignalingClient *)
Definition Signaling.c:392
STATUS signalingStoreOngoingMessage(PSignalingClient, PSignalingMessage)
Definition Signaling.c:887
STATUS signalingGetIceConfigInfoCount(PSignalingClient, PUINT32)
Definition Signaling.c:547
VOID acquireSignalingClient(PSignalingClient)
Definition Signaling.c:377
STATUS getChannelEndpoint(PSignalingClient, UINT64)
Definition Signaling.c:1177
UINT64 signalingGetCurrentTime(UINT64)
Definition Signaling.c:1527
STATUS initializeThreadTracker(PThreadTracker)
Definition Signaling.c:1007
struct SignalingClient * PSignalingClient
#define MAX_ICE_CONFIG_COUNT
Definition Include.h:800
#define MAX_SIGNALING_ENDPOINT_URI_LEN
Definition Include.h:623
@ RTC_RTP_TRANSCEIVER_DIRECTION_UNINITIALIZED
Will use the default "sendrecv" after initialization.
Definition Include.h:1058
Contains all signaling channel related information.
Definition Include.h:1590
ICE configuration information struct.
Definition Include.h:1659
Signaling channel description returned from the service.
Definition Include.h:1743
Register Signaling client callbacks.
Definition Include.h:1731
Definition Signaling.h:129
SignalingApiCallHookFunc describePreHookFn
Definition Signaling.h:147
SignalingApiCallHookFunc connectPostHookFn
Definition Signaling.h:156
SignalingApiCallHookFunc getEndpointPostHookFn
Definition Signaling.h:152
SignalingClientInfo signalingClientInfo
Definition Signaling.h:131
SignalingApiCallHookFunc getIceConfigPreHookFn
Definition Signaling.h:153
SignalingApiCallHookFunc receiveMessagePostHookFn
Definition Signaling.h:165
SignalingApiCallHookFunc getIceConfigPostHookFn
Definition Signaling.h:154
UINT64 hookCustomData
Definition Signaling.h:144
SignalingApiCallHookFunc deletePreHookFn
Definition Signaling.h:161
SignalingApiCallHookFunc joinSessionPreHookFn
Definition Signaling.h:157
KvsRetryStrategy signalingStateMachineRetryStrategy
Definition Signaling.h:168
SignalingApiCallHookFunc describeMediaStorageConfPostHookFn
Definition Signaling.h:160
KvsRetryStrategyCallbacks signalingStateMachineRetryStrategyCallbacks
Definition Signaling.h:169
SignalingApiCallHookFunc describePostHookFn
Definition Signaling.h:148
SignalingApiCallHookFunc createPreHookFn
Definition Signaling.h:149
SignalingApiCallHookFunc connectPreHookFn
Definition Signaling.h:155
SignalingApiCallHookFunc receiveMessagePreHookFn
Definition Signaling.h:163
SignalingApiCallHookFunc receiveMessagePreCallbackHookFn
Definition Signaling.h:164
SignalingApiCallHookFunc getEndpointPreHookFn
Definition Signaling.h:151
SignalingApiCallHookFunc deletePostHookFn
Definition Signaling.h:162
UINT64 connectTimeout
Definition Signaling.h:141
SignalingApiCallHookFunc describeMediaStorageConfPreHookFn
Definition Signaling.h:159
SignalingApiCallHookFunc createPostHookFn
Definition Signaling.h:150
SignalingApiCallHookFunc joinSessionPostHookFn
Definition Signaling.h:158
Populate Signaling client with client ID and application log level.
Definition Include.h:1568
SignalingStats Collection of signaling related stats. Can be expanded in the future.
Definition Include.h:1822
Definition Signaling.h:228
volatile ATOMIC_BOOL deleted
Definition Signaling.h:251
MUTEX diagnosticsLock
Definition Signaling.h:372
PAwsCredentials pAwsCredentials
Definition Signaling.h:305
SignalingClientInfoInternal clientInfo
Definition Signaling.h:269
MUTEX sendLock
Definition Signaling.h:320
UINT64 describeTime
Definition Signaling.h:378
CVAR connectedCvar
Definition Signaling.h:317
ServiceCallContext serviceCallContext
Definition Signaling.h:308
PChannelInfo pChannelInfo
Definition Signaling.h:278
volatile ATOMIC_BOOL connected
Definition Signaling.h:245
volatile ATOMIC_BOOL deleting
Definition Signaling.h:248
CVAR sendCvar
Definition Signaling.h:323
UINT64 offerReceivedTime
Definition Signaling.h:386
CVAR jssWaitCvar
Definition Signaling.h:396
PLwsCallInfo pOngoingCallInfo
Definition Signaling.h:341
MUTEX connectedLock
Definition Signaling.h:314
volatile ATOMIC_BOOL offerReceived
Definition Signaling.h:263
UINT64 offerSentTime
Definition Signaling.h:387
MUTEX offerSendReceiveTimeLock
Definition Signaling.h:389
UINT64 connectTime
Definition Signaling.h:383
UINT32 iceConfigCount
Definition Signaling.h:296
UINT32 version
Definition Signaling.h:230
UINT64 deleteTime
Definition Signaling.h:382
volatile ATOMIC_BOOL refreshIceConfig
Definition Signaling.h:258
MUTEX receiveCallbackLock
Definition Signaling.h:329
SignalingChannelDescription channelDescription
Definition Signaling.h:281
UINT64 getIceConfigTime
Definition Signaling.h:381
PVOID pWebsocketContext
Definition Signaling.h:350
volatile ATOMIC_BOOL shutdown
Definition Signaling.h:242
UINT64 joinSessionTime
Definition Signaling.h:390
MUTEX receiveLock
Definition Signaling.h:326
MediaStorageConfig mediaStorageConfig
Definition Signaling.h:284
MUTEX lwsServiceLock
Definition Signaling.h:366
UINT64 answerTime
Definition Signaling.h:385
volatile ATOMIC_BOOL serviceLockContention
Definition Signaling.h:261
MUTEX jssWaitLock
Definition Signaling.h:393
UINT64 iceConfigTime
Definition Signaling.h:335
UINT64 iceConfigExpiration
Definition Signaling.h:338
CVAR receiveCvar
Definition Signaling.h:332
volatile SIZE_T refCount
Definition Signaling.h:266
MUTEX stateLock
Definition Signaling.h:311
ThreadTracker reconnecterTracker
Definition Signaling.h:347
UINT64 getEndpointTime
Definition Signaling.h:380
SignalingDiagnostics diagnostics
Definition Signaling.h:375
UINT64 describeMediaTime
Definition Signaling.h:384
PStateMachine pStateMachine
Definition Signaling.h:302
ThreadTracker listenerTracker
Definition Signaling.h:344
PAwsCredentialProvider pCredentialProvider
Definition Signaling.h:275
volatile ATOMIC_BOOL clientReady
Definition Signaling.h:239
MUTEX messageQueueLock
Definition Signaling.h:363
UINT64 createTime
Definition Signaling.h:379
PStackQueue pMessageQueue
Definition Signaling.h:360
volatile SIZE_T messageResult
Definition Signaling.h:236
MUTEX lwsSerializerLock
Definition Signaling.h:369
SignalingClientCallbacks signalingClientCallbacks
Definition Signaling.h:272
volatile SIZE_T result
Definition Signaling.h:233
Definition Signaling.h:185
UINT64 dpApiLatency
Definition Signaling.h:207
UINT32 stateMachineRetryCount
Definition Signaling.h:222
volatile SIZE_T numberOfMessagesReceived
Definition Signaling.h:187
UINT64 getSignalingChannelEndpointEndTime
Definition Signaling.h:195
UINT64 offerToAnswerTime
Definition Signaling.h:218
UINT64 connectTime
Definition Signaling.h:205
UINT64 fetchClientTime
Definition Signaling.h:216
UINT64 connectStartTime
Definition Signaling.h:202
UINT64 joinSessionToOfferRecvTime
Definition Signaling.h:220
UINT64 connectCallTime
Definition Signaling.h:214
PHashTable pEndpointToClockSkewHashMap
Definition Signaling.h:221
volatile SIZE_T numberOfErrors
Definition Signaling.h:189
UINT64 getIceConfigCallTime
Definition Signaling.h:213
UINT64 createCallTime
Definition Signaling.h:211
UINT64 createTime
Definition Signaling.h:204
volatile SIZE_T iceRefreshCount
Definition Signaling.h:188
volatile SIZE_T numberOfReconnects
Definition Signaling.h:191
UINT64 getTokenEndTime
Definition Signaling.h:199
UINT64 describeCallTime
Definition Signaling.h:209
UINT64 getTokenStartTime
Definition Signaling.h:198
UINT64 connectClientTime
Definition Signaling.h:217
volatile SIZE_T numberOfRuntimeErrors
Definition Signaling.h:190
UINT64 createClientTime
Definition Signaling.h:215
UINT64 getSignalingChannelEndpointStartTime
Definition Signaling.h:194
UINT64 createChannelStartTime
Definition Signaling.h:200
UINT64 joinSessionCallTime
Definition Signaling.h:219
UINT64 describeChannelStartTime
Definition Signaling.h:192
UINT64 getEndpointCallTime
Definition Signaling.h:212
UINT64 describeChannelEndTime
Definition Signaling.h:193
UINT64 getTokenCallTime
Definition Signaling.h:208
UINT64 connectEndTime
Definition Signaling.h:203
UINT64 describeMediaCallTime
Definition Signaling.h:210
UINT64 getIceServerConfigStartTime
Definition Signaling.h:196
UINT64 getIceServerConfigEndTime
Definition Signaling.h:197
UINT64 createChannelEndTime
Definition Signaling.h:201
UINT64 cpApiLatency
Definition Signaling.h:206
volatile SIZE_T numberOfMessagesSent
Definition Signaling.h:186
Structure defining the basic signaling message.
Definition Include.h:1537
Definition Signaling.h:175
TID threadId
Definition Signaling.h:177
MUTEX lock
Definition Signaling.h:178
CVAR await
Definition Signaling.h:179
volatile ATOMIC_BOOL terminated
Definition Signaling.h:176
Definition LwsApiCalls.h:204