[OpenSIPS-Devel] [ opensips-Feature Requests-2166279 ] mi_datagram: request for symetric udp socket implementation

SourceForge.net noreply at sourceforge.net
Thu Sep 17 10:03:55 CEST 2009


Feature Requests item #2166279, was opened at 2008-10-14 18:03
Message generated for change (Comment added) made by bogdan_iancu
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=1086413&aid=2166279&group_id=232389

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: modules
>Group: trunk
>Status: Closed
Priority: 7
Private: No
Submitted By: Ovidiu Sas (osas)
Assigned to: Bogdan-Andrei Iancu (bogdan_iancu)
Summary: mi_datagram: request for symetric udp socket implementation

Initial Comment:
The mi_datagram module works fine with unix sockets, but it doesn't work
with udp socket:

The UDP commands are received and handled by the module, but no UDP reply
is issued.

Here's how to send a udp command to the server:
echo -ne :which:\\n\\n | nc -w 1 -u <host> <port>

The debug logs are showing the command being processed but there's no reply
sent back.

Here's the debug output for a received ":which:\n\n" UDP packet:

Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_server: received :which:   
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_server: mi_buf is :which:   and we have received 9 bytes 
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:identify_command: the command starts here: which:   
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:identify_command: the command is which 
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:identify_command: dtgram->len is 9 
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:identify_command: dtgram->len is 1 
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_server: we have a valid command  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_server: after identifing the command, the received datagram is    
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_server: the command has no params 
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_server: done parsing the mi tree 
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_server: command process (which)succeded 
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <get_statistics>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <reset_statistics>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <uptime>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <version>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <pwd>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <arg>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <which>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <ps>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <kill>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <debug>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <list_blacklists>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <t_uac_dlg>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <t_uac_cancel>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <t_hash>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <t_reply>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <dlg_list>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <dlg_list_ctx>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <dlg_end_dlg>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <profile_get_size>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <profile_list_dlgs>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <lcr_reload>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <lcr_dump>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <cr_reload_routes>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <cr_dump_routes>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <cr_replace_host>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <cr_deactivate_host>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <cr_activate_host>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <cr_add_host>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <cr_delete_host>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <rl_stats>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <rl_set_pipe>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <rl_get_pipes>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <rl_set_queue>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <rl_get_queues>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <rl_set_pid>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <rl_get_pid>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <rl_push_load>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <rl_set_dbg>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <trusted_reload>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <trusted_dump>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <address_reload>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <address_dump>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <subnet_dump>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <allow_uri>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <set_gflag>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <reset_gflag>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <is_gflag>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <get_gflags>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <ul_rm>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <ul_rm_contact>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <ul_dump>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <ul_flush>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <ul_add>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <ul_show_contact>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <dp_reload>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_write_node: writing the name <> and value <dp_translate>  
Oct 14 13:27:10 ims o[7343]: DBG:mi_datagram:mi_datagram_server: the response: 200 OK get_statistics reset_statistics uptime version pwd arg which ps kill debug list_blacklists t_uac_dlg t_uac_cancel t_hash t_reply dlg_list dlg_list_ctx dlg_end_dlg profile_get_size profile_list_dlgs lcr_reload lcr_dump cr_reload_routes cr_dump_routes cr_replace_host cr_deactivate_host cr_activate_host cr_add_host cr_delete_host rl_stats rl_set_pipe rl_get_pipes rl_set_queue rl_get_queues rl_set_pid rl_get_pid rl_push_load rl_set_dbg trusted_reload trusted_dump address_reload address_dump subnet_dump allow_uri set_gflag reset_gflag is_gflag get_gflags ul_rm ul_rm_contact ul_dump ul_flush ul_add ul_show_contact dp_reload dp_translate  has been sent in 646 octets 


The output of the ngrep command:
# ngrep -qt -d any port 8888 
interface: any
filter: (ip or ip6) and ( port 8888 )

U 2008/10/14 13:27:10.655282 10.11.10.148:33342 -> 10.11.10.63:8888
  :which:..                                                                                                                                                            


Regards,
Ovidiu Sas

----------------------------------------------------------------------

