| /* | |
| * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| #include "examples/unityplugin/unity_plugin_apis.h" | |
| #include <map> | |
| #include <string> | |
| #include "examples/unityplugin/simple_peer_connection.h" | |
| namespace { | |
| static int g_peer_connection_id = 1; | |
| static std::map<int, rtc::scoped_refptr<SimplePeerConnection>> | |
| g_peer_connection_map; | |
| } // namespace | |
| int CreatePeerConnection(const char** turn_urls, | |
| const int no_of_urls, | |
| const char* username, | |
| const char* credential, | |
| bool mandatory_receive_video) { | |
| g_peer_connection_map[g_peer_connection_id] = | |
| new rtc::RefCountedObject<SimplePeerConnection>(); | |
| if (!g_peer_connection_map[g_peer_connection_id]->InitializePeerConnection( | |
| turn_urls, no_of_urls, username, credential, mandatory_receive_video)) | |
| return -1; | |
| return g_peer_connection_id++; | |
| } | |
| bool ClosePeerConnection(int peer_connection_id) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| g_peer_connection_map[peer_connection_id]->DeletePeerConnection(); | |
| g_peer_connection_map.erase(peer_connection_id); | |
| return true; | |
| } | |
| bool AddStream(int peer_connection_id, bool audio_only) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| g_peer_connection_map[peer_connection_id]->AddStreams(audio_only); | |
| return true; | |
| } | |
| bool AddDataChannel(int peer_connection_id) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| return g_peer_connection_map[peer_connection_id]->CreateDataChannel(); | |
| } | |
| bool CreateOffer(int peer_connection_id) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| return g_peer_connection_map[peer_connection_id]->CreateOffer(); | |
| } | |
| bool CreateAnswer(int peer_connection_id) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| return g_peer_connection_map[peer_connection_id]->CreateAnswer(); | |
| } | |
| bool SendDataViaDataChannel(int peer_connection_id, const char* data) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| std::string s(data); | |
| g_peer_connection_map[peer_connection_id]->SendDataViaDataChannel(s); | |
| return true; | |
| } | |
| bool SetAudioControl(int peer_connection_id, bool is_mute, bool is_record) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| g_peer_connection_map[peer_connection_id]->SetAudioControl(is_mute, | |
| is_record); | |
| return true; | |
| } | |
| bool SetRemoteDescription(int peer_connection_id, | |
| const char* type, | |
| const char* sdp) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| return g_peer_connection_map[peer_connection_id]->SetRemoteDescription(type, | |
| sdp); | |
| } | |
| bool AddIceCandidate(const int peer_connection_id, | |
| const char* candidate, | |
| const int sdp_mlineindex, | |
| const char* sdp_mid) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| return g_peer_connection_map[peer_connection_id]->AddIceCandidate( | |
| candidate, sdp_mlineindex, sdp_mid); | |
| } | |
| // Register callback functions. | |
| bool RegisterOnLocalI420FrameReady(int peer_connection_id, | |
| I420FRAMEREADY_CALLBACK callback) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| g_peer_connection_map[peer_connection_id]->RegisterOnLocalI420FrameReady( | |
| callback); | |
| return true; | |
| } | |
| bool RegisterOnRemoteI420FrameReady(int peer_connection_id, | |
| I420FRAMEREADY_CALLBACK callback) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| g_peer_connection_map[peer_connection_id]->RegisterOnRemoteI420FrameReady( | |
| callback); | |
| return true; | |
| } | |
| bool RegisterOnLocalDataChannelReady(int peer_connection_id, | |
| LOCALDATACHANNELREADY_CALLBACK callback) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| g_peer_connection_map[peer_connection_id]->RegisterOnLocalDataChannelReady( | |
| callback); | |
| return true; | |
| } | |
| bool RegisterOnDataFromDataChannelReady( | |
| int peer_connection_id, | |
| DATAFROMEDATECHANNELREADY_CALLBACK callback) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| g_peer_connection_map[peer_connection_id]->RegisterOnDataFromDataChannelReady( | |
| callback); | |
| return true; | |
| } | |
| bool RegisterOnFailure(int peer_connection_id, FAILURE_CALLBACK callback) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| g_peer_connection_map[peer_connection_id]->RegisterOnFailure(callback); | |
| return true; | |
| } | |
| bool RegisterOnAudioBusReady(int peer_connection_id, | |
| AUDIOBUSREADY_CALLBACK callback) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| g_peer_connection_map[peer_connection_id]->RegisterOnAudioBusReady(callback); | |
| return true; | |
| } | |
| // Singnaling channel related functions. | |
| bool RegisterOnLocalSdpReadytoSend(int peer_connection_id, | |
| LOCALSDPREADYTOSEND_CALLBACK callback) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| g_peer_connection_map[peer_connection_id]->RegisterOnLocalSdpReadytoSend( | |
| callback); | |
| return true; | |
| } | |
| bool RegisterOnIceCandiateReadytoSend( | |
| int peer_connection_id, | |
| ICECANDIDATEREADYTOSEND_CALLBACK callback) { | |
| if (!g_peer_connection_map.count(peer_connection_id)) | |
| return false; | |
| g_peer_connection_map[peer_connection_id]->RegisterOnIceCandiateReadytoSend( | |
| callback); | |
| return true; | |
| } |