summaryrefslogtreecommitdiffstats
path: root/tinyNET/src/ice/tnet_ice_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'tinyNET/src/ice/tnet_ice_utils.c')
-rwxr-xr-xtinyNET/src/ice/tnet_ice_utils.c230
1 files changed, 121 insertions, 109 deletions
diff --git a/tinyNET/src/ice/tnet_ice_utils.c b/tinyNET/src/ice/tnet_ice_utils.c
index d4ba8a7..eae514e 100755
--- a/tinyNET/src/ice/tnet_ice_utils.c
+++ b/tinyNET/src/ice/tnet_ice_utils.c
@@ -8,12 +8,12 @@
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
-*
+*
* DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
-*
+*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
@@ -29,132 +29,144 @@
#include <stdlib.h>
-static const char ice_chars[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'k', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'K', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
- '0','1', '2', '3', '4', '5', '6', '7', '8', '9'}; // /!\do not add '/' and '+' because of WebRTC password
+static const char ice_chars[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'k', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'K', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+ '0','1', '2', '3', '4', '5', '6', '7', '8', '9'
+ }; // /!\do not add '/' and '+' because of WebRTC password
static const tsk_size_t ice_chars_count = sizeof(ice_chars);
uint32_t tnet_ice_utils_get_priority(tnet_ice_cand_type_t type, uint16_t local_pref, tsk_bool_t is_rtp)
{
- uint32_t pref;
- switch(type){
- case tnet_ice_cand_type_host: pref = TNET_ICE_CANDIDATE_PREF_HOST; break;
- case tnet_ice_cand_type_srflx: pref = TNET_ICE_CANDIDATE_PREF_SRFLX; break;
- case tnet_ice_cand_type_prflx: pref = TNET_ICE_CANDIDATE_PREF_PRFLX; break;
- case tnet_ice_cand_type_relay: default: pref = TNET_ICE_CANDIDATE_PREF_RELAY; break;
- }
- return (pref << 24) +
- (local_pref << 8) +
- ((256 - (is_rtp ? TNET_ICE_CANDIDATE_COMPID_RTP : TNET_ICE_CANDIDATE_COMPID_RTCP)) << 0);
+ uint32_t pref;
+ switch(type) {
+ case tnet_ice_cand_type_host:
+ pref = TNET_ICE_CANDIDATE_PREF_HOST;
+ break;
+ case tnet_ice_cand_type_srflx:
+ pref = TNET_ICE_CANDIDATE_PREF_SRFLX;
+ break;
+ case tnet_ice_cand_type_prflx:
+ pref = TNET_ICE_CANDIDATE_PREF_PRFLX;
+ break;
+ case tnet_ice_cand_type_relay:
+ default:
+ pref = TNET_ICE_CANDIDATE_PREF_RELAY;
+ break;
+ }
+ return (pref << 24) +
+ (local_pref << 8) +
+ ((256 - (is_rtp ? TNET_ICE_CANDIDATE_COMPID_RTP : TNET_ICE_CANDIDATE_COMPID_RTCP)) << 0);
}
int tnet_ice_utils_compute_foundation(char* foundation, tsk_size_t size)
{
-
- tsk_size_t i;
-
- if(!foundation || !size){
- TSK_DEBUG_ERROR("Invalid argument");
- return -1;
- }
- for(
- i = 0; i < size; ++i){
- foundation[i] = ice_chars[(rand() ^ rand()) % ice_chars_count];
- }
-
- return 0;
+
+ tsk_size_t i;
+
+ if(!foundation || !size) {
+ TSK_DEBUG_ERROR("Invalid argument");
+ return -1;
+ }
+ for(
+ i = 0; i < size; ++i) {
+ foundation[i] = ice_chars[(rand() ^ rand()) % ice_chars_count];
+ }
+
+ return 0;
}
int tnet_ice_utils_create_sockets(tnet_socket_type_t socket_type, const char* local_ip, tnet_socket_t** socket_rtp, tnet_socket_t** socket_rtcp)
{
- tsk_bool_t look4_rtp = (socket_rtp != tsk_null);
- tsk_bool_t look4_rtcp = (socket_rtcp != tsk_null);
- uint8_t retry_count = 10;
- tnet_port_t local_port;
- static const uint64_t port_range_start = 1024;
- static const uint64_t port_range_stop = (65535 - 1/* to be sure rtcp port will be valid */);
- static uint64_t counter = 0;
-
- /* Creates local rtp and rtcp sockets */
- while(retry_count--){
- if(look4_rtp && look4_rtcp){
- tnet_socket_t* socket_fake = tnet_socket_create(local_ip, TNET_SOCKET_PORT_ANY, socket_type);
- if(!socket_fake){
- continue;
- }
- if(!(socket_fake->port & 0x01)){ // even number ?
- *socket_rtp = socket_fake;
- }
- else{
- *socket_rtcp = socket_fake;
- }
- local_port = (socket_fake->port & ~1);
- }
- else{
- local_port = (tnet_port_t)((((tsk_time_epoch() + rand() ) ^ ++counter) % (port_range_stop - port_range_start)) + port_range_start);
- local_port = (local_port & 0xFFFE); /* turn to even number */
- }
-
- /* beacuse failure will cause errors in the log, print a message to alert that there is
- * nothing to worry about */
- TSK_DEBUG_INFO("RTP/RTCP manager[Begin]: Trying to bind to random ports [%s:%d]", local_ip, local_port);
-
- if(look4_rtp){
- if(!*socket_rtp && !(*socket_rtp = tnet_socket_create(local_ip, local_port, socket_type))){
- TSK_DEBUG_INFO("Failed to bind to %d", local_port);
- continue;
- }
- }
-
- if(look4_rtcp){
- if(!*socket_rtcp && !(*socket_rtcp = tnet_socket_create(local_ip, (local_port + 1), socket_type))){
- TSK_DEBUG_INFO("Failed to bind to %d", (local_port + 1));
- if(look4_rtp){
- TSK_OBJECT_SAFE_FREE((*socket_rtp));
- }
- continue;
- }
- }
-
- TSK_DEBUG_INFO("RTP/RTCP manager[End]: Trying to bind to random ports");
- return 0;
- }
-
- TSK_DEBUG_ERROR("Failed to bind sockets");
- return -1;
+ tsk_bool_t look4_rtp = (socket_rtp != tsk_null);
+ tsk_bool_t look4_rtcp = (socket_rtcp != tsk_null);
+ uint8_t retry_count = 10;
+ tnet_port_t local_port;
+ static const uint64_t port_range_start = 1024;
+ static const uint64_t port_range_stop = (65535 - 1/* to be sure rtcp port will be valid */);
+ static uint64_t counter = 0;
+
+ /* Creates local rtp and rtcp sockets */
+ while(retry_count--) {
+ if(look4_rtp && look4_rtcp) {
+ tnet_socket_t* socket_fake = tnet_socket_create(local_ip, TNET_SOCKET_PORT_ANY, socket_type);
+ if(!socket_fake) {
+ continue;
+ }
+ if(!(socket_fake->port & 0x01)) { // even number ?
+ *socket_rtp = socket_fake;
+ }
+ else {
+ *socket_rtcp = socket_fake;
+ }
+ local_port = (socket_fake->port & ~1);
+ }
+ else {
+ local_port = (tnet_port_t)((((tsk_time_epoch() + rand() ) ^ ++counter) % (port_range_stop - port_range_start)) + port_range_start);
+ local_port = (local_port & 0xFFFE); /* turn to even number */
+ }
+
+ /* beacuse failure will cause errors in the log, print a message to alert that there is
+ * nothing to worry about */
+ TSK_DEBUG_INFO("RTP/RTCP manager[Begin]: Trying to bind to random ports [%s:%d]", local_ip, local_port);
+
+ if(look4_rtp) {
+ if(!*socket_rtp && !(*socket_rtp = tnet_socket_create(local_ip, local_port, socket_type))) {
+ TSK_DEBUG_INFO("Failed to bind to %d", local_port);
+ continue;
+ }
+ }
+
+ if(look4_rtcp) {
+ if(!*socket_rtcp && !(*socket_rtcp = tnet_socket_create(local_ip, (local_port + 1), socket_type))) {
+ TSK_DEBUG_INFO("Failed to bind to %d", (local_port + 1));
+ if(look4_rtp) {
+ TSK_OBJECT_SAFE_FREE((*socket_rtp));
+ }
+ continue;
+ }
+ }
+
+ TSK_DEBUG_INFO("RTP/RTCP manager[End]: Trying to bind to random ports");
+ return 0;
+ }
+
+ TSK_DEBUG_ERROR("Failed to bind sockets");
+ return -1;
}
int tnet_ice_utils_set_ufrag(char** ufrag)
{
- if(ufrag){
- char tmp[16]; int i;
- for(i = 0; i < (sizeof(tmp)/sizeof(tmp[0])) - 1; ++i){
- tmp[i] = ice_chars[(rand() ^ rand()) % ice_chars_count];
- }
- tmp[i] = '\0';
- tsk_strupdate(ufrag, tmp);
- return 0;
- }
- else{
- TSK_DEBUG_ERROR("Invalid parameter");
- return -1;
- }
+ if(ufrag) {
+ char tmp[16];
+ int i;
+ for(i = 0; i < (sizeof(tmp)/sizeof(tmp[0])) - 1; ++i) {
+ tmp[i] = ice_chars[(rand() ^ rand()) % ice_chars_count];
+ }
+ tmp[i] = '\0';
+ tsk_strupdate(ufrag, tmp);
+ return 0;
+ }
+ else {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return -1;
+ }
}
int tnet_ice_utils_set_pwd(char** pwd)
{
- if(pwd){
- char tmp[23]; int i;
- for(i = 0; i < (sizeof(tmp)/sizeof(tmp[0])) - 1; ++i){
- tmp[i] = ice_chars[(rand() ^ rand()) % ice_chars_count];
- }
- tmp[i] = '\0';
- tsk_strupdate(pwd, tmp);
- return 0;
- }
- else{
- TSK_DEBUG_ERROR("Invalid parameter");
- return -1;
- }
+ if(pwd) {
+ char tmp[23];
+ int i;
+ for(i = 0; i < (sizeof(tmp)/sizeof(tmp[0])) - 1; ++i) {
+ tmp[i] = ice_chars[(rand() ^ rand()) % ice_chars_count];
+ }
+ tmp[i] = '\0';
+ tsk_strupdate(pwd, tmp);
+ return 0;
+ }
+ else {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return -1;
+ }
} \ No newline at end of file
OpenPOWER on IntegriCloud