Hi,
I am making some progress. I still can not call "internal" sip-sip
numbers, but now, instead of insisting on forwarding to the gateway, SER
404's. Debug says that the called party is not in usrloc, although I can
see the entry in the location table in the db.
I have attached my ser.cfg, output from debug, and ngrep in the hope
that someone can show me the error of my ways.
-------------ser.cfg------------------------------------------
#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
#
# simple quick-start config script
#
# ----------- global configuration parameters ------------------------
debug=4 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode
#debug=7
#fork=no
#log_stderror=yes
*/
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=yes # (cmd. line: -R)
#port=5060
children=4
fifo="/tmp/ser_fifo"
# ------------------ module loading ----------------------------------
loadmodule "/usr/lib/ser/modules/mysql.so"
loadmodule "/usr/lib/ser/modules/sl.so"
loadmodule "/usr/lib/ser/modules/tm.so"
loadmodule "/usr//lib/ser/modules/rr.so"
loadmodule "/usr/lib/ser/modules/maxfwd.so"
loadmodule "/usr/lib/ser/modules/usrloc.so"
loadmodule "/usr/lib/ser/modules/registrar.so"
loadmodule "/usr/lib/ser/modules/domain.so"
loadmodule "/usr/lib/ser/modules/auth.so"
loadmodule "/usr/lib/ser/modules/auth_db.so"
loadmodule "/usr/lib/ser/modules/acc.so"
loadmodule "/usr/lib/ser/modules/exec.so"
loadmodule "/usr/lib/ser/modules/group.so"
#loadmodule "/usr/lib/ser/modules/msilo.so"
#loadmodule "/usr/lib/ser/modules/print.so"
#loadmodule "/usr/lib/ser/modules/textops.so"
#loadmodule "/usr/lib/ser/modules/jabber.so"
loadmodule "/usr/lib/ser/modules/uri.so"
#loadmodule "/usr/lib/ser/modules/vm.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
#modparam("usrloc", "db_mode", 0)
# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
modparam("usrloc", "db_mode", 2)
# -- auth params --
# Uncomment if you are using auth module
#
#modparam("usrloc", "db_url",
"sql://ser:<password>@localhost/ser")
modparam("usrloc", "db_url",
"sql://ser:heslo@wlgcd1:3306/ser")
modparam("auth_db", "db_url",
"sql://ser:heslo@wlgcd1:3306/ser")
modparam("group", "db_url",
"sql://ser:heslo@wlgcd1:3306/ser")
modparam("uri", "db_url",
"sql://ser:heslo@wlgcd1:3306/ser")
modparam("domain", "db_url",
"sql://ser:heslo@wlgcd1:3306/ser")
modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this
config),
# uncomment also the following parameter)
#
modparam("auth_db", "password_column", "password")
# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
# -- acc params --
modparam("acc", "log_level", 1)
# that is the flag for which we will account -- don't forget to
# set the same one :-)
modparam("acc", "log_flag", 2 )
# ------------------------- Domains Covered ------------------------
alias="fx.net.nz"
alias="vixen"
alias="vixen.fx.net.nz"
alias="202.53.189.50"
alias="special.fx.net.nz"
alias="wlgvx1.fx.net.nz"
#alias="202.53.189.23"
#alias="202.49.159.10"
# ------------------------- request routing logic -------------------
# main routing logic
route{
/* ********* ROUTINE CHECKS **********************************
*/
# filter too old messages
if (!mf_process_maxfwd_header("10")) {
log("LOG: Too many hops\n");
sl_send_reply("483","Too Many Hops");
break;
};
if (msg:len > max_len) {
sl_send_reply("513", "Wow -- Message too large");
break;
};
/* ********* RR ********************************** */
/* grant Route routing if route headers present */
if (loose_route()) { t_relay(); break; };
setflag(2);
/* record-route INVITEs -- all subsequent requests must visit us
*/
if (method=="INVITE") {
record_route();
};
lookup("aliases");
if (uri==myself) {
if (method=="REGISTER") {
# digest authentication
log(1,"request for registration");
if (!www_authorize("vixen.fx.net.nz",
"subscriber"))
{
www_challenge("vixen.fx.net.nz",
"0");
break;
};
# setflag(3);
save("location");
break;
};
}
# now check if it really is a PSTN destination which should be
handled
# by our gateway; if not, and the request is an invitation, drop
it --
# we cannot terminate it in PSTN; relay non-INVITE requests --
it may
# be for example BYEs sent by gateway to call originator
if (!uri=~"sip:\+?[0-9]+@.*")
{if (method=="INVITE") {
sl_send_reply("403", "Call cannot be served
here");
} else
{
forward(uri:host, uri:port);
};
break;
};
# account completed transactions via syslog
setflag(1);
# free call destinations ... no authentication needed
if ( is_user_in("Request-URI", "local") /* free destinations
*/
| uri=~"sip:[8][0-9][0-9][0-9]@.*" /* local
PBX */
| uri=~"sip:98[0-9][0-9][0-9][0-9]") {
log("free call");
} else if (src_ip==202.7.4.40) {
# our gateway doesn't support digest authentication;
# verify that a request is coming from it by source
# address
log("gateway-originated request");
} else {
# in all other cases, we need to check the request
against
# access control lists; first of all, verify request
# originator's identity
if (!proxy_authorize( "vixen.fx.net.nz" /* realm */,
"subscriber" /* table name */)) {
proxy_challenge( "vixen.fx.net.nz" /* realm */,
"0" /* no qop */ );
break;
};
# authorize only for INVITEs -- RR/Contact may result in
weird
# things showing up in d-uri that would break our logic;
our
# major concern is INVITE which causes PSTN costs
if (method=="INVITE") {
# does the authenticated user have a permission
for local
# calls (destinations beginning with a single
zero)?
# (i.e., is he in the "local" group?)
if (uri=~"sip:0[1-9][0-9]+@.*") {
if (!is_user_in("credentials",
"local"))
{
sl_send_reply("403", "No
permission for local calls");
break;
};
# the same for long-distance (destinations begin
with two zeros")
} else if (uri=~"sip:00[1-9][0-9]+@.*") {
if (!is_user_in("credentials", "ld"))
{
sl_send_reply("403", " no
permission for LD ");
break;
};
# the same for international calls (three zeros)
} else if (uri=~"sip:000[1-9][0-9]+@.*") {
if (!is_user_in("credentials", "int"))
{
sl_send_reply("403",
"International permissions needed");
break;
};
# everything else (e.g., interplanetary calls)
is denied
} else {
sl_send_reply("403", "Forbidden");
break;
};
}; # INVITE to authorized PSTN
};
# if you have passed through all the checks, let your call go to
the next stage!
# native SIP destinations are handled using our USRLOC DB
if(!lookup("aliases")){
log(1,"Couldn't find any
matching alias");
sl_send_reply("404", "User does
not exist");
break;
};
if(!lookup("location")) {
log(1,"unable to locate user");
# attempt handoff to PSTN.
log( "Forwarding to PSTN\n" );
rewritehost( "202.7.4.40" );
forward( "202.7.4.40", 5060 );
----------end ser.cfg----------------------------------------
-------------------debug-------------------------------------
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: SIP Request:
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: method: <INVITE>
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: uri:
<sip:8923@202.53.189.50;user=phone>
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: version: <SIP/2.0>
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: parse_headers: flags=1
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: end of header reached,
state=5
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: parse_headers: Via found,
flags=1
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: parse_headers: this is the
first via
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: After parse_msg...
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: preparing to run routing
scripts...
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: DEBUG : is_maxfwd_present:
searching for max_forwards header
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: parse_headers: flags=128
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: end of header reached,
state=9
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: DEBUG: get_hdr_field: <To>
[37]; uri=[sip:8923@202.53.189.50;user=phone]
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: DEBUG: to body
[<sip:8923@202.53.189.50;user=phone>^M ]
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: get_hdr_field: cseq <CSeq>:
<1> <INVITE>
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: DEBUG: get_hdr_body :
content_length=250
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: found end of header
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: DEBUG: is_maxfwd_present:
max_forwards header not found!
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: parse_headers: flags=256
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: find_first_route(): No Route
headers found
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: loose_route(): There is no
Route HF
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: DEBUG: add_param:
tag=4082266747
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: end of header reached,
state=29
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: lookup(): '8923' Not found in
usrloc
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: check_self - checking if
host==us: 13==9 && [202.53.189.50] == [127.0.0.1]
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: check_self - checking if port
5060 matches port 5060
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: check_self - checking if
host==us: 13==13 && [202.53.189.50] == [202.53.189.50]
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: check_self - checking if port
5060 matches port 5060
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: query="select grp from grp
where username='8923' AND grp='local'"
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: is_user_in(): User is in
group 'local'
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: free call
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: lookup(): '8923' Not found in
usrloc
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: Couldn't find any matching
alias
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: parse_headers: flags=-1
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]:
check_via_address(202.53.189.24, 202.53.189.24, 2)
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: DEBUG:destroy_avp_list:
destroing list (nil)
Sep 16 11:14:16 vixen /usr/sbin/ser[4228]: receive_msg: cleaning up
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: SIP Request:
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: method: <ACK>
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: uri:
<sip:8923@202.53.189.50;user=phone>
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: version: <SIP/2.0>
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: parse_headers: flags=1
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: end of header reached,
state=5
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: parse_headers: Via found,
flags=1
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: parse_headers: this is the
first via
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: After parse_msg...
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: preparing to run routing
scripts...
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: parse_headers: flags=4
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: DEBUG: add_param:
tag=b27e1a1d33761e85846fc98f5f3a7e58.bfe0
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: end of header reached,
state=29
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: DEBUG: get_hdr_field: <To>
[79]; uri=[sip:8923@202.53.189.50;user=phone]
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: DEBUG: to body
[<sip:8923@202.53.189.50;user=phone>]
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: DEBUG: sl_filter_ACK : local
ACK found -> dropping it!
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: DEBUG:destroy_avp_list:
destroing list (nil)
Sep 16 11:14:16 vixen /usr/sbin/ser[4230]: receive_msg: cleaning up
------------------------end debug---------------------------------
-------------------------ngrep port 5060--------------------------
#
U 202.53.189.24:5060 -> 202.53.189.50:5060
INVITE sip:8923@202.53.189.50;user=phone SIP/2.0..Via: SIP/2.0/UDP
202.53.189.24:5060..From: <sip:4748880@202.53.189.50;user=phone>;t
ag=3978441923..To: <sip:8923@202.53.189.50;user=phone>..Call-ID:
2139243568@202.53.189.24..CSeq: 1 INVITE..Contact: <sip:4748880@202
.53.189.24:5060;user=phone;transport=udp>..User-Agent: Cisco ATA
v2.15 ata18x (020927a)..Expires: 300..Content-Length: 252..Content-T
ype: application/sdp....v=0..o=4748880 12924 12924 IN IP4
202.53.189.24..s=ATA186 Call..c=IN IP4 202.53.189.24..t=0 0..m=audio
16384 R
TP/AVP 0 4 8 101..a=rtpmap:0 PCMU/8000/1..a=rtpmap:4
G723/8000/1..a=rtpmap:8 PCMA/8000/1..a=rtpmap:101
telephone-event/8000..a=fmtp:10
1 0-15..
#
U 202.53.189.50:5060 -> 202.53.189.24:5060
SIP/2.0 404 User does not exist..Via: SIP/2.0/UDP
202.53.189.24:5060..From:
<sip:4748880@202.53.189.50;user=phone>;tag=3978441923..To
:
<sip:8923@202.53.189.50;user=phone>;tag=b27e1a1d33761e85846fc98f5f3a7e58.bfe0..Call-ID:
2139243568@202.53.189.24..CSeq: 1 INVITE..S
erver: Sip EXpress router (0.8.14 (i386/linux))..Content-Length:
0..Warning: 392 202.53.189.50:5060 "Noisy feedback tells: pid=4231 r
eq_src_ip=202.53.189.24 req_src_port=5060
in_uri=sip:8923@202.53.189.50;user=phone
out_uri=sip:8923@202.53.189.50;user=phone via_cnt==
1"....
#
U 202.53.189.24:5060 -> 202.53.189.50:5060
ACK sip:8923@202.53.189.50;user=phone SIP/2.0..Via: SIP/2.0/UDP
202.53.189.24:5060..From: <sip:4748880@202.53.189.50;user=phone>;tag=
3978441923..To:
<sip:8923@202.53.189.50;user=phone>;tag=b27e1a1d33761e85846fc98f5f3a7e58.bfe0..Call-ID:
2139243568@202.53.189.24..CSe
q: 1 ACK..User-Agent: Cisco ATA v2.15 ata18x
(020927a)..Content-Length: 0....
exit
--------------------end-----------------------------------------
--