Skip to content

Commit

Permalink
Backport 26ac8366360685ef0cf3447ee7db16ba7a7fa1ec
Browse files Browse the repository at this point in the history
  • Loading branch information
dhanalla committed Feb 21, 2024
1 parent e9d4acb commit 7e5b89f
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 8 deletions.
16 changes: 15 additions & 1 deletion jdk/src/share/classes/sun/net/www/HeaderParser.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand All @@ -26,6 +26,7 @@
package sun.net.www;

import java.util.Iterator;
import java.util.OptionalInt;

/* This is useful for the nightmare of parsing multi-part HTTP/RFC822 headers
* sensibly:
Expand Down Expand Up @@ -244,6 +245,19 @@ public int findInt(String k, int Default) {
return Default;
}
}

public OptionalInt findInt(String k) {
try {
String s = findValue(k);
if (s == null) {
return OptionalInt.empty();
}
return OptionalInt.of(Integer.parseInt(s));
} catch (Throwable t) {
return OptionalInt.empty();
}
}

/*
public static void main(String[] a) throws Exception {
System.out.print("enter line to parse> ");
Expand Down
20 changes: 19 additions & 1 deletion jdk/src/share/classes/sun/net/www/http/HttpClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import java.io.*;
import java.net.*;
import java.util.Locale;
import java.util.OptionalInt;
import sun.net.NetworkClient;
import sun.net.ProgressSource;
import sun.net.www.MessageHeader;
Expand Down Expand Up @@ -119,6 +120,7 @@ static private int getDefaultPort(String proto) {
* 0: the server specified no keep alive headers
* -1: the server provided "Connection: keep-alive" but did not specify a
* a particular time in a "Keep-Alive:" headers
* -2: the server provided "Connection: keep-alive" and timeout=0
* Positive values are the number of seconds specified by the server
* in a "Keep-Alive" header
*/
Expand Down Expand Up @@ -816,7 +818,23 @@ private boolean parseHTTPHeader(MessageHeader responses, ProgressSource pi, Http
responses.findValue("Keep-Alive"));
/* default should be larger in case of proxy */
keepAliveConnections = p.findInt("max", usingProxy?50:5);
keepAliveTimeout = p.findInt("timeout", -1);
if (keepAliveConnections < 0) {
keepAliveConnections = usingProxy?50:5;
}
OptionalInt timeout = p.findInt("timeout");
if (!timeout.isPresent()) {
keepAliveTimeout = -1;
} else {
keepAliveTimeout = timeout.getAsInt();
if (keepAliveTimeout < 0) {
// if the server specified a negative (invalid) value
// then we set to -1, which is equivalent to no value
keepAliveTimeout = -1;
} else if (keepAliveTimeout == 0) {
// handled specially to mean close connection immediately
keepAliveTimeout = -2;
}
}
}
} else if (b[7] != '0') {
/*
Expand Down
2 changes: 2 additions & 0 deletions jdk/src/share/classes/sun/net/www/http/KeepAliveCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,8 @@ public Void run() {
// different default for server and proxy
keepAliveTimeout = http.getUsingProxy() ? 60 : 5;
}
} else if (keepAliveTimeout == -2) {
keepAliveTimeout = 0;
}
// at this point keepAliveTimeout is the number of seconds to keep
// alive, which could be 0, if the user specified 0 for the property
Expand Down
7 changes: 1 addition & 6 deletions jdk/test/sun/net/www/http/HttpClient/KeepAliveTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
/*
* @test
* @library /test/lib
* @bug 8291226 8291638
* @modules java.base/sun.net:+open
* java.base/sun.net.www.http:+open
* java.base/sun.net.www:+open
Expand Down Expand Up @@ -1015,12 +1016,6 @@ else if (scenarioNumber >= 144 && scenarioNumber <= 159){
}

private void startScenario(int scenarioNumber) throws Exception {
//test scenarios are skipped because of JDK-8291638
if((scenarioNumber >= 112 && scenarioNumber <= 127) || (scenarioNumber >= 144 && scenarioNumber <= 159)) {
System.out.println("Scenario Skipped:"+scenarioNumber);
this.countDownLatch.countDown();
return;
}
System.out.println("serverScenarios[" + scenarioNumber + "]=" + getServerScenario(scenarioNumber));
System.out.println("clientScenarios[" + scenarioNumber + "]=" + clientScenarios[getClientScenarioNumber(scenarioNumber)]);
if(expectedValues[scenarioNumber] == 0) {
Expand Down

0 comments on commit 7e5b89f

Please sign in to comment.