Merge "Optional autogen.sh flag --enable-kdbus-transport added allowing to compile...
[platform/upstream/dbus.git] / samsung_tools / client.c
1 #include <stdio.h>
2
3 #include <dbus/dbus.h>
4
5 #include <string.h>
6 #include <sys/time.h>
7 #include <stdlib.h>
8
9 #define DBUS_NAME "com.samsung.pingpong"
10 #define DBUS_PATH "/com/samsung/pingpong"
11 #define DBUS_IFACE "com.samsung.pingpong"
12
13 DBusConnection *dbus_conn;
14 struct timeval tv_start, tv_end;
15 unsigned int message_serial;
16 long int iterations = 0;
17 long int avg = 0;
18 long int sum = 0;
19 static char* ping = "pingping";
20 #define MSG_SIZE 3 * 1024 * 1024
21
22 void
23 shutdown_dbus ()
24 {
25         if (dbus_conn) {
26                 dbus_connection_close (dbus_conn);
27         }
28 }
29
30 DBusHandlerResult handler(DBusConnection *conn, DBusMessage *msg, void *user_data)
31 {
32         //char buffer[1024];
33         DBusError error;
34         const char *dbus_data;
35         long int delta = 0;
36         DBusMessage *message;
37         
38         if (dbus_message_get_reply_serial (msg) != message_serial) {
39                 return DBUS_HANDLER_RESULT_HANDLED;
40         }
41
42         dbus_error_init (&error);
43         if(!dbus_message_get_args (msg,&error,DBUS_TYPE_STRING,&dbus_data,DBUS_TYPE_INVALID))   {
44                 fprintf (stderr,"error: %s\n",error.message);
45                 return -1;
46         } else {
47                 gettimeofday (&tv_end, NULL);
48                 delta = (1000000*tv_end.tv_sec + tv_end.tv_usec) - (1000000*tv_start.tv_sec + tv_start.tv_usec);
49                 //printf ("delta: %ld us\n", delta);    
50                 sum += delta;
51                 iterations++;
52                 if(iterations == 120) {
53                         avg = sum / iterations;
54                         printf ("avg RTT: %ld us\n", avg);
55                         shutdown_dbus ();
56                 }
57                 gettimeofday (&tv_start, NULL);
58                 message = dbus_message_new_method_call (DBUS_NAME, DBUS_PATH, DBUS_IFACE, "PING");
59                 dbus_message_append_args (message, DBUS_TYPE_STRING, &ping, DBUS_TYPE_INVALID);
60                 dbus_connection_send (dbus_conn, message, &message_serial);
61                 dbus_message_unref (message);
62         }
63         return DBUS_HANDLER_RESULT_HANDLED;
64 }
65
66 int
67 init_dbus ()
68 {
69         DBusError error;
70         dbus_error_init (&error);
71         
72         dbus_conn = dbus_bus_get_private(DBUS_BUS_SESSION, &error);
73
74         if (dbus_error_is_set (&error)) {
75                 fprintf (stderr, "Couldn't initialize DBus: %s\n", error.message);
76
77                 return -1;
78         }
79
80         return 0;
81 }
82
83 int
84 main (int argc, char **argv)
85 {
86         
87         DBusMessage *message;
88         int i;
89         if (init_dbus () < 0) {
90                 fprintf (stderr, "Cannot initialize DBus\n");
91                 return 1;
92         }
93
94         dbus_connection_add_filter (dbus_conn, handler, NULL, NULL);
95
96         //ping = malloc(MSG_SIZE);
97         //for(i = 0; i < MSG_SIZE; i++) ping[i] = 'v';
98         //ping[MSG_SIZE] = '\0';
99         
100         message = dbus_message_new_method_call (DBUS_NAME, DBUS_PATH, DBUS_IFACE, "PING");
101         dbus_message_append_args (message, DBUS_TYPE_STRING, &ping, DBUS_TYPE_INVALID);
102         dbus_connection_send (dbus_conn, message, &message_serial);
103
104         gettimeofday (&tv_start, NULL);
105
106         dbus_message_unref (message);
107         while (dbus_connection_read_write (dbus_conn, -1)) {
108                 while (dbus_connection_dispatch (dbus_conn) != DBUS_DISPATCH_COMPLETE) {
109                 }
110         }
111         //free(ping);
112
113         return 0;
114 }