src/java.net.http/share/classes/jdk/internal/net/http/RedirectFilter.java
branchhttp-client-branch
changeset 56186 261b5b524dd3
parent 56092 fd85b2bf2b0d
child 56281 7fdd89dabab2
equal deleted inserted replaced
56185:f195e5048667 56186:261b5b524dd3
    28 import java.io.IOException;
    28 import java.io.IOException;
    29 import java.io.UncheckedIOException;
    29 import java.io.UncheckedIOException;
    30 import java.net.URI;
    30 import java.net.URI;
    31 import java.net.http.HttpClient;
    31 import java.net.http.HttpClient;
    32 import java.net.http.HttpHeaders;
    32 import java.net.http.HttpHeaders;
       
    33 import jdk.internal.net.http.common.Log;
    33 import jdk.internal.net.http.common.Utils;
    34 import jdk.internal.net.http.common.Utils;
    34 
    35 
    35 class RedirectFilter implements HeaderFilter {
    36 class RedirectFilter implements HeaderFilter {
    36 
    37 
    37     HttpRequestImpl request;
    38     HttpRequestImpl request;
    64     public synchronized HttpRequestImpl response(Response r) throws IOException {
    65     public synchronized HttpRequestImpl response(Response r) throws IOException {
    65         return handleResponse(r);
    66         return handleResponse(r);
    66     }
    67     }
    67 
    68 
    68     /**
    69     /**
    69      * checks to see if new request needed and returns it.
    70      * Checks to see if a new request is needed and returns it.
    70      * Null means response is ok to return to user.
    71      * Null means response is ok to return to user.
    71      */
    72      */
    72     private HttpRequestImpl handleResponse(Response r) {
    73     private HttpRequestImpl handleResponse(Response r) {
    73         int rcode = r.statusCode();
    74         int rcode = r.statusCode();
    74         if (rcode == 200 || policy == HttpClient.Redirect.NEVER) {
    75         if (rcode == 200 || policy == HttpClient.Redirect.NEVER) {
    75             return null;
    76             return null;
    76         }
    77         }
    77         if (rcode >= 300 && rcode <= 399) {
    78         if (rcode >= 300 && rcode <= 399) {
    78             URI redir = getRedirectedURI(r.headers());
    79             URI redir = getRedirectedURI(r.headers());
       
    80             Log.logTrace("response code: {0}, redirected URI: {1}", rcode, redir);
    79             if (canRedirect(redir) && ++exchange.numberOfRedirects < max_redirects) {
    81             if (canRedirect(redir) && ++exchange.numberOfRedirects < max_redirects) {
    80                 //System.out.println("Redirecting to: " + redir);
    82                 Log.logTrace("redirecting to: {0}", redir);
    81                 return new HttpRequestImpl(redir, method, request);
    83                 return HttpRequestImpl.newInstanceForRedirection(redir, method, request);
    82             } else {
    84             } else {
    83                 //System.out.println("Redirect: giving up");
    85                 Log.logTrace("not redirecting");
    84                 return null;
    86                 return null;
    85             }
    87             }
    86         }
    88         }
    87         return null;
    89         return null;
    88     }
    90     }
   107             case ALWAYS:
   109             case ALWAYS:
   108                 return true;
   110                 return true;
   109             case NEVER:
   111             case NEVER:
   110                 return false;
   112                 return false;
   111             case SECURE:
   113             case SECURE:
   112                 return newScheme.equalsIgnoreCase("https");
   114                 return newScheme.equalsIgnoreCase(oldScheme)
       
   115                         || newScheme.equalsIgnoreCase("https");
   113             case SAME_PROTOCOL:
   116             case SAME_PROTOCOL:
   114                 return newScheme.equalsIgnoreCase(oldScheme);
   117                 return newScheme.equalsIgnoreCase(oldScheme);
   115             default:
   118             default:
   116                 throw new InternalError();
   119                 throw new InternalError();
   117         }
   120         }