Fixed codes which may occur potential bugs.
[sdk/target/sdbd.git] / test / test_inoti_service.c
1 /*\r
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the License);\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an AS IS BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 /* a simple test program, connects to SDB server, and opens a track-devices session */\r
18 #include <netdb.h>\r
19 #include <sys/socket.h>\r
20 #include <stdio.h>\r
21 #include <stdlib.h>\r
22 #include <errno.h>\r
23 #include <memory.h>\r
24 \r
25 static void\r
26 panic( const char*  msg )\r
27 {\r
28     fprintf(stderr, "PANIC: %s: %s\n", msg, strerror(errno));\r
29     exit(1);\r
30 }\r
31 \r
32 static int\r
33 unix_write( int  fd, const char*  buf, int  len )\r
34 {\r
35     int  result = 0;\r
36     while (len > 0) {\r
37         int  len2 = write(fd, buf, len);\r
38         if (len2 < 0) {\r
39             if (errno == EINTR || errno == EAGAIN)\r
40                 continue;\r
41             return -1;\r
42         }\r
43         result += len2;\r
44         len -= len2;\r
45         buf += len2;\r
46     }\r
47     return  result;\r
48 }\r
49 \r
50 static int unix_read( int  fd, char*  buf, int  len )\r
51 {\r
52     int  result = 0;\r
53     while (len > 0) {\r
54         int  len2 = read(fd, buf, len);\r
55         if (len2 < 0) {\r
56             if (errno == EINTR || errno == EAGAIN)\r
57                 continue;\r
58             return -1;\r
59         }\r
60         result += len2;\r
61         len -= len2;\r
62         buf += len2;\r
63     }\r
64     return  result;\r
65 }\r
66 \r
67 int  main( void )\r
68 {\r
69     int                  ret, s;\r
70     struct sockaddr_in   server;\r
71     char                 buffer[1024];\r
72     const char*          transport = "host:transport-a";\r
73     const char*          request = "cs:";\r
74     int                  len;\r
75 \r
76     memset( &server, 0, sizeof(server) );\r
77     server.sin_family      = AF_INET;\r
78     server.sin_port        = htons(26099);\r
79     server.sin_addr.s_addr = htonl(INADDR_LOOPBACK);\r
80 \r
81     s = socket( PF_INET, SOCK_STREAM, 0 );\r
82     ret = connect( s, (struct sockaddr*) &server, sizeof(server) );\r
83     if (ret < 0) panic( "could not connect to server" );\r
84 \r
85     /* send the transport */\r
86     len = snprintf( buffer, sizeof buffer, "%04x%s", strlen(transport), transport );\r
87     if (unix_write(s, buffer, len) < 0)\r
88         panic( "could not send request" );\r
89 \r
90     /* read the OKAY answer */\r
91     if (unix_read(s, buffer, 4) != 4)\r
92         panic( "could not read request" );\r
93 \r
94     /* send the request */\r
95     len = snprintf( buffer, sizeof buffer, "%04x%s", strlen(request), request );\r
96     if (unix_write(s, buffer, len) < 0)\r
97         panic( "could not send request" );\r
98 \r
99     /* read the OKAY answer */\r
100     if (unix_read(s, buffer, 4) != 4)\r
101         panic( "could not read request" );\r
102 \r
103     printf( "server answer: %.*s\n", 4, buffer );\r
104 \r
105     /* now loop */\r
106     for (;;) {\r
107         memset(buffer, 0, sizeof(buffer));\r
108         if (unix_read(s, buffer, 30) < 0)\r
109             panic("could not read length");\r
110 \r
111         printf( "server answer: %s\n",buffer );\r
112         break;\r
113     }\r
114     close(s);\r
115 }\r