mirror of
https://github.com/tonikelope/megabasterd.git
synced 2025-05-29 21:10:18 +02:00
5.5
This commit is contained in:
parent
a87d43fd85
commit
c5abbe4467
2
pom.xml
2
pom.xml
@ -3,7 +3,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.tonikelope</groupId>
|
<groupId>com.tonikelope</groupId>
|
||||||
<artifactId>MegaBasterd</artifactId>
|
<artifactId>MegaBasterd</artifactId>
|
||||||
<version>5.4</version>
|
<version>5.5</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -103,17 +103,11 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
|
|||||||
|
|
||||||
String worker_url = null, current_proxy = null;
|
String worker_url = null, current_proxy = null;
|
||||||
|
|
||||||
boolean error = false, error509 = false;
|
boolean error = false, error509 = false, error403 = false;
|
||||||
|
|
||||||
while (!_exit && !_download.isStopped() && (error509 || conta_error < MAX_SLOT_ERROR || MainPanel.isUse_smart_proxy())) {
|
while (!_exit && !_download.isStopped() && (error509 || conta_error < MAX_SLOT_ERROR || MainPanel.isUse_smart_proxy())) {
|
||||||
|
|
||||||
if (MainPanel.isUse_smart_proxy() && _proxy_manager == null) {
|
if (worker_url == null || error403) {
|
||||||
|
|
||||||
_proxy_manager = new SmartMegaProxyManager(MainPanel.getUse_smart_proxy_url());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (worker_url == null || error) {
|
|
||||||
|
|
||||||
worker_url = _download.getDownloadUrlForWorker();
|
worker_url = _download.getDownloadUrlForWorker();
|
||||||
}
|
}
|
||||||
@ -124,9 +118,17 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
|
|||||||
|
|
||||||
if (error509 && MainPanel.isUse_smart_proxy() && !MainPanel.isUse_proxy()) {
|
if (error509 && MainPanel.isUse_smart_proxy() && !MainPanel.isUse_proxy()) {
|
||||||
|
|
||||||
if (error && current_proxy != null) {
|
if (MainPanel.isUse_smart_proxy() && _proxy_manager == null) {
|
||||||
|
|
||||||
|
_proxy_manager = new SmartMegaProxyManager(null);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error && !error403 && current_proxy != null) {
|
||||||
|
|
||||||
_proxy_manager.blockProxy(current_proxy);
|
_proxy_manager.blockProxy(current_proxy);
|
||||||
|
Logger.getLogger(MiscTools.class.getName()).log(Level.WARNING, "{0}: excluding proxy -> {1}", new Object[]{Thread.currentThread().getName(), current_proxy});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
current_proxy = _proxy_manager.getFastestProxy();
|
current_proxy = _proxy_manager.getFastestProxy();
|
||||||
@ -185,6 +187,8 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
|
|||||||
|
|
||||||
error = false;
|
error = false;
|
||||||
|
|
||||||
|
error403 = false;
|
||||||
|
|
||||||
error509 = false;
|
error509 = false;
|
||||||
|
|
||||||
if (getDownload().isError509()) {
|
if (getDownload().isError509()) {
|
||||||
@ -195,25 +199,29 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
|
|||||||
|
|
||||||
if (!_exit && !_download.isStopped()) {
|
if (!_exit && !_download.isStopped()) {
|
||||||
|
|
||||||
try (InputStream is = new ThrottledInputStream(con.getInputStream(), _download.getMain_panel().getStream_supervisor())) {
|
int http_status = con.getResponseCode();
|
||||||
|
|
||||||
int http_status = con.getResponseCode();
|
if (http_status != 200) {
|
||||||
|
|
||||||
if (http_status != 200) {
|
Logger.getLogger(getClass().getName()).log(Level.INFO, "{0} Failed : HTTP error code : {1}", new Object[]{Thread.currentThread().getName(), http_status});
|
||||||
Logger.getLogger(getClass().getName()).log(Level.INFO, "{0} Failed : HTTP error code : {1}", new Object[]{Thread.currentThread().getName(), http_status});
|
|
||||||
|
|
||||||
error = true;
|
error = true;
|
||||||
|
|
||||||
if (http_status == 509) {
|
if (http_status == 509) {
|
||||||
|
|
||||||
error509 = true;
|
error509 = true;
|
||||||
|
|
||||||
if (MainPanel.isUse_smart_proxy()) {
|
if (MainPanel.isUse_smart_proxy()) {
|
||||||
getDownload().getView().set509Error(true);
|
getDownload().getView().set509Error(true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} else if (http_status == 403) {
|
||||||
|
|
||||||
} else {
|
error403 = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
try (InputStream is = new ThrottledInputStream(con.getInputStream(), _download.getMain_panel().getStream_supervisor())) {
|
||||||
|
|
||||||
byte[] buffer = new byte[DEFAULT_BYTE_BUFFER_SIZE];
|
byte[] buffer = new byte[DEFAULT_BYTE_BUFFER_SIZE];
|
||||||
|
|
||||||
@ -242,20 +250,19 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
|
|||||||
secureWait();
|
secureWait();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chunk.getOutputStream().size() < chunk.getSize()) {
|
||||||
|
|
||||||
|
if (chunk.getOutputStream().size() > 0) {
|
||||||
|
_download.getPartialProgressQueue().add(-1 * chunk.getOutputStream().size());
|
||||||
|
|
||||||
|
_download.getProgress_meter().secureNotify();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chunk.getOutputStream().size() < chunk.getSize()) {
|
error = true;
|
||||||
|
|
||||||
if (chunk.getOutputStream().size() > 0) {
|
|
||||||
_download.getPartialProgressQueue().add(-1 * chunk.getOutputStream().size());
|
|
||||||
|
|
||||||
_download.getProgress_meter().secureNotify();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
error = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error && !_download.isStopped()) {
|
if (error && !_download.isStopped()) {
|
||||||
|
@ -32,7 +32,7 @@ public class ChunkDownloaderMono extends ChunkDownloader {
|
|||||||
|
|
||||||
String worker_url = null;
|
String worker_url = null;
|
||||||
int conta_error = 0, http_status = 200;
|
int conta_error = 0, http_status = 200;
|
||||||
boolean error = false, error509 = false;
|
boolean error = false, error509 = false, error403 = false;
|
||||||
|
|
||||||
getDownload().getView().set509Error(false);
|
getDownload().getView().set509Error(false);
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ public class ChunkDownloaderMono extends ChunkDownloader {
|
|||||||
|
|
||||||
while (!isExit() && !getDownload().isStopped() && (error509 || conta_error < MAX_SLOT_ERROR)) {
|
while (!isExit() && !getDownload().isStopped() && (error509 || conta_error < MAX_SLOT_ERROR)) {
|
||||||
|
|
||||||
if (worker_url == null || error) {
|
if (worker_url == null || error403) {
|
||||||
|
|
||||||
worker_url = getDownload().getDownloadUrlForWorker();
|
worker_url = getDownload().getDownloadUrlForWorker();
|
||||||
}
|
}
|
||||||
@ -79,13 +79,14 @@ public class ChunkDownloaderMono extends ChunkDownloader {
|
|||||||
|
|
||||||
error = false;
|
error = false;
|
||||||
|
|
||||||
if (error509) {
|
error403 = false;
|
||||||
|
|
||||||
getDownload().getView().set509Error(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
error509 = false;
|
error509 = false;
|
||||||
|
|
||||||
|
if (getDownload().isError509()) {
|
||||||
|
getDownload().getView().set509Error(false);
|
||||||
|
}
|
||||||
|
|
||||||
if (http_status != 200) {
|
if (http_status != 200) {
|
||||||
|
|
||||||
Logger.getLogger(getClass().getName()).log(Level.INFO, "{0} Failed : HTTP error code : {1}", new Object[]{Thread.currentThread().getName(), http_status});
|
Logger.getLogger(getClass().getName()).log(Level.INFO, "{0} Failed : HTTP error code : {1}", new Object[]{Thread.currentThread().getName(), http_status});
|
||||||
@ -97,6 +98,8 @@ public class ChunkDownloaderMono extends ChunkDownloader {
|
|||||||
error509 = true;
|
error509 = true;
|
||||||
|
|
||||||
getDownload().getView().set509Error(true);
|
getDownload().getView().set509Error(true);
|
||||||
|
} else if (http_status == 403) {
|
||||||
|
error403 = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
getDownload().rejectChunkId(chunk.getId());
|
getDownload().rejectChunkId(chunk.getId());
|
||||||
|
@ -47,7 +47,7 @@ import java.io.File;
|
|||||||
*/
|
*/
|
||||||
public final class MainPanel {
|
public final class MainPanel {
|
||||||
|
|
||||||
public static final String VERSION = "5.4";
|
public static final String VERSION = "5.5";
|
||||||
public static final int THROTTLE_SLICE_SIZE = 16 * 1024;
|
public static final int THROTTLE_SLICE_SIZE = 16 * 1024;
|
||||||
public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024;
|
public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024;
|
||||||
public static final int STREAMER_PORT = 1337;
|
public static final int STREAMER_PORT = 1337;
|
||||||
|
@ -735,10 +735,14 @@ public final class MiscTools {
|
|||||||
|
|
||||||
public static boolean checkMegaDownloadUrl(String string_url) {
|
public static boolean checkMegaDownloadUrl(String string_url) {
|
||||||
|
|
||||||
boolean url_ok = false, error509 = false;
|
boolean url_ok = false;
|
||||||
|
|
||||||
HttpURLConnection con = null;
|
HttpURLConnection con = null;
|
||||||
|
|
||||||
|
boolean error = false, error509 = false, error403 = false;
|
||||||
|
|
||||||
|
SmartMegaProxyManager proxy_manager = null;
|
||||||
|
|
||||||
String current_proxy = null;
|
String current_proxy = null;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
@ -747,18 +751,24 @@ public final class MiscTools {
|
|||||||
|
|
||||||
URL url = new URL(string_url + "/0-0");
|
URL url = new URL(string_url + "/0-0");
|
||||||
|
|
||||||
if (con == null || !url_ok) {
|
if (con == null || error) {
|
||||||
|
|
||||||
if (error509 && MainPanel.isUse_smart_proxy() && !MainPanel.isUse_proxy()) {
|
if (error509 && MainPanel.isUse_smart_proxy() && !MainPanel.isUse_proxy()) {
|
||||||
|
|
||||||
if (current_proxy != null) {
|
if (MainPanel.isUse_smart_proxy() && proxy_manager == null) {
|
||||||
|
|
||||||
Logger.getLogger(MiscTools.class.getName()).log(Level.WARNING, "{0}: excluding proxy -> {1}", new Object[]{Thread.currentThread().getName(), current_proxy});
|
proxy_manager = MainPanel.getProxy_manager();
|
||||||
|
|
||||||
MainPanel.getProxy_manager().blockProxy(current_proxy);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
current_proxy = MainPanel.getProxy_manager().getFastestProxy();
|
if (error && !error403 && current_proxy != null) {
|
||||||
|
|
||||||
|
proxy_manager.blockProxy(current_proxy);
|
||||||
|
Logger.getLogger(MiscTools.class.getName()).log(Level.WARNING, "{0}: excluding proxy -> {1}", new Object[]{Thread.currentThread().getName(), current_proxy});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
current_proxy = proxy_manager.getFastestProxy();
|
||||||
|
|
||||||
if (current_proxy != null) {
|
if (current_proxy != null) {
|
||||||
|
|
||||||
@ -770,11 +780,21 @@ public final class MiscTools {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
con = (HttpURLConnection) url.openConnection();
|
if (MainPanel.isUse_proxy()) {
|
||||||
|
|
||||||
|
con = (HttpURLConnection) url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(MainPanel.getProxy_host(), MainPanel.getProxy_port())));
|
||||||
|
|
||||||
|
if (MainPanel.getProxy_user() != null && !"".equals(MainPanel.getProxy_user())) {
|
||||||
|
|
||||||
|
con.setRequestProperty("Proxy-Authorization", "Basic " + MiscTools.Bin2BASE64((MainPanel.getProxy_user() + ":" + MainPanel.getProxy_pass()).getBytes()));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
con = (HttpURLConnection) url.openConnection();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} else {
|
||||||
{
|
|
||||||
|
|
||||||
if (MainPanel.isUse_proxy()) {
|
if (MainPanel.isUse_proxy()) {
|
||||||
|
|
||||||
@ -789,31 +809,33 @@ public final class MiscTools {
|
|||||||
con = (HttpURLConnection) url.openConnection();
|
con = (HttpURLConnection) url.openConnection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
error509 = false;
|
con.setConnectTimeout(Transference.HTTP_TIMEOUT);
|
||||||
|
|
||||||
try {
|
con.setReadTimeout(Transference.HTTP_TIMEOUT);
|
||||||
|
|
||||||
url_ok = (con.getResponseCode() == 200);
|
con.setRequestProperty("User-Agent", MainPanel.DEFAULT_USER_AGENT);
|
||||||
|
|
||||||
error509 = (con.getResponseCode() == 509);
|
int http_status = con.getResponseCode();
|
||||||
|
|
||||||
|
if (http_status != 403) {
|
||||||
|
|
||||||
|
url_ok = true;
|
||||||
|
|
||||||
} catch (IOException ex) {
|
|
||||||
Logger.getLogger(MiscTools.class.getName()).log(Level.SEVERE, null, ex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception ex) {
|
} catch (IOException ex) {
|
||||||
Logger.getLogger(MiscTools.class.getName()).log(Level.SEVERE, null, ex);
|
Logger.getLogger(MiscTools.class.getName()).log(Level.SEVERE, null, ex);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
||||||
if (con != null) {
|
if (con != null) {
|
||||||
con.disconnect();
|
con.disconnect();
|
||||||
con = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} while (error509 && MainPanel.isUse_smart_proxy() && !MainPanel.isUse_proxy());
|
} while (error509);
|
||||||
|
|
||||||
return url_ok;
|
return url_ok;
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ public class StreamChunkDownloader implements Runnable {
|
|||||||
|
|
||||||
String url = _chunkwriter.getUrl();
|
String url = _chunkwriter.getUrl();
|
||||||
|
|
||||||
boolean error = false, error509 = false;
|
boolean error = false, error509 = false, error403 = false;
|
||||||
|
|
||||||
String current_proxy = null;
|
String current_proxy = null;
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ public class StreamChunkDownloader implements Runnable {
|
|||||||
|
|
||||||
offset = _chunkwriter.nextOffset();
|
offset = _chunkwriter.nextOffset();
|
||||||
|
|
||||||
} else {
|
} else if (error403) {
|
||||||
|
|
||||||
url = _chunkwriter.getUrl();
|
url = _chunkwriter.getUrl();
|
||||||
}
|
}
|
||||||
@ -141,12 +141,12 @@ public class StreamChunkDownloader implements Runnable {
|
|||||||
|
|
||||||
error509 = false;
|
error509 = false;
|
||||||
|
|
||||||
|
error403 = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
if (!_exit) {
|
if (!_exit) {
|
||||||
|
|
||||||
InputStream is = con.getInputStream();
|
|
||||||
|
|
||||||
http_status = con.getResponseCode();
|
http_status = con.getResponseCode();
|
||||||
|
|
||||||
if (http_status != 200) {
|
if (http_status != 200) {
|
||||||
@ -155,10 +155,19 @@ public class StreamChunkDownloader implements Runnable {
|
|||||||
|
|
||||||
error = true;
|
error = true;
|
||||||
|
|
||||||
error509 = (http_status == 509);
|
if (http_status == 509) {
|
||||||
|
|
||||||
|
error509 = true;
|
||||||
|
|
||||||
|
} else if (http_status == 403) {
|
||||||
|
|
||||||
|
error403 = true;
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
InputStream is = con.getInputStream();
|
||||||
|
|
||||||
while (!_exit && !_chunkwriter.isExit() && (reads = is.read(buffer)) != -1) {
|
while (!_exit && !_chunkwriter.isExit() && (reads = is.read(buffer)) != -1) {
|
||||||
|
|
||||||
chunk_stream.getOutputStream().write(buffer, 0, reads);
|
chunk_stream.getOutputStream().write(buffer, 0, reads);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user