summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configs/rtp.conf.sample20
-rw-r--r--res/res_rtp_asterisk.c28
2 files changed, 36 insertions, 12 deletions
diff --git a/configs/rtp.conf.sample b/configs/rtp.conf.sample
index 93edd1975..196e05e2d 100644
--- a/configs/rtp.conf.sample
+++ b/configs/rtp.conf.sample
@@ -36,16 +36,22 @@ rtpend=20000
; Whether to enable or disable ICE support. This option is enabled by default.
; icesupport=false
;
-; Address to use for the STUN server when determining the external IP address and port
-; an RTP session can be reached at. This option is disabled by default.
+; Hostname or address for the STUN server used when determining the external
+; IP address and port an RTP session can be reached at. The port number is
+; optional. If omitted the default value of 3478 will be used. This option is
+; disabled by default.
+;
+; e.g. stundaddr=mystun.server.com:3478
+;
; stunaddr=
;
-; Address to use for the TURN relay server when creating a TURN relay session. This option
-; is disabled by default.
-; turnaddr=
+; Hostname or address for the TURN server to be used as a relay. The port
+; number is optional. If omitted the default value of 3478 will be used.
+; This option is disabled by default.
;
-; Port used to contact the TURN relay server on. This option is set to 34780 by default.
-; turnport=34780
+; e.g. turnaddr=myturn.server.com:34780
+;
+; turnaddr=
;
; Username used to authenticate with TURN relay server.
; turnusername=
diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c
index 958d5831c..25fd3d523 100644
--- a/res/res_rtp_asterisk.c
+++ b/res/res_rtp_asterisk.c
@@ -4320,8 +4320,22 @@ static int rtp_reload(int reload)
dtmftimeout = DEFAULT_DTMF_TIMEOUT;
strictrtp = DEFAULT_STRICT_RTP;
learning_min_sequential = DEFAULT_LEARNING_MIN_SEQUENTIAL;
+
+ /** This resource is not "reloaded" so much as unloaded and loaded again.
+ * In the case of the TURN related variables, the memory referenced by a
+ * previously loaded instance *should* have been released when the
+ * corresponding pool was destroyed. If at some point in the future this
+ * resource were to support ACTUAL live reconfiguration and did NOT release
+ * the pool this will cause a small memory leak.
+ */
+
icesupport = DEFAULT_ICESUPPORT;
turnport = DEFAULT_TURN_PORT;
+ memset(&stunaddr, 0, sizeof(stunaddr));
+ turnaddr = pj_str(NULL);
+ turnusername = pj_str(NULL);
+ turnpassword = pj_str(NULL);
+
if (cfg) {
if ((s = ast_variable_retrieve(cfg, "general", "rtpstart"))) {
rtpstart = atoi(s);
@@ -4381,11 +4395,15 @@ static int rtp_reload(int reload)
}
}
if ((s = ast_variable_retrieve(cfg, "general", "turnaddr"))) {
- pj_strdup2(pool, &turnaddr, s);
- }
- if ((s = ast_variable_retrieve(cfg, "general", "turnport"))) {
- if (!(turnport = atoi(s))) {
- turnport = DEFAULT_TURN_PORT;
+ struct sockaddr_in addr;
+ addr.sin_port = htons(DEFAULT_TURN_PORT);
+ if (ast_parse_arg(s, PARSE_INADDR, &addr)) {
+ ast_log(LOG_WARNING, "Invalid TURN server address: %s\n", s);
+ } else {
+ pj_strdup2(pool, &turnaddr, ast_inet_ntoa(addr.sin_addr));
+ /* ntohs() is not a bug here. The port number is used in host byte order with
+ * a pjnat API. */
+ turnport = ntohs(addr.sin_port);
}
}
if ((s = ast_variable_retrieve(cfg, "general", "turnusername"))) {