dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dotgnu-pnet-commits] pnetlib/System/Net HttpWebRequest.cs, 1.19, 1.20 H


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] pnetlib/System/Net HttpWebRequest.cs, 1.19, 1.20 HttpWebResponse.cs, 1.6, 1.7
Date: Thu, 20 Nov 2003 00:11:11 +0000

Update of /cvsroot/dotgnu-pnet/pnetlib/System/Net
In directory subversions:/tmp/cvs-serv16314/System/Net

Modified Files:
        HttpWebRequest.cs HttpWebResponse.cs 
Log Message:


Add support for HTTP redirects.


Index: HttpWebResponse.cs
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/System/Net/HttpWebResponse.cs,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** HttpWebResponse.cs  18 Jul 2003 20:12:32 -0000      1.6
--- HttpWebResponse.cs  20 Nov 2003 00:11:08 -0000      1.7
***************
*** 221,230 ****
        }
  
-       /* TODO : clarify how redirects work */
        public override Uri ResponseUri 
        { 
                get
                {
!                       return req.Address;
                }
        }
--- 221,239 ----
        }
  
        public override Uri ResponseUri 
        { 
                get
                {
!                       if(code==HttpStatusCode.Redirect || 
!                          code==HttpStatusCode.MovedPermanently ||
!                          code==HttpStatusCode.Moved ||
!                          code==HttpStatusCode.MultipleChoices ||
!                          code==HttpStatusCode.Found ||
!                          code==HttpStatusCode.SeeOther ||
!                          code==HttpStatusCode.TemporaryRedirect)
!                       {
!                               return new Uri(this.Headers["Location"]);
!                       }
!                       return null;
                }
        }

Index: HttpWebRequest.cs
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/System/Net/HttpWebRequest.cs,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -d -r1.19 -r1.20
*** HttpWebRequest.cs   14 Nov 2003 05:04:31 -0000      1.19
--- HttpWebRequest.cs   20 Nov 2003 00:11:08 -0000      1.20
***************
*** 75,85 ****
        internal HttpWebRequest(Uri uri)
        {
-               this.address=uri;
                this.originalUri=uri;
-               this.isSecured=String.Equals(uri.Scheme,Uri.UriSchemeHttps);
                this.method="GET";
                this.headers.SetInternal ("Host", uri.Authority);
                this.headers.SetInternal ("Date", 
DateTime.Now.ToUniversalTime().ToString(format));
-               this.headers.SetInternal ("User-Agent","DotGNU Portable.net");
        }
  
--- 75,91 ----
        internal HttpWebRequest(Uri uri)
        {
                this.originalUri=uri;
                this.method="GET";
+               this.headers.SetInternal ("User-Agent","DotGNU Portable.net");
+               SetAddress(uri);
+       }
+ 
+       internal void SetAddress(Uri uri)
+       {
+               CheckHeadersSent(); /* I know this never gets called , but 
better safe than sorry */
+               this.address=uri;
+               this.isSecured=String.Equals(uri.Scheme,Uri.UriSchemeHttps);
                this.headers.SetInternal ("Host", uri.Authority);
                this.headers.SetInternal ("Date", 
DateTime.Now.ToUniversalTime().ToString(format));
        }
  
***************
*** 988,991 ****
--- 994,998 ----
                private HttpAuthState proxy;
                private HttpAuthState http;
+               private int redirections;
  
                public HttpController(HttpWebRequest request)
***************
*** 1000,1003 ****
--- 1007,1011 ----
                        }
                        this.proxy=HttpAuthState.NoAuth;
+                       redirections=0;
                }
                /* returns this WebRequest or a new one.
***************
*** 1067,1072 ****
  
                                case HttpStatusCode.Redirect:
                                {
!                                               /* TODO */
                                }
                                break;
--- 1075,1096 ----
  
                                case HttpStatusCode.Redirect:
+                               case HttpStatusCode.Moved :
+                               case HttpStatusCode.MultipleChoices :
+                               case HttpStatusCode.SeeOther :
+                               case HttpStatusCode.TemporaryRedirect:
+                               /* case HttpStatusCode.Found : // Duplicate */
+                               /* case HttpStatusCode.MovedPermanently : // 
Duplicate */
                                {
!                                               Uri newUri=response.ResponseUri;
!                                               if(request.allowAutoRedirect && 
newUri!=null &&
!                                                       
redirections<request.MaximumAutomaticRedirections &&
!                                                       (request.Method=="GET" 
|| request.Method=="HEAD"))
!                                               {
!                                                       /* ok redirect it */
!                                                       request.ResetRequest();
!                                                       
request.SetAddress(newUri);
!                                                       redirections++;
!                                               }
!                                               return request;
                                }
                                break;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]