[Serusers] Re: Enabling calls to US-based 8xx numbers
Klaus Darilion
klaus.mailinglists at pernau.at
Tue Mar 2 13:37:03 CET 2004
Have you seen the BYE message at the client side? Capture on the PC with
xlite. Does xlite send a BYE? If yes, where is it sending to?
klaus
Nikola Stojanoski wrote:
> Hi,
>
> Yes, i'm using ethereal that's why i'm sure that BYE is not reaching the
> SER and DeltaThree's servers.
>
> Can the problem be that the SER is located behind NAT i don't have a
> option to try it on a public IP. X-Lite is registered as user at 192.168.0.1
> on SER but it's user@<public IP> on delta servers. At the moment i can't
> forward my public IP to accept SIP requests to 192.168.0.2 so in my X-Lite
> configuration i'm using 192.168.0.2 as sip proxy.
>
> If you think that it could be a problem let me know so i can try to find
> out a way to start SER on a public IP.
>
> Regards,
> Nikola
>
>
>
>>how do you know that there is no BYE? Do you capture the network traffic
>>on the proxy and on the client side? Use ethereal to verify if there are
>>differences to the BYE and CANCEL messages.
>>
>>klaus
>>
>>Nikola Stojanoski wrote:
>>
>>> HI Klaus,
>>>
>>>i'm testing SER to redirect the calls started with 00 to
>>>natrelay.deltathree.com because my sip server is behind NAT, the
>>>scenario
>>>is like this:
>>>
>>>X-Lite --> SER --> DeltaThree --> etc ....
>>> |_________|
>>> NAT
>>>
>>>X-Lite has 192.168.0.1
>>>SER 192.168.0.2
>>>
>>>and as i've told you i can send a call CANCEL it but i can't send BYE to
>>>stop a call that is already in progress
>>>
>>>Here is my config.
>>>
>>>-------------------------------------------------------
>>>debug=1 # i had this at "3" initially"
>>>fork=yes
>>>log_stderror=no # (cmd line: -E)
>>>
>>>/* Uncomment these lines to enter debugging mode
>>>fork=no
>>>log_stderror=yes
>>>*/
>>>
>>>check_via=no # (cmd. line: -v)
>>>dns=no # (cmd. line: -r)
>>>rev_dns=no # (cmd. line: -R)
>>>port=5060
>>>children=4
>>>fifo="/tmp/ser_fifo"
>>>
>>>#
>>># Listen
>>>#
>>>listen=192.168.0.2
>>>
>>>#
>>># Aliases
>>>#
>>>alias=igor.intranet.com.mk
>>>alias=192.168.0.2
>>>
>>># ------------------ module loading ----------------------------------
>>># Uncomment this if you want to use SQL database
>>>loadmodule "/usr/local/lib/ser/modules/mysql.so"
>>>
>>>loadmodule "/usr/local/lib/ser/modules/sl.so"
>>>loadmodule "/usr/local/lib/ser/modules/tm.so"
>>>loadmodule "/usr/local/lib/ser/modules/rr.so"
>>>loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
>>>loadmodule "/usr/local/lib/ser/modules/usrloc.so"
>>>loadmodule "/usr/local/lib/ser/modules/registrar.so"
>>>loadmodule "/usr/local/lib/ser/modules/textops.so"
>>>
>>># Uncomment this if you want digest authentication
>>># mysql.so must be loaded !
>>>loadmodule "/usr/local/lib/ser/modules/auth.so"
>>>loadmodule "/usr/local/lib/ser/modules/auth_db.so"
>>>
>>># We want to earn money, therefore we need accounting
>>>loadmodule "/usr/local/lib/ser/modules/acc.so"
>>>
>>># !! Nathelper
>>>loadmodule "/usr/local/lib/ser/modules/nathelper.so"
>>>
>>># ----------------- setting module-specific parameters ---------------
>>>
>>># -- usrloc params --
>>>modparam("usrloc", "db_mode", 2)
>>>modparam("usrloc", "db_url", "mysql://ser:heslo@localhost/ser")
>>>
>>>#
>>># Accounting Setup
>>>#
>>>#modparam("acc", "db_url", "sql://ser:heslo@localhost/ser")
>>>modparam("acc", "log_level", 1)
>>>modparam("acc", "log_flag", 1)
>>>
>>># Account failed transactions
>>>modparam("acc", "failed_transactions", 1)
>>>
>>># Which data should be accounted?
>>>#
>>># c = Call-Id
>>># d = To tag (Dst)
>>># f = From
>>># i = Inbound Request-URI
>>># m = Method
>>># o = Outbound Request-URI
>>># r = fRom
>>># s = Status
>>># t = To
>>># u = digest Username
>>># p = username Part of inbound Request-URI
>>>#
>>># default is "miocfs"
>>>#
>>>modparam("acc", "log_fmt", "miocfst")
>>>
>>># -- auth params --
>>># Uncomment if you are using auth module
>>>#
>>>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", "db_url", "mysql://ser:heslo@localhost/ser")
>>>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)
>>>
>>># !! Nathelper
>>>modparam("registrar", "nat_flag", 6)
>>>modparam("nathelper", "natping_interval", 30) # Ping interval 30 s
>>>modparam("nathelper", "ping_nated_only", 1) # Ping only clients behind
>>>NAT
>>>
>>># ------------------------- request routing logic -------------------
>>>
>>>
>>># main routing logic
>>>route{
>>> # Accounting TEST
>>> # How does this work anyway? And why 1+2?
>>> setflag(1);
>>> setflag(2);
>>>
>>> # 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;
>>> };
>>>
>>> # !! Nathelper
>>> # Special handling for NATed clients; first, NAT test is
>>> # executed: it looks for via!=received and RFC1918 addresses
>>> # in Contact (may fail if line-folding is used); also,
>>> # the received test should, if completed, should check all
>>> # vias for rpesence of received
>>> if (nat_uac_test("3")) {
>>> # Allow RR-ed requests, as these may indicate that
>>> # a NAT-enabled proxy takes care of it; unless it is
>>> # a REGISTER
>>>
>>> if (method == "REGISTER" || ! search("^Record-Route:"))
>>>{
>>> log("LOG: Someone trying to register from private
>>>IP,
>>>rewriting\n");
>>>
>>> # This will work only for user agents that support
>>>symmetric
>>> # communication. We tested quite many of them and
>>>majority is
>>> # smart enough to be symmetric. In some phones it
>>>takes a configuration
>>> # option. With Cisco 7960, it is called
>>>NAT_Enable=Yes, with kphone it is
>>> # called "symmetric media" and "symmetric
>>>signalling".
>>> fix_nated_contact(); # Rewrite contact with source
>>>IP
>>>of signalling
>>>
>>> if (method == "INVITE") {
>>> fix_nated_sdp("1"); # Add direction=active to
>>>SDP
>>> };
>>> force_rport(); # Add rport parameter to topmost Via
>>> setflag(6); # Mark as NATed
>>> };
>>> };
>>>
>>> # we record-route all messages -- to make sure that
>>> # subsequent messages will go through our proxy; that's
>>> # particularly good if upstream and downstream entities
>>> # use different transport protocol
>>> if (!method=="REGISTER") {
>>> record_route();
>>> }
>>>
>>> # subsequent messages withing a dialog should take the
>>> # path determined by record-routing
>>> if (loose_route()) {
>>> # mark routing logic in request
>>> append_hf("P-hint: rr-enforced\r\n");
>>> route(1);
>>> break;
>>> };
>>>
>>> if (!uri==myself) {
>>> # mark routing logic in request
>>> append_hf("P-hint: outbound\r\n");
>>> route(1);
>>> break;
>>> };
>>>
>>> # if the request is for other domain use UsrLoc
>>> # (in case, it does not work, use the following command
>>> # with proper names and addresses in it)
>>> if (uri==myself) {
>>>
>>> if (method=="REGISTER") {
>>>
>>> # SQL Digest Auth
>>> if (!www_authorize("", "subscriber")) {
>>> www_challenge("", "1");
>>> break;
>>> };
>>>
>>> save("location");
>>> break;
>>> };
>>> lookup("aliases");
>>> if (!uri==myself) {
>>> append_hf("P-hint: outbound alias\r\n");
>>> route(1);
>>> break;
>>> };
>>>
>>> # Destination DeltaThree
>>> if( uri=~"^sip:00[0-9]*@.*")
>>> {
>>> route(1);
>>> break;
>>> };
>>>
>>> # native SIP destinations are handled using our USRLOC
>>>DB
>>> if (!lookup("location") ) {
>>> sl_send_reply("404", "Not Found");
>>> break;
>>> };
>>> };
>>> append_hf("P-hint: usrloc applied\r\n");
>>> route(1);
>>>}
>>>
>>>route[1]
>>>{
>>> # !! Nathelper
>>> if
>>>(uri=~"^sip:(.+@)?(192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)"
>>>&& !search("^Route:")) {
>>> sl_send_reply("479", "We don't forward to private IP
>>>addresses");
>>> break;
>>> };
>>>
>>> # if client or server know to be behind a NAT, enable relay
>>> if (isflagset(6)) {
>>> force_rtp_proxy();
>>> };
>>>
>>> # NAT processing of replies; apply to all transactions (for
>>>example,
>>> # re-INVITEs from public to private UA are hard to identify as
>>> # NATed at the moment of request processing); look at replies
>>> t_on_reply("1");
>>>
>>> # Route to PSTN Gateways(s)
>>> if (uri=~"^sip:00[0-9]*@.*") { ## This assumes that the
>>>caller is
>>> log("Forwarding to DeltaThree\n");
>>> strip(2);
>>> rewritehostport("natrelay.deltathree.com:5060");
>>> t_relay();
>>> break;
>>> };
>>>
>>>
>>> # Local Domain User
>>> # send it out now; use stateful forwarding as it works reliably
>>> # even for UDP2TCP
>>> if (!t_relay()) {
>>> sl_reply_error();
>>> };
>>>}
>>>
>>># !! Nathelper
>>>onreply_route[1] {
>>>
>>> # NATed transaction ?
>>> if (isflagset(6) && status =~ "(183)|2[0-9][0-9]") {
>>> fix_nated_contact();
>>> force_rtp_proxy();
>>>
>>> # otherwise, is it a transaction behind a NAT and we did not
>>> # know at time of request processing ? (RFC1918 contacts)
>>> } else if (nat_uac_test("1")) {
>>> fix_nated_contact();
>>> };
>>>}
>>>
>>>
>>>Regards,
>>>Nikola
>>>
>>>
>>>
>>>>Hi Nikola!
>>>>
>>>>Without message dumps its impossible for us to solve your problems!
>>>>
>>>>regards,
>>>>Klaus
>>>>
>>>>Nikola Stojanoski wrote:
>>>>
>>>>
>>>>>I'm trying to setup SER to route my outgoing calls to DeltaThree's
>>>>>servers. So far i'v managed to forward the calls but my problem is that
>>>>>if
>>>>>a call starts somehow i can't record route the call and my UA is not
>>>>>sending BYE to the servers, so i'm getting billed more than i talk. For
>>>>>call duration of 0:10 i can see 1:45 on deltathree servers.
>>>>>
>>>>>If you manage to work something out let me know.
>>>>>
>>>>
>>>>
>>>
>>
>
>
More information about the sr-users
mailing list