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;