2023-01-05 20:25:55 +08:00
/**************************************************************************/
/* webrtc_peer_connection.cpp */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
2018-11-20 17:54:15 +08:00
2019-05-11 07:46:27 +08:00
# include "webrtc_peer_connection.h"
2018-11-20 17:54:15 +08:00
2022-08-29 02:27:45 +08:00
# ifdef WEB_ENABLED
2021-09-08 07:00:47 +08:00
# include "webrtc_peer_connection_js.h"
# endif
2018-11-20 17:54:15 +08:00
2022-06-09 12:56:06 +08:00
# include "webrtc_peer_connection_extension.h"
2021-09-08 07:00:47 +08:00
StringName WebRTCPeerConnection : : default_extension ;
void WebRTCPeerConnection : : set_default_extension ( const StringName & p_extension ) {
2022-06-09 12:56:06 +08:00
ERR_FAIL_COND_MSG ( ! ClassDB : : is_parent_class ( p_extension , WebRTCPeerConnectionExtension : : get_class_static ( ) ) , vformat ( " Can't make %s the default WebRTC extension since it does not extend WebRTCPeerConnectionExtension. " , p_extension ) ) ;
2021-09-08 07:00:47 +08:00
default_extension = p_extension ;
2018-11-20 17:54:15 +08:00
}
2019-05-11 07:46:27 +08:00
WebRTCPeerConnection * WebRTCPeerConnection : : create ( ) {
2022-08-29 02:27:45 +08:00
# ifdef WEB_ENABLED
2021-09-08 07:00:47 +08:00
return memnew ( WebRTCPeerConnectionJS ) ;
# else
if ( default_extension = = String ( ) ) {
WARN_PRINT_ONCE ( " No default WebRTC extension configured. " ) ;
return memnew ( WebRTCPeerConnectionExtension ) ;
2020-05-14 22:41:43 +08:00
}
2021-09-08 07:00:47 +08:00
Object * obj = ClassDB : : instantiate ( default_extension ) ;
return Object : : cast_to < WebRTCPeerConnectionExtension > ( obj ) ;
# endif
2018-11-20 17:54:15 +08:00
}
2019-05-11 07:46:27 +08:00
void WebRTCPeerConnection : : _bind_methods ( ) {
2022-06-09 12:56:06 +08:00
ClassDB : : bind_static_method ( get_class_static ( ) , D_METHOD ( " set_default_extension " , " extension_class " ) , & WebRTCPeerConnectionExtension : : set_default_extension ) ;
2019-05-11 07:46:27 +08:00
ClassDB : : bind_method ( D_METHOD ( " initialize " , " configuration " ) , & WebRTCPeerConnection : : initialize , DEFVAL ( Dictionary ( ) ) ) ;
ClassDB : : bind_method ( D_METHOD ( " create_data_channel " , " label " , " options " ) , & WebRTCPeerConnection : : create_data_channel , DEFVAL ( Dictionary ( ) ) ) ;
ClassDB : : bind_method ( D_METHOD ( " create_offer " ) , & WebRTCPeerConnection : : create_offer ) ;
ClassDB : : bind_method ( D_METHOD ( " set_local_description " , " type " , " sdp " ) , & WebRTCPeerConnection : : set_local_description ) ;
ClassDB : : bind_method ( D_METHOD ( " set_remote_description " , " type " , " sdp " ) , & WebRTCPeerConnection : : set_remote_description ) ;
ClassDB : : bind_method ( D_METHOD ( " add_ice_candidate " , " media " , " index " , " name " ) , & WebRTCPeerConnection : : add_ice_candidate ) ;
ClassDB : : bind_method ( D_METHOD ( " poll " ) , & WebRTCPeerConnection : : poll ) ;
ClassDB : : bind_method ( D_METHOD ( " close " ) , & WebRTCPeerConnection : : close ) ;
2018-11-20 17:54:15 +08:00
2019-05-11 07:46:27 +08:00
ClassDB : : bind_method ( D_METHOD ( " get_connection_state " ) , & WebRTCPeerConnection : : get_connection_state ) ;
2022-09-08 10:39:32 +08:00
ClassDB : : bind_method ( D_METHOD ( " get_gathering_state " ) , & WebRTCPeerConnection : : get_gathering_state ) ;
ClassDB : : bind_method ( D_METHOD ( " get_signaling_state " ) , & WebRTCPeerConnection : : get_signaling_state ) ;
2018-11-20 17:54:15 +08:00
2019-05-11 07:46:27 +08:00
ADD_SIGNAL ( MethodInfo ( " session_description_created " , PropertyInfo ( Variant : : STRING , " type " ) , PropertyInfo ( Variant : : STRING , " sdp " ) ) ) ;
ADD_SIGNAL ( MethodInfo ( " ice_candidate_created " , PropertyInfo ( Variant : : STRING , " media " ) , PropertyInfo ( Variant : : INT , " index " ) , PropertyInfo ( Variant : : STRING , " name " ) ) ) ;
2022-01-28 22:35:25 +08:00
ADD_SIGNAL ( MethodInfo ( " data_channel_received " , PropertyInfo ( Variant : : OBJECT , " channel " , PROPERTY_HINT_RESOURCE_TYPE , " WebRTCDataChannel " ) ) ) ;
2018-11-20 17:54:15 +08:00
BIND_ENUM_CONSTANT ( STATE_NEW ) ;
BIND_ENUM_CONSTANT ( STATE_CONNECTING ) ;
BIND_ENUM_CONSTANT ( STATE_CONNECTED ) ;
BIND_ENUM_CONSTANT ( STATE_DISCONNECTED ) ;
BIND_ENUM_CONSTANT ( STATE_FAILED ) ;
BIND_ENUM_CONSTANT ( STATE_CLOSED ) ;
2022-09-08 10:39:32 +08:00
BIND_ENUM_CONSTANT ( GATHERING_STATE_NEW ) ;
BIND_ENUM_CONSTANT ( GATHERING_STATE_GATHERING ) ;
BIND_ENUM_CONSTANT ( GATHERING_STATE_COMPLETE ) ;
BIND_ENUM_CONSTANT ( SIGNALING_STATE_STABLE ) ;
BIND_ENUM_CONSTANT ( SIGNALING_STATE_HAVE_LOCAL_OFFER ) ;
BIND_ENUM_CONSTANT ( SIGNALING_STATE_HAVE_REMOTE_OFFER ) ;
BIND_ENUM_CONSTANT ( SIGNALING_STATE_HAVE_LOCAL_PRANSWER ) ;
BIND_ENUM_CONSTANT ( SIGNALING_STATE_HAVE_REMOTE_PRANSWER ) ;
BIND_ENUM_CONSTANT ( SIGNALING_STATE_CLOSED ) ;
2018-11-20 17:54:15 +08:00
}
2019-05-11 07:46:27 +08:00
WebRTCPeerConnection : : WebRTCPeerConnection ( ) {
2018-11-20 17:54:15 +08:00
}
2019-05-11 07:46:27 +08:00
WebRTCPeerConnection : : ~ WebRTCPeerConnection ( ) {
2018-11-20 17:54:15 +08:00
}