[Serusers] tsend_dgram in tsend.c problems while RTP transffering in SER-0.9.0

Parvel parvel.gu at gmail.com
Thu Apr 14 03:00:53 CEST 2005



Hi~ there.
	I've built SEMS and SER on the REDHAT 9.0, and made them
inter-communicate with unix_sock.
	
	But when I redirected the INVITE || ACK || CANCEL || BYE requests to
SEMS, and load a number_reader plug-in for test, the problem occurs.
	
	The SER conf file includes these:
		
# select messages to redirect:
if ( method=="ACK" || method=="INVITE" || method=="BYE" ||
	method=="CANCEL" ){

# switch to stateful mode:
		if (!t_newtran()){
			sl_send_reply("500","could not create transaction");
			break;
		};

# prevent timeout on the other side:
		t_reply("100","Trying - just wait a minute !");

		if (method=="INVITE"){

# redirect the call to the 'number_reader' plug-in
# if the URI begin with 100
			if (uri=~"sip:100.*@") {

# assumes that Sems configuration parameter 'socket_name='
# has been set to /tmp/am_sock
	
if(!t_write_unix("/tmp/am_sock","number_reader")) {
					t_reply("500","error contacting
sems");
				};
				break;
			};

# redirect the call to the 'announcement' plug-in
# if the URI begin with 200
			if (uri=~"sip:200.*@") {

	
if(!t_write_unix("/tmp/am_sock","announcement")) {
					t_reply("500","error contacting
sems");
				};
				break;
			};

# no service number, redirect to number_reader.
# do not forget to load AVPs so that voicemail gets the
# callee's email address.
			#load_avp("ruri","email",0);
			if(!t_write_unix("/tmp/am_sock","number_reader")) {
				t_reply("500","error contacting sems");
			};
			break;
		} 
		else if (method=="BYE" || method=="CANCEL") {

# Sems should already know which plug-in is handling that
# call. "bye" is no plug-in name. It is a reserved name which
# tells Sems to terminate the call.

			if(!t_write_unix("/tmp/am_sock","bye")) {
				t_reply("500","error contacting sems");
			};
		};
	};

I used a soft phone to connect with the server. The SIP messages seems OK,
the INVITE, 100, 200, ACK messages are exchanged, connection established,
G711u codec is used to transfer. But the RTP stage seems wrong. In the
sniffer only the soft phone's RTP packets are sent, but none of the server's
response received. In the debug mode it seems the SEMS sent the response to
socket, but the SER throw some error messages.

# ser -d -E
              127.0.0.1 [127.0.0.1]:5060
 0(1926) WARNING: fix_socket_list: could not rev. resolve 10.167.16.32
              10.167.16.32 [10.167.16.32]:5060
              127.0.0.1 [127.0.0.1]:5060
 0(1926) WARNING: fix_socket_list: could not rev. resolve 10.167.16.32
              10.167.16.32 [10.167.16.32]:5060
Listening on 
             udp: 127.0.0.1 [127.0.0.1]:5060
             udp: 10.167.16.32 [10.167.16.32]:5060
             tcp: 127.0.0.1 [127.0.0.1]:5060
             tcp: 10.167.16.32 [10.167.16.32]:5060
Aliases: 
             tcp: localhost:5060
             tcp: localhost.localdomain:5060
             tcp: VM-Redhat:5060
             udp: localhost:5060
             udp: localhost.localdomain:5060
             udp: VM-Redhat:5060

stateless - initializing
[root at VM-Redhat root]#  0(0) Maxfwd module- initializing
 0(0) INFO: udp_init: SO_RCVBUF is initially 65535
 0(0) INFO: udp_init: SO_RCVBUF is finally 131070
 0(0) INFO: udp_init: SO_RCVBUF is initially 65535
 0(0) INFO: udp_init: SO_RCVBUF is finally 131070
 1(1929) 
to: 
 1(1929) ERROR: tsend_dgram: failed to send: (107) Transport endpoint is not
connected
16(1944) ERROR: tsend_dgram: failed to send: (22) Invalid argument

While sending the RTP packet, the terminate also sent some RTCP packets, but
a ICMP port unreachable response received.

By the way, when the BYE request is sent, a first 404 response received,
then the 200 OK. Maybe the conf files are not correct?




More information about the sr-users mailing list