Explorar o código

Added connectionTimeoutMs to C API

Paul-Louis Ageneau %!s(int64=2) %!d(string=hai) anos
pai
achega
2c7da08f63
Modificáronse 2 ficheiros con 33 adicións e 28 borrados
  1. 8 6
      include/rtc/rtc.h
  2. 25 22
      src/capi.cpp

+ 8 - 6
include/rtc/rtc.h

@@ -105,8 +105,8 @@ typedef enum {
 
 	// audio
 	RTC_CODEC_OPUS = 128,
-    RTC_CODEC_PCMU = 129,
-    RTC_CODEC_PCMA = 130
+	RTC_CODEC_PCMU = 129,
+	RTC_CODEC_PCMA = 130
 } rtcCodec;
 
 typedef enum {
@@ -196,7 +196,7 @@ RTC_C_EXPORT int rtcGetLocalAddress(int pc, char *buffer, int size);
 RTC_C_EXPORT int rtcGetRemoteAddress(int pc, char *buffer, int size);
 
 RTC_C_EXPORT int rtcGetSelectedCandidatePair(int pc, char *local, int localSize, char *remote,
-                                           int remoteSize);
+                                             int remoteSize);
 
 RTC_C_EXPORT int rtcGetMaxDataChannelStream(int pc);
 
@@ -242,7 +242,7 @@ typedef struct {
 RTC_C_EXPORT int rtcSetDataChannelCallback(int pc, rtcDataChannelCallbackFunc cb);
 RTC_C_EXPORT int rtcCreateDataChannel(int pc, const char *label); // returns dc id
 RTC_C_EXPORT int rtcCreateDataChannelEx(int pc, const char *label,
-                                      const rtcDataChannelInit *init); // returns dc id
+                                        const rtcDataChannelInit *init); // returns dc id
 RTC_C_EXPORT int rtcDeleteDataChannel(int dc);
 
 RTC_C_EXPORT int rtcGetDataChannelStream(int dc);
@@ -308,7 +308,7 @@ typedef struct {
 // Opaque message
 
 // Opaque type used (via rtcMessage*) to reference an rtc::Message
-typedef void* rtcMessage;
+typedef void *rtcMessage;
 
 // Allocate a new opaque message.
 // Must be explicitly freed by rtcDeleteOpaqueMessage() unless
@@ -377,6 +377,7 @@ typedef struct {
 	const char *proxyServer;     // only non-authenticated http supported for now
 	const char **protocols;
 	int protocolsCount;
+	int connectionTimeoutMs; // in milliseconds, 0 means default, < 0 means disabled
 	int pingInterval;        // in milliseconds, 0 means default, < 0 means disabled
 	int maxOutstandingPings; // 0 means default, < 0 means disabled
 } rtcWsConfiguration;
@@ -399,10 +400,11 @@ typedef struct {
 	const char *keyPemFile;         // NULL for autogenerated certificate
 	const char *keyPemPass;         // NULL if no pass
 	const char *bindAddress;        // NULL for IP_ANY_ADDR
+	int connectionTimeoutMs;        // in milliseconds, 0 means default, < 0 means disabled
 } rtcWsServerConfiguration;
 
 RTC_C_EXPORT int rtcCreateWebSocketServer(const rtcWsServerConfiguration *config,
-                                        rtcWebSocketClientCallbackFunc cb); // returns wsserver id
+                                          rtcWebSocketClientCallbackFunc cb); // returns wsserver id
 RTC_C_EXPORT int rtcDeleteWebSocketServer(int wsserver);
 
 RTC_C_EXPORT int rtcGetWebSocketServerPort(int wsserver);

+ 25 - 22
src/capi.cpp

