implemented options_session_limit: SEMS-31 Special OPTIONS response if near session_limit

git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@1506 8eb893ce-cfd4-0310-b710-fb5ebe64c474
sayer/1.4-spce2.6
Stefan Sayer 17 years ago
parent 6f204ac4b7
commit 33876e9d04

@ -70,6 +70,10 @@ unsigned int AmConfig::SessionLimit = 0;
unsigned int AmConfig::SessionLimitErrCode = 503;
string AmConfig::SessionLimitErrReason = "Server overload";
unsigned int AmConfig::OptionsSessionLimit = 0;
unsigned int AmConfig::OptionsSessionLimitErrCode = 503;
string AmConfig::OptionsSessionLimitErrReason = "Server overload";
vector <string> AmConfig::CodecOrder;
Dtmf::InbandDetectorType
@ -368,6 +372,18 @@ int AmConfig::readConfiguration()
}
}
if(cfg.hasParameter("options_session_limit")){
vector<string> limit = explode(cfg.getParameter("options_session_limit"), ";");
if (limit.size() != 3) {
ERROR("invalid options_session_limit specified.\n");
} else {
if (str2i(limit[0], OptionsSessionLimit) || str2i(limit[1], OptionsSessionLimitErrCode)) {
ERROR("invalid options_session_limit specified.\n");
}
OptionsSessionLimitErrReason = limit[2];
}
}
return 0;
}

@ -110,6 +110,10 @@ struct AmConfig
static unsigned int SessionLimitErrCode;
static string SessionLimitErrReason;
static unsigned int OptionsSessionLimit;
static unsigned int OptionsSessionLimitErrCode;
static string OptionsSessionLimitErrReason;
/** Time of no RTP after which Session is regarded as dead, 0 for no Timeout */
static unsigned int DeadRtpTime;

@ -92,7 +92,15 @@ void AmSipDispatcher::handleSipMsg(AmSipRequest &req)
else if(req.method == "OPTIONS"){
// Basic OPTIONS support
AmSipDialog::reply_error(req,200,"OK");
if (!AmConfig::OptionsSessionLimit ||
(AmSession::getSessionNum() < AmConfig::OptionsSessionLimit)) {
AmSipDialog::reply_error(req, 200, "OK");
} else {
// return error code if near to overload
AmSipDialog::reply_error(req,
AmConfig::OptionsSessionLimitErrCode,
AmConfig::OptionsSessionLimitErrReason);
}
return;
} else if( (req.method == "CANCEL") ||

@ -244,6 +244,18 @@ loglevel=2
# Example:
# session_limit="1000;503;Server overload"
# optional parameter: options_session_limit=<limit>;<err code>;<err reason>
#
# - this sets a custom response to OPTIONS, if the session count reaches
# a certain limit. This way health monitor could raise an alarm to syste
# administrator.
#
# Default: 0 (None)
#
# Example:
# options_session_limit="900;503;Warning, server soon overloaded"
# optional parameter: dead_rtp_time=<unsigned int>
#
# - if != 0, after this time (in seconds) of no RTP

Loading…
Cancel
Save