diff options
-rw-r--r-- | configs/rtp.conf.sample | 20 | ||||
-rw-r--r-- | res/res_rtp_asterisk.c | 28 |
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"))) { |