Upgrade 3CX to v18 and get it hosted free!

ScopServ LCA Map

Author image

This script extracts information about the telephone NPA-NXX for a given phone number and then produces a block for Asterisk extensions.conf file that will route all calls for the LCA via a specific macro.

One use for this is to allow 7 and 10-digit dialing for the entire US/Canada, where free local calls are routed via a POTS line and long-distance calls are routed via a VoIP provider.

This script is available under LGPL license.

Copyright (c) 2005 by ScopServ Inc.

Step 1 – Copy the text below into Notepad and name it lca-map.pl

  1. !/usr/bin/perl

$npa = shift || 819;
$nxx = shift || 473;
$page = shift || 0;
$astout = shift || 0;
my $result;

$cache = “/tmp/npanxx-$npa$nxx.map”;
if (-f $cache) {
($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime,
$ctime, $blksize, $blocks) = stat($cache);

$max = ( 3600 * 24 * 7);
$diff = time() – $mtime;
if ($diff < $max && $size > 0) {
open(CACHE, $cache);
while(<CACHE>) {
print $_;
}
close (CACHE);
exit;
}
}

open(CACHE, “>/tmp/npanxx-$npa$nxx.map”);

&fetchPrefix($npa, $nxx, $page);

sub fetchPrefix($npa, $nxx, $page) {

my $respage = ”;
if ($page > 1) {
$respage = “-dresultpage=$page”;
}

my $start = 0;
my $oknext = 0;

my $cmd = sprintf(“curl http://members.dandy.net/~czg/lca_prefix.php -m 15 -G -s -dnpa=%s -dnxx=%s %s”, $npa, $nxx, $respage);
open(IN, “$cmd |”);
while(my $line = <IN>) {

if ($line =~ /<tr class=\”rc.\”>/) {
$start = 1;
$oknext = 1;
next;
}

if ($start == 1) {

  1. <td headers=”npanxx”><a href=”lprefix.php?exch=174680″>819-383</a></td>

if ($line =~ /lprefix.php\?exch=(\d+).*?\”>(.*?)<\/a>/) {
$exch_id = $1;
$exchange = $2;
}

  1. <td headers=”exchange”><a href=”lca.php?exch=174680″>Trois-Rivi&egrave;res, QC</a></td>

if ($line =~ /lca.php\?exch=(\d+).*?\”>(.*?)<\/a>/) {
$location = $2;
}

  1. <td headers=”switch”><a href=”/~czg/prefix.php?switch=TSRVPQAFDMD”>TSRVPQAFDMD</a></td>

if ($line =~ /prefix.php\?switch=(.*?).*?\”>(.*?)<\/a>/) {
$switch = $2;
}

  1. <td headers=”ocn”><a href=”/~czg/prefix.php?ocn=8821″>8821 ROGERS WIRELESS</a></td>

if ($line =~ /prefix.php\?ocn=(.*?).*?\”>(.*?)<\/a>/) {
$ocn_id = $1;
$ocn = $2;
}
}

if ($start == 1 && $line =~ /<\/tr>/) {
if ($exchange eq “$npa-$nxx”) {
$oknext = 0;
$result .= “$exchange “;

if ($astout) {
print “; Location : $location\n”;
print “; Switch : $switch\n”;
print “; OCN : $ocn\n\n”;
} else {
print CACHE “INFO|$location|$switch|$ocn\n”;
print “INFO|$location|$switch|$ocn\n”;
}
fetchExchange($exch_id);
}
$start = 0;
next;
}

if ($oknext == 1 && $line =~ /resultpage=(\d+)&npa=…\”>Next<\/a>/) {
$page = $1;
&fetchPrefix($npa, $nxx, $page);
}

}
close(IN);
return $result;
}

sub fetchExchange($exch_id) {
local $cmd = sprintf(“curl http://members.dandy.net/~czg/lprefix.php -m 15 -G -s -dexch=%s”, $exch_id);

my $exc_7 = ”;
my $exc_10 = ”;
my $start = 0;
open(IN, “$cmd |”);
while(my $line = <IN>) {
if ($line =~ /<pre>/) {
$start = 1 ;
next;
}

if ($start == 1 && $line =~ /<\/pre>/) {
$start = 0;
next;
}

if ($start == 1) {
if ($line =~ /^(\d\d\d);(\d\d\d);(.*?);/) {
$l_npa = $1;
$l_nxx = $2;
$l_loc = $3;

if ($astout) {
$exc_10 .= sprintf(“exten => _%d%dXXXX,1,Macro(%s) ; # %s\n”, $l_npa, $l_nxx, $astout, $l_loc);
$exc_10 .= sprintf(“exten => _%d%dXXXX,2,Congestion\n”, $l_npa, $l_nxx);
} else {

print CACHE “DATA|$l_npa|$l_nxx|$l_loc\n”;
print “DATA|$l_npa|$l_nxx|$l_loc\n”;
}
}
}
}

if ($astout) {
print $exc_10;
}
}
close(CACHE);


Article Reviews

Write a Review

Your email address will not be published. Required fields are marked *

Required Field. Minimum 5 characters.

Required Field. Minimum 5 characters, maximum 50.

Required field.There is an error with this field.

Required Field.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

There are no reviews for this article. Be the first one to write a review.
Get 3CX - Absolutely Free!
Link up your team and customers Phone System Live Chat Video Conferencing

Hosted or Self-managed. Up to 10 users free forever. No credit card. Try risk free.

3CX
A 3CX Account with that email already exists. You will be redirected to the Customer Portal to sign in or reset your password if you've forgotten it.