]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[Core] Speed up call setup
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 21 Feb 2019 23:19:52 +0000 (23:19 +0000)
committerAndrey Volk <andywolk@gmail.com>
Sat, 31 Jul 2021 00:50:23 +0000 (03:50 +0300)
src/include/switch_utils.h
src/mod/endpoints/mod_verto/mod_verto.c
src/switch_rtp.c
src/switch_utils.c

index 20655ecd4e374ab5096c760e8bded3ab74fe1e96..f2394cfa2a5165dc037990b2ec9dbfeb6604cba7 100644 (file)
@@ -590,7 +590,7 @@ SWITCH_DECLARE(char *) get_addr(char *buf, switch_size_t len, struct sockaddr *s
 SWITCH_DECLARE(char *) get_addr6(char *buf, switch_size_t len, struct sockaddr_in6 *sa, socklen_t salen);
 
 SWITCH_DECLARE(int) get_addr_int(switch_sockaddr_t *sa);
-SWITCH_DECLARE(int) switch_cmp_addr(switch_sockaddr_t *sa1, switch_sockaddr_t *sa2);
+SWITCH_DECLARE(int) switch_cmp_addr(switch_sockaddr_t *sa1, switch_sockaddr_t *sa2, switch_bool_t ip_only);
 SWITCH_DECLARE(int) switch_cp_addr(switch_sockaddr_t *sa1, switch_sockaddr_t *sa2);
 
 /*!
index 342ed8b26e5e061f7d7e41826930890d9841cdf2..f7ad60da76cd5414519217979ffba25707252502 100644 (file)
@@ -2613,10 +2613,14 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_
                }
                break;
        case SWITCH_MESSAGE_INDICATE_ANSWER:
+               switch_channel_set_variable(tech_pvt->channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "ANSWERED");
+               switch_channel_mark_pre_answered(tech_pvt->channel);
                r = verto_send_media_indication(session, "verto.answer");
                break;
        case SWITCH_MESSAGE_INDICATE_PROGRESS:
                r = verto_send_media_indication(session, "verto.media");
+               switch_channel_set_variable(tech_pvt->channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "EARLY MEDIA");
+               switch_channel_mark_pre_answered(tech_pvt->channel);
                break;
        default:
                break;
index 1b0d407decf07a8bcf292418d691ea12bf180d76..b90a513885fea600c6441ba25c5224153fad9712 100644 (file)
@@ -1255,7 +1255,7 @@ static void handle_ice(switch_rtp_t *rtp_session, switch_rtp_ice_t *ice, void *d
                        port = switch_sockaddr_get_port(from_addr);
                        host2 = switch_get_addr(buf2, sizeof(buf2), ice->addr);
                        port2 = switch_sockaddr_get_port(ice->addr);
-                       cmp = switch_cmp_addr(from_addr, ice->addr);
+                       cmp = switch_cmp_addr(from_addr, ice->addr, SWITCH_FALSE);
 
                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG4,
                                                          "STUN from %s:%d %s\n", host, port, cmp ? "EXPECTED" : "IGNORED");
@@ -1265,7 +1265,7 @@ static void handle_ice(switch_rtp_t *rtp_session, switch_rtp_ice_t *ice, void *d
                                rtp_session->wrong_addrs = 0;
                        } else {
                                if (((rtp_session->dtls && rtp_session->dtls->state != DS_READY) || !ice->ready || !ice->rready) &&
-                                       rtp_session->wrong_addrs > 2 && rtp_session->ice_adj == 0) {
+                                       (rtp_session->wrong_addrs > 2 || switch_cmp_addr(from_addr, ice->addr, SWITCH_TRUE)) && rtp_session->ice_adj == 0) {
                                        do_adj++;
                                        rtp_session->ice_adj = 1;
                                        rtp_session->wrong_addrs = 0;
@@ -7159,7 +7159,7 @@ static switch_status_t read_rtcp_packet(switch_rtp_t *rtp_session, switch_size_t
 
        /* RTCP Auto ADJ */
        if (*bytes && rtp_session->flags[SWITCH_RTP_FLAG_RTCP_AUTOADJ] &&  switch_sockaddr_get_port(rtp_session->rtcp_from_addr)) {
-                       if (!switch_cmp_addr(rtp_session->rtcp_from_addr, rtp_session->rtcp_remote_addr)) {
+               if (!switch_cmp_addr(rtp_session->rtcp_from_addr, rtp_session->rtcp_remote_addr, SWITCH_FALSE)) {
                                if (++rtp_session->rtcp_autoadj_tally >= rtp_session->rtcp_autoadj_threshold) {
                                        const char *err;
                                        uint32_t old = rtp_session->remote_rtcp_port;
@@ -7735,13 +7735,13 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
                                        goto recvfrom;
 
                                }
-                       } else if (!(rtp_session->rtp_bugs & RTP_BUG_ACCEPT_ANY_PACKETS) && !switch_cmp_addr(rtp_session->rtp_from_addr, rtp_session->remote_addr)) {
+                       } else if (!(rtp_session->rtp_bugs & RTP_BUG_ACCEPT_ANY_PACKETS) && !switch_cmp_addr(rtp_session->rtp_from_addr, rtp_session->remote_addr, SWITCH_FALSE)) {
                                goto recvfrom;
                        }
                }
 
                if (bytes && rtp_session->flags[SWITCH_RTP_FLAG_AUTOADJ] && switch_sockaddr_get_port(rtp_session->rtp_from_addr)) {
-                       if (!switch_cmp_addr(rtp_session->rtp_from_addr, rtp_session->remote_addr)) {
+                       if (!switch_cmp_addr(rtp_session->rtp_from_addr, rtp_session->remote_addr, SWITCH_FALSE)) {
                                if (++rtp_session->autoadj_tally >= rtp_session->autoadj_threshold) {
                                        const char *err;
                                        uint32_t old = rtp_session->remote_port;
index 85e12f0488131969bfbaaa1ea31a4d4713ff8be0..b63594cab9dc589303df191b791331e64d7687be 100644 (file)
@@ -2344,7 +2344,7 @@ SWITCH_DECLARE(int) get_addr_int(switch_sockaddr_t *sa)
        return ntohs((unsigned short) s->sin_addr.s_addr);
 }
 
-SWITCH_DECLARE(int) switch_cmp_addr(switch_sockaddr_t *sa1, switch_sockaddr_t *sa2)
+SWITCH_DECLARE(int) switch_cmp_addr(switch_sockaddr_t *sa1, switch_sockaddr_t *sa2, switch_bool_t ip_only)
 {
        struct sockaddr_in *s1;
        struct sockaddr_in *s2;
@@ -2372,17 +2372,21 @@ SWITCH_DECLARE(int) switch_cmp_addr(switch_sockaddr_t *sa1, switch_sockaddr_t *s
 
        switch (ss1->sa_family) {
        case AF_INET:
-               return (s1->sin_addr.s_addr == s2->sin_addr.s_addr && s1->sin_port == s2->sin_port);
+               if (ip_only) {
+                       return (s1->sin_addr.s_addr == s2->sin_addr.s_addr);
+               } else {
+                       return (s1->sin_addr.s_addr == s2->sin_addr.s_addr && s1->sin_port == s2->sin_port);
+               }
        case AF_INET6:
                if (s16->sin6_addr.s6_addr && s26->sin6_addr.s6_addr) {
                        int i;
 
-                       if (s16->sin6_port != s26->sin6_port)
-                               return 0;
+                       if (!ip_only) {
+                               if (s16->sin6_port != s26->sin6_port) return 0;
+                       }
 
                        for (i = 0; i < 4; i++) {
-                               if (*((int32_t *) s16->sin6_addr.s6_addr + i) != *((int32_t *) s26->sin6_addr.s6_addr + i))
-                                       return 0;
+                               if (*((int32_t *) s16->sin6_addr.s6_addr + i) != *((int32_t *) s26->sin6_addr.s6_addr + i)) return 0;
                        }
 
                        return 1;