@@ -1010,8 +1010,8 @@ int rtcAddTrackEx(int pc, const rtcTrackInit *init) {
 				mid = "video";
 				break;
 			case RTC_CODEC_OPUS:
-            case RTC_CODEC_PCMU:
-            case RTC_CODEC_PCMA:
+			case RTC_CODEC_PCMU:
+			case RTC_CODEC_PCMA:
 				mid = "audio";
 				break;
 			default:
@@ -1044,19 +1044,19 @@ int rtcAddTrackEx(int pc, const rtcTrackInit *init) {
 			break;
 		}
 		case RTC_CODEC_OPUS:
-        case RTC_CODEC_PCMU:
-        case RTC_CODEC_PCMA:{
+		case RTC_CODEC_PCMU:
+		case RTC_CODEC_PCMA: {
 			auto desc = Description::Audio(mid, direction);
 			switch (init->codec) {
 			case RTC_CODEC_OPUS:
 				desc.addOpusCodec(init->payloadType);
 				break;
-            case RTC_CODEC_PCMU:
-                desc.addPCMUCodec(init->payloadType);
-                break;
-            case RTC_CODEC_PCMA:
-                desc.addPCMACodec(init->payloadType);
-                break;
+			case RTC_CODEC_PCMU:
+				desc.addPCMUCodec(init->payloadType);
+				break;
+			case RTC_CODEC_PCMA:
+				desc.addPCMACodec(init->payloadType);
+				break;
 			default:
 				break;
 			}
@@ -1386,12 +1386,16 @@ int rtcCreateWebSocketEx(const char *url, const rtcWsConfiguration *config) {
 		for (int i = 0; i < config->protocolsCount; ++i)
 			c.protocols.emplace_back(string(config->protocols[i]));
 
+		if (config->connectionTimeoutMs > 0)
+			c.connectionTimeout = milliseconds(config->connectionTimeoutMs);
+		else if (config->connectionTimeoutMs < 0)
+			c.connectionTimeout = milliseconds::zero(); // setting to 0 disables,
+			                                            // not setting keeps default
 		if (config->pingInterval > 0)
-			c.pingInterval = std::chrono::milliseconds(config->pingInterval);
+			c.pingInterval = milliseconds(config->pingInterval);
 		else if (config->pingInterval < 0)
-			c.pingInterval = std::chrono::milliseconds::zero(); // setting to 0 disables,
-			                                                    // not setting keeps default
-
+			c.pingInterval = milliseconds::zero(); // setting to 0 disables,
+			                                       // not setting keeps default
 		if (config->maxOutstandingPings > 0)
 			c.maxOutstandingPings = config->maxOutstandingPings;
 		else if (config->maxOutstandingPings < 0)
@@ -1434,7 +1438,7 @@ int rtcGetWebSocketPath(int ws, char *buffer, int size) {
 }
 
 RTC_C_EXPORT int rtcCreateWebSocketServer(const rtcWsServerConfiguration *config,
-                                        rtcWebSocketClientCallbackFunc cb) {
+                                          rtcWebSocketClientCallbackFunc cb) {
 	return wrap([&] {
 		if (!config)
 			throw std::invalid_argument("Unexpected null pointer for config");
@@ -1534,25 +1538,24 @@ int rtcSetSctpSettings(const rtcSctpSettings *settings) {
 			s.congestionControlModule = unsigned(settings->congestionControlModule);
 
 		if (settings->delayedSackTimeMs > 0)
-			s.delayedSackTime = std::chrono::milliseconds(settings->delayedSackTimeMs);
+			s.delayedSackTime = milliseconds(settings->delayedSackTimeMs);
 		else if (settings->delayedSackTimeMs < 0)
-			s.delayedSackTime = std::chrono::milliseconds(0);
+			s.delayedSackTime = milliseconds(0);
 
 		if (settings->minRetransmitTimeoutMs > 0)
-			s.minRetransmitTimeout = std::chrono::milliseconds(settings->minRetransmitTimeoutMs);
+			s.minRetransmitTimeout = milliseconds(settings->minRetransmitTimeoutMs);
 
 		if (settings->maxRetransmitTimeoutMs > 0)
-			s.maxRetransmitTimeout = std::chrono::milliseconds(settings->maxRetransmitTimeoutMs);
+			s.maxRetransmitTimeout = milliseconds(settings->maxRetransmitTimeoutMs);
 
 		if (settings->initialRetransmitTimeoutMs > 0)
-			s.initialRetransmitTimeout =
-			    std::chrono::milliseconds(settings->initialRetransmitTimeoutMs);
+			s.initialRetransmitTimeout = milliseconds(settings->initialRetransmitTimeoutMs);
 
 		if (settings->maxRetransmitAttempts > 0)
 			s.maxRetransmitAttempts = settings->maxRetransmitAttempts;
 
 		if (settings->heartbeatIntervalMs > 0)
-			s.heartbeatInterval = std::chrono::milliseconds(settings->heartbeatIntervalMs);
+			s.heartbeatInterval = milliseconds(settings->heartbeatIntervalMs);
 
 		SetSctpSettings(std::move(s));
 		return RTC_ERR_SUCCESS;