>Comment By: Bogdan-Andrei Iancu (bogdan_iancu)
Date: 2009-09-17 11:03

Message:
Hi Ovidiu,

the symmetric replying is now on SVN. I did some basic tests, but if you
could run some more test for both UDP and unixsock, will be really helpful
.

Thanks and regards,
Bogdan 

----------------------------------------------------------------------

Comment By: Ovidiu Sas (osas)
Date: 2008-10-16 17:12

Message:
This is now a feature request for symmetric udp exchange.

----------------------------------------------------------------------

Comment By: Bogdan-Andrei Iancu (bogdan_iancu)
Date: 2008-10-16 10:05

Message:
Hi Ovidiu,

I agree - it will be better - please open a feature request and somebody
will take care of this.

Thanks and regards,
Bogdan

----------------------------------------------------------------------

Comment By: Ovidiu Sas (osas)
Date: 2008-10-15 20:35

Message:
Hello Bogdan,

Re-tested this and it is working ... but there is a small catch/issue
here:
when the reply is sent back, the src port of the udp mi reply doesn't
match the destination port of the udp mi request.

in your example:
:ps:
[33450] -> [4343]

200 OK
[33449] -> [33450]


It would be nice to have a symmetric udp exchange (just like for SIP:
receiving on port 5060 and sending from port 5060).
Some apps do not like receiving replies from a different port.


Regards,
Ovidiu

----------------------------------------------------------------------

Comment By: Bogdan-Andrei Iancu (bogdan_iancu)
Date: 2008-10-15 19:14

Message:
Tested with UDP also and still works:

U 127.0.0.1:33450 -> 127.0.0.1:4343
  :ps:..                                                                  
  
#
U 127.0.0.1:33449 -> 127.0.0.1:33450
  200 OK.Process::  ID=0 PID=1369 Type=attendant.Process::  ID=1 PID=1370
Typ
  e=SIP receiver udp:90.84.252.183:5060 .Process::  ID=2 PID=1371 Type=SIP
re
  ceiver udp:90.84.252.183:5060 .Process::  ID=3 PID=1372
Type=timer.Process:
  :  ID=4 PID=1373 Type=MI Datagram.Process::  ID=5 PID=1374 Type=MI
XMLRPC.P
  rocess::  ID=6 PID=1375 Type=MI FIFO.Process::  ID=7 PID=1376 Type=TCP
rece
  iver.Process::  ID=8 PID=1377 Type=TCP receiver.Process::  ID=9 PID=1378
Ty
  pe=TCP main.                                                            
  

(used ngrep -d any . host 127.0.0.1) 
Pushing commands with your nc line.

Regards,
Bogdan

----------------------------------------------------------------------

Comment By: Ovidiu Sas (osas)
Date: 2008-10-15 17:03

Message:
Hello Bogdan,

The unixsock variant works ok.  Only the udp socket variant doesn't work. 
As I mentionned in the initial post, in the udp socket variant I see the
command being received and processed, but no reply is sent out.

It is very easy to test this using netcat:
echo -ne :which:\\n\\n | nc -w 1 -u <host> <port>

This was confirmed also by other users in the mailing list.


Regards,
Ovidiu

----------------------------------------------------------------------

Comment By: Bogdan-Andrei Iancu (bogdan_iancu)
Date: 2008-10-15 10:44

Message:
Hi Ovidiu,

Are you sure your client work ok? Because I just tries with opensipctl
(unixsock interface) and it works ok:

$:~/work/opensips/sip_server/trunk/scripts$ ./opensipsctl unixsock which
get_statistics
reset_statistics
uptime
version
pwd
arg
which
ps
kill
debug
list_blacklists
ul_rm
ul_rm_contact
ul_dump
ul_flush
ul_add
ul_show_contact
nh_enable_ping
nh_enable_rtpp
nh_show_rtpp
t_uac_dlg
t_uac_cancel
t_hash
t_reply
trusted_reload
trusted_dump
address_reload
address_dump
subnet_dump
allow_uri
dlg_list
dlg_list_ctx
dlg_end_dlg
profile_get_size
profile_list_dlgs


Regards,
Bogdan

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=1086413&aid=2166279&group_id=232389



More information about the Devel mailing list