Module: sip-router
Branch: carstenbock/ims
Commit: f98c79f1bb109460a9dfeee0fdd71093c6c3490c
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=f98c79f1bb109460a9dfeee0fdd71093c6c3490c

Author: Carsten Bock <[email protected]>
Committer: Carsten Bock <[email protected]>
Date:   Thu Jan 27 09:04:13 2011 +0100

- more fixes to the configuration

---

 modules/pcscf/pcscf.cfg |   79 ++++++++++++++++++-----------------------------
 1 files changed, 30 insertions(+), 49 deletions(-)

diff --git a/modules/pcscf/pcscf.cfg b/modules/pcscf/pcscf.cfg
index 104e2ac..0427216 100644
--- a/modules/pcscf/pcscf.cfg
+++ b/modules/pcscf/pcscf.cfg
@@ -153,6 +153,7 @@ loadmodule "pv.so"
 loadmodule "xlog.so"
 loadmodule "textops.so"
 loadmodule "path.so"
+loadmodule "siputils.so"
 #!ifdef K_TESTING
 loadmodule "sst.so"
 loadmodule "dialog.so"
@@ -329,12 +330,11 @@ modparam("tls", "config", "/etc/kamailio/tls.cfg")
 
 # main routing logic
 route {
-       xlog("L_ERR", "$rm $ru (From $fu to $tu)\n");   
+       xlog("L_ERR", "$rm $ru (From $fu / $si)\n");    
 
        # Basic checks for Sanity of the request and Request flooding.  
        route(Sanity_Checks);
 
-       # Add-
        # Thus P_check_via_sent_by/P_add_via_received is no longer required.
        route(NAT);
 
@@ -358,13 +358,13 @@ route {
                break;
        }
        
-       xlog("L_ERR", "$$route_uri = $route_uri\n");            
+       xlog("L_ERR", "$$route_uri = $route_uri\n");
        if !($route_uri =~ "sip:term@"+HOSTNAME_ESC+"."+NETWORKNAME_ESC+".*") {
                # Request Initiated by the UE
 #!ifdef K_TESTING
                if (is_in_profile("orig")){
 #!else
-               if (P_is_in_dialog("orig")){
+               if (P_is_in_dialog("orig") || has_totag()){
 #!endif
                        if (!is_method("CANCEL")) route(Orig_Subsequent);
                        else route(Orig_Standalone);
@@ -373,12 +373,13 @@ route {
 #!ifdef K_TESTING
                if (is_in_profile("term")){
 #!else
-               if (P_is_in_dialog("term")){
+               if (P_is_in_dialog("term") || has_totag()){
 #!endif
                        if (!is_method("CANCEL")) route(Term_Subsequent);
                        else route(Orig_Standalone);
                        break;
-               }               
+               }
+               xlog("L_ERR", "No dialog yet\n");               
                # No dialog yet - ACK not relayed as hop-to-hop
                if (is_method("ACK"))
                        break;
@@ -543,7 +544,7 @@ route[REGISTER_494]
 
 route[add_charging_vector]
 {
-       $var(charging_vector) = 
"icid-value=\""+ICID_VALUE_PREFIX+$(Ts{s.encode.hexa})+$(shv(charging_icid_value_counter){s.encode.hexa})+"\";icid-generated-at="+ICID_VALUE_PREFIX+";orig-ioi=\""+ORIG_IOI+"\"";
+       $var(charging_vector) = 
"icid-value=\""+ICID_VALUE_PREFIX+$(Ts{s.encode.hexa})+$(shv(charging_icid_value_counter){s.encode.hexa})+"\";icid-generated-at="+ICID_GENERATOR_ADDR+";orig-ioi=\""+ORIG_IOI+"\"";
        append_hf("P-Charging-Vector: $var(charging_vector)\r\n");
 
        # Increase counter by one:
@@ -681,9 +682,8 @@ onreply_route[REGISTER_reply]
                else P_AAR("register");         
        }
 #!ifdef WITH_TLS
-       if (!P_security_relay())
+       P_security_relay();
 #!endif
-       P_NAT_relay();
 }
 
 failure_route[REGISTER_failure]
@@ -706,7 +706,6 @@ route[NOTIFY]
 #######                   ORIGINATING
 route[Orig_Initial]
 {
-       xlog("L_ERR", "route[Orig_Initial]\n");
        if (P_emergency_ruri()){
                route(Orig_Initial_Emergency);
                break;
@@ -722,7 +721,6 @@ route[Orig_Initial]
        };
        # add IBCF/THIG route here if required
        loose_route();
-       xlog("L_ERR", "1) $$du = $du\n");
        if (!P_follows_service_routes()){               
                #Variant 1 - deny access to the network
                #send_reply("400","Bad Request - Not following indicated 
Service-Routes");                  
@@ -730,10 +728,8 @@ route[Orig_Initial]
                #Variant 2 - enforce routes and let the dialog continue
                P_enforce_service_routes();
        }                       
-       xlog("L_ERR", "2) $$du = $du\n");
        
        P_record_route("orig");
-       xlog("L_ERR", "3) $$du = $du\n");
 
        # Check for "sec-agree" in the Require header:
        if ($hdr(Require)) {
@@ -765,14 +761,11 @@ route[Orig_Initial]
                send_reply("514","Originating dialog save failure - P-CSCF 
maximum dialog count reached!");
                exit;
        }
-       xlog("L_ERR", "10) $$du = $du\n");
 
-       if (is_method("INVITE")){
+       if (isflagset(NAT_FLAG) && is_method("INVITE")){
                #P_local_policy(); #check, if sdp is allowed, if not return 
with allowed sdp
-               P_NAT_relay();
                route(RTPPROXY);
        }
-       xlog("L_ERR", "11) $$du = $du\n");
                
        t_on_reply("Orig_Initial_reply");
        t_on_failure("Orig_Initial_failure");
@@ -834,7 +827,7 @@ route[Orig_Initial_Emergency]
                exit;
        }
                
-       if (method=="INVITE"){
+       if (isflagset(NAT_FLAG) && is_method("INVITE")){
                route(RTPPROXY);
        }
                
@@ -944,6 +937,7 @@ route[Orig_Subsequent]
        log(1,">>       Orig_Subsequent\n");
        if (P_is_registered()){
                if (!P_assert_identity("non-emerg")){
+                       xlog("L_ERR", "Not registered!\n");
                        send_reply("403","Forbidden - You must register first 
with a S-CSCF");
                    break;
                };
@@ -954,13 +948,6 @@ route[Orig_Subsequent]
                };
        }
 
-#      else{
-               # let it continue as this probably does not come from an UE
-        #send_reply("403","Forbidden - Not Registered! You must register first 
with a S-CSCF");                
-        #break;
-        
-#      }
-
        loose_route();
 
        if (method!="CANCEL" && !P_follows_dialog_routes("orig")){              
@@ -988,7 +975,6 @@ route[Orig_Subsequent]
        }
        
        if (method=="BYE" || method=="CANCEL"){
-               #end_media_session();
                P_STR("orig");          
        }       
 
@@ -999,8 +985,9 @@ route[Orig_Subsequent]
        # reply routes unused as empty at the moment
        t_on_reply("Orig_Subsequensend_reply");
        #t_on_failure("Orig_Subsequent_failure");
-       
+       xlog("L_ERR", "$rm: Forward to $ru ($du)\n");   
        if (!t_relay()) {
+               xlog("L_ERR", "Could not forward\n");
                send_reply("500","Error forwarding originating subsequent 
request");
                break;
        };
@@ -1010,14 +997,11 @@ onreply_route[Orig_Subsequensend_reply]
 {
        if (t_check_status("[1-2]..")){
                P_update_dialog("orig");                
-               #       P_replace_contact();???
        }
        
        if (t_check_status("2..") && P_generates_aar("orig")){
                if (!P_AAR("orig")) {
                        P_release_call_onreply("orig");
-                       #end_media_session();
-                       
                } 
        }       
        
@@ -1114,8 +1098,6 @@ failure_route[Orig_Standalone_failure]
 
 route[Term_Initial]
 {
-       xlog("L_ERR", "Term_Initial\n");
-
        P_record_route("term");
 
        route(Check_Session_Expires);   
@@ -1124,20 +1106,18 @@ route[Term_Initial]
                send_reply("514","Terminating dialog save failure - P-CSCF 
maximum dialog count reached!");
                exit;
        }
-       xlog("L_ERR", "Route: $hdr(Route)\n");
        
        loose_route();
-       xlog("L_ERR", "1) $$du = $du\n");
+       if (check_route_param("received=.*")) setflag(NAT_FLAG);
+       if (isflagset(NAT_FLAG)) xlog("L_ERR", "Callee is behind NAT!\n");
                
        t_on_reply("Term_Initial_reply");
        #t_on_failure("Term_Initial_failure");
-       if (method=="INVITE") {
+       if (is_method("INVITE") && isflagset(NAT_FLAG)) {
                route(RTPPROXY);
        }       
-       if (!P_security_relay()) 
-                       P_NAT_relay();
+       P_security_relay(); 
 
-       xlog("L_ERR", "2) $$du = $du\n");
        t_on_reply("Term_Initial_reply");
        t_on_failure("Term_Initial_failure");
        if (!t_relay()) {
@@ -1151,14 +1131,16 @@ route[Term_Initial]
 onreply_route[Term_Initial_reply]
 {
        if (t_check_status("(180)|(183)|([2-9]..)")){
-               route(RTPPROXY_REPLY);
+               if (isflagset(NAT_FLAG)) {
+                       # Fix Contact Header in Reply to INVITE
+                       fix_nated_contact();
+                       # Use RTP-Proxy, if required:
+                       route(RTPPROXY_REPLY);
+               }
                if(P_generates_aar("term")){
                        # check if QoS is ok, orig - originating, term - 
terminating 
                        if (!P_AAR("term")) {
                                P_release_call_onreply("term");
-                       #   end_media_session();
-                       #} else {
-                       #       use_media_proxy(); 
                        }                       
                }
        }
@@ -1206,6 +1188,8 @@ failure_route[Term_Initial_failure]
 
 route[Term_Subsequent]
 {
+       log(1,">>       Term_Subsequent\n");
+
        route(Check_Session_Expires);   
 
        P_update_dialog("term");
@@ -1220,7 +1204,6 @@ route[Term_Subsequent]
        
        if (method=="BYE") {
                P_STR("term"); # terminate authorization session
-               #end_media_session();
        }       
 
        # Check for "sec-agree" in the Require header:
@@ -1247,9 +1230,9 @@ route[Term_Subsequent]
 
        t_on_reply("Term_Subsequensend_reply");
        #t_on_failure("Term_Subsequent_failure");
-       if (!P_security_relay()) 
-                       P_NAT_relay();
-       xlog("L_ERR", "$$du = $du\n");
+       P_security_relay();
+
+       xlog("L_ERR", "$rm: Forward to $ru ($du)\n");   
        if (!t_relay()) {
                send_reply("500","Error forwarding terminating subsequent 
request");
                break;
@@ -1298,9 +1281,7 @@ route[Term_Standalone]
 
        t_on_reply("Term_Standalone_reply");
        #t_on_failure("Term_Standalone_failure");
-       if (!P_security_relay()) 
-                       P_NAT_relay();
-       xlog("L_ERR", "$$du = $du\n");
+       P_security_relay();
        if (!t_relay()) {
                send_reply("500","Error forwarding terminating standalone 
request");
                break;


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to