[OpenSER-Users] Question regarding usage of carrier-route
Carsten Bock
lists at bock.info
Wed Sep 26 15:57:18 CEST 2007
Hi Henning,
Now everything seems to become clear about the usage of the carrierroute
module. Now i seem to understand, how the carrier-route module should
work.
You wrote:
For
"if(!cr_rewrite_uri("0", "call_id")){"
the default-tree would be used (e.g. carrier1).
If i change this to
"if(!cr_tree_rewrite_uri("carrier2", "0")){"
would the tree of "carrier2" be used? I assume (when looking at the
source), i cannot use pseudo-variables here..., right?
Thanks in advance,
Carsten
Am Mittwoch, den 26.09.2007, 13:40 +0200 schrieb Henning Westerholt:
> On Tuesday 25 September 2007, Carsten Bock wrote:
> > I have a question regarding carrierroute: In table "route_tree" i would
> > have the following:
> > +----+----------+
> > | id | carrier |
> > +----+----------+
> > | 1 | carrier1 |
> > | 2 | carrier2 |
> > +----+----------+
> >
> > In the table "carrierroute" i have the following:
> > +----+---------+-------------+-------+------+-------+---------------+
> > | id | carrier | scan_prefix | level | prob | strip | rewrite_host |
> > +----+---------+-------------+-------+------+-------+---------------+
> > | 1 | 1 | 49 | 0 | 0.5 | 0 | gateway1_1 |
> > | 2 | 1 | 49 | 0 | 0.5 | 0 | gateway1_2 |
> > | 3 | 1 | 49 | 1 | 1 | 0 | gateway1_3 |
> > | 4 | 1 | 49 | 2 | 1 | 0 | gateway1_4 |
> > | 5 | 2 | 49 | 0 | 1 | 0 | gateway2_1 |
> > | 6 | 2 | 49 | 1 | 1 | 0 | gateway2_2 |
> > +----+---------+-------------+-------+------+-------+---------------+
> >
> > in the routing logic i would do the following:
> >
> > route {
> > # Calls to PSTN based on RURI
> > if(!cr_rewrite_uri("carrier1", "call_id")){
> > sl_send_reply("403", "Not allowed");
> > } else {
> > # In case of failure, re-route the request
> > t_on_failure("1");
> > # Relay the request to the gateway
> > t_relay();
> > }
> > }
> >
> > failure_route(1) {
> > # In case of failure, send it to an alternative route:
> > if (t_check_status("408|5[0-9][0-9]")) {
> > if(!cr_rewrite_uri("carrier1", "call_id")){
> > t_reply("403", "Not allowed");
> > } else {
> > t_on_failure("1");
> > t_relay();
> > }
> > }
> > }
> >
> > Questions:
> > 1) Is this configuration right?
>
> Hell Carsten,
>
> well, you should specify the level in cr_rewrite_uri, not the carrier. The
> mapping of users to a certain carrier is specified in the cr_prefered_carrier
> column, e.g. in subscriber. But for cr_rewrite_uri only the default carrier
> is used.
>
> This column is not yet created by the database scripts. Perhaps it makes sense
> to extend this table, if the extra modules are installed like the SERWEB
> case.
>
> So for example you could do this:
>
> route {
> # route calls based on hash over callid
> # choose route level 0 of the default carrier
> if(!cr_rewrite_uri("0", "call_id")){
> sl_send_reply("403", "Not allowed");
> } else {
> # In case of failure, re-route the request
> t_on_failure("1");
> # Relay the request to the gateway
> t_relay();
> }
> }
>
> failure_route(1) {
> # In case of failure, send it to an alternative route:
> if (t_check_status("408|5[0-9][0-9]")) {
> #choose route level 1 of the default carrier
> if(!cr_rewrite_uri("1", "call_id")){
> t_reply("403", "Not allowed");
> } else {
> t_on_failure("2");
> t_relay();
> }
> }
> }
>
> failure_route(2) {
> # further processing
> }
>
> > 2) Would the call, in this case, go to either gateway1_1 or gateway1_2, in
> > case of failure to gateway1_3?
>
> The calls (with the config snippet above) would be in the routed to gateway1_1
> or gateway1_2, depending of the hash of the callid. If you get an failure,
> the next (in this case) level of the routing tree is choosen, e.g. gateway1_3
> or gateway1_4.
>
> > 3) In case all three fail, it would go to
> > gateway1_4? (original route would be level 1, 1st failure-route would be
> > level 2, 2nd failure-route would be level 3 and so on?)
>
> You must manually choose another level. You can choose the levels as you like,
> or choose another carrier with the rewrite_tree function.
>
> > 4) Calls to other
> > destinations as to destinations starting with "49" in the URI would be
> > rejected, right?
> Yes, if you don't have a route with an empty prefix in this tree. You could
> also block certain prefixes if you specify an empty rewrite.
>
> > 5) Does it cause problems, when "prob" does not result in
> > 1? E.g. does a prob of 1 and 1 result into the same as 0.5 and 0.5?
>
> Yes, this is the same. The actual prob values are "fixed", as you could see in
> the cr_dump_routes output.
>
> I've extended the carrierroute documentation somewhat with the points you
> mentioned, i hope that its now more clear.
>
> Cheers,
>
> Henning
More information about the sr-users
mailing list