[FEATURE] Osp: total remove
[platform/core/system/swap-probe.git] / probe_socket / da_socket.h
1 /*
2  *  DA probe
3  *
4  * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact:
7  *
8  * Hyunjong Park <phjwithyou.park@samsung.com>
9  * Juyoung Kim <j0.kim@samsung.com>
10  * Anastasia Lyupa <a.lyupa@samsung.com
11  *
12  * This library is free software; you can redistribute it and/or modify it under
13  * the terms of the GNU Lesser General Public License as published by the
14  * Free Software Foundation; either version 2.1 of the License, or (at your option)
15  * any later version.
16  *
17  * This library is distributed in the hope that it will be useful, but WITHOUT ANY
18  * WARRANTY; without even the implied warranty of MERCHANTABILITY or
19  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
20  * License for more details.
21  *
22  * You should have received a copy of the GNU Lesser General Public License
23  * along with this library; if not, write to the Free Software Foundation, Inc., 51
24  * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25  *
26  * Contributors:
27  * - S-Core Co., Ltd
28  * - Samsung RnD Institute Russia
29  *
30  */
31
32 #ifndef __DA_SOCKET_H__
33 #define __DA_SOCKET_H__
34
35 #include "daprobe.h"
36
37
38 #define SOCKET_SEND_SIZE 1024
39 #define NO_TOTAL_INFO (NULL)
40 #define POST_PROBEBLOCK_MIDDLE_LIBC_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO)                               \
41         do {                                                    \
42                 BUF_PTR = pack_int64(BUF_PTR, (uintptr_t)OBJECTPTR);            \
43                 BUF_PTR = pack_int64(BUF_PTR, FDVALUE);         \
44                 BUF_PTR = pack_int32(BUF_PTR, APITYPE);         \
45                 struct sockaddr *tmp_dest = ((struct sockaddr *)TOTAL_INFO.sock); \
46                 if ( tmp_dest != NO_TOTAL_INFO) { \
47                         switch (tmp_dest->sa_family) { \
48                                 case AF_INET:\
49                                         BUF_PTR = pack_int32(BUF_PTR, ((struct sockaddr_in *)tmp_dest)->sin_addr.s_addr ); \
50                                         BUF_PTR = pack_int32(BUF_PTR, ntohs(((struct sockaddr_in *)tmp_dest)->sin_port ) ); \
51                                         break;\
52                                 /*case AF_INET6:\
53                                         BUF_PTR = pack_int32(BUF_PTR, ((struct sockaddr_in6 *)tmp_dest)->sin6_addr.s6_addr32 ); \
54                                         BUF_PTR = pack_int32(BUF_PTR, ((struct sockaddr_in6 *)tmp_dest)->sin6_port ); \
55                                         break;*/ \
56                                 default:\
57                                         BUF_PTR = pack_int32(BUF_PTR, (uint32_t) 0);    \
58                                         BUF_PTR = pack_int32(BUF_PTR, (uint32_t) 0);    \
59                                         break; \
60                         } \
61                 } else { \
62                         BUF_PTR = pack_int32(BUF_PTR, (uint32_t) 0);    \
63                         BUF_PTR = pack_int32(BUF_PTR, (uint32_t) 0);    \
64                 }; \
65                 BUF_PTR = pack_int64(BUF_PTR, TOTAL_INFO.msg_total_size);               \
66                 BUF_PTR = pack_bin(BUF_PTR, TOTAL_INFO.msg_buf, TOTAL_INFO.msg_pack_size);              \
67         } while (0)
68
69
70 //lib Common Function
71 #define AFTER_ORIGINAL_LIBC_SOCK(RTYPE, RVAL, OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO, INPUTFORMAT, ...)      \
72                 POST_PROBEBLOCK_BEGIN(LC_SOCKET, RTYPE, RVAL, INPUTFORMAT, __VA_ARGS__);                \
73                 POST_PROBEBLOCK_MIDDLE_LIBC_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO );                                                             \
74                 POST_PROBEBLOCK_END();
75
76 //lib START Function
77 #define AFTER_ORIGINAL_LIBC_SOCK_WAIT_FUNC_START(RTYPE, RVAL,OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO, INPUTFORMAT, ...) \
78         POST_PROBEBLOCK_FUNC_START_BEGIN(LC_SOCKET, RTYPE, RVAL, INPUTFORMAT, __VA_ARGS__);                             \
79         POST_PROBEBLOCK_MIDDLE_LIBC_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO );                                     \
80         FLUSH_LOCAL_BUF();                                                                                              \
81         PRE_PROBEBLOCK_END()
82
83 #define POST_PROBEBLOCK_FUNC_START_BEGIN(LCTYPE, RTYPE, RETVALUE, INPUTFORMAT, ...)     \
84                 newerrno = errno;                                                                                                               \
85                         if(postBlockBegin(blockresult)) {                                                                               \
86                                 PREPARE_LOCAL_BUF(); \
87                                 PACK_COMMON_BEGIN(MSG_PROBE_NETWORK, vAPI_ID, INPUTFORMAT, __VA_ARGS__);\
88                                 PACK_COMMON_END(RTYPE, RETVALUE, errno, blockresult)
89
90
91 //lib END Function
92 #define AFTER_ORIGINAL_LIBC_SOCK_WAIT_FUNC_END(RTYPE, RVAL, OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO, INPUTFORMAT, ...)  \
93         POST_PROBEBLOCK_FUNC_END_BEGIN(LC_SOCKET, RTYPE, RVAL,  INPUTFORMAT, __VA_ARGS__);              \
94         POST_PROBEBLOCK_MIDDLE_LIBC_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO );                                                             \
95         POST_PROBEBLOCK_END()
96
97 #define POST_PROBEBLOCK_FUNC_END_BEGIN(LCTYPE, RTYPE, RETVALUE, INPUTFORMAT, ...)       \
98         newerrno = errno;                                                                                                               \
99         if(postBlockBegin(blockresult)) {                                                                               \
100                 setProbePoint(&probeInfo);                                                                              \
101                 PREPARE_LOCAL_BUF(); \
102                 PACK_COMMON_BEGIN(MSG_PROBE_NETWORK, vAPI_ID, INPUTFORMAT, __VA_ARGS__);\
103                 PACK_COMMON_END(RTYPE, RETVALUE, errno, blockresult)
104
105 #define POST_PROBEBLOCK_MIDDLE_TIZEN_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO )                             \
106         do {                                                                    \
107                 BUF_PTR = pack_int64(BUF_PTR, (uintptr_t)OBJECTPTR);            \
108                 BUF_PTR = pack_int64(BUF_PTR, FDVALUE);                         \
109                 BUF_PTR = pack_int32(BUF_PTR, APITYPE);                         \
110                 BUF_PTR = pack_int32(BUF_PTR, TOTAL_INFO.host_ip);              \
111                 BUF_PTR = pack_int32(BUF_PTR, TOTAL_INFO.host_port);            \
112                 BUF_PTR = pack_int64(BUF_PTR, TOTAL_INFO.msg_total_size);       \
113                 BUF_PTR = pack_bin(BUF_PTR, TOTAL_INFO.msg_buf,                 \
114                                    TOTAL_INFO.msg_pack_size);                   \
115         } while (0)
116
117
118
119 //Tizen Common Function
120 #define AFTER_ORIGINAL_TIZEN_SOCK(APINAME, RTYPE, RVAL, OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO, INPUTFORMAT, ...)      \
121         POST_PROBEBLOCK_TIZEN_BEGIN(APINAME, LC_SOCKET, RTYPE, RVAL, INPUTFORMAT, __VA_ARGS__);         \
122         POST_PROBEBLOCK_MIDDLE_TIZEN_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO );                                                            \
123         POST_PROBEBLOCK_END()
124
125 // Tizen Start Function
126 #define AFTER_ORIGINAL_TIZEN_SOCK_WAIT_FUNC_START(APINAME, RTYPE, RVAL,OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO, INPUTFORMAT, ...)       \
127         POST_PROBEBLOCK_TIZEN_FUNC_START_BEGIN(APINAME,LC_SOCKET, RTYPE, RVAL, INPUTFORMAT, __VA_ARGS__);               \
128         POST_PROBEBLOCK_MIDDLE_TIZEN_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO );                                                            \
129         FLUSH_LOCAL_BUF();                                              \
130         PRE_PROBEBLOCK_END();
131
132 //Tizen END Function
133 #define AFTER_ORIGINAL_TIZEN_SOCK_WAIT_FUNC_END(APINAME,RTYPE, RVAL,OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO, INPUTFORMAT, ...)  \
134         POST_PROBEBLOCK_TIZEN_FUNC_END_BEGIN(APINAME,LC_SOCKET, RTYPE, RVAL, INPUTFORMAT, __VA_ARGS__);         \
135         POST_PROBEBLOCK_MIDDLE_TIZEN_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO );                                                            \
136         POST_PROBEBLOCK_END()
137
138 #define POST_PROBEBLOCK_TIZEN_BEGIN(APINAME, LCTYPE, RTYPE, RETVALUE, INPUTFORMAT, ...) \
139         if(postBlockBegin(blockresult)) {                                                                               \
140                 PREPARE_LOCAL_BUF(); \
141                 PACK_COMMON_BEGIN(MSG_PROBE_NETWORK, vAPI_ID, INPUTFORMAT, __VA_ARGS__);\
142                 PACK_COMMON_END(RTYPE, RETVALUE, errno, blockresult)
143
144 #define APPEND_NETWORK_LOG_BASIC(LCTYPE, APINAME)                                                               \
145         log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d",       \
146                         LCTYPE, probeInfo.eventIndex, APINAME,                          \
147                         probeInfo.currentTime, probeInfo.pID, probeInfo.tID)
148
149 #define POST_PROBEBLOCK_TIZEN_FUNC_START_BEGIN(APINAME, LCTYPE, RTYPE, RETVALUE, INPUTFORMAT, ...)      \
150                         if(postBlockBegin(blockresult)) {                                                                               \
151                                 PREPARE_LOCAL_BUF(); \
152                                 PACK_COMMON_BEGIN(MSG_PROBE_NETWORK, vAPI_ID, INPUTFORMAT, __VA_ARGS__);\
153                                 PACK_COMMON_END(RTYPE, RETVALUE, errno, blockresult)
154
155 #define POST_PROBEBLOCK_TIZEN_FUNC_END_BEGIN(APINAME, LCTYPE, RTYPE, RETVALUE, INPUTFORMAT, ...)        \
156         if(postBlockBegin(blockresult)) {                                                                               \
157                 setProbePoint(&probeInfo);                                                                              \
158                 PREPARE_LOCAL_BUF(); \
159                 PACK_COMMON_BEGIN(MSG_PROBE_NETWORK, vAPI_ID, INPUTFORMAT, __VA_ARGS__);\
160                 PACK_COMMON_END(RTYPE, RETVALUE, errno, blockresult)
161
162 #define BEFORE_ORIGINAL_SOCK(FUNCNAME, LIBNAME)                         \
163         DECLARE_VARIABLE_STANDARD;                                      \
164         info_t info;                                                    \
165         INIT_INFO;                                                      \
166         int32_t __attribute__((unused)) vAPI_ID = API_ID_ ## FUNCNAME;  \
167         GET_REAL_FUNC(FUNCNAME, LIBNAME);                               \
168         PRE_PROBEBLOCK()
169
170 #endif // __DA_SOCKET_H__