[Serusers] RTPproxy debug

Joao Pereira joao.pereira at fccn.pt
Thu Oct 6 11:40:12 CEST 2005


Hello,
/etc/hosts has the two IPs (the private and the public).
I m sure the phones in the private network can connect to the private IP 
of SER and register them selfes.
And I m also sure that the phones with public IPs can connect to SERs 
public IP and register.


But how can I check why isnt the RTP trafic passing?

I know the phones are registered, I can see the INVITEs with ngrep, but 
I cant debug the passing of the RTP.

Thanks
Joao Pereira
www.fccn.pt




sip wrote:

>Have you checked the obvious things like telnetting from inside the network to
>the internal IP at port 5060 to make sure the connection is being made? 
>
>Also... how's your /etc/hosts look? If you're using 2 IPs, SER may be trying
>to use essentially 2 different domains. If the internal IP isn't resolving as
>the same domain as the external (either through DNS (not recommended) or via
>/etc/hosts) then SER may be refusing to authenticate because the domains differ. 
>
>Just some things to check if you haven't already. 
>
>N.
>
>
>
>On Tue, 04 Oct 2005 18:48:20 +0100, Joao Pereira wrote
>  
>
>>I dont know If the problem is realy of my ser.cfg, because the IP 
>>phones with public IPs work, but the phones with private IPs just 
>>ring... but I believe theres no RTP passing. Theres my SER:
>>
>>|--------------|
>>|                     |-------------- private IP
>>|      S E R      |
>>|                     |-------------- public IP
>>|--------------|
>>
>>Theres my ser.cfg:
>>
>>(...)
>>listen = 193.136.xxx.xxx
>>listen = 10.0.0.135
>>
>>(...)
>>
>>alias=fccn.pt
>>alias=193.136.xxx.xxx
>>alias=10.0.0.135
>>
>># memlog - Debugging level for final memory statistics report. Default
>># is L_DBG -- memory statistics are dumped only if debug is set high.
>>memlog=1
>>
>># ------------------ module loading ----------------------------------
>>
>>loadmodule "/usr/local/lib/ser/modules/postgres.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"
>>
>>loadmodule "/usr/local/lib/ser/modules/acc.so"
>>
>># Uncomment this if you want digest authentication
>>loadmodule "/usr/local/lib/ser/modules/auth.so"
>>loadmodule "/usr/local/lib/ser/modules/auth_db.so"
>>
>>loadmodule "/usr/local/lib/ser/modules/exec.so"
>>loadmodule "/usr/local/lib/ser/modules/group.so"
>>loadmodule "/usr/local/lib/ser/modules/print.so"
>>#loadmodule "/usr/local/lib/ser/modules/mediaproxy.so"
>>loadmodule "/usr/local/lib/ser/modules/uri.so"
>>loadmodule "/usr/local/lib/ser/modules/uri_db.so"
>>loadmodule "/usr/local/lib/ser/modules/domain.so"
>>loadmodule "/usr/local/lib/ser/modules/xlog.so"
>>loadmodule "/usr/local/lib/ser/modules/speeddial.so"
>>loadmodule "/usr/local/lib/ser/modules/options.so"
>>loadmodule "/usr/local/lib/ser/modules/avpops.so"
>>loadmodule "/usr/local/lib/ser/modules/permissions.so"
>>#loadmodule "/usr/local/lib/ser/modules/xdz_tools.so"
>>
>>loadmodule "/usr/local/lib/ser/modules/nathelper.so"
>>
>># ----------------- setting module-specific parameters ---------------
>>
>># -- nathelper params --
>>
>># proxy nat
>>modparam("nathelper", "natping_interval", 15)
>>modparam("nathelper", "ping_nated_only", 1)
>>
>>(...)
>>
>># -------------------------  request routing logic -------------------
>>
>># main routing logic
>>
>>route{
>>
>>  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;
>>  };
>>
>>  # --------------------------------------------------
>>  # NOTIFY Keep-Alive Section
>>  # --------------------------------------------------
>>  if ((method=="NOTIFY") && search("^Event: keep-alive")) {
>>    sl_send_reply("200", "OK");
>>    break;
>>  };
>>
>>  if ((method=="NOTIFY") && (uri=~"^sip:700@")) {
>>    sl_send_reply("200", "OK");
>>    break;
>>  };
>>
>>  # --------------------------------------------------
>>  # OPTIONS Section
>>  # --------------------------------------------------
>>  if (method=="OPTIONS") {
>>    options_reply();
>>    break;
>>  };
>>
>>  if (method=="REGISTER" && nat_uac_test("3")) {
>>
>>    fix_nated_contact();
>>    force_rport();
>>    setflag(2);
>>    };
>>
>>  # --------------------------------------------------
>>  # Registration Section
>>  # --------------------------------------------------
>>  (...)
>>
>>  # --------------------------------------------------
>>  # Accounting Section
>>  # NOTE: We test for flag 14 because we do not want to record Click2Dial
>>  #       entries
>>  # --------------------------------------------------
>>
>>  if ((method=="INVITE" || method=="BYE" || 
>>method=="CANCEL"||method=="ACK" ||method=="REGISTER") && 
>>!isflagset(14)) {    setflag(1);  };
>>
>>  # --------------------------------------------------
>>  # NAT Tear-Down Section
>>  # --------------------------------------------------
>>
>>    if ((method == "BYE" || method == "CANCEL")) {
>>        unforce_rtp_proxy();
>>    };
>>
>>  # --------------------------------------------------
>>  # Record Route Section
>>  # --------------------------------------------------
>>  # 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();
>>  };
>>
>>  # --------------------------------------------------
>>  # Loose Route Section
>>  #
>>  # Grant route routing if route headers present
>>  # --------------------------------------------------
>>  if (loose_route()) {
>>    route(2);
>>    break;
>>  };
>>
>>  #
>>
>>  # --------------------------------------------------
>>  # NAT Test Section #1
>>  # --------------------------------------------------
>>
>>  if (nat_uac_test("3") && !search("^Record-Route:")) {
>>    force_rport();
>>
>>    fix_nated_contact();
>>  };
>>
>>(...)
>>
>>  # --------------------------------------------------
>>  # Alias Routing Section
>>  # --------------------------------------------------
>>
>>     lookup("aliases");
>>    if (!uri==myself) {
>>      route(2);
>>      break;
>>    };
>>
>>(...)
>>
>>  # --------------------------------------------------
>>  # Anonymous Call Rejection Section
>>  # --------------------------------------------------
>>  if (isflagset(24) && (method=="INVITE") && 
>>search("^(f|F)rom:.*(a|A)nonymous")) {
>>    route(8);
>>    break;
>>  };
>>
>>  # --------------------------------------------------
>>  # URI Compare Section
>>  # --------------------------------------------------
>>  # Here we compare the "from" and "to" to see if the caller is dialing
>>  # their own extension. If so then we route to voicemail if needed
>>  if (method=="INVITE") {
>>    avp_write("$from", "i:34");
>>    if (avp_check("i:34", "eq/$ruri/i")) {
>>      if (isflagset(31)) {
>>        route(5);
>>        break;
>>      } else {
>>        sl_send_reply("486", "Busy");
>>        break;
>>      };
>>    };
>>  };
>>
>>(...)
>>
>>  # --------------------------------------------------
>>  # Do Not Disturb Section
>>  # --------------------------------------------------
>>  if (avp_db_load("$ruri/username", "s:donotdisturb")) {
>>    if (avp_check("s:donotdisturb", "eq/y/i")) {
>>      route(5);
>>      break;
>>    };
>>  };
>>
>>  # --------------------------------------------------
>>  # Call Routing Section
>>  # --------------------------------------------------
>>
>>  if (!lookup("location")){
>>
>>    # if flag 31 (ie voicemail) is set and we made it here this means
>>    # the user's phone is not registered anywhere. We'll forward to
>>    # voicemail after this block because we need to check the call
>>    # forward settings first
>>    if (isflagset(31)) {
>>
>>      # flag 19 means the user has voicemail but is not online
>>      # so we need to remember to send to voicemail if call
>>      # forwarding is not enabled
>>      setflag(19);
>>    };
>>
>>    if (method=="INVITE") {
>>
>>     if( !uri=~"@fccn.pt" ) {
>>    if (!method=="REGISTER") record_route();
>>        t_relay();
>>        break;
>>      }
>>
>> if (does_uri_exist()) {
>>        # o utilizador foi encontrado mas esta offline
>>    sl_send_reply("480", "Temporarily Unavailable");
>>        break;
>>      };
>>
>>      sl_send_reply("404", "Utilizador nao Encontrado");
>>      break;
>>      };
>>  };
>>
>>  # --------------------------------------------------
>>  # Call Forwarding Section
>>  # --------------------------------------------------
>>
>>  if (method=="INVITE") {
>>
>>    # only load the forward no answer option if voice mail is not enabled
>>      if (!isflagset(31)) {
>>        if (avp_db_load("$ruri/username", "s:fwdnoanswer")) {
>>          route(1);
>>
>>      if (!avp_check("$calltype", "eq/-/i")) {
>>            if (avp_check("$calltype", "eq/dom/i")) {
>>              avp_write("dom", "$fwd_no_answer_type");
>>            } else if (avp_check("$calltype", "eq/int/i")) {
>>              avp_write("int", "$fwd_no_answer_type");
>>            } else {
>>            avp_write("sip", "$fwd_no_answer_type");
>>            }
>>
>>            setflag(27);
>>          };
>>        };
>>      };
>>
>>    if (avp_db_load("$ruri/username", "s:fwdbusy")) {
>>      route(1);
>>
>>      if (!avp_check("$calltype", "eq/-/i")) {
>>
>>        if (avp_check("$calltype", "eq/dom/i")) {
>>          avp_write("dom", "$fwd_busy_type");
>>        } else if (avp_check("$calltype", "eq/int/i")) {
>>          avp_write("int", "$fwd_busy_type");
>>        } else {
>>          avp_write("sip", "$fwd_busy_type");
>>        }
>>
>>        setflag(26);
>>      };
>>    };
>>
>>    avp_pushto("$ruri", "i:99");
>>  };
>>
>>  if (isflagset(19)) {
>>    # send to voicemail
>>    route(5);
>>  } else {
>>    route(2);
>>  };
>>
>>}  #route
>>
>>route[1] {
>>
>>  avp_write("-", "$calltype");
>>
>>  if (uri=~"^sip:1[0-9]{10}@") {
>>    strip(1);
>>  };
>>
>>  lookup("aliases");
>> if (!lookup("location")) {
>>    if (uri=~"^sip:[0-9]{10}@") {
>>
>>      # test for domestic PSTN number
>>      if (isflagset(28)) {
>>        avp_write("dom", "$calltype");
>>      };
>>
>>    } else if (uri=~"^sip:011[0-9]*@") {
>>
>>      # test for international PSTN number
>>      if (isflagset(29)) {
>>        avp_write("int", "$calltype");
>>      };
>>    };
>>
>>    break;
>>  };
>>
>>  avp_write("sip", "$calltype");
>>
>>}
>>
>>route[2] {
>>
>>#  check for RFC1918 ip addresses
>> #  -- NATHELPER --
>>  if (uri=~"[@:](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;
>>  };
>>
>>  #check if the  NAT Flag is set
>>  if (isflagset(6)) {
>>    log(1, "LOG: flag 6 set => One of the sides is NATed -> 
>>force_rtp_proxy()\n");
>>    if(!force_rtp_proxy()) {
>>      log(1, "LOG: force_rtp_prpoxy FAILED!\n");
>>   } else {
>>      log(1, "LOG: force_rtp_proxy() succeeded!\n");   
>>  };
>>  };
>>
>>  if (isflagset(25)) {
>>    replace("^From:(.*)>" , "From: \"Anonymous\" <sip:someone at 
>>anonymous.invalid>");
>>  };
>>
>>if (method=="INVITE" || method=="ACK") { 
>>    force_rtp_proxy();
>>  };
>>
>>  t_on_failure("1");
>>  t_on_reply("1");
>>
>>  if (!t_relay()) {
>>
>>   if (method=="INVITE" || method=="ACK") {
>>      unforce_rtp_proxy();
>>    };
>>
>>    sl_reply_error();
>>  };
>>}
>>
>># encaminhamento para o Gateway PSTN
>>route[3] {
>>
>>     if (method=="INVITE") {
>>
>>       if (!proxy_authorize("fccn.pt", "utilizador")) {
>>
>>         proxy_challenge("fccn.pt", "0");
>>         break;
>>    }  
>>    } else if (!check_from()) {
>>
>>      log(1, "Spoofed SIP call attempt");
>>      sl_send_reply("403", "Use From=ID");
>>      break;
>>
>>   } else if (!(is_from_local() || is_uri_host_local())) {
>>
>>      sl_send_reply("403", "Please register to use our service");
>>      break;
>>    };
>>
>>    # enable caller id blocking for PSTN calls
>>    if (isflagset(25)) {
>>      append_rpid_hf();
>>    };
>>  };
>>
>>  # SIP->PSTN calls get 45 seconds to timeout
>>  avp_write("i:45", "inv_timeout");
>>
>>rewritehostport("10.0.0.135:1720");
>>
>>    if (method=="INVITE" || method=="ACK") { 
>>     force_rtp_proxy();
>>    };
>>
>>  if (isflagset(31)) {
>>    t_on_failure("1");
>>  };
>>
>>  t_on_reply("1");
>>
>>  if (!t_relay()) {
>>
>>      if (method=="INVITE" || method=="ACK") {
>>        unforce_rtp_proxy();
>>      };
>>
>>  sl_reply_error();
>>  };
>>}
>>
>>(...)
>>
>>onreply_route[1] {
>>
>>  # Not all 2xx messages have a content body so here we
>>  # make sure our Content-Length > 0 to avoid a parse error
>>  if (status=~"(180)|(183)|2[0-9][0-9]") {
>>
>>    if (!search("^Content-Length:\ 0")) {
>>      force_rtp_proxy();
>>    };
>>   };
>>
>>  if (nat_uac_test("1")) {
>>    fix_nated_contact();
>>  };
>>}
>>
>>failure_route[1] {
>>
>>  if (t_check_status("487")) {
>>    break;
>>  };
>>
>>  if (isflagset(26) && t_check_status("486")) {
>>
>>    # forward busy is flag 26
>>    if (avp_pushto("$ruri", "s:fwdbusy")) {
>>      avp_delete("s:fwdbusy");
>>      append_branch();
>>      resetflag(26);
>>      # test for domestic PSTN gateway
>>      if (avp_check("$fwd_busy_type", "eq/dom/i")) {
>>        # test for domestic PSTN gateway
>>        route(3);
>>#        sl_send_reply("503", "Gateway PSTN Indisponivel-3");
>>      #} else if (avp_check("$fwd_busy_type", "eq/int/i")) {
>>        # test for international PSTN gateway
>>      #  route(6);
>>#      } else {
>>        # default to sip call
>>        route(2);
>>      };
>>
>>      break;
>>    };
>>  };
>>
>>  # here we can have either voicemail __OR__ forward no answer
>>  if (isflagset(27) && t_check_status("408")) {
>>
>>  # forward no answer is flag 27
>>
>>    if (avp_pushto("$ruri", "s:fwdnoanswer")) {
>>      avp_delete("s:fwdnoanswer");
>>      append_branch();
>>      resetflag(27);
>>
>>      if (avp_check("$fwd_no_answer_type", "eq/dom/i")) {
>>        # test for domestic PSTN gateway
>>        route(3);
>>        #sl_send_reply("503", "Gateway PSTN Indisponivel");
>>      #} else if (avp_check("$fwd_no_answer_type", "eq/int/i")) {
>>        # test for international PSTN gateway
>>      #  route(6);
>>      #} else {
>>        # default to sip call
>>        route(2);
>>      };
>>
>>      break;
>>    };
>>
>>  } else if (isflagset(31) && avp_pushto("$ruri", "$voicemail")) {
>>
>>    avp_delete("$voicemail");
>>    route(4);
>>    break;
>>  };
>>}
>>
>>onreply_route[2] {
>>
>>  log(1, "LOG: entered onreply_route[2] now... \n");
>>
>>  if(isflagset(6)) { # && status =~"(183)|2[0-9][0-9]") {
>>    log(1, "LOG: TRansaction was sent to a NATed client --> 
>>fix_nated_contact() and force_rtp_proxy().\n");
>>    if(!fix_nated_contact()) {
>>      log(1, "LOG: fix_nated_contact() FAILED!\n");
>>    } else {
>>      log(1, "LOG: fix_nated_contact() succeded.\n");
>>    };
>>
>>  if(!force_rtp_proxy()) {
>>    log(1, "LOG: force_rtp_proxy() FAILED!\n");
>>  } else {
>>    log(1, "LOG: force_rtp_proxy() succeded.\n");
>>  };
>>
>>    append_hf("P-hint: fixed NAT contact for response\r\n");
>>
>>  } else if (nat_uac_test("1")) {
>>    log(1, "LOG: Uncaught NAT. => fix_nated_contact()\n");
>>    if(!fix_nated_contact()) {
>>      log(1, "LOG: fix_nated_contact() FAILED!\n");
>>    } else {
>>      log(1, "LOG: fix_nated_contact() succeded.\n");
>>    };
>>  };
>>
>>}
>>
>>Sorry the long post.
>>Joao Pereira
>>www.fccn.pt
>>
>>Paul Hazlett wrote:
>>
>>    
>>
>>>Joao,
>>>
>>>The problem is probably and error in your ser.cfg file. I'd recommend
>>>you download a copy of the Getting Started document from www.onsip.org
>>>and look at the section on RTPproxy.
>>>
>>>Regards,
>>>Paul
>>>
>>>On 10/4/05, Joao Pereira <joao.pereira at fccn.pt> wrote:
>>> 
>>>
>>>      
>>>
>>>>Hello to all,
>>>>Is there any way of making debug in RTP proxy?
>>>>My SER has one public IP and one private IP. The public phones can speak
>>>>each other, but the private IP phones can t speak each other (they just
>>>>ring, but theres no voice ) , and apears this error on SER:
>>>>ERROR: send_rtpp_command: can't read reply from a RTP proxy
>>>>
>>>>How can I debug RTPproxy?
>>>>Thanks
>>>>
>>>>Joao Pereira
>>>>www.fccn.pt
>>>>
>>>>
>>>>
>>>>_______________________________________________
>>>>Serusers mailing list
>>>>serusers at lists.iptel.org
>>>>http://lists.iptel.org/mailman/listinfo/serusers
>>>>
>>>>   
>>>>
>>>>        
>>>>
>>> 
>>>
>>>      
>>>
>>_______________________________________________
>>Serusers mailing list
>>serusers at lists.iptel.org
>>http://lists.iptel.org/mailman/listinfo/serusers
>>    
>>
>
>
>  
>




More information about the sr-users mailing list