[Serusers] Problem with CANCEL and INVITE (2)

Benito Caracuel becasi at hotmail.com
Mon Feb 13 13:58:23 CET 2006


Hello all,

UAC -------------- SER ----------------- UAS

INVITE ---------->INVITE------------>INVITE

          <----------TRYING

CANCEL------------>

          <-----------TRYING


If UAC sends an INVITE and then  sends a CANCEL, this CANCEL doesn't
stop SER.
SER is still processing  the INVITE to UAS, why?
This is my ser.cfg:

route{
	# initial sanity checks -- messages with
	# max_forwards==0, or excessively long requests
	if (!mf_process_maxfwd_header("16")) {
		sl_send_reply("483","Too Many Hops");
	};
	if (msg:len > max_len) {
		sl_send_reply("513", "Message too big");
		break;
	};


	# 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 
(uri=~"^sip:(.+@)?(10\.22\.1\.[0-9]+|(.+@)?(10\.22\.2\.[0-9]+|(.+\.)?T\.local)([:;\?].*)?$"){
#	if 
(uri=~"^sip:(.+@)?([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|(.+\.)?T\.local)([:;\?].*)?$"){
	if (uri=~"^sip:(.+@)?(.+)([:;\?].*)?$"){

                if (method=="REGISTER") {

# Uncomment this if you want to use digest authentication
#			if ((!www_authorize("10.22.1.249", "subscriber"))) {
#				www_challenge("10.22.1.249", "0");
#				break;
#			};

			save("location");
			break;
		};

		if (method=="BYE") {
			t_relay();
			sl_send_reply("200", "OK");
			break;
		};
		if (method=="ACK") {
			t_relay();
			break;
		};
		if (method=="CANCEL") {
			t_relay();
			sl_send_reply("200", "OK");
			break;
		};
		if ((method=="INVITE")&&(!lookup("location"))) {
			exec_msg("printenv SRCIP; /bin/bash /usr/local/ser/sbin/sms");
			sl_send_reply("100", "Trying");
			exec_msg("sleep 10");

			if (!lookup("location")){
			  sl_send_reply("100", "Trying");
			  exec_msg("sleep 10");
			} else {
			  t_relay();
			  break;
			}

			if (!lookup("location")){
			  sl_send_reply("100", "Trying");
			  exec_msg("sleep 10");
			} else {
			  t_relay();
			  break;
			}

			if (!lookup("location")){
			  sl_send_reply("100", "Trying");
			  exec_msg("sleep 10");
			} else {
			  t_relay();
			  break;
			}

			if (!lookup("location")){
			  sl_send_reply("100", "Trying");
			  exec_msg("sleep 10");
			} else {
			  t_relay();
			  break;
			}

			if (!lookup("location")){
			  sl_send_reply("100", "Trying");
			  exec_msg("sleep 10");
			} else {
			  t_relay();
			  break;
			}

			if (!lookup("location")){
			  sl_send_reply("100", "Trying");
			  exec_msg("sleep 10");
			} else {
			  t_relay();
			  break;
			}

			if (!lookup("location")){
			  sl_send_reply("404", "Not on-line");
			  break;
			} else {
			  t_relay();
			  break;
			}
		};

		if (method=="SUBSCRIBE") {
		    if (!t_newtran()) {
#		       log(1, "newtran error\n");
		       sl_reply_error();
		    };
		    handle_subscription("registrar");
		    break;
		};

		if (method=="PUBLISH") {
		    if (!t_newtran()) {
#		       log(1, "newtran error\n");
		       sl_reply_error();
		    };
		    handle_publish("registrar");
		    break;
		};

		lookup("aliases");
		if (!uri==myself) {
			append_hf("P-hint: outbound alias\r\n");
			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]
{
	# send it out now; use stateful forwarding as it works reliably
	# even for UDP2TCP
	if (!t_relay()) {
		sl_reply_error();
	};
}




Help me please.
Thank you.

>
>_______________________________________________
>Serusers mailing list
>serusers at lists.iptel.org
>http://lists.iptel.org/mailman/listinfo/serusers





More information about the sr-users mailing list