Browse Source

Implemented MAX_SESSIONS limit or calls.

related to RTPENGINE-20
pull/120/head^2
Frederic-Philippe Metz 11 years ago
parent
commit
c444c05a5f
6 changed files with 24 additions and 0 deletions
  1. +1
    -0
      daemon/call.h
  2. +12
    -0
      daemon/call_interfaces.c
  3. +3
    -0
      daemon/main.c
  4. +1
    -0
      debian/ngcp-rtpengine-daemon.default
  5. +2
    -0
      debian/ngcp-rtpengine-daemon.init
  6. +5
    -0
      el/rtpengine.init

+ 1
- 0
daemon/call.h View File

@ -426,6 +426,7 @@ struct callmaster_config {
GQueue *interfaces; /* struct interface_address */
int port_min;
int port_max;
int max_sessions;
unsigned int timeout;
unsigned int silent_timeout;
unsigned int delete_delay;


+ 12
- 0
daemon/call_interfaces.c View File

@ -691,6 +691,18 @@ out:
const char *call_offer_ng(bencode_item_t *input, struct callmaster *m, bencode_item_t *output, const char* addr,
const struct sockaddr_in6 *sin)
{
static char *errstr[64]; memset(errstr,0,64);
if (m->conf.max_sessions>0) {
rwlock_lock_r(&m->hashlock);
if (g_hash_table_size(m->callhash) >= m->conf.max_sessions) {
rwlock_unlock_r(&m->hashlock);
ilog(LOG_ERROR, "Parallel session limit reached (%i)",m->conf.max_sessions);
snprintf(errstr, 64, "Parallel session limit reached (%i)",m->conf.max_sessions);
return errstr;
}
rwlock_unlock_r(&m->hashlock);
}
return call_offer_answer_ng(input, m, output, OP_OFFER, addr, sin);
}


+ 3
- 0
daemon/main.c View File

@ -101,6 +101,7 @@ static int timeout;
static int silent_timeout;
static int port_min = 30000;
static int port_max = 40000;
static int max_sessions = 0;
static u_int32_t redis_ip;
static u_int16_t redis_port;
static int redis_db = -1;
@ -297,6 +298,7 @@ static void options(int *argc, char ***argv) {
{ "delete-delay", 'd', 0, G_OPTION_ARG_INT, &delete_delay, "Delay for deleting a session from memory.", "INT" },
{ "sip-source", 0, 0, G_OPTION_ARG_NONE, &sip_source, "Use SIP source address by default", NULL },
{ "dtls-passive", 0, 0, G_OPTION_ARG_NONE, &dtls_passive_def,"Always prefer DTLS passive role", NULL },
{ "max-sessions", 0, 0, G_OPTION_ARG_INT, &max_sessions, "Limit of maximum number of sessions", NULL },
{ NULL, }
};
@ -572,6 +574,7 @@ no_kernel:
mc.interfaces = &interfaces;
mc.port_min = port_min;
mc.port_max = port_max;
mc.max_sessions = max_sessions;
mc.timeout = timeout;
mc.silent_timeout = silent_timeout;
mc.delete_delay = delete_delay;


+ 1
- 0
debian/ngcp-rtpengine-daemon.default View File

@ -27,3 +27,4 @@ TABLE=0
# GRAPHITE=9006
# GRAPHITE_INTERVAL=60
# GRAPHITE_PREFIX=myownprefix
# MAX_SESSIONS=5000

+ 2
- 0
debian/ngcp-rtpengine-daemon.init View File

@ -76,6 +76,8 @@ OPTIONS="$OPTIONS --table=$TABLE"
[ -z "$GRAPHITE" ] || OPTIONS="$OPTIONS --graphite=$GRAPHITE"
[ -z "$GRAPHITE_INTERVAL" ] || OPTIONS="$OPTIONS --graphite-interval=$GRAPHITE_INTERVAL"
[ -z "$GRAPHITE_PREFIX" ] || OPTIONS="$OPTIONS --graphite-prefix=$GRAPHITE_PREFIX"
[ -z "$MAX_SESSIONS" ] || OPTIONS="$OPTIONS --max-sessions=$MAX_SESSIONS"
if test "$FORK" = "no" ; then
OPTIONS="$OPTIONS --foreground"
fi


+ 5
- 0
el/rtpengine.init View File

@ -167,6 +167,11 @@ build_opts() {
then
OPTS+=" --log-facility-rtcp=$LOG_FACILITY_RTCP"
fi
if [[ -n "$MAX_SESSIONS" ]]
then
OPTS+=" --max-sessions=$MAX_SESSIONS"
fi
}
start() {


Loading…
Cancel
Save