[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