From 846febbc3d47213fb31e47004dd47b6a133b4f15 Mon Sep 17 00:00:00 2001 From: Bruno Jesus <00cpxxx@gmail.com> Date: Thu, 2 Apr 2015 00:17:39 -0300 Subject: [PATCH] ws2_32: Better trace setsockopt/getsockopt. --- dlls/ws2_32/socket.c | 134 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 130 insertions(+), 4 deletions(-) diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 52fd03bbec1..09c84162c91 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -322,6 +322,130 @@ static inline const char *debugstr_sockaddr( const struct WS_sockaddr *a ) } } +static inline const char *debugstr_sockopt(int level, int optname) +{ + const char *stropt = NULL, *strlevel = NULL; + +#define DEBUG_SOCKLEVEL(x) case (x): strlevel = #x +#define DEBUG_SOCKOPT(x) case (x): stropt = #x; break + + switch(level) + { + DEBUG_SOCKLEVEL(WS_SOL_SOCKET); + switch(optname) + { + DEBUG_SOCKOPT(WS_SO_ACCEPTCONN); + DEBUG_SOCKOPT(WS_SO_BROADCAST); + DEBUG_SOCKOPT(WS_SO_BSP_STATE); + DEBUG_SOCKOPT(WS_SO_CONDITIONAL_ACCEPT); + DEBUG_SOCKOPT(WS_SO_CONNECT_TIME); + DEBUG_SOCKOPT(WS_SO_DEBUG); + DEBUG_SOCKOPT(WS_SO_DONTLINGER); + DEBUG_SOCKOPT(WS_SO_DONTROUTE); + DEBUG_SOCKOPT(WS_SO_ERROR); + DEBUG_SOCKOPT(WS_SO_EXCLUSIVEADDRUSE); + DEBUG_SOCKOPT(WS_SO_GROUP_ID); + DEBUG_SOCKOPT(WS_SO_GROUP_PRIORITY); + DEBUG_SOCKOPT(WS_SO_KEEPALIVE); + DEBUG_SOCKOPT(WS_SO_LINGER); + DEBUG_SOCKOPT(WS_SO_MAX_MSG_SIZE); + DEBUG_SOCKOPT(WS_SO_OOBINLINE); + DEBUG_SOCKOPT(WS_SO_OPENTYPE); + DEBUG_SOCKOPT(WS_SO_PROTOCOL_INFOA); + DEBUG_SOCKOPT(WS_SO_PROTOCOL_INFOW); + DEBUG_SOCKOPT(WS_SO_RCVBUF); + DEBUG_SOCKOPT(WS_SO_RCVTIMEO); + DEBUG_SOCKOPT(WS_SO_REUSEADDR); + DEBUG_SOCKOPT(WS_SO_SNDBUF); + DEBUG_SOCKOPT(WS_SO_SNDTIMEO); + DEBUG_SOCKOPT(WS_SO_TYPE); + } + break; + + DEBUG_SOCKLEVEL(WS_NSPROTO_IPX); + switch(optname) + { + DEBUG_SOCKOPT(WS_IPX_PTYPE); + DEBUG_SOCKOPT(WS_IPX_FILTERPTYPE); + DEBUG_SOCKOPT(WS_IPX_DSTYPE); + DEBUG_SOCKOPT(WS_IPX_RECVHDR); + DEBUG_SOCKOPT(WS_IPX_MAXSIZE); + DEBUG_SOCKOPT(WS_IPX_ADDRESS); + DEBUG_SOCKOPT(WS_IPX_MAX_ADAPTER_NUM); + } + break; + + DEBUG_SOCKLEVEL(WS_SOL_IRLMP); + switch(optname) + { + DEBUG_SOCKOPT(WS_IRLMP_ENUMDEVICES); + } + break; + + DEBUG_SOCKLEVEL(WS_IPPROTO_TCP); + switch(optname) + { + DEBUG_SOCKOPT(WS_TCP_BSDURGENT); + DEBUG_SOCKOPT(WS_TCP_EXPEDITED_1122); + DEBUG_SOCKOPT(WS_TCP_NODELAY); + } + break; + + DEBUG_SOCKLEVEL(WS_IPPROTO_IP); + switch(optname) + { + DEBUG_SOCKOPT(WS_IP_ADD_MEMBERSHIP); + DEBUG_SOCKOPT(WS_IP_DROP_MEMBERSHIP); + DEBUG_SOCKOPT(WS_IP_HDRINCL); + DEBUG_SOCKOPT(WS_IP_MULTICAST_IF); + DEBUG_SOCKOPT(WS_IP_MULTICAST_LOOP); + DEBUG_SOCKOPT(WS_IP_MULTICAST_TTL); + DEBUG_SOCKOPT(WS_IP_OPTIONS); + DEBUG_SOCKOPT(WS_IP_PKTINFO); + DEBUG_SOCKOPT(WS_IP_TOS); + DEBUG_SOCKOPT(WS_IP_TTL); + DEBUG_SOCKOPT(WS_IP_UNICAST_IF); + DEBUG_SOCKOPT(WS_IP_DONTFRAGMENT); + } + break; + + DEBUG_SOCKLEVEL(WS_IPPROTO_IPV6); + switch(optname) + { + DEBUG_SOCKOPT(WS_IPV6_ADD_MEMBERSHIP); + DEBUG_SOCKOPT(WS_IPV6_DROP_MEMBERSHIP); + DEBUG_SOCKOPT(WS_IPV6_MULTICAST_IF); + DEBUG_SOCKOPT(WS_IPV6_MULTICAST_HOPS); + DEBUG_SOCKOPT(WS_IPV6_MULTICAST_LOOP); + DEBUG_SOCKOPT(WS_IPV6_UNICAST_HOPS); + DEBUG_SOCKOPT(WS_IPV6_V6ONLY); + DEBUG_SOCKOPT(WS_IPV6_UNICAST_IF); + DEBUG_SOCKOPT(WS_IPV6_DONTFRAG); + } + break; + } +#undef DEBUG_SOCKLEVEL +#undef DEBUG_SOCKOPT + + if (!strlevel) + strlevel = wine_dbg_sprintf("WS_0x%x", level); + if (!stropt) + stropt = wine_dbg_sprintf("WS_0x%x", optname); + + return wine_dbg_sprintf("level %s, name %s", strlevel + 3, stropt + 3); +} + +static inline const char *debugstr_optval(const char *optval, int optlenval) +{ + if (optval && !IS_INTRESOURCE(optval) && optlenval >= 1 && optlenval <= sizeof(DWORD)) + { + DWORD value = 0; + memcpy(&value, optval, optlenval); + return wine_dbg_sprintf("%p (%u)", optval, value); + } + return wine_dbg_sprintf("%p", optval); +} + /* HANDLE<->SOCKET conversion (SOCKET is UINT_PTR). */ #define SOCKET2HANDLE(s) ((HANDLE)(s)) #define HANDLE2SOCKET(h) ((SOCKET)(h)) @@ -3147,8 +3271,9 @@ INT WINAPI WS_getsockopt(SOCKET s, INT level, int fd; INT ret = 0; - TRACE("socket %04lx, level 0x%x, name 0x%x, ptr %p, len %d\n", - s, level, optname, optval, optlen ? *optlen : 0); + TRACE("(socket %04lx, %s, optval %s, optlen %p (%d))\n", s, + debugstr_sockopt(level, optname), debugstr_optval(optval, 0), + optlen, optlen ? *optlen : 0); switch(level) { @@ -4955,8 +5080,9 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname, struct linger linger; struct timeval tval; - TRACE("socket %04lx, level 0x%x, name 0x%x, ptr %p, len %d\n", - s, level, optname, optval, optlen); + TRACE("(socket %04lx, %s, optval %s, optlen %d)\n", s, + debugstr_sockopt(level, optname), debugstr_optval(optval, optlen), + optlen); /* some broken apps pass the value directly instead of a pointer to it */ if(optlen && IS_INTRESOURCE(optval)) -- 2.11.4.GIT