<HTML><HEAD><TITLE>dbus-server unable to receive few signals.</TITLE>
<META http-equiv=Content-Type content="text/html; charset=unicode">
<META content="MSHTML 6.00.2900.5512" name=GENERATOR></HEAD>
<BODY>
<P dir=ltr style="MARGIN-RIGHT: 0px"><FONT size=2><FONT size=3>Hello,<BR><BR>I was trying to trigger some task when DHCP does an DHCPACK on an IP. This I thought of achieving by using dbus signals.<BR><BR>I picked up the code from the following page -- </FONT><A href="http://dbus.freedesktop.org/doc/dbus/libdbus-tutorial.html"><FONT size=3>http://dbus.freedesktop.org/doc/dbus/libdbus-tutorial.html</FONT></A><FONT size=3> Read the "Receiving a Signal" section and modified it to my own requirements.<BR><BR>As for sending the signal I used the dbus-send command from DHCP server ( Inserting few statements in ISC DHCP's dhcpd.conf file by which on commit or on release the dbus-send command in triggered )<BR>I am facing a problem, where some Signals do not reach the dbus server program. It happens once in 40-50 signals. But my application would not want to lose the Signals.<BR><BR>Part of my Code<BR></FONT></FONT><FONT size=2><FONT size=3>dbus-server.c</FONT></FONT></P>
<ADDRESS dir=ltr style="MARGIN-RIGHT: 0px"><FONT face="Courier New" size=2>#include &lt;dbus/dbus.h&gt;<BR>#include &lt;stdbool.h&gt;<BR>#include &lt;unistd.h&gt;<BR>#include &lt;stdio.h&gt;<BR>#include &lt;stdlib.h&gt;<BR>#include&lt;string.h&gt;</FONT></ADDRESS><FONT size=2>
<ADDRESS dir=ltr style="MARGIN-RIGHT: 0px"><FONT face="Courier New">void receive()<BR>{<BR>&nbsp;&nbsp; DBusMessage* msg;<BR>&nbsp;&nbsp;&nbsp;DBusMessageIter args;<BR>&nbsp;&nbsp;&nbsp;DBusConnection* conn;<BR>&nbsp;&nbsp;&nbsp;DBusError err;<BR>&nbsp;&nbsp;&nbsp;int ret, ipcheck;<BR>&nbsp;&nbsp;&nbsp;char *sigvalue1, *message;<BR>&nbsp;&nbsp;&nbsp;dbus_bool_t sigvalue2;<BR>&nbsp;&nbsp;&nbsp;bool request_type;<BR>&nbsp;&nbsp;&nbsp;static int sequence_number = 0;<BR>&nbsp;&nbsp;&nbsp;dbus_error_init(&amp;err);<BR>&nbsp;&nbsp;&nbsp;conn = dbus_bus_get(DBUS_BUS_SYSTEM, &amp;err);<BR>&nbsp;&nbsp;&nbsp;ret = dbus_bus_request_name(conn, "com.example.app.Sink",&nbsp; DBUS_NAME_FLAG_REPLACE_EXISTING , &amp;err);<BR>&nbsp;&nbsp;&nbsp;dbus_bus_add_match(conn, "type='signal',interface='com.example.app.Signal'", &amp;err);<BR>&nbsp;&nbsp;&nbsp;dbus_connection_flush(conn);<BR>&nbsp;&nbsp;&nbsp;// All the checks were made to see if the connection is established.&nbsp;</FONT></ADDRESS>
<ADDRESS dir=ltr style="MARGIN-RIGHT: 0px"><FONT face="Courier New">&nbsp;&nbsp; </FONT><FONT face="Courier New">while (true)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbus_connection_read_write(conn, 0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg = dbus_connection_pop_message(conn);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (NULL == msg) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dbus_message_is_signal(msg, "com.example.app.Signal", "Test"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stdout,"\n#####################################################\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sequence_number++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stdout,"\nSignal Sequence Number: %d\n",sequence_number);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fflush(stdout);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dbus_message_iter_init(msg, &amp;args))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbus_message_iter_get_basic(&amp;args,&amp;sigvalue1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbus_message_iter_next(&amp;args);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbus_message_iter_get_basic(&amp;args,&amp;sigvalue2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fflush(stdout);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( sigvalue2 )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_type=true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_type=false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( request_type )<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// DO SOMETHING<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbus_message_unref(msg);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // DO SOMETHING ELSE<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbus_message_unref(msg);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbus_message_unref(msg);<BR>&nbsp;&nbsp;&nbsp;&nbsp;} // end of while loop<BR>&nbsp;}<BR></FONT></ADDRESS>
<P dir=ltr style="MARGIN-RIGHT: 0px"><BR><FONT size=3>A dbus-send command is sent using --</FONT></FONT></P><FONT size=2><FONT size=3>
<ADDRESS></FONT><FONT face="Courier New">dbus-send --system --dest='com.example.app.Sink' --type=signal /com/example/app/Signal com.example.app.Signal.Test string:"192.168.47.100" boolean:true</FONT></ADDRESS>
<ADDRESS><FONT face="Courier New"><FONT face="Times New Roman" size=3>or<BR></FONT><BR>dbus-send --system --dest='com.example.app.Sink' --type=signal /com/example/app/Signal com.example.app.Signal.Test string:"192.168.47.100" boolean:false<BR></FONT></ADDRESS>
<P><FONT size=3>I have an xml conf file in /etc/dbus-1/system.d/app.conf</FONT></P></FONT>
<ADDRESS><FONT face="Courier New" size=2>&lt;!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"<BR>&nbsp;"</FONT><A href="http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"><FONT face="Courier New" size=2>http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd</FONT></A><FONT face="Courier New" size=2>"&gt;<BR>&lt;busconfig&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;policy user="root"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;allow own="com.example.app.Source"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;allow send_interface="com.example.app.Signal"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;allow send_destination="com.example.app.Sink"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/policy&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;policy user="root"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;allow own="com.example.app.Sink"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/policy&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;policy context="default"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;deny own="com.example.app.Source"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;deny send_destination="com.example.app.Sink"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;deny send_interface="com.example.app.Signal"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/policy&gt;<BR>&lt;/busconfig&gt;<BR></FONT></ADDRESS>
<P><BR>I modified the dbus-server.c code to change the following</P><FONT size=2>
<P><FONT face="Courier New">dbus_connection_read_write(conn, 0); <FONT face="Times New Roman" size=3>to</FONT> </FONT></P>
<P><FONT face="Courier New">dbus_connection_read_write(conn, 1); <FONT face="Times New Roman" size=3>and</FONT> </FONT></P>
<P><FONT face="Courier New">dbus_connection_read_write(conn, 2);</FONT></P>
<P><FONT face="Courier New"><FONT face="Times New Roman" size=3>But none had the required effect. Is there any glitch which is left which makes it lose the Signal ? I have picked most part of the code from the example provided on the tutorial, so I assume it should work. Please provide any leads as to what is making the Signal to be lost.</FONT></FONT></P>
<P><FONT face="Courier New"><FONT face="Times New Roman" size=3>Regards,</FONT></FONT></P></FONT>
<ADDRESS>Abhijeet Kumar Sinha</ADDRESS>
<ADDRESS>Project Engineer</ADDRESS>
<ADDRESS>Wipro Technologies</ADDRESS>
<ADDRESS>Bangalore<BR><BR><BR><BR><BR></ADDRESS><P><strong><span style='font-size:10.0pt;font-family:
"Palatino Linotype","serif";color:green'> Please do not print this email unless it is absolutely necessary. </span></strong><span style='font-family:"Arial","sans-serif"'><o:p></o:p></span></p>


<p> The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended recipient, you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy all copies of this message and any attachments. </p>

<p>WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. </p>
<p>
www.wipro.com
</p>
</BODY></HTML>