[WININET] Some traceing improvements.
Lionel Ulmer
lionel.ulmer at free.fr
Wed Dec 22 13:41:24 CST 2004
While trying to get an installer to work (one which downloads something from
the internet), I hit a WININET regression (it worked a long time ago).
So I started debugging it and as I love verbose TRACEings, I first started
to improve a bit some messages. A more thorough rework of debug information
is planned but I am already sending this first patch because I wanted to
start fixing some problems I saw while reading the code and did not want
mixing 'functionnal' with 'tracing' patches.
If anyone depends on the old TRACEs for his debugging abilities, yell now
before I start rewriting them.
Lionel
Changelog:
Added / Improved TRACEing
--
Lionel Ulmer - http://www.bbrox.org/
-------------- next part --------------
Index: dlls/wininet/internet.c
===================================================================
RCS file: /home/wine/wine/dlls/wininet/internet.c,v
retrieving revision 1.106
diff -u -r1.106 internet.c
--- dlls/wininet/internet.c 21 Dec 2004 14:42:35 -0000 1.106
+++ dlls/wininet/internet.c 22 Dec 2004 19:31:29 -0000
@@ -450,15 +450,9 @@
FE(INTERNET_OPEN_TYPE_PROXY),
FE(INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY)
};
- static const wininet_flag_info flag[] = {
- FE(INTERNET_FLAG_ASYNC),
- FE(INTERNET_FLAG_FROM_CACHE),
- FE(INTERNET_FLAG_OFFLINE)
- };
#undef FE
DWORD i;
const char *access_type_str = "Unknown";
- DWORD flag_val = dwFlags;
TRACE("(%s, %li, %s, %s, %li)\n", debugstr_w(lpszAgent), dwAccessType,
debugstr_w(lpszProxy), debugstr_w(lpszProxyBypass), dwFlags);
@@ -470,14 +464,7 @@
}
TRACE(" access type : %s\n", access_type_str);
TRACE(" flags :");
- for (i = 0; i < (sizeof(flag) / sizeof(flag[0])); i++) {
- if (flag[i].val & flag_val) {
- DPRINTF(" %s", flag[i].name);
- flag_val &= ~flag[i].val;
- }
- }
- if (flag_val) DPRINTF(" Unknown flags (%08lx)", flag_val);
- DPRINTF("\n");
+ dump_INTERNET_FLAGS(dwFlags);
}
/* Clear any error information */
@@ -2182,7 +2169,7 @@
WCHAR password[1024], path[2048], extra[1024];
HINTERNET client = NULL, client1 = NULL;
- TRACE("(%p, %s, %s, %08lx, %08lx, %08lx\n", hIC, debugstr_w(lpszUrl), debugstr_w(lpszHeaders),
+ TRACE("(%p, %s, %s, %08lx, %08lx, %08lx)\n", hIC, debugstr_w(lpszUrl), debugstr_w(lpszHeaders),
dwHeadersLength, dwFlags, dwContext);
urlComponents.dwStructSize = sizeof(URL_COMPONENTSW);
@@ -2268,9 +2255,13 @@
HINTERNET ret = NULL;
LPWININETAPPINFOW hIC = NULL;
- TRACE("(%p, %s, %s, %08lx, %08lx, %08lx\n", hInternet, debugstr_w(lpszUrl), debugstr_w(lpszHeaders),
- dwHeadersLength, dwFlags, dwContext);
-
+ if (TRACE_ON(wininet)) {
+ TRACE("(%p, %s, %s, %08lx, %08lx, %08lx)\n", hInternet, debugstr_w(lpszUrl), debugstr_w(lpszHeaders),
+ dwHeadersLength, dwFlags, dwContext);
+ TRACE(" flags :");
+ dump_INTERNET_FLAGS(dwFlags);
+ }
+
hIC = (LPWININETAPPINFOW) WININET_GetObject( hInternet );
if (NULL == hIC || hIC->hdr.htype != WH_HINIT) {
INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE);
@@ -3039,4 +3030,59 @@
{
FIXME("\n");
return FALSE;
+}
+
+/***********************************************************************
+ * dump_INTERNET_FLAGS
+ *
+ * Helper function to DPRINTF the internet flags.
+ *
+ * RETURNS
+ * None
+ *
+ */
+void dump_INTERNET_FLAGS(DWORD dwFlags)
+{
+#define FE(x) { x, #x }
+ static const wininet_flag_info flag[] = {
+ FE(INTERNET_FLAG_RELOAD),
+ FE(INTERNET_FLAG_RAW_DATA),
+ FE(INTERNET_FLAG_EXISTING_CONNECT),
+ FE(INTERNET_FLAG_ASYNC),
+ FE(INTERNET_FLAG_PASSIVE),
+ FE(INTERNET_FLAG_NO_CACHE_WRITE),
+ FE(INTERNET_FLAG_MAKE_PERSISTENT),
+ FE(INTERNET_FLAG_FROM_CACHE),
+ FE(INTERNET_FLAG_SECURE),
+ FE(INTERNET_FLAG_KEEP_CONNECTION),
+ FE(INTERNET_FLAG_NO_AUTO_REDIRECT),
+ FE(INTERNET_FLAG_READ_PREFETCH),
+ FE(INTERNET_FLAG_NO_COOKIES),
+ FE(INTERNET_FLAG_NO_AUTH),
+ FE(INTERNET_FLAG_CACHE_IF_NET_FAIL),
+ FE(INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP),
+ FE(INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS),
+ FE(INTERNET_FLAG_IGNORE_CERT_DATE_INVALID),
+ FE(INTERNET_FLAG_IGNORE_CERT_CN_INVALID),
+ FE(INTERNET_FLAG_RESYNCHRONIZE),
+ FE(INTERNET_FLAG_HYPERLINK),
+ FE(INTERNET_FLAG_NO_UI),
+ FE(INTERNET_FLAG_PRAGMA_NOCACHE),
+ FE(INTERNET_FLAG_CACHE_ASYNC),
+ FE(INTERNET_FLAG_FORMS_SUBMIT),
+ FE(INTERNET_FLAG_NEED_FILE),
+ FE(INTERNET_FLAG_TRANSFER_ASCII),
+ FE(INTERNET_FLAG_TRANSFER_BINARY)
+ };
+#undef FE
+ int i;
+
+ for (i = 0; i < (sizeof(flag) / sizeof(flag[0])); i++) {
+ if (flag[i].val & dwFlags) {
+ DPRINTF(" %s", flag[i].name);
+ dwFlags &= ~flag[i].val;
+ }
+ }
+ if (dwFlags) DPRINTF(" Unknown flags (%08lx)", dwFlags);
+ DPRINTF("\n");
}
Index: dlls/wininet/internet.h
===================================================================
RCS file: /home/wine/wine/dlls/wininet/internet.h,v
retrieving revision 1.34
diff -u -r1.34 internet.h
--- dlls/wininet/internet.h 20 Dec 2004 18:50:33 -0000 1.34
+++ dlls/wininet/internet.h 22 Dec 2004 19:31:29 -0000
@@ -478,4 +478,6 @@
const char* name;
} wininet_flag_info;
+extern void dump_INTERNET_FLAGS(DWORD dwFlags) ;
+
#endif /* _WINE_INTERNET_H_ */
Index: dlls/wininet/utility.c
===================================================================
RCS file: /home/wine/wine/dlls/wininet/utility.c,v
retrieving revision 1.23
diff -u -r1.23 utility.c
--- dlls/wininet/utility.c 13 Dec 2004 12:01:58 -0000 1.23
+++ dlls/wininet/utility.c 22 Dec 2004 19:31:30 -0000
@@ -200,12 +200,7 @@
FE(INTERNET_STATUS_PRIVACY_IMPACTED),
FE(INTERNET_STATUS_P3P_HEADER),
FE(INTERNET_STATUS_P3P_POLICYREF),
- FE(INTERNET_STATUS_COOKIE_HISTORY),
- FE(INTERNET_STATE_CONNECTED),
- FE(INTERNET_STATE_DISCONNECTED),
- FE(INTERNET_STATE_DISCONNECTED_BY_USER),
- FE(INTERNET_STATE_IDLE),
- FE(INTERNET_STATE_BUSY)
+ FE(INTERNET_STATUS_COOKIE_HISTORY)
#undef FE
};
DWORD i;
@@ -231,11 +226,11 @@
if( !dwContext )
return;
- TRACE("--> Callback %ld (%s)\n",dwInternetStatus, get_callback_name(dwInternetStatus));
-
hHttpSession = WININET_FindHandle( hdr );
- if( !hHttpSession )
+ if( !hHttpSession ) {
+ TRACE(" Could not convert header '%p' into a handle !\n", hdr);
return;
+ }
lpvNewInfo = lpvStatusInfo;
if(!(hdr->dwInternalFlags & INET_CALLBACKW)) {
@@ -246,13 +241,19 @@
lpvNewInfo = WININET_strdup_WtoA(lpvStatusInfo);
}
}
+
+ TRACE(" callback(%p) (%08lx (%p), %08lx, %ld (%s), %p, %ld)\n",
+ hdr->lpfnStatusCB, (DWORD) hHttpSession, hdr, dwContext, dwInternetStatus, get_callback_name(dwInternetStatus),
+ lpvNewInfo, dwStatusInfoLength);
+
hdr->lpfnStatusCB(hHttpSession, dwContext, dwInternetStatus,
lpvNewInfo, dwStatusInfoLength);
+
+ TRACE(" end callback().\n");
+
if(lpvNewInfo != lpvStatusInfo)
HeapFree(GetProcessHeap(), 0, lpvNewInfo);
- TRACE("<-- Callback %ld (%s)\n",dwInternetStatus, get_callback_name(dwInternetStatus));
-
WININET_Release( hdr );
}
@@ -262,26 +263,31 @@
DWORD dwInternetStatus, LPVOID lpvStatusInfo,
DWORD dwStatusInfoLength)
{
- TRACE("Send Callback %ld (%s)\n",dwInternetStatus, get_callback_name(dwInternetStatus));
-
- if (!(hdr->lpfnStatusCB))
- return;
- if (hdr->dwFlags & INTERNET_FLAG_ASYNC)
- {
- WORKREQUEST workRequest;
- struct WORKREQ_SENDCALLBACK *req;
-
- workRequest.asyncall = SENDCALLBACK;
- workRequest.hdr = WININET_AddRef( hdr );
- req = &workRequest.u.SendCallback;
- req->dwContext = dwContext;
- req->dwInternetStatus = dwInternetStatus;
- req->lpvStatusInfo = lpvStatusInfo;
- req->dwStatusInfoLength = dwStatusInfoLength;
-
- INTERNET_AsyncCall(&workRequest);
- }
- else
- SendSyncCallback(hdr, dwContext, dwInternetStatus,
- lpvStatusInfo, dwStatusInfoLength);
+ TRACE("(%p, %08lx, %ld (%s), %p, %ld): %sasync call with callback %p\n",
+ hdr, dwContext, dwInternetStatus, get_callback_name(dwInternetStatus),
+ lpvStatusInfo, dwStatusInfoLength,
+ hdr->dwFlags & INTERNET_FLAG_ASYNC ? "" : "non ",
+ hdr->lpfnStatusCB);
+
+ if (!(hdr->lpfnStatusCB))
+ return;
+
+ if (hdr->dwFlags & INTERNET_FLAG_ASYNC)
+ {
+ WORKREQUEST workRequest;
+ struct WORKREQ_SENDCALLBACK *req;
+
+ workRequest.asyncall = SENDCALLBACK;
+ workRequest.hdr = WININET_AddRef( hdr );
+ req = &workRequest.u.SendCallback;
+ req->dwContext = dwContext;
+ req->dwInternetStatus = dwInternetStatus;
+ req->lpvStatusInfo = lpvStatusInfo;
+ req->dwStatusInfoLength = dwStatusInfoLength;
+
+ INTERNET_AsyncCall(&workRequest);
+ }
+ else
+ SendSyncCallback(hdr, dwContext, dwInternetStatus,
+ lpvStatusInfo, dwStatusInfoLength);
}
More information about the wine-patches
mailing list