[OpenSIPS-Users] How can handle bye event in Opensips+wesip

arundeking arundeking at gmail.com
Mon May 25 14:06:37 CEST 2009


HI all,

I am install opensips 1.5 and configure the wesip with opensips.
Every thing is working fine.

The call is working fine with using x-lite phone.
I am using voip provider for single leg call and two leg call, call is
happening properly.

But the problem is that the opensips+wesip can't able to handle BYE request.

this is my opensips config file.

*********************************************************************************



# $Id: openser.cfg 1676 2007-02-21 13:16:34Z bogdan_iancu $
#
# simple quick-start config script
# Please refer to the Core CookBook at
http://www.openser.org/dokuwiki/doku.php
# for a explanation of possible statements, functions and parameters.
#

# ----------- global configuration parameters ------------------------

debug=3            # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=yes   # (cmd line: -E)
sip_warning=yes 
log_facility=LOG_LOCAL0
children=4

# Uncomment these lines to enter debugging mode 

#log_stderror=yes
#



port=5080

# uncomment the following lines for TLS support
#disable_tls = 0
#listen = tls:your_IP:5061
#tls_verify_server = 1
#tls_verify_client = 1
#tls_require_client_certificate = 0
#tls_method = TLSv1
#tls_certificate = "//etc/openser/tls/user/user-cert.pem"
#tls_private_key = "//etc/openser/tls/user/user-privkey.pem"
#tls_ca_list = "//etc/openser/tls/user/user-calist.pem"

# ------------------ module loading ----------------------------------
#set module path
mpath="//lib/opensips/modules/"
# Uncomment this if you want to use SQL database

loadmodule "db_mysql.so"
loadmodule "signaling.so"
loadmodule "sl.so"
loadmodule "tm.so"

loadmodule "seas.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "uri.so"
loadmodule "uri_db.so"
loadmodule "permissions.so"
loadmodule "group.so"
loadmodule "mi_fifo.so"
loadmodule "lcr.so"
loadmodule "avpops.so"
loadmodule "xlog.so"
loadmodule "dialog.so"
loadmodule "nat_traversal.so"
loadmodule "nathelper.so"
loadmodule "mi_datagram.so"
loadmodule "acc.so"
loadmodule "call_control.so"
loadmodule "siptrace.so"
# ----------------- setting module-specific parameters ---------------
/* uncomment next lines for MySQL based authentication support 
   NOTE: a DB (like mysql) module must be also loaded */

loadmodule "auth.so"
loadmodule "auth_db.so"

/* uncomment next line for aliases support
   NOTE: a DB (like mysql) module must be also loaded */
#loadmodule "alias_db.so"

/* uncomment next line for multi-domain support
   NOTE: a DB (like mysql) module must be also loaded
   NOTE: be sure and enable multi-domain support in all used modules
         (see "multi-module params" section ) */
loadmodule "domain.so"

/* Loading presence module */
/*loadmodule "presence.so"
loadmodule "presence_xml.so"
loadmodule "presence_mwi.so"*/

/* Loading DRouting modules*/
loadmodule "drouting.so"

/* Loading mi_xmlrpc module */
loadmodule "avp_radius.so" 
#loadmodule "mi_xmlrpc.so"
loadmodule "msilo.so"
# ----------------- setting module-specific parameters ---------------
# ----- mi_fifo params -----
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")

# ----- rr params -----
# add value to ;lr param to cope with most of the UAs
modparam("rr", "enable_full_lr", 1)
# do not append from tag to the RR (no need for this script)
modparam("rr", "append_fromtag", 0)


# ----- rr params -----
modparam("registrar", "method_filtering", 1)
/* uncomment the next line to disable parallel forking via location */
# modparam("registrar", "append_branches", 0)
/* uncomment the next line not to allow more than 10 contacts per AOR */
#modparam("registrar", "max_contacts", 10)


# ----- uri_db params -----
/* by default we disable the DB support in the module as we do not need it
   in this configuration */
