|
@@ -170,6 +170,30 @@ shared_ptr<Channel> getChannel(int id) {
|
|
|
throw std::invalid_argument("DataChannel, Track, or WebSocket ID does not exist");
|
|
|
}
|
|
|
|
|
|
+void eraseChannel(int id) {
|
|
|
+ std::lock_guard lock(mutex);
|
|
|
+ if (dataChannelMap.erase(id) != 0) {
|
|
|
+ userPointerMap.erase(id);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (trackMap.erase(id) != 0) {
|
|
|
+ userPointerMap.erase(id);
|
|
|
+#if RTC_ENABLE_MEDIA
|
|
|
+ rtcpSrReporterMap.erase(id);
|
|
|
+ rtcpChainableHandlerMap.erase(id);
|
|
|
+ rtpConfigMap.erase(id);
|
|
|
+#endif
|
|
|
+ return;
|
|
|
+ }
|
|
|
+#if RTC_ENABLE_WEBSOCKET
|
|
|
+ if (webSocketMap.erase(id) != 0) {
|
|
|
+ userPointerMap.erase(id);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+ throw std::invalid_argument("DataChannel, Track, or WebSocket ID does not exist");
|
|
|
+}
|
|
|
+
|
|
|
int copyAndReturn(string s, char *buffer, int size) {
|
|
|
if (!buffer)
|
|
|
return int(s.size() + 1);
|
|
@@ -716,6 +740,15 @@ int rtcClose(int id) {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+int rtcDelete(int id) {
|
|
|
+ return wrap([id] {
|
|
|
+ auto channel = getChannel(id);
|
|
|
+ channel->close();
|
|
|
+ eraseChannel(id);
|
|
|
+ return RTC_ERR_SUCCESS;
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
bool rtcIsOpen(int id) {
|
|
|
return wrap([id] { return getChannel(id)->isOpen() ? 0 : 1; }) == 0 ? true : false;
|
|
|
}
|