Table of Contents

Kamailio (OpenSER) Flags description

Types of flags

Corresponding Functions

Message/transaction flags

setflag(flag_idx) resetflag(flag_idx) isflagset(flag_idx)

Branch flags

setbflag/setbranchflag(branch_idx,flag_idx) resetbflag/resetbranchflag(branch_idx,flag_idx) isbflagset/isbranchflagset(branch_idx,flag_idx)

or, the shorter format, working on the default (branch 0) flags:

setbflag(flag_idx) resetbflag(flag_idx) isbflagset(flag_idx)

Script flags

setsflag/setscriptflag(flag_idx) resetsflag/resetscriptflag(flag_idx) issflagset/isscriptflagset(flag_idx)

Flags and Pseudo Variables

Message/transaction flags

$mf - decimal value $mF - hexa value

Branch flags

$bf - decimal value $bF - hexa value

Script flags

$sf - decimal value $sF - hexa value

Flags and routes

Message/transaction flags

These flags will show up in all routes where messages related to the initial request are processed. So, they will be visible and changeable in onbranch, failure and onreply routes; the flags will be visible in all branch routes; if you change a flag in a branch route, the next branch routes will inherit the change. Message flag inheritance by the CANCEL (set flag in INVITE and see it in CANCEL req/reply), is known not to work. In Kamailio (OpenSER) 1.2 the CANCEL is a different transaction than the INVITE, but starting with 1.3 it is one transaction, so message flags should be inherited.

Branch flags

These flags will show up in all routes where messages related to initial branch request are processed. So, in branch route you will see different sets of flags (as they are different branches); in onreply route you will see the branch flags corresponding to the branch the reply belongs to; in failure route, the branch flags corresponding to the branch the winning reply belongs to will be visible. In request route, you can have multiple branches (as a result of a lookup(), enum query, append_branch(), etc) - the default branch is 0 (corresponding to the RURI); In reply routes there will be only one branch , the 0 one. In branch route the default branch is the current process branch (having index 0); In failure route, initially there is only one branch (index 0), corresponding the failed branch.

Script flags

These flags are available only in script and are reset after each top level route execution (routes internally triggered by Kamailio (OpenSER)). They will be persistent per main route, onreply_route, branch_route, failure_route. Note they will be inherit in routes called from other routes.

Example

Nat flag handling

 ..........
 # 3 - the nat flag
 modparam("usrloc","nat_bflag",3)
 ..........
 
 route {
   ..........
   if (nat detected)
      setbflag(3); # set branch flag 3 for the branch 0

   ..........
   if (is_method("REGISTER")) {
      # the branch flags (including 3) will be saved into location
      save("location");
      exit;
   } else {
      # lookup will load the branch flag from location
      if (!lookup("location")) {
         sl_send_reply("404","Not Found");
         exit;
      }
      t_on_branch("1")
      t_relay();
   }
 }
 
 branch_route[1] {
   xlog("-------branch=$T_branch_idx, branch flags=$bF\n");
   if (isbflagset(3)) {
      #current branch is marked as natted
      .........
   }
 }

if no parallel forking is done, you can get rid of the branch route and add instead of t_on_branch():

   ........
   if (isbflagset(3)) {
      #current branch is marked as natted
      .........
   }
   ......... 

Utils Stuff