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 } |