4 * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
8 * Hyunjong Park <phjwithyou.park@samsung.com>
9 * Juyoung Kim <j0.kim@samsung.com>
10 * Anastasia Lyupa <a.lyupa@samsung.com
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)
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.
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
28 * - Samsung RnD Institute Russia
32 #ifndef __DA_SOCKET_H__
33 #define __DA_SOCKET_H__
38 #define SOCKET_SEND_SIZE 1024
39 #define NO_TOTAL_INFO (NULL)
40 #define POST_PROBEBLOCK_MIDDLE_LIBC_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO) \
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) { \
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 ) ); \
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 ); \
57 BUF_PTR = pack_int32(BUF_PTR, (uint32_t) 0); \
58 BUF_PTR = pack_int32(BUF_PTR, (uint32_t) 0); \
62 BUF_PTR = pack_int32(BUF_PTR, (uint32_t) 0); \
63 BUF_PTR = pack_int32(BUF_PTR, (uint32_t) 0); \
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); \
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();
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 ); \
83 #define POST_PROBEBLOCK_FUNC_START_BEGIN(LCTYPE, RTYPE, RETVALUE, INPUTFORMAT, ...) \
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)
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 ); \
97 #define POST_PROBEBLOCK_FUNC_END_BEGIN(LCTYPE, RTYPE, RETVALUE, INPUTFORMAT, ...) \
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)
105 #define BEFORE_ORIGINAL_TIZEN_NET(FUNCNAME, FUNCTIONPOINTER) \
106 DECLARE_VARIABLE_STANDARD_OSP_NET(FUNCNAME); \
107 GET_REAL_FUNC_TIZEN(FUNCNAME, LIBOSP_NET,FUNCTIONPOINTER); \
110 #define DECLARE_VARIABLE_STANDARD_OSP_NET(FUNCNAME) \
111 probeInfo_t probeInfo; \
114 bool bfiltering = true; \
115 int olderrno = 0, newerrno = 0; \
116 int32_t __attribute__((unused)) vAPI_ID = API_ID_ ## FUNCNAME /* FUNCID FIXME bad way*/; \
119 #define POST_PROBEBLOCK_MIDDLE_TIZEN_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO ) \
121 BUF_PTR = pack_int64(BUF_PTR, (uintptr_t)OBJECTPTR); \
122 BUF_PTR = pack_int64(BUF_PTR, FDVALUE); \
123 BUF_PTR = pack_int32(BUF_PTR, APITYPE); \
124 BUF_PTR = pack_int32(BUF_PTR, TOTAL_INFO.host_ip); \
125 BUF_PTR = pack_int32(BUF_PTR, TOTAL_INFO.host_port); \
126 BUF_PTR = pack_int64(BUF_PTR, TOTAL_INFO.msg_total_size); \
127 BUF_PTR = pack_bin(BUF_PTR, TOTAL_INFO.msg_buf, \
128 TOTAL_INFO.msg_pack_size); \
133 #define CALL_ORIGINAL_TIZEN_NET(FUNCNAME, FUNCTIONPOINTER) \
134 GET_REAL_FUNC_TIZEN(FUNCNAME, LIBOSP_NET,FUNCTIONPOINTER)
137 //Tizen Common Function
138 #define AFTER_ORIGINAL_TIZEN_SOCK(APINAME, RTYPE, RVAL, OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO, INPUTFORMAT, ...) \
139 POST_PROBEBLOCK_TIZEN_BEGIN(APINAME, LC_SOCKET, RTYPE, RVAL, INPUTFORMAT, __VA_ARGS__); \
140 POST_PROBEBLOCK_MIDDLE_TIZEN_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO ); \
141 POST_PROBEBLOCK_END()
143 // Tizen Start Function
144 #define AFTER_ORIGINAL_TIZEN_SOCK_WAIT_FUNC_START(APINAME, RTYPE, RVAL,OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO, INPUTFORMAT, ...) \
145 POST_PROBEBLOCK_TIZEN_FUNC_START_BEGIN(APINAME,LC_SOCKET, RTYPE, RVAL, INPUTFORMAT, __VA_ARGS__); \
146 POST_PROBEBLOCK_MIDDLE_TIZEN_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO ); \
148 PRE_PROBEBLOCK_END();
151 #define AFTER_ORIGINAL_TIZEN_SOCK_WAIT_FUNC_END(APINAME,RTYPE, RVAL,OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO, INPUTFORMAT, ...) \
152 POST_PROBEBLOCK_TIZEN_FUNC_END_BEGIN(APINAME,LC_SOCKET, RTYPE, RVAL, INPUTFORMAT, __VA_ARGS__); \
153 POST_PROBEBLOCK_MIDDLE_TIZEN_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO ); \
154 POST_PROBEBLOCK_END()
156 #define POST_PROBEBLOCK_TIZEN_BEGIN(APINAME, LCTYPE, RTYPE, RETVALUE, INPUTFORMAT, ...) \
157 if(postBlockBegin(blockresult)) { \
158 PREPARE_LOCAL_BUF(); \
159 PACK_COMMON_BEGIN(MSG_PROBE_NETWORK, vAPI_ID, INPUTFORMAT, __VA_ARGS__);\
160 PACK_COMMON_END(RTYPE, RETVALUE, errno, blockresult)
162 #define APPEND_NETWORK_LOG_BASIC(LCTYPE, APINAME) \
163 log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", \
164 LCTYPE, probeInfo.eventIndex, APINAME, \
165 probeInfo.currentTime, probeInfo.pID, probeInfo.tID)
167 #define POST_PROBEBLOCK_TIZEN_FUNC_START_BEGIN(APINAME, LCTYPE, RTYPE, RETVALUE, INPUTFORMAT, ...) \
168 if(postBlockBegin(blockresult)) { \
169 PREPARE_LOCAL_BUF(); \
170 PACK_COMMON_BEGIN(MSG_PROBE_NETWORK, vAPI_ID, INPUTFORMAT, __VA_ARGS__);\
171 PACK_COMMON_END(RTYPE, RETVALUE, errno, blockresult)
173 #define POST_PROBEBLOCK_TIZEN_FUNC_END_BEGIN(APINAME, LCTYPE, RTYPE, RETVALUE, INPUTFORMAT, ...) \
174 if(postBlockBegin(blockresult)) { \
175 setProbePoint(&probeInfo); \
176 PREPARE_LOCAL_BUF(); \
177 PACK_COMMON_BEGIN(MSG_PROBE_NETWORK, vAPI_ID, INPUTFORMAT, __VA_ARGS__);\
178 PACK_COMMON_END(RTYPE, RETVALUE, errno, blockresult)
180 #define BEFORE_ORIGINAL_SOCK(FUNCNAME, LIBNAME) \
181 DECLARE_VARIABLE_STANDARD; \
184 int32_t __attribute__((unused)) vAPI_ID = API_ID_ ## FUNCNAME; \
185 GET_REAL_FUNC(FUNCNAME, LIBNAME); \
188 #endif // __DA_SOCKET_H__