diff --git a/contrib/src/pjproject/SHA512SUMS b/contrib/src/pjproject/SHA512SUMS
index bf463cbedcd304f73587a4c098dba32660f9b201..3218e0cfcd81fefec137f63396d8395f6625193c 100644
--- a/contrib/src/pjproject/SHA512SUMS
+++ b/contrib/src/pjproject/SHA512SUMS
@@ -1 +1 @@
-48be9a80f90b1cb292c6eb0d071d889f6027f56bdd75095c510d9be2d6b5f1df5a6371617009371525ac5797dc61f5814dcc1cc11d14105e5a2576539f89293f  pjproject-2.6.tar.bz2
\ No newline at end of file
+3d355ffcbbeed62cfc711e574a987dc06043ccf4f2625820adffa89167022b8306fcee3fada71d3d45e7b902fc9c65ac8221de101cbafed25362a3921f702afd  pjproject-2.7.2.tar.bz2
\ No newline at end of file
diff --git a/contrib/src/pjproject/endianness.patch b/contrib/src/pjproject/endianness.patch
deleted file mode 100644
index 84b9499448f65d588082fd4047906cb1295541dc..0000000000000000000000000000000000000000
--- a/contrib/src/pjproject/endianness.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff --git a/pjlib/include/pj/config.h b/pjlib/include/pj/config.h
-index 10f86fd..4ace1bc 100644
---- a/pjlib/include/pj/config.h
-+++ b/pjlib/include/pj/config.h
-@@ -245,7 +245,13 @@
- #   define PJ_M_NAME		"armv4"
- #   define PJ_HAS_PENTIUM	0
- #   if !PJ_IS_LITTLE_ENDIAN && !PJ_IS_BIG_ENDIAN
--#   	error Endianness must be declared for this processor
-+#       if defined(__GNUC__)
-+#           include <endian.h>
-+#           define PJ_IS_LITTLE_ENDIAN  __BYTE_ORDER__ == __LITTLE_ENDIAN__
-+#           define PJ_IS_BIG_ENDIAN     __BYTE_ORDER__ == __BIG_ENDIAN__
-+#       else
-+#           error Endianness must be declared for this processor
-+#       endif
- #   endif
- 
- #elif defined (PJ_M_POWERPC) || defined(__powerpc) || defined(__powerpc__) || \
diff --git a/contrib/src/pjproject/fix_base64.patch b/contrib/src/pjproject/fix_base64.patch
deleted file mode 100644
index 70bdd5054df891fc421d848bd9375ca18c6864b5..0000000000000000000000000000000000000000
--- a/contrib/src/pjproject/fix_base64.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/pjlib-util/src/pjlib-util/base64.c	2017-05-03 10:29:07.200417026 -0400
-+++ b/pjlib-util/src/pjlib-util/base64.c	2017-05-03 10:28:30.344335390 -0400
-@@ -131,7 +131,7 @@
- 
-     PJ_ASSERT_RETURN(input && out && out_len, PJ_EINVAL);
- 
--    while (buf[len-1] == '=' && len)
-+    while (len && buf[len-1] == '=')
- 	--len;
- 
-     PJ_ASSERT_RETURN(*out_len >= PJ_BASE64_TO_BASE256_LEN(len), 
-@@ -161,7 +161,7 @@
- 	out[j++] = (pj_uint8_t)(((c[2] & 0x03)<<6) | (c[3] & 0x3F));
-     }
- 
--    pj_assert(j < *out_len);
-+    pj_assert(j <= *out_len);
-     *out_len = j;
- 
-     return PJ_SUCCESS;
diff --git a/contrib/src/pjproject/gnutls.patch b/contrib/src/pjproject/gnutls.patch
index ff1e7f5cf60f4cb1a0b2217de62a3e0980e756c5..df9de5529aa6dedaa0c35ea54aab4dcedc0f7178 100644
--- a/contrib/src/pjproject/gnutls.patch
+++ b/contrib/src/pjproject/gnutls.patch
@@ -3272,7 +3272,7 @@ diff -ru a/pjlib/src/pj/ssl_sock_ossl.c b/pjlib/src/pj/ssl_sock_ossl.c
 diff -ru a/pjmedia/src/pjmedia/transport_srtp.c b/pjmedia/src/pjmedia/transport_srtp.c
 --- a/pjmedia/src/pjmedia/transport_srtp.c	2017-01-10 23:38:29.000000000 -0500
 +++ b/pjmedia/src/pjmedia/transport_srtp.c	2017-06-08 13:43:29.727001721 -0400
-@@ -30,7 +30,8 @@
+@@ -31,7 +31,8 @@
  
  #if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0)
  
@@ -3282,14 +3282,32 @@ diff -ru a/pjmedia/src/pjmedia/transport_srtp.c b/pjmedia/src/pjmedia/transport_
  #  include <openssl/rand.h>
  
  /* Suppress compile warning of OpenSSL deprecation (OpenSSL is deprecated
-@@ -1147,7 +1148,8 @@
- 	    key_ok = PJ_TRUE;
+--- a/pjmedia/src/pjmedia/transport_srtp_sdes.c	2018-04-06 12:44:30.355264189 -0400
++++ b/pjmedia/src/pjmedia/transport_srtp_sdes.c	2018-04-06 12:49:23.269309135 -0400
+@@ -31,6 +31,10 @@
  
+ #endif
  
--#if defined(PJ_HAS_SSL_SOCK) && (PJ_HAS_SSL_SOCK != 0)
-+#if defined(PJ_HAS_SSL_SOCK) && PJ_HAS_SSL_SOCK != 0 && \
-+    defined(PJ_HAS_TLS_SOCK) && PJ_HAS_TLS_SOCK == 0
++#if defined(PJ_HAS_TLS_SOCK) && (PJ_HAS_TLS_SOCK != 0)
++#  include <gnutls/gnutls.h>
++#  include <gnutls/crypto.h>
++#endif
  
- /* Include OpenSSL libraries for MSVC */
- #  ifdef _MSC_VER
-
+ #include <pj/rand.h>
+ 
+@@ -122,7 +126,14 @@
+ 			 PJ_ETOOSMALL);
+ 
+ 	do {
+-#if defined(PJ_HAS_SSL_SOCK) && (PJ_HAS_SSL_SOCK != 0)
++#if defined(PJ_HAS_TLS_SOCK) && (PJ_HAS_TLS_SOCK != 0)
++        int err = gnutls_rnd(GNUTLS_RND_KEY, (unsigned char*)key,
++				 crypto_suites[cs_idx].cipher_key_len);
++	    if (err != 1) {
++		PJ_LOG(5,(THIS_FILE, "Failed generating random key"));
++		return PJMEDIA_ERRNO_FROM_LIBSRTP(1);
++	    }
++#elif defined(PJ_HAS_SSL_SOCK) && (PJ_HAS_SSL_SOCK != 0)
+ 	    int err = RAND_bytes((unsigned char*)key,
+ 				 crypto_suites[cs_idx].cipher_key_len);
+ 	    if (err != 1) {
diff --git a/contrib/src/pjproject/intptr_t.patch b/contrib/src/pjproject/intptr_t.patch
deleted file mode 100644
index 8994a991c08aa416939e9e2e785132131a561e73..0000000000000000000000000000000000000000
--- a/contrib/src/pjproject/intptr_t.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- pjproject/pjsip/src/pjsua2/endpoint.cpp.orig	2014-09-05 16:39:29.708512865 -0400
-+++ pjproject/pjsip/src/pjsua2/endpoint.cpp	2014-09-05 16:39:00.084513427 -0400
-@@ -489,7 +489,7 @@
-     LogEntry entry;
-     entry.level = level;
-     entry.msg = string(data, len);
--    entry.threadId = (long)pj_thread_this();
-+    entry.threadId = (intptr_t)pj_thread_this();
-     entry.threadName = string(pj_thread_get_name(pj_thread_this()));
-
-     ep.utilLogWrite(entry);
diff --git a/contrib/src/pjproject/isblank.patch b/contrib/src/pjproject/isblank.patch
deleted file mode 100644
index 98f6f1e827e695ce6d1608fd274d2fed8aa77325..0000000000000000000000000000000000000000
--- a/contrib/src/pjproject/isblank.patch
+++ /dev/null
@@ -1,8 +0,0 @@
---- pjproject/pjlib/include/pj/compat/ctype.h	2016-10-06 16:39:29.708512865 -0400
-+++ pjproject/pjlib/include/pj/compat/ctype.h	2016-10-06 17:39:00.084513427 -0400
-@@ -43,5 +43,2 @@
- 
--#ifndef isblank
--#   define isblank(c)	    (c==' ' || c=='\t')
--#endif
- 
diff --git a/contrib/src/pjproject/notestsapps.patch b/contrib/src/pjproject/notestsapps.patch
index 8bf957b3680a42aa7f05ff23b2031ae92f6b72bc..662f1dbf1630e69c90863bc98a9843f71a09769f 100644
--- a/contrib/src/pjproject/notestsapps.patch
+++ b/contrib/src/pjproject/notestsapps.patch
@@ -79,15 +79,6 @@ diff --git a/pjsip/build/Makefile b/pjsip/build/Makefile
 index d2a5c2a..7e2ec60 100644
 --- a/pjsip/build/Makefile
 +++ b/pjsip/build/Makefile
-@@ -140,7 +140,7 @@ export PJSUA2_LIB_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \
- 			   account.o endpoint.o json.o persistent.o types.o \
- 			   siptypes.o call.o presence.o media.o
- export PJSUA2_LIB_CFLAGS += $(_CFLAGS) $(PJ_VIDEO_CFLAGS)
--export PJSUA2_LIB_CXXFLAGS = $(PJSUA2_LIB_CFLAGS) 
-+export PJSUA2_LIB_CXXFLAGS = $(_CXXFLAGS) $(PJ_VIDEO_CFLAGS) 
- export PJSUA2_LIB_LDFLAGS += $(PJSUA_LIB_LDLIB) \
- 			     $(PJSIP_UA_LDLIB) \
- 			     $(PJSIP_SIMPLE_LDLIB) \
 @@ -165,7 +165,6 @@ export PJSUA2_TEST_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \
  export PJSUA2_TEST_CFLAGS += $(_CFLAGS) $(PJ_VIDEO_CFLAGS)
  export PJSUA2_TEST_CXXFLAGS = $(PJSUA2_LIB_CFLAGS) 
diff --git a/contrib/src/pjproject/rfc6062.patch b/contrib/src/pjproject/rfc6062.patch
index 7fd6b7785655b38a37ad60034ab8ec094fce86bc..3f39f222abec5ef085483779ffc8e80ca8d57296 100644
--- a/contrib/src/pjproject/rfc6062.patch
+++ b/contrib/src/pjproject/rfc6062.patch
@@ -511,12 +511,7 @@ on behalf of Savoir-faire Linux.
  	status = pj_turn_session_set_credential(turn_sock->sess, cred);
  	if (status != PJ_SUCCESS) {
  	    sess_fail(turn_sock, "Error setting credential", status);
-@@ -676,11 +757,35 @@
- 	return PJ_EINVALIDOP;
-     }
- 
--    PJ_UNUSED_ARG(dst_addr);
--    PJ_UNUSED_ARG(dst_addr_len);
+@@ -684,2 +770,27 @@
 +	/* With TCP peer connection filter by address
 +	 * if packet is for the server or the peer
 +	 */
@@ -542,14 +537,9 @@ on behalf of Savoir-faire Linux.
 +	} else {
 +		asock = turn_sock->active_sock;
 +	}
- 
--    status = pj_activesock_send(turn_sock->active_sock, &turn_sock->send_key,
-+    status = pj_activesock_send(asock, &turn_sock->send_key,
- 				pkt, &len, 0);
-+
-     if (status != PJ_SUCCESS && status != PJ_EPENDING) {
- 	show_err(turn_sock, "socket send()", status);
-     }
+-	status = pj_activesock_send(turn_sock->active_sock,
++	status = pj_activesock_send(asock,
+ 				    &turn_sock->send_key, pkt, &len, 0);
 @@ -927,4 +1032,365 @@
      }
  }
diff --git a/contrib/src/pjproject/rules.mak b/contrib/src/pjproject/rules.mak
index 285a081dfa369fda5ea1eb6fd365b2c41b312731..44911b4086c26f52482ddbaf8375772262137e05 100644
--- a/contrib/src/pjproject/rules.mak
+++ b/contrib/src/pjproject/rules.mak
@@ -1,5 +1,5 @@
 # PJPROJECT
-PJPROJECT_VERSION := 2.6
+PJPROJECT_VERSION := 2.7.2
 PJPROJECT_URL := http://www.pjsip.org/release/$(PJPROJECT_VERSION)/pjproject-$(PJPROJECT_VERSION).tar.bz2
 
 PJPROJECT_OPTIONS := --disable-oss          \
@@ -62,16 +62,12 @@ $(TARBALLS)/pjproject-$(PJPROJECT_VERSION).tar.bz2:
 pjproject: pjproject-$(PJPROJECT_VERSION).tar.bz2 .sum-pjproject
 	$(UNPACK)
 ifdef HAVE_WIN32
-	#$(APPLY) $(SRC)/pjproject/intptr_t.patch
 	$(APPLY) $(SRC)/pjproject/pj_win.patch
 endif
-	#$(APPLY) $(SRC)/pjproject/endianness.patch
 	$(APPLY) $(SRC)/pjproject/gnutls.patch
 	$(APPLY) $(SRC)/pjproject/notestsapps.patch
-	$(APPLY) $(SRC)/pjproject/fix_base64.patch
 ifdef HAVE_ANDROID
 	$(APPLY) $(SRC)/pjproject/android.patch
-	$(APPLY) $(SRC)/pjproject/isblank.patch
 endif
 	$(APPLY) $(SRC)/pjproject/ipv6.patch
 	$(APPLY) $(SRC)/pjproject/ice_config.patch
diff --git a/src/sip/sipvoiplink.cpp b/src/sip/sipvoiplink.cpp
index 214c47028d1f429bdc5e103d16b738d906fea373..31f114b93414b14fa94a19219ec5da3243a40ba5 100644
--- a/src/sip/sipvoiplink.cpp
+++ b/src/sip/sipvoiplink.cpp
@@ -567,6 +567,9 @@ SIPVoIPLink::SIPVoIPLink() : pool_(nullptr, pj_pool_release)
         outgoing_request_forked_cb,
         transaction_state_changed_cb,
         sdp_request_offer_cb,
+#if PJ_VERSION_NUM >= (2 << 24 | 7 << 16)
+        nullptr /* on_rx_offer2 */,
+#endif
 #if PJ_VERSION_NUM > (2 << 24 | 1 << 16)
         nullptr /* on_rx_reinvite */,
 #endif
@@ -1334,7 +1337,11 @@ SIPVoIPLink::findLocalAddressFromSTUN(pjsip_transport* transport,
 
     pj_sockaddr_in mapped_addr;
     pj_sock_t sipSocket = pjsip_udp_transport_get_socket(transport);
-    const pjstun_setting stunOpt = {PJ_TRUE, *stunServerName, stunPort,
+    const pjstun_setting stunOpt = {PJ_TRUE,
+#if PJ_VERSION_NUM > (2 << 24 | 7 << 16)
+                                    localIp.getFamily(),
+#endif
+                                    *stunServerName, stunPort,
                                     *stunServerName, stunPort};
     const pj_status_t stunStatus = pjstun_get_mapped_addr2(&cp_.factory,
                                                            &stunOpt, 1,