Juan Lang : cryptnet: Get cache entry expire time from HTTP expires header.

Alexandre Julliard julliard at winehq.org
Wed Oct 24 11:04:40 CDT 2007


Module: wine
Branch: master
Commit: 45f260e3e2cd29b4ec603d0b36a566c470f14061
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=45f260e3e2cd29b4ec603d0b36a566c470f14061

Author: Juan Lang <juan.lang at gmail.com>
Date:   Tue Oct 23 12:51:21 2007 -0700

cryptnet: Get cache entry expire time from HTTP expires header.

---

 dlls/cryptnet/cryptnet_main.c |   21 +++++++++++++++++----
 1 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/dlls/cryptnet/cryptnet_main.c b/dlls/cryptnet/cryptnet_main.c
index 21489ff..5d1f6f7 100644
--- a/dlls/cryptnet/cryptnet_main.c
+++ b/dlls/cryptnet/cryptnet_main.c
@@ -396,7 +396,6 @@ static BOOL CRYPT_GetObjectFromFile(HANDLE hFile, PCRYPT_BLOB_ARRAY pObject)
 }
 
 /* FIXME: should make wininet cache all downloads instead */
-/* FIXME: how do I know the cached object is up to date? */
 static BOOL CRYPT_GetObjectFromCache(LPCWSTR pszURL, PCRYPT_BLOB_ARRAY pObject,
  PCRYPT_RETRIEVE_AUX_INFO pAuxInfo)
 {
@@ -610,7 +609,7 @@ static BOOL CRYPT_DownloadObject(DWORD dwRetrievalFlags, HINTERNET hHttp,
 }
 
 static void CRYPT_CacheURL(LPCWSTR pszURL, PCRYPT_BLOB_ARRAY pObject,
- DWORD dwRetrievalFlags)
+ DWORD dwRetrievalFlags, FILETIME expires)
 {
     WCHAR cacheFileName[MAX_PATH];
 
@@ -633,7 +632,7 @@ static void CRYPT_CacheURL(LPCWSTR pszURL, PCRYPT_BLOB_ARRAY pObject,
             WriteFile(hCacheFile, pObject->rgBlob[0].pbData,
              pObject->rgBlob[0].cbData, &bytesWritten, NULL);
             CloseHandle(hCacheFile);
-            CommitUrlCacheEntryW(pszURL, cacheFileName, ft, ft, entryType,
+            CommitUrlCacheEntryW(pszURL, cacheFileName, expires, ft, entryType,
              NULL, 0, NULL, NULL);
         }
     }
@@ -820,7 +819,21 @@ static BOOL WINAPI HTTP_RetrieveEncodedObjectW(LPCWSTR pszURL,
                         ret = CRYPT_DownloadObject(dwRetrievalFlags, hHttp,
                          context, pObject, pAuxInfo);
                     if (ret && !(dwRetrievalFlags & CRYPT_DONT_CACHE_RESULT))
-                        CRYPT_CacheURL(pszURL, pObject, dwRetrievalFlags);
+                    {
+                        SYSTEMTIME st;
+                        DWORD len = sizeof(st);
+
+                        if (HttpQueryInfoW(hHttp,
+                         HTTP_QUERY_EXPIRES | HTTP_QUERY_FLAG_SYSTEMTIME, &st,
+                         &len, NULL))
+                        {
+                            FILETIME ft;
+
+                            SystemTimeToFileTime(&st, &ft);
+                            CRYPT_CacheURL(pszURL, pObject, dwRetrievalFlags,
+                             ft);
+                        }
+                    }
                     InternetCloseHandle(hHttp);
                 }
                 InternetCloseHandle(hHost);




More information about the wine-cvs mailing list