Does anybody have samples of using LCR strip and prefix? I've tried configuring it for an ITSP that wants US numbers to be 10-digits and international calls to be prefixed with 011. I keep these numbers in E.164 format, so, for example:
+12128543754 should have the ruri rewritten to: 2128543754 and +44123456789 should become 01144123456789
Here are relevant portions of my lcr tables:
lcr routes +--------------+----------+--------+----------+ | prefix | from_uri | grp_id | priority | +--------------+----------+--------+----------+ | +1__________ | % | 5 | 10 | | +1__________ | % | 7 | 20 | | +__ | % | 8 | 20 | | +__ | % | 6 | 10 |
lcr gateways (edited to fit and hide details:-) +-----------+---------+------+-----+-----+--------+-------+--------+ | gw_name | ip | port | uri_| tran| grp_id | strip | prefix | +-----------+---------+------------+-----+--------+-------+--------+ | prov1-us | x.x.x.x | 5060 | 1 | 1 | 5 | 2 | | | prov1-int | x.x.x.x | 5060 | 1 | 1 | 6 | 1 | 011 | | voip1-int | y.y.y.y | 5060 | 1 | 1 | 7 | 1 | 011 | | voip1-us | y.y.y.y | 5060 | 1 | 1 | 8 | 2 | |
openser.cfg snippet (our internal dialplan has 93 for outside line):
xlog("L_INFO","route[4]: SIP-to-PSTN call from <$fu> to <$tu> routed\n"); if (uri=~"^sip:931") { subst_user('/^931/+1/'); # rewrite to E.164 subst('/^(To:[^0-9]*)931(.*)$/\1+1\2/'); # rewrite to E.164 } if (uri=~"^sip:93011") { subst_user('/^93011/+/'); # rewrite to E.164 subst('/^(To:[^0-9]*)93011(.*)$/\1+\2/'); # rewrite to E.164 } xlog("L_INFO","route[4]: SIP-to-PSTN r-uri is now <$ru>\n"); # rewrite callee's 5-digit extensions to +121285..... if !((isflagset(6) && !isflagset(4)) || isflagset(5)) { subst('/^(From:.*<sip:)([134][0-9]{4}@)/\1+121285\2/'); subst('/^(Remote-Party-ID:.*<sip:)([134][0-9]{4}@)/\1+121285\2/'); } t_on_failure("4"); # if gateway unavail go to 4 if (!next_gw()) { sl_send_reply("503", "Service not available - No gateways"); return; }; xlog("L_INFO","route[4]: SIP-to-PSTN after next_gw() r-uri is now <$ru>\n"); # Cookbook does a forward. I think we do a stateful t_relay which will handle # e.g. TCP/UDP or v6->v4 conversion as needed. if (isflagset(18)) { #call fwd enabled append_branch(); } if (!t_relay()) { sl_reply_error(); }; xlog("L_INFO","Fell through route[4]: $si: $rm From <$fu> To <$tu>\n"); } # end of route[4]
The observed behavior is that the host part gets rewritten correctly (to x.x.x.x) but the user part does not get stripped and/or prefixed.
Any help would be appreciated.
/a
Alan:
Would it be possible in your config file to use regular expressions to classify the number as a specific area code or range of area codes (such as 212) or as an international call then strip the appropriate number of digits based on the classification? If so then the next step would probably be to add the correct prefix to the lcr gateway table.
-Steve
Alan Crosswell wrote:
Does anybody have samples of using LCR strip and prefix? I've tried configuring it for an ITSP that wants US numbers to be 10-digits and international calls to be prefixed with 011. I keep these numbers in E.164 format, so, for example:
+12128543754 should have the ruri rewritten to: 2128543754 and +44123456789 should become 01144123456789
Here are relevant portions of my lcr tables:
lcr routes +--------------+----------+--------+----------+ | prefix | from_uri | grp_id | priority | +--------------+----------+--------+----------+ | +1__________ | % | 5 | 10 | | +1__________ | % | 7 | 20 | | +__ | % | 8 | 20 | | +__ | % | 6 | 10 |
lcr gateways (edited to fit and hide details:-) +-----------+---------+------+-----+-----+--------+-------+--------+ | gw_name | ip | port | uri_| tran| grp_id | strip | prefix | +-----------+---------+------------+-----+--------+-------+--------+ | prov1-us | x.x.x.x | 5060 | 1 | 1 | 5 | 2 | | | prov1-int | x.x.x.x | 5060 | 1 | 1 | 6 | 1 | 011 | | voip1-int | y.y.y.y | 5060 | 1 | 1 | 7 | 1 | 011 | | voip1-us | y.y.y.y | 5060 | 1 | 1 | 8 | 2 | |
openser.cfg snippet (our internal dialplan has 93 for outside line):
xlog("L_INFO","route[4]: SIP-to-PSTN call from <$fu> to <$tu> routed\n"); if (uri=~"^sip:931") { subst_user('/^931/+1/'); # rewrite to E.164 subst('/^(To:[^0-9]*)931(.*)$/\1+1\2/'); # rewrite to E.164 } if (uri=~"^sip:93011") { subst_user('/^93011/+/'); # rewrite to E.164 subst('/^(To:[^0-9]*)93011(.*)$/\1+\2/'); # rewrite to E.164 } xlog("L_INFO","route[4]: SIP-to-PSTN r-uri is now <$ru>\n"); # rewrite callee's 5-digit extensions to +121285..... if !((isflagset(6) && !isflagset(4)) || isflagset(5)) { subst('/^(From:.*<sip:)([134][0-9]{4}@)/\1+121285\2/'); subst('/^(Remote-Party-ID:.*<sip:)([134][0-9]{4}@)/\1+121285\2/'); } t_on_failure("4"); # if gateway unavail go to 4 if (!next_gw()) { sl_send_reply("503", "Service not available - No gateways"); return; }; xlog("L_INFO","route[4]: SIP-to-PSTN after next_gw() r-uri is now <$ru>\n"); # Cookbook does a forward. I think we do a stateful t_relay which will handle # e.g. TCP/UDP or v6->v4 conversion as needed. if (isflagset(18)) { #call fwd enabled append_branch(); } if (!t_relay()) { sl_reply_error(); }; xlog("L_INFO","Fell through route[4]: $si: $rm From <$fu> To <$tu>\n"); } # end of route[4]
The observed behavior is that the host part gets rewritten correctly (to x.x.x.x) but the user part does not get stripped and/or prefixed.
Any help would be appreciated.
/a
Users mailing list Users@openser.org http://openser.org/cgi-bin/mailman/listinfo/users
Alan Crosswell writes:
Here are relevant portions of my lcr tables:
lcr routes +--------------+----------+--------+----------+ | prefix | from_uri | grp_id | priority | +--------------+----------+--------+----------+ | +1__________ | % | 5 | 10 | | +1__________ | % | 7 | 20 | | +__ | % | 8 | 20 | | +__ | % | 6 | 10 |
prefix contains just the characters of the prefix, nothing else.
-- juha
Not in the routes table; the gw table has prefix and strip cols. /a
...... Original Message ....... On Tue, 19 Sep 2006 19:33:24 +0300 "Juha Heinanen" jh@tutpro.com wrote:
Alan Crosswell writes:
Here are relevant portions of my lcr tables:
lcr routes +--------------+----------+--------+----------+ | prefix | from_uri | grp_id | priority | +--------------+----------+--------+----------+ | +1__________ | % | 5 | 10 | | +1__________ | % | 7 | 20 | | +__ | % | 8 | 20 | | +__ | % | 6 | 10 |
prefix contains just the characters of the prefix, nothing else.
-- juha
(sheepishly) never mind.
I was editing the r-uri *after* calling load_gws() so the prefix match had already been done. Strip/prefix working just fine!
Further explanation:
Dial plan for an international call here for example is: 93,011ccxxxx... which I canonicalize as +ccxxxx... (E.164). My carrier wants to see 011ccxxxx... so in my gw entry I have strip 1 (to remove the +) and prefix 011 to insert the 011.
I was calling load_gws() *before* canonicalizing to E.164 format. So the prefix match was hitting some other random row! /a
Alan Crosswell wrote:
Does anybody have samples of using LCR strip and prefix? I've tried configuring it for an ITSP that wants US numbers to be 10-digits and international calls to be prefixed with 011. I keep these numbers in E.164 format, so, for example:
+12128543754 should have the ruri rewritten to: 2128543754 and +44123456789 should become 01144123456789
Here are relevant portions of my lcr tables:
lcr routes +--------------+----------+--------+----------+ | prefix | from_uri | grp_id | priority | +--------------+----------+--------+----------+ | +1__________ | % | 5 | 10 | | +1__________ | % | 7 | 20 | | +__ | % | 8 | 20 | | +__ | % | 6 | 10 |
lcr gateways (edited to fit and hide details:-) +-----------+---------+------+-----+-----+--------+-------+--------+ | gw_name | ip | port | uri_| tran| grp_id | strip | prefix | +-----------+---------+------------+-----+--------+-------+--------+ | prov1-us | x.x.x.x | 5060 | 1 | 1 | 5 | 2 | | | prov1-int | x.x.x.x | 5060 | 1 | 1 | 6 | 1 | 011 | | voip1-int | y.y.y.y | 5060 | 1 | 1 | 7 | 1 | 011 | | voip1-us | y.y.y.y | 5060 | 1 | 1 | 8 | 2 | |
openser.cfg snippet (our internal dialplan has 93 for outside line):
xlog("L_INFO","route[4]: SIP-to-PSTN call from <$fu> to <$tu>
routed\n"); if (uri=~"^sip:931") { subst_user('/^931/+1/'); # rewrite to E.164 subst('/^(To:[^0-9]*)931(.*)$/\1+1\2/'); # rewrite to E.164 } if (uri=~"^sip:93011") { subst_user('/^93011/+/'); # rewrite to E.164 subst('/^(To:[^0-9]*)93011(.*)$/\1+\2/'); # rewrite to E.164 } xlog("L_INFO","route[4]: SIP-to-PSTN r-uri is now <$ru>\n"); # rewrite callee's 5-digit extensions to +121285..... if !((isflagset(6) && !isflagset(4)) || isflagset(5)) { subst('/^(From:.*<sip:)([134][0-9]{4}@)/\1+121285\2/'); subst('/^(Remote-Party-ID:.*<sip:)([134][0-9]{4}@)/\1+121285\2/'); } t_on_failure("4"); # if gateway unavail go to 4 if (!next_gw()) { sl_send_reply("503", "Service not available - No gateways"); return; }; xlog("L_INFO","route[4]: SIP-to-PSTN after next_gw() r-uri is now <$ru>\n"); # Cookbook does a forward. I think we do a stateful t_relay which will handle # e.g. TCP/UDP or v6->v4 conversion as needed. if (isflagset(18)) { #call fwd enabled append_branch(); } if (!t_relay()) { sl_reply_error(); }; xlog("L_INFO","Fell through route[4]: $si: $rm From <$fu> To <$tu>\n"); } # end of route[4]
The observed behavior is that the host part gets rewritten correctly (to x.x.x.x) but the user part does not get stripped and/or prefixed.
Any help would be appreciated.
/a