Implemented MAX_SESSIONS limit or calls.

related to RTPENGINE-20
pull/120/head^2
Frederic-Philippe Metz 11 years ago
parent cb85cbf44f
commit c444c05a5f

@ -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;

@ -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);
}

@ -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;

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

@ -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

@ -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