request_route {
seturi("sip:a@example.com");
append_branch("sip:b@example.com", "0.5");
append_branch("sip:c@example.com", "0.5");
append_branch("sip:d@example.com", "1.0");
t_relay();
break;
}
----上面代码的意思是:收到sip消息时,同时发送到a,b,c,d所代表的4个目标,并行发送。
----append_branch第2个参数,数字代表的是优先级。范围0---1的小数,值越大,优先级越高,所以1是最高优先级。
modparam("tm", "contacts_avp", "tm_contacts");
modparam("tm", "contact_flows_avp", "tm_contact_flows");
request_route {
seturi("sip:a@example.com");
append_branch("sip:b@example.com", "0.5");
append_branch("sip:c@example.com", "0.5");
append_branch("sip:d@example.com", "1.0");
t_load_contacts(); ----从目标集中获取所有分支,根据它们的q值对它们进行排序,并将它们存储在 modparam 中配置的 AVP(tm_contacts) 中.
t_next_contacts(); ----获取下一个目标,根据优先级,就是d了。
t_on_failure("serial");
t_relay(); ----把电话发送到d目标。
break;
}
failure_route["serial"]
{ //可是这里不是只有失败了才会进来吗?如果D成功了,根本没有b,c,a什么事了啊
if (!t_next_contacts()) {
//如果没有下一个路由了,直接退出
exit;
}
t_on_failure("serial");
t_relay(); //继续路由
}
----上面代码的意思:首先发送到目标d,然后并行发送到目标b和c(因为优先级都是0.5),最后再发到a。这样就是并行和串行组合了。不会一呼啦瞬间发送出去了。