Not sure what's your problem is but there are several things need to change.
See below.
Hi everybody,
I'm trying to use Asterisk as SUA and SER as SIP router. But Asterisk doesn't succeed to register the Asterisk user to SER... the standard error output tell me: "ERROR: forward_msg: no 2nd via found in reply"
the SIP message looks like:
to 193.175.133.19:5060 Retransmitting #5 (no NAT): REGISTER sip:potemkin.fokus.fraunhofer.de SIP/2.0 Via: SIP/2.0/UDP 193.175.133.19:5060;branch=z9hG4bK625558ec From: sip:cys@potemkin.fokus.fraunhofer.de;tag=as238e1f29 To: sip:cys@potemkin.fokus.fraunhofer.de Call-ID: 6b8b4567327b23c6643c986966334873@193.175.133.19 CSeq: 102 REGISTER User-Agent: Asterisk PBX Expires: 120 Contact: sip:1234@193.175.133.19 Event: registration Content-Length: 0
and the configuration file is like:
###main routing logic route{ # initial sanity checks -- messages with # max_forwards==0, or excessively long requests if (!mf_process_maxfwd_header("10")) { sl_send_reply("483","Too Many Hops"); break; }; if ( msg:len > max_len ) { sl_send_reply("513", "Message too big"); break; };
record_route(); # Do strict routing if pre-loaded route headers present
loose_route();
You are trying to detect loose route but not processing it. You should try
if (loose_route()) { if (!t_relay()) { sl_reply_error(); }; break; };
# message should be from 127.0.0.1 or # from other listening address if (src_ip==127.0.0.1) { if (method=="REGISTER") { save("location"); break; }; if (uri == myself) { # native SIP destinations are handled
using our USRLOC DB if (!lookup("location")) { sl_send_reply("404", "Not Found"); break; }; }; # forward to current uri now if (!t_relay()) { sl_reply_error(); };
Try to put a break after t_relay() if you do not need additional processing of the message.
} else if (src_ip == myself) { # this is a request from local domain # but not from 127.0.0.1, must be from UA if (method=="REGISTER") { # register message, save it and forward to # security server save("location"); forward (127.0.0.1, 4050); break; }; forward (127.0.0.1, 4050); break; };
}
It's strange to me that you are saving the UA location in ser but not doing anything with it. If you want * to do all sip logic, there is no need to save the UA location here. If not, your logic here seems problematic to me.
One thing that I recommend but not essential is not to use 127.0.0.1 or localhost even both ser and * (or sems) are running on the same machine. Even a small mistake in routing logic could end up UA or proxy sending replies to themselves.
Zeus