modparam("uri_db", "use_uri_table", 0)
modparam("uri_db", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips")


# ----- acc params -----
/* what sepcial events should be accounted ? */
modparam("acc", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
modparam("acc", "early_media", 1)
modparam("acc", "report_ack", 1)
modparam("acc", "report_cancels", 1)

/* by default ww do not adjust the direct of the sequential requests.
   if you enable this parameter, be sure the enable "append_fromtag"
   in "rr" module */
modparam("acc", "detect_direction", 0)

/* account triggers (flags) */

modparam("acc", "failed_transaction_flag", 3)
modparam("acc", "log_flag", 1)
modparam("acc", "log_missed_flag", 2)

/* uncomment the following lines to enable DB accounting also */
modparam("acc", "db_flag", 1)
modparam("acc", "db_missed_flag", 2)
#modparam("acc", "db_extra",
"src_user=$fU;src_domain=$fd;dst_user=$rU;dst_domain=$rd;src_ip=$si")
#modparam("acc", "db_extra", "from_uri=$fu; to_uri=$tu")

# ----- usrloc params -----
#modparam("usrloc", "db_mode",   0)
/* uncomment the following lines if you want to enable DB persistency
   for location entries */
modparam("usrloc", "db_mode",   2)
modparam("usrloc", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips")


# ----- auth_db params -----
/* uncomment the following lines if you want to enable the DB based
   authentication */
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("auth_db", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips")
modparam("auth_db", "load_credentials", "")


# ----- alias_db params -----
/* uncomment the following lines if you want to enable the DB based
   aliases */
#modparam("alias_db", "db_url",
#	"mysql://openser:openserrw@localhost/openser")


# ----- domain params -----
/* uncomment the following lines to enable multi-domain detection
   support */
modparam("domain", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips")
modparam("domain", "db_mode", 1)   # Use caching


# ----- multi-module params -----
/* uncomment the following line if you want to enable multi-domain support
   in the modules (dafault off) */
modparam("alias_db|auth_db|usrloc|uri_db", "use_domain", 1)

# ----- presence params (Simple configuration)-----
/* uncomment the following lines if you want to enable presence */
/*modparam("presence|presence_xml", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips")
modparam("presence_xml", "force_active", 1)
modparam("presence", "server_address", "sip:mobimoov.com:5080")*/

#--------------LCR params
modparam("lcr", "flags_avp", "$avp(i:712)")
modparam("lcr", "fr_inv_timer_avp", "$avp(i:704)")
modparam("lcr", "gw_uri_avp", "$avp(i:709)")
modparam("lcr", "ruri_user_avp", "$avp(i:500)")
modparam("lcr", "contact_avp", "$avp(i:711)")
modparam("^auth$|lcr", "rpid_avp", "$avp(i:302)")

#---------------avpops param
modparam("avpops", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips")
modparam("avpops", "avp_table", "usr_preferences")


#-----------------------------Permission params
modparam("permissions", "db_mode", 1)
modparam("permissions", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips")
modparam("permissions", "trusted_table", "trusted")


#-------------------------mi_datagram params--------------------------------
modparam("mi_datagram", "socket_name", "/var/run/opensips/opensips.sock")
modparam("mi_datagram", "children_count", 3)
modparam("mi_datagram", "unix_socket_mode", 0666)
modparam("mi_datagram", "unix_socket_group", "root")
modparam("mi_datagram", "unix_socket_user", "root")

#-------------------------Dialog Params---------------------------
modparam("dialog", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips")
modparam("dialog", "db_mode", 1)
modparam("dialog", "dlg_flag", 5)

#----------------NAT Helper Params

modparam("nathelper","natping_interval", 0)
modparam("usrloc", "nat_bflag", 3)
modparam("nathelper","received_avp", "$avp(i:42)")
modparam("nathelper", "sipping_bflag", 7)
modparam("nathelper", "rtpproxy_sock", "udp:127.0.0.1:8899")
modparam("nathelper", "force_socket", "udp:localhost:8899")

#--------------------drouting Params-------------------------

modparam("drouting","db_url","mysql://opensips:opensipsrw@localhost/opensips")
modparam("drouting", "ruri_avp", '$avp(s:ruri)')

#---------------------Radius params------------------

modparam("acc", "radius_config",
"/usr/local/etc/radiusclient-ng/radiusclient.conf")
modparam("acc", "radius_flag", 3)
modparam("acc", "radius_missed_flag", 4)
modparam("acc", "service_type", 15)
modparam("auth_radius|group_radius|avp_radius",
"radius_config","/usr/local/etc/radiusclient-ng/radiusclient.conf")
modparam("avp_radius", "radius_config",
"/usr/local/etc/radiusclient-ng/radiusclient.conf")
modparam("acc", "radius_extra", "User-Name=$Au; \
			       Calling-Station-Id=$from; \
			       Called-Station-Id=$to; \
			       Sip-Translated-Request-URI=$ruri; \
                               Sip-RPid=$avp(s:rpid); \
                               Source-IP=$si; \
                               Source-Port=$sp; \
                               Canonical-URI=$avp(s:can_uri); \
                               Billing-Party=$avp(s:billing_party); \
                               Divert-Reason=$avp(s:divert_reason); \
                               X-RTP-Stat=$hdr(X-RTP-Stat); \
                               Contact=$hdr(contact); \
                               Event=$hdr(event); \
                               SIP-Proxy-IP=$avp(s:sip_proxy_ip); \
                               ENUM-TLD=$avp(s:enum_tld)")

#-------------------------------SIP TRACE -------------------------------
modparam("siptrace", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips")
modparam("siptrace", "trace_flag",20)
modparam("siptrace", "trace_on",1)

#---------------Call Control---------------------

modparam("call_control", "disable", 0)
#modparam("call_control", "socket_name", "/var/run/callcontrol/socket")
#modparam("call_control", "signaling_ip_avp", "$avp(s:signaling_ip)")

#--------------------seas param-----------------
modparam("seas", "listen_sockets", "mobimo.com:5090")
listen = tcp:mobimo.com:5080
listen = udp:mobimo.com:5080

#--------------------msilo params------------------------=
modparam("msilo","db_url","mysql://opensips:opensipsrw@localhost/opensips")
modparam("msilo", "from_address", "sip:$rU at mobimoov.com:5080")
modparam("msilo", "expire_time", 345600)
modparam("msilo", "offline_message", "*** User $rU is offline!")
modparam("msilo","contact_hdr","Contact: sip:$rU at mobimoov.com:5080\r\n")
modparam("msilo","content_type_hdr","Content-Type: text/plain\r\n")
modparam("msilo", "sc_to", "dst_addr")

# -------------------------  request routing logic -------------------
route[15]{
	if(is_present_hf("X-WeSIP-SPIRAL")){
 	#account, log, register, or whatever 
               t_relay();
       }else{
               as_relay_t("app_server_1");
	    }
 }/*

 route[15]{
 if(!as_relay_t("app_server_1")){
        t_reply("500","No App Server");
 }
 }

# main routing logic*/
route{
    log(1,"*******************--ENTERING--*********\n");
#    xlog("L_INFO","\n user agent header is  $ua");
    #
    # -- 1 -- Request Validation 
    #
    if (!mf_process_maxfwd_header("10")) {
        sl_send_reply("483","Too Many Hops");
        exit;
    };
    if (msg:len >=  2048 ) {
        sl_send_reply("513", "Message too big");
        exit;
    };
    #
    # -- 2 -- Routing Preprocessing
    #
    ## Record-route all except Register
    ## Mark packets with nat=yes
    ## This mark will be used to identify the request in the loose   
    ## route section
    if(!is_method("REGISTER")){
        if(nat_uac_test("19")){
            record_route(";nat=yes");
        } else {
            record_route();
        };
    };

    ##Loose_route packets
    if (has_totag()) {
        #sequential request withing a dialog should
        # take the path determined by record-routing
        if (loose_route()) {
#---------------------------RADIUS
LOGING----------------------------------------#
		if(method=="BYE") {
    	#		#Account BYE transactions
                        log(1,"\nFLAG IS SET TO 2\n");
    			setflag(1);
		        ## for free radius logging
			setflag(3);
                        setflag(20);     # For sip trace;
		};

#------------------------END OF RADIUS
LOGING------------------------------------#


            #Check authentication of re-invites
            if(method=="INVITE" && (!allow_trusted())) { 
                if (!proxy_authorize("","subscriber")) {
                   proxy_challenge("","1");
                   exit;
                } else if (!check_from()) {
                   sl_send_reply("403", "Forbidden, use From=ID");
                   exit;
                };
            };
            if(method=="BYE" || method=="CANCEL") {
		 setflag(3);
		 log(1,"\n Is seding the bye/ Cancel \n");
                 unforce_rtp_proxy(); 
		 log(1,"\n Is seding the bye/ Cancel after unforce_rtp_proxy \n");
       		 #end_media_session();
            };
	    ##Detect requests in the dialog behind NA, flag with 6
            if(nat_uac_test("19") || search("^Route:.*;nat=yes")){
                append_hf("P-hint: LR|fixcontact,setflag6\r\n");
                fix_contact();
                setbflag(6);
            };
            route(1);
        } else {
            /* uncomment the following lines if you want to enable presence
*/
		/*	if (is_method("SUBSCRIBE") && $rd == "mobimoov.com") {
				# in-dialog subscribe requests
				route(16);
				exit;
			}
		if ( is_method("ACK") ) {
				if ( t_check_trans() ) {
					# non loose-route, but stateful ACK; must be an ACK after 
					# a 487 or e.g. 404 from upstream server
					t_relay();
					exit;
				} else {
					# ACK without matching transaction ->
					# ignore and discard
					exit;
				}
		}*/
            sl_send_reply("404","Not here");
        }
        exit;
    }
    #CANCEL processing
    if (is_method("CANCEL")) {
        if (t_check_trans()) {
	    unforce_rtp_proxy();
            #end_media_session(); 
            t_relay();
        };   
	    exit;
      }
    t_check_trans();
    # 
    # -- 3 -- Determine Request Target
    #
/*	## uncomment this if you want to enable presence server 
	##   and comment the next 'if' block
	##   NOTE: uncomment also the definition of route[2] from  below
	if( is_method("PUBLISH|SUBSCRIBE"))
			route(16);

	##if (is_method("PUBLISH"))
	##{
	##	sl_send_reply("503", "Service Unavailable");
	##	exit;
	##}*/

    if (method=="REGISTER") {
    log(1,"--------REGISTER LOOP IN MAIN ROUTE\n");
        route(2);
    } else {
	 if ((method=="INVITE" && !has_totag())) {
        	# you need to call this function at the first INVITE
        	$var(retcode) = call_control();
		xlog("L_INFO","\n 1. ***************** RETURN CODE=$var(retcode)");
		xlog("L_INFO","\n 2. ***************** RETURN CODE=$var(retcode)");
		xlog("L_INFO","\n 3. ***************** RETURN CODE=$var(retcode)");
		
	        switch ($var(retcode)){
			
	        case -1:
                       # Not enough credit (prepaid call)
                       xlog("L_INFO", "Call control: not enough credit for
prepaid call\n");
                       acc_rad_request("402");
                       sl_send_reply("402", "Not enough credit");
                       exit;
                       break; 	
                case -2:
                       # Locked by call in progress (prepaid call)
                       xlog("L_INFO", "Call control: prepaid call locked by
another call in progress\n");
                       acc_rad_request("403");
                       sl_send_reply("403", "Call locked by another call in
progress");
                       exit;
	               break;

                case 1:
                       # Call with a limit under callcontrol management
(either prepaid or postpaid)
                        xlog("L_INFO", "Call control: Inside 1 for pre
paid\n");
                        break;

                case 2:
                        xlog("L_INFO", "Call control: Inside 2 for post
paid\n");
                       # Call with no limit
                        break;

       	       default:
		       # Internal error (message parsing, communication, ...)
	               xlog("L_INFO", "Call control: internal server error\n");
	               acc_rad_request("500");
         	       sl_send_reply("500", "Internal server error");
	               exit;
		}       
		 xlog("L_INFO", "Call control: outside switch\n");
    	 }
	route(3);
    };
}
route[1] {
    #
    # -- 4 -- Forward request to target
    #
    # Forward statefully
    log(1, "------------------------------------> ROUTE 1 \n");
    t_on_reply("1");
    t_on_failure("1");
    if (!t_relay()) {
        sl_reply_error();
    };
    exit;
}
route[2] {
    
   ## Register request handler
    if (is_uri_host_local()) {
        if (!www_authorize("", "subscriber")) {
            www_challenge("", "1");
            exit;
        };
        if (!check_to()) {
            sl_send_reply("403", "Forbidden");
            exit;
        };
        if(!search("^Contact:[ ]*\*") && client_nat_test("7")) {
	    log(1,"-------NAT Checking\n");
            setbflag(6);
            fix_nated_register();
            force_rport();
        };
        save("location");
#------------------------------------------msilo code
        log(1, "\nREGISTER received -> dumping messages with
MSILO------------------- 1\n");
        # MSILO - dumping user's offline messages
        xlog("L_INFO","\nDESTINATION PORT VALUE: $dp\n");
#----------------------------------------------------------------------------------
        xlog("L_INFO","\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FROM URI: $fu%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
                if (m_dump("$fu"))
                {
                        log(1, "\nMSILO: offline messages dumped - if they
were----------------------------------- 2\n");
                }else{
                        log(1, "\nMSILO: no offline messages dumped\n");
                };
                xlog("L_INFO,", "\n Method: [$rm] From-URI: [$fu] To URI
[$tu]  REply Status is : [$rs] ************************** Reply reason is:
[$rr]\n");
#---------------------------------------------------------------------------------------------------------------------------------------------------

        exit;
    } else if {
     sl_send_reply("403", "Forbidden");
    };
}
route[3] {
    ## Requests handler 
#------------------------------RADIUS HANDLER IN
INVITE----------------------------------------#
	if (method=="INVITE") {
 	#	# Account INVITE packets
                log(1,"\nFLAG IS SET FOR 2 in INVITE ROUTE\n"); 
     		setflag(1);
		## For free radius logging
                setflag(3);
	 	$avp(s:can_uri) = $ru;	
     	#	# Account Missed calls
                log(1,"\nFLAG SET FOR 3 for missed calls\n");
     		setflag(2);
		## For free Radius logging
                setflag(4);
     		# Radius Extra
     		$avp(s:sip_proxy_ip)="mobimoov.com";
         #       log(1,"\n SIP_PROXY_IP is $avp(s:sip_proxy_ip) \n"); 
		setflag(20); # For sip trace
	};


#---------------------------------END OF RADIUS
LOGGING-----------------------------------------#

    if (is_from_local()){
        # From an internal domain -> check the credentials and the FROM
	if (method=="MESSAGE") {
                log(1,"\n--------------------------------------> ROUTE 3
MESSAGE Looop-----------------------\n");
                                route(17);
        };

        if(!allow_trusted()){
            if (!proxy_authorize("","subscriber")) {
                proxy_challenge("","0");
                exit;
            } else if(!check_from()) {
          sl_send_reply("403", "Forbidden, use From=ID");
          exit;
        }; 
        };
        if (client_nat_test("3")) {
            append_hf("P-hint: setflag7|forcerport|fix_contact\r\n");
            setbflag(7);
            force_rport();
            fix_contact();
        };
        #unconditional call forward
        if(avp_db_load("$ru/username","$avp(s:callfwd)")) {
            avp_pushto("$ru", "$avp(s:callfwd)");
            route(1);
            exit;
        }
	    consume_credentials();
    #verify aliases, if found replace R-URI. 
    lookup("aliases");
    
    if (is_uri_host_local()) {
        # -- Inbound to Inbound
        route(10);
    } else {
        # -- Inbound to outbound
        route(11);
    };
} else {
    #From an external domain ->do not check credentials
       #Verify aliases, if found replace R-URI. 
        lookup("aliases");
            if (is_uri_host_local()) {
                #-- Outbound to inbound
                route(12);
            } else {
                # -- Outbound to outbound
                route(13);
            };
    };
}
route[4] {
		log(1,"---------------------------> Entering dynamic routing route
function \n");
		$avp(i:1)=1;
                do_routing("$avp(i:1)");
		xlog("L_INFO","********************************** Request URI is $ru\n");
		log(1,"---------------------------> After dynamic routing route function
\n");
                if(use_next_gw()) {
   			 log(1,"-------------------------> I am entering the next gateway that
is in the list\n");
                   #     sl_send_reply("503", "Unable to find a gateway");
			t_relay();
                        exit;
                };
		route(1);
/*                t_on_failure("2");
                if (!t_relay()) {
                        sl_reply_error();
                };
                exit;*/
         }

route[41] {
    # routing to the public network
/*    if (!load_gws()) {
        sl_send_reply("503", "Unable to load gateways");
   exit;
    }
        if(!next_gw()){
        sl_send_reply("503", "Unable to find a gateway");
   exit;
    }
    t_on_failure("2");
    if (!t_relay()) {
        sl_reply_error();
    };
    exit;*/
    rewritehostport("208.163.33.132");
   


    # rewritehostport("sip.voip-proxy.com");
     route(1);
}
route[6] {
    #
    # -- NAT handling --
    #
    if (isbflagset(6) || isbflagset(7)) {
        	append_hf("P-hint: Route[6]: RTP proxy\r\n");
	        force_rtp_proxy(); 
	        #use_media_proxy();
    };
}
route[10] {
    #from an internal domain -> inbound
    #Native SIP destinations are handled using the location table
    #Gateway destinations are handled by regular expressions
    append_hf("P-hint: inbound->inbound \r\n");
           
/*    if (is_user_in("credentials","quota")) {
            sl_send_reply("403", "Your Quota for the Month is spent. Hence
call is denied");
            exit;
    } else {*/ 
    log(1,"***********************I AM IN  route 10");
    if (uri=~"^sip:00[0-9]{6,20}@") {
        if (is_user_in("credentials","local")) {
      #      prefix("+1305");
 #          strip(2);
#		prefix("111");
            route(6);
		 log(1,"\n*********************** I AM GOING TO ENTER ROUTE 4");
	                route(4);
            exit;
        } else {
            sl_send_reply("403", "No permissions for local calls");
            exit;
        };
    };
/*    if (uri=~"^sip:[1-9][0-9]{9,20}@") {
        if (is_user_in("credentials","ld")) {
#            strip(1);
#            prefix("+1");
            route(6);
            route(4);
            exit;
        } else {
            sl_send_reply("403", "No permissions for long distance");
            exit;
        };
    };
    if (uri=~"^sip:[1-9][0-9]{6,20}") {
        if (is_user_in("credentials","int")) {
#            strip(3);
            prefix("+");
            route(6);
            route(4);
            exit;
	            } else {
            sl_send_reply("403", "No permissions for  
                          international calls");
        };
    };*/
            
    if (!lookup("location")) {
        if (does_uri_exist()) {
            ## User not registered at this time.
            ## Use the IP Address of your e-mail server
            revert_uri();
            prefix("u");
            rewritehostport("192.168.1.149"); #Use the IP address of your
voicemail server
            route(6);
       route(1);
        } else {
            sl_send_reply("404", "Not Found");
       exit;
        }   
        sl_send_reply("404", "Not Found");
        exit;
	    };
    route(6); 
    route(1);
#   }
}
route[11] {
     # from an internal domain -> outbound
     # Simply route the call outbound using DNS search
     append_hf("P-hint: inbound->outbound \r\n");
     route(1);
}
route[12] {
     # From an external domain -> inbound
     # Verify aliases, if found replace R-URI.
     lookup("aliases");
     if (!lookup("location")) {
          sl_send_reply("404", "Not Found");
          exit;
     };
     route(1);
}
route[13] {
     #From an external domain outbound
     #we are not accepting these calls
     append_hf("P-hint: outbound->inbound \r\n");
     sl_send_reply("403", "Forbidden");
     exit;
}
/*
route[16]
{
	if (!t_newtran())
	{
		sl_reply_error();
		exit;
	};

	if(is_method("PUBLISH"))
	{
		handle_publish();
	}
	else
	if( is_method("SUBSCRIBE"))
	{
		handle_subscribe();
	}

	exit;
}
*/
route[17] {
        $avp(i:11)=$ru;
        if(!lookup("location")) {
            #----------Storing Offline Messages----------------------------
           
log(1,"\n------------------------------------------------------------------------------------------>
INSIDE Location(MESSAGE) route 17 loop\n");
            if (!t_newtran())
            {
                sl_reply_error();
                exit;
            };
            log(1, "MESSAGE received -> storing using MSILO\n");
	    xlog("L_INFO",
"-----------------------------------------RURI-----$ru\n");
	    xlog("L_INFO",
"-----------------------------------------From-----$fu\n");
	    xlog("L_INFO",
"-----------------------------------------To-----$tu\n");
            # MSILO - storing as offline message
          #  $avp(s:req_uri)=$tu:5080;
            if (m_store("$tu"))
            {
                log(1, "MSILO: offline message stored\n");
                log(1,"MSILO: ---------------------------------------> in
lookup location------------------------------- 4\n");
                if (!t_reply("202", "Accepted"))
                {
                    sl_reply_error();
                };
            }else{
                log(1, "MSILO: offline message NOT stored\n");
                if (!t_reply("503", "Service Unavailable"))
                {
                    sl_reply_error();
                };
            };
            exit; #new line added
#-------------Finished, Storing Offline
Messages------------------------------------
        };
        t_on_failure("3");
        route(1);
        exit;
}

failure_route[1] {
        ##--
        ##-- If cancelled, exit. 
        ##--
        if (t_was_cancelled()) {
            exit;
        };
        ##--
        ##-- If busy send to the e-mail server, prefix the "b"
        ##-- character to indicate busy. 
        ##--
        if (t_check_status("486")) {
            revert_uri();
            prefix("b");
	    xlog("L_ERR","Stepped into the 486 ruri=<$ru>");
            rewritehostport("192.168.1.149");
            append_branch();
            route(1);
            exit;
        };
	        ##--
        ##-- If timeout (408) or unavailable temporarily (480),
        ##-- prefix the uri with the "u"character to indicate 
        ##-- unanswered and send to the e-mail
        ##-- sever
        ##--
        if (t_check_status("408") || t_check_status("480")) {
           revert_uri();
           prefix("u");
	   xlog("L_ERR","Stepped into the 480 ruri=<$ru>");
           rewritehostport("192.168.1.149");
           append_branch();
           route(1);
           exit;
        };
}
failure_route[2] {
    if(!next_gw()) {
        t_reply("503", "Service not available, no more gateways");
        exit;
    };
    t_on_failure("2");
    t_relay();
}

failure_route[3] {
    # forwarding failed -- check if the request was a MESSAGE
    if (!method=="MESSAGE")
    {
        exit;
    };

    log(1,"MSILO:the downstream UA doesn't support MESSAGEs\n");
    # we have changed the R-URI with the contact address, ignore it now
    if (m_store("$ou"))
    {
        log(1, "MSILO: offline message stored\n");
        log(1,"MSILO: ---------------------------------------> in
failure_route 3\n");
        t_reply("202", "Accepted");
    }else{
        log(1, "MSILO: offline message NOT stored\n");
        t_reply("503", "Service Unavailable");
    };
}



onreply_route[1] {
#
#-- On-replay block routing --
#
    if (client_nat_test("1")) {
        append_hf("P-hint: Onreply-route - fixcontact \r\n");
        fix_contact();
    };
    if ((isbflagset(6) || isbflagset(7)) &&
(status=~"(180)|(183)|2[0-9][0-9]")) {
        if (search("^Content-Type:[ ]*application/sdp")) {
            append_hf("P-hint: onreply_route|useRTPproxy \r\n");
            force_rtp_proxy();
            #use_media_proxy();
        };
    };
    exit;
}

local_route {

	if ( method == "BYE") 
{

		log(1,"\n ***************************************************** Internal
BYE is sent to radius");

		setflag(3);

	#	unforce_rtp_proxy();
	
	acc_db_request("Internally generated BYE", "acc");

		acc_rad_request("BYE");

        };	

}

****************************************************************************













There is my server.conf file which i am using in  wesip



*****************************************************************************

<Server port="5005" shutdown="SHUTDOWN" debug="0">
	<Service name="Tomcat-Standalone">
     		<Connector
className="org.apache.catalina.connector.http.HttpConnector"
	 		port="8030" minProcessors="5" maxProcessors="75"
	 		enableLookups="true" acceptCount="10" debug="0" />
 	 	
		<Connector className="com.voztele.sipservlet.connector.SipConnector"
	 		minProcessors="5" maxProcessors="75"
	 		enableLookups="true" acceptCount="10" debug="0"
	 		addresses="70.32.121.31:5080" pathName="com.voztele" protocol="udp" >
		 		<ExtraProperties>
			 		<Property key="com.voztele.javax.sip.SER_ADDRESS" value="mobimo.com"
/>
			 		<Property key="com.voztele.javax.sip.SER_PORT" value="5090" />
			 		<Property key="com.voztele.STATISTICS" value="false" />
					<Property key="javax.sip.STACK_NAME" value="app_server_1" />
					<Property key="javax.sip.THREAD_POOL_SIZE" value="100" />
					<Property key="com.voztele.javax.sip.THREAD_POOL_SIZE" value="100" />
					<Property key="com.voztele.javax.sip.REENTRANT_LISTENER" value="true"
/>
					<Property key="javax.sip.AUTOMATIC_DIALOG_SUPPORT" value="false" /> 
					<Property key="com.voztele.javax.sip.TRACE_LEVEL" value="0" /> 
		 		</ExtraProperties>
	 	</Connector>
	 
     	<Engine name="Standalone" defaultHost="localhost" debug="0"
className="com.voztele.sipservlet.core.ConvergedEngine">
	 	
			<Mapper className="org.apache.catalina.core.StandardEngineMapper"
protocol="HTTP/1.1"/>
			<Mapper className="org.apache.catalina.core.StandardEngineMapper"
protocol="HTTP/1.0"/>
	 		<Mapper className="com.voztele.sipservlet.core.EngineSipMapper"
protocol="SIP/2.0"/>
			<Logger className="org.apache.catalina.logger.FileLogger"
timestamp="true"/>
			<Realm className="org.apache.catalina.realm.MemoryRealm" />
	 		
			<Host name="localhost" nameSip="70.32.121.31_5080" debug="0" 
appBase="wesipapps" className="com.voztele.sipservlet.core.ConvergedHost">
				
				<Logger className="org.apache.catalina.logger.FileLogger"
timestamp="true"/>
				<Mapper className="com.voztele.sipservlet.core.SipHostMapper"
protocol="SIP/2.0"/>
				<Mapper className="org.apache.catalina.core.HttpHostMapper"
protocol="HTTP/1.1"/>
				<Mapper className="org.apache.catalina.core.HttpHostMapper"
protocol="HTTP/1.0"/>
				<!--  
				<DefaultContext useNaming="true" reloadable="true">
					<Resource name="pool" auth="WeSIP"  type="javax.sql.DataSource"/>
					<ResourceParams name="pool">
						<parameter>
							<name>username</name>
							<value>[USERNAME_DATABASE]</value>
						</parameter>
						<parameter>
							<name>password</name>
							<value>[PASSWORD_DATABASE]</value>
						</parameter>
						<parameter>
							<name>driverClassName</name>
							<value>[DRIVER_CLASSNAME]</value>
						</parameter>
						<parameter>
							<name>url</name>
							<value>[URL]</value>
						</parameter>
						<parameter>
							<name>maxActive</name>
							<value>1</value>
						</parameter>
						<parameter>
							<name>maxIdle</name>
							<value>2</value>
						</parameter>
					</ResourceParams>
				 </DefaultContext>
				 -->
	      	</Host>
   		
   		</Engine>
	</Service>
</Server>
*************************************************************************


Can any when please tell me how can i handle the Bye Event  or where i am
wrong that opensips can't able to handle the bye event.

Please take this as request and Replay me asap...


Thanks in advance

Arun singh.
       
  


-- 
View this message in context: http://n2.nabble.com/How-can-handle-bye-event-in-Opensips%2Bwesip-tp2969309p2969309.html
Sent from the OpenSIPS - Users mailing list archive at Nabble.com.




More information about the Users mailing list