diff --git a/conf/freeswitch_combined.xml b/conf/freeswitch_combined.xml index 4cd52a97b3..40f7d7bfda 100644 --- a/conf/freeswitch_combined.xml +++ b/conf/freeswitch_combined.xml @@ -7,6 +7,9 @@ + + + diff --git a/conf/switch.conf.xml b/conf/switch.conf.xml index 818f91542e..89d91519e8 100644 --- a/conf/switch.conf.xml +++ b/conf/switch.conf.xml @@ -2,6 +2,9 @@ + + + diff --git a/src/include/switch_rtp.h b/src/include/switch_rtp.h index f2cc1f2910..dbba4fdfcf 100644 --- a/src/include/switch_rtp.h +++ b/src/include/switch_rtp.h @@ -27,6 +27,7 @@ * * * switch_channel.h -- Media Channel Interface + * Marcel Barbulescu * */ /** @@ -53,6 +54,20 @@ typedef void (*switch_rtp_invalid_handler_t) (switch_rtp_t *rtp_session, */ SWITCH_DECLARE(void) switch_rtp_init(switch_memory_pool_t *pool); +/*! + \brief Set/Get RTP start port + \param port new value (if > 0) + \return the current RTP start port +*/ +SWITCH_DECLARE(switch_port_t) switch_rtp_set_start_port(switch_port_t port); + +/*! + \brief Set/Get RTP end port + \param port new value (if > 0) + \return the current RTP end port +*/ +SWITCH_DECLARE(switch_port_t) switch_rtp_set_end_port(switch_port_t port); + /*! \brief Request a new port to be used for media \return the new port to use diff --git a/src/switch_core.c b/src/switch_core.c index 62e4de2dd7..2d965d52d2 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -26,6 +26,7 @@ * Anthony Minessale II * Michael Jerris * Paul D. Tinsley + * Marcel Barbulescu * * * switch_core.c -- Main Core Library @@ -445,6 +446,12 @@ SWITCH_DECLARE(switch_status_t) switch_core_init(char *console, const char **err if (!strcasecmp(var, "max-sessions")) { switch_core_session_limit(atoi(val)); } + else if (!strcasecmp(var, "rtp-start-port")) { + switch_rtp_set_start_port(atoi(val)); + } + else if (!strcasecmp(var, "rtp-end-port")) { + switch_rtp_set_end_port(atoi(val)); + } } } diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 54b64910ee..9d548146f4 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -24,6 +24,7 @@ * Contributor(s): * * Anthony Minessale II + * Marcel Barbulescu * * * switch_rtp.c -- RTP @@ -50,6 +51,8 @@ #define MASTER_KEY_LEN 30 #define RTP_MAGIC_NUMBER 42 +static switch_port_t START_PORT = RTP_START_PORT; +static switch_port_t END_PORT = RTP_END_PORT; static switch_port_t NEXT_PORT = RTP_START_PORT; static switch_mutex_t *port_lock = NULL; @@ -263,6 +266,43 @@ SWITCH_DECLARE(void) switch_rtp_init(switch_memory_pool_t *pool) global_init = 1; } +SWITCH_DECLARE(switch_port_t) switch_rtp_set_start_port(switch_port_t port) +{ + if (port) { + if (port_lock) { + switch_mutex_lock(port_lock); + } + if (NEXT_PORT == START_PORT) { + NEXT_PORT = port; + } + START_PORT = port; + if (NEXT_PORT < START_PORT) { + NEXT_PORT = START_PORT; + } + if (port_lock) { + switch_mutex_unlock(port_lock); + } + } + return START_PORT; +} + +SWITCH_DECLARE(switch_port_t) switch_rtp_set_end_port(switch_port_t port) +{ + if (port) { + if (port_lock) { + switch_mutex_lock(port_lock); + } + END_PORT = port; + if (NEXT_PORT > END_PORT) { + NEXT_PORT = START_PORT; + } + if (port_lock) { + switch_mutex_unlock(port_lock); + } + } + return END_PORT; +} + SWITCH_DECLARE(switch_port_t) switch_rtp_request_port(void) { switch_port_t port; @@ -270,8 +310,8 @@ SWITCH_DECLARE(switch_port_t) switch_rtp_request_port(void) switch_mutex_lock(port_lock); port = NEXT_PORT; NEXT_PORT += 2; - if (NEXT_PORT > RTP_END_PORT) { - NEXT_PORT = RTP_START_PORT; + if (NEXT_PORT > END_PORT) { + NEXT_PORT = START_PORT; } switch_mutex_unlock(port_lock); return port;