Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
18 changes: 14 additions & 4 deletions 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 @@ -819,11 +821,19 @@ private boolean parseHTTPHeader(MessageHeader responses, ProgressSource pi, Http
if (keepAliveConnections < 0) {
keepAliveConnections = usingProxy?50:5;
}
keepAliveTimeout = p.findInt("timeout", -1);
if (keepAliveTimeout < -1) {
// if the server specified a negative (invalid) value
// then we set to -1, which is equivalent to no value
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 @@ -167,6 +167,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 /lib/testlibrary
* @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