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 POST_PROBEBLOCK_MIDDLE_TIZEN_SOCK(OBJECTPTR, FDVALUE, APITYPE, TOTAL_INFO ) \
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); \
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()
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 ); \
130 PRE_PROBEBLOCK_END();
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()
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)
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)
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)
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)
162 #define BEFORE_ORIGINAL_SOCK(FUNCNAME, LIBNAME) \
163 DECLARE_VARIABLE_STANDARD; \
166 int32_t __attribute__((unused)) vAPI_ID = API_ID_ ## FUNCNAME; \
167 GET_REAL_FUNC(FUNCNAME, LIBNAME); \
170 #endif // __DA_SOCKET_H__