Add supports for redirects when doing mod version checks (#4826)
This commit is contained in:
parent
c5d95cb3a9
commit
38c5cb6b94
|
@ -21,8 +21,11 @@ package net.minecraftforge.common;
|
||||||
|
|
||||||
import static net.minecraftforge.common.ForgeVersion.Status.*;
|
import static net.minecraftforge.common.ForgeVersion.Status.*;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.net.URLConnection;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -68,6 +71,8 @@ public class ForgeVersion
|
||||||
|
|
||||||
private static final Logger log = LogManager.getLogger(MOD_ID + ".VersionCheck");
|
private static final Logger log = LogManager.getLogger(MOD_ID + ".VersionCheck");
|
||||||
|
|
||||||
|
private static final int MAX_HTTP_REDIRECTS = Integer.getInteger("http.maxRedirects", 20);
|
||||||
|
|
||||||
public static int getMajorVersion()
|
public static int getMajorVersion()
|
||||||
{
|
{
|
||||||
return majorVersion;
|
return majorVersion;
|
||||||
|
@ -202,6 +207,40 @@ public class ForgeVersion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens stream for given URL while following redirects
|
||||||
|
*/
|
||||||
|
private InputStream openUrlStream(URL url) throws IOException
|
||||||
|
{
|
||||||
|
URL currentUrl = url;
|
||||||
|
for (int redirects = 0; redirects < MAX_HTTP_REDIRECTS; redirects++)
|
||||||
|
{
|
||||||
|
URLConnection c = currentUrl.openConnection();
|
||||||
|
if (c instanceof HttpURLConnection)
|
||||||
|
{
|
||||||
|
HttpURLConnection huc = (HttpURLConnection) c;
|
||||||
|
huc.setInstanceFollowRedirects(false);
|
||||||
|
int responseCode = huc.getResponseCode();
|
||||||
|
if (responseCode >= 300 && responseCode <= 399)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String loc = huc.getHeaderField("Location");
|
||||||
|
currentUrl = new URL(currentUrl, loc);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
huc.disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.getInputStream();
|
||||||
|
}
|
||||||
|
throw new IOException("Too many redirects while trying to fetch " + url);
|
||||||
|
}
|
||||||
|
|
||||||
private void process(ModContainer mod, URL url)
|
private void process(ModContainer mod, URL url)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -210,7 +249,7 @@ public class ForgeVersion
|
||||||
Status status = PENDING;
|
Status status = PENDING;
|
||||||
ComparableVersion target = null;
|
ComparableVersion target = null;
|
||||||
|
|
||||||
InputStream con = url.openStream();
|
InputStream con = openUrlStream(url);
|
||||||
String data = new String(ByteStreams.toByteArray(con), "UTF-8");
|
String data = new String(ByteStreams.toByteArray(con), "UTF-8");
|
||||||
con.close();
|
con.close();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue