The Labs \ Source Viewer \ SSCLI \ System.Net \ CookieModule

  1. //------------------------------------------------------------------------------
  2. // <copyright file="_CookieModule.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. namespace System.Net
  16. {
  17.    
  18.     static internal class CookieModule
  19.     {
  20.        
  21.         // fields
  22.        
  23.         // constructors
  24.        
  25.         // properties
  26.        
  27.         // methods
  28.        
  29.         static internal void OnSendingHeaders(HttpWebRequest httpWebRequest)
  30.         {
  31.             GlobalLog.Print("CookieModule::OnSendingHeaders()");
  32.             try {
  33.                 if (httpWebRequest.CookieContainer == null) {
  34.                     return;
  35.                 }
  36.                 //
  37.                 // remove all current cookies. This could be a redirect
  38.                 //
  39.                 httpWebRequest.Headers.RemoveInternal(HttpKnownHeaderNames.Cookie);
  40.                 //
  41.                 // add in the new headers from the cookie container for this request
  42.                 //
  43.                 string optCookie2;
  44.                 string cookieString = httpWebRequest.CookieContainer.GetCookieHeader(httpWebRequest.Address, out optCookie2);
  45.                
  46.                 if (cookieString.Length > 0) {
  47.                     GlobalLog.Print("CookieModule::OnSendingHeaders() setting Cookie header to:[" + cookieString + "]");
  48.                     httpWebRequest.Headers[HttpKnownHeaderNames.Cookie] = cookieString;
  49.                    
  50.                 }
  51.             }
  52.             catch {
  53.             }
  54.            
  55.         }
  56.        
  57.         static internal void OnReceivedHeaders(HttpWebRequest httpWebRequest)
  58.         {
  59.             GlobalLog.Print("CookieModule.OnReceivedHeaders()");
  60.             //
  61.             // if the app doesn't want us to handle cookies then there's nothing
  62.             // to do. Note that we're leaving open the possibility that these
  63.             // settings could be changed between the request being made and the
  64.             // response received
  65.             //
  66.             try {
  67.                 if (httpWebRequest.CookieContainer == null) {
  68.                     return;
  69.                 }
  70.                
  71.                 //
  72.                 // add any received cookies for this response to the container
  73.                 //
  74.                 HttpWebResponse response = httpWebRequest._HttpResponse as HttpWebResponse;
  75.                 if (response == null) {
  76.                     return;
  77.                 }
  78.                
  79.                 CookieCollection cookies = null;
  80.                 try {
  81.                     string cookieString = response.Headers.SetCookie;
  82.                     GlobalLog.Print("CookieModule::OnSendingHeaders() received Set-Cookie:[" + cookieString + "]");
  83.                     if ((cookieString != null) && (cookieString.Length > 0)) {
  84.                         cookies = httpWebRequest.CookieContainer.CookieCutter(response.ResponseUri, HttpKnownHeaderNames.SetCookie, cookieString, false);
  85.                     }
  86.                 }
  87.                 catch {
  88.                 }
  89.                
  90.                 try {
  91.                     string cookieString = response.Headers.SetCookie2;
  92.                     GlobalLog.Print("CookieModule::OnSendingHeaders() received Set-Cookie2:[" + cookieString + "]");
  93.                     if ((cookieString != null) && (cookieString.Length > 0)) {
  94.                         CookieCollection cookies2 = httpWebRequest.CookieContainer.CookieCutter(response.ResponseUri, HttpKnownHeaderNames.SetCookie2, cookieString, false);
  95.                         if (cookies != null && cookies.Count != 0) {
  96.                             cookies.Add(cookies2);
  97.                         }
  98.                         else {
  99.                             cookies = cookies2;
  100.                         }
  101.                     }
  102.                 }
  103.                 catch {
  104.                 }
  105.                 if (cookies != null) {
  106.                     response.Cookies = cookies;
  107.                 }
  108.             }
  109.             catch {
  110.             }
  111.            
  112.         }
  113.     }
  114. }

Developer Fusion