|
Documentation |
Documentation? -> Script -> Script StatementsTable of Content (hide) Statements you can use in the OpenSIPS config file while building the routing logic. 1. ifIF-ELSE statement Prototype:
if(expr) {
actions;
} else {
actions;
}
The 'expr' should be a valid logical expression. The logical operators that can be used in 'expr':
Example of usage:
if(is_method("INVITE"))
{
log("this sip message is an invite\n");
} else {
log("this sip message is not an invite\n");
}
2. switchSWITCH statement - it can be used to test the value of a pseudo-variable. IMPORTANT NOTE: 'break' can be used only to mark the end of a 'case' branch (as it is in shell scripts). If you are trying to use 'break' outside a 'case' block the script will return error -- you must use 'return' there. Example of usage:
route {
route(1);
switch($retcode)
{
case -1:
log("process INVITE requests here\n");
break;
case 1:
log("process REGISTER requests here\n");
break;
case 2:
case 3:
log("process SUBSCRIBE and NOTIFY requests here\n");
break;
default:
log("process other requests here\n");
}
# switch of R-URI username
switch($rU)
{
case "101":
log("destination number is 101\n");
break;
case "102":
log("destination number is 102\n");
break;
case "103":
case "104":
log("destination number is 103 or 104\n");
break;
default:
log("unknown destination number\n");
}
}
route[1]{
if(is_method("INVITE"))
{
return(-1);
};
if(is_method("REGISTER"))
return(1);
}
if(is_method("SUBSCRIBE"))
return(2);
}
if(is_method("NOTIFY"))
return(3);
}
return(-2);
}
NOTE: take care while using 'return' - 'return(0)' stops the execution of the script. 3. whilewhile statement Example of usage: $var(i) = 0;
while($var(i) < 10)
{
xlog("counter: $var(i)\n");
$var(i) = $var(i) + 1;
}
4. Script OperationsAssignments plus string and arithmetic operations can be done directly in the configuration file. 5. AssignmentAssignments can be done like in C, via '=' (equal). The following pseudo-variables can be used in left side of an assignment:
$var(a) = 123; There is a special assign operator ':=' (colon equal) that can be used with AVPs. If the right value is 'null', all AVPs with that name are deleted. If different, the new value will overwrite any existing values for the AVPs with than name (on other words, delete existing AVPs with same name, add a new one with the right side value). $avp(i:3) := 123; 6. String operationsFor strings, '+' is available to concatenate. $var(a) = "test"; $var(b) = "sip:" + $var(a) + "@" + $fd; 7. Arithmetic and bitwise operationsFor numbers, one can use:
Example: $var(a) = 4 + ( 7 & ( ~2 ) ); NOTE: to ensure the priority of operands in expression evaluations do use __parenthesis__. Arithmetic expressions can be used in condition expressions via test operator ' [ ... ] '.
if( [ $var(a) & 4 ] )
log("var a has third bit set\n");
|
