[SR-Users] ways to track all messages of a dialog

Fabian Borot fborot at hotmail.com
Tue Feb 13 23:06:22 CET 2018


I need to track all messages (SIP Requests, SIP Responses) for some SIP dialogs. Let's say I need to log something specific on each state for calls initiated from a certain IP (initial request, temporary replies, rejection with a negative response, call was accepted with 200, termination with BYE, termination with CANCEL  etc. ).
I am thinking on using flags but I am not sure after reading the tutorial  on flags (http://www.kamailio.org/dokuwiki/doku.php/tutorials:openser-flag-operations) if that is going to work properly. The doc says: "They provide a very easy and fast way of keeping states during processing a request or during a transaction". I am afraid that the ACK if the call is accepted and the BYE won't be tracked properly because they are not part of the initial transaction. Also the doc does not mention if the flag is preserved among branches spawned during the processing of the call.

The idea is for example: 

request_route {
	if (is_method("INVITE")){
		if ($si == "192.168.168.100"){  	#condition that would set the flag, INVITE came from "my_IP"
			#flag/mark dialog
			setflag(1);
			#log call from "my_IP" was received
		}
		route("INCOMING);
	}
	If(loose_route() ){
		if (is_method("ACK")){
			if(isflagset(1)){
				#log ACK related to "my_IP" was received
			}
		}
		if (is_method("CANCEL")){
			if(isflagset(1)){
				#log CANCEL related to "my_IP" was received
			}
		}
		if (is_method("BYE")){
			if(isflagset(1)){
				#log BYE related to "my_IP" was received
			}
		}
	}
}

Then :

route["INCOMING"] {
	# do some processing
	# do some processing
	
	t_onreply("INCOMING");
	t_on_failure("INCOMING");	
	t_relay();
}

onreply_route[INCOMING] {
	#do some processing
	if(isflagset(1)){
		#log a reply related to "my_IP" was received
	}
}

failure_route[INCOMING] {
	#do some processing
	if(isflagset(1)){
		#log a negative reply related to "my_IP" was received
	}
}


Will the flags work on this case ?

My 2nd approach is to use a htable and use the call_id for my calls as the key. The on each route section (reply, failure_reply, ACK processing etc.) find the $ci on the htable and if it is there do the appropriate action. But I need to delete the key:value once the call ends or leave it autoexpire with a expire value bigger than the max_call_duration_time that we have in our system.






More information about the sr-users mailing list