summaryrefslogtreecommitdiff
path: root/pjsip-apps/src/pjsua/pjsua_app.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjsip-apps/src/pjsua/pjsua_app.c')
-rw-r--r--pjsip-apps/src/pjsua/pjsua_app.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/pjsip-apps/src/pjsua/pjsua_app.c b/pjsip-apps/src/pjsua/pjsua_app.c
index 919a1907..cc3cacac 100644
--- a/pjsip-apps/src/pjsua/pjsua_app.c
+++ b/pjsip-apps/src/pjsua/pjsua_app.c
@@ -19,7 +19,7 @@
#include <pjsua-lib/pjsua.h>
-#define THIS_FILE "pjsua.c"
+#define THIS_FILE "pjsua_app.c"
#define NO_LIMIT (int)0x7FFFFFFF
//#define STEREO_DEMO
@@ -2307,6 +2307,33 @@ static void manage_codec_prio(void)
}
+/* Callback upon NAT detection completion */
+static void nat_detect_cb(void *user_data,
+ const pj_stun_nat_detect_result *res)
+{
+ PJ_UNUSED_ARG(user_data);
+
+ if (res->status != PJ_SUCCESS) {
+ pjsua_perror(THIS_FILE, "NAT detection failed", res->status);
+ } else {
+ PJ_LOG(3, (THIS_FILE, "NAT detected as %s", res->nat_type_name));
+ }
+}
+
+
+/*
+ * Detect NAT type.
+ */
+static void detect_nat_type(void)
+{
+ pj_status_t status;
+
+ status = pjsua_detect_nat_type(NULL, &nat_detect_cb);
+ if (status != PJ_SUCCESS)
+ pjsua_perror(THIS_FILE, "Error", status);
+}
+
+
/*
* Main "user interface" loop.
*/
@@ -2420,6 +2447,10 @@ void console_app_main(const pj_str_t *uri_to_call)
}
break;
+ case 'n':
+ detect_nat_type();
+ break;
+
case 'i':
/* Send instant messaeg */
@@ -3473,6 +3504,9 @@ pj_status_t app_main(void)
return status;
}
+ if (app_config.cfg.stun_domain.slen || app_config.cfg.stun_host.slen)
+ detect_nat_type();
+
console_app_main(&uri_arg);
return PJ_SUCCESS;