diff --git a/pom.xml b/pom.xml index 12ecce1ca..8420e97a1 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.tonikelope MegaBasterd - 7.19 + 7.20 jar diff --git a/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java b/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java index 8a1830716..4a97bdb35 100644 --- a/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java +++ b/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java @@ -119,7 +119,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable { int http_error = 0, http_status = -1, conta_error = 0; - boolean chunk_error = false, slow_proxy = false, timeout = false; + boolean chunk_error = false, slow_proxy = false, timeout = false, smart_proxy_socks = false; String worker_url = null; @@ -131,7 +131,11 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable { if (MainPanel.FORCE_SMART_PROXY) { - _current_smart_proxy = proxy_manager.getProxy(_excluded_proxy_list); + String[] smart_proxy = proxy_manager.getProxy(_excluded_proxy_list); + + _current_smart_proxy = smart_proxy[0]; + + smart_proxy_socks = smart_proxy[1].equals("socks"); if (!getDownload().isTurbo()) { getDownload().enableTurboMode(); @@ -183,7 +187,11 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable { _excluded_proxy_list.add(_current_smart_proxy); - _current_smart_proxy = proxy_manager.getProxy(_excluded_proxy_list); + String[] smart_proxy = proxy_manager.getProxy(_excluded_proxy_list); + + _current_smart_proxy = smart_proxy[0]; + + smart_proxy_socks = smart_proxy[1].equals("socks"); Logger.getLogger(MiscTools.class.getName()).log(Level.WARNING, "{0}: worker {1} excluding proxy -> {2} {3}", new Object[]{Thread.currentThread().getName(), _id, _current_smart_proxy, _download.getFile_name()}); @@ -193,7 +201,11 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable { getDownload().enableTurboMode(); } - _current_smart_proxy = proxy_manager.getProxy(_excluded_proxy_list); + String[] smart_proxy = proxy_manager.getProxy(_excluded_proxy_list); + + _current_smart_proxy = smart_proxy[0]; + + smart_proxy_socks = smart_proxy[1].equals("socks"); } @@ -201,7 +213,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable { String[] proxy_info = _current_smart_proxy.split(":"); - Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy_info[0], Integer.parseInt(proxy_info[1]))); + Proxy proxy = new Proxy(smart_proxy_socks ? Proxy.Type.SOCKS : Proxy.Type.HTTP, new InetSocketAddress(proxy_info[0], Integer.parseInt(proxy_info[1]))); URL url = new URL(chunk_url); @@ -224,7 +236,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable { _current_smart_proxy = null; - con = (HttpURLConnection) url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(MainPanel.getProxy_host(), MainPanel.getProxy_port()))); + con = (HttpURLConnection) url.openConnection(new Proxy(smart_proxy_socks ? Proxy.Type.SOCKS : Proxy.Type.HTTP, new InetSocketAddress(MainPanel.getProxy_host(), MainPanel.getProxy_port()))); if (MainPanel.getProxy_user() != null && !"".equals(MainPanel.getProxy_user())) { diff --git a/src/main/java/com/tonikelope/megabasterd/DBTools.java b/src/main/java/com/tonikelope/megabasterd/DBTools.java index 2c0ccecc1..512bf0435 100644 --- a/src/main/java/com/tonikelope/megabasterd/DBTools.java +++ b/src/main/java/com/tonikelope/megabasterd/DBTools.java @@ -5,11 +5,11 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.ArrayList; /** * diff --git a/src/main/java/com/tonikelope/megabasterd/LabelTranslatorSingleton.java b/src/main/java/com/tonikelope/megabasterd/LabelTranslatorSingleton.java index 447860a78..048ad176a 100644 --- a/src/main/java/com/tonikelope/megabasterd/LabelTranslatorSingleton.java +++ b/src/main/java/com/tonikelope/megabasterd/LabelTranslatorSingleton.java @@ -39,7 +39,7 @@ public class LabelTranslatorSingleton { private void Spanish() { _addTranslation("Execute this command when MEGA download limit is reached:", "Ejecutar este comando cuando se alcance el límite de descarga de MEGA:"); - _addTranslation("Use this proxy list (instead of the one included in MegaBasterd) Format is IP:PORT[@user:password_b64]", "Usar esta lista de proxys (en vez de la incluida en MegaBasterd) El formato es IP:PUERTO[@usuario:password_b64]"); + _addTranslation("Use this proxy list (instead of the one included in MegaBasterd) Format is [*]IP:PORT[@user_b64:password_b64]", "Usar esta lista de proxys (en vez de la incluida en MegaBasterd) El formato es [*]IP:PUERTO[@usuario_b64:password_b64]"); _addTranslation("Waiting for completion handler ... ***DO NOT EXIT MEGABASTERD NOW***", "Esperando manejador de finalización ... ***NO CIERRES MEGABASTERD EN ESTE MOMENTO***"); _addTranslation("Finishing calculating CBC-MAC code (this could take a while) ... ***DO NOT EXIT MEGABASTERD NOW***", "Terminando de calcular código CBC-MAC (esto podría llevar tiempo) ... ***NO CIERRES MEGABASTERD EN ESTE MOMENTO***"); _addTranslation("Split content in different uploads", "Separar contenido en diferentes subidas"); @@ -299,7 +299,7 @@ public class LabelTranslatorSingleton { public String translate(String orig) { - return _rosetta.containsKey(orig) ? _rosetta.get(orig) : orig; + return (orig != null && _rosetta.containsKey(orig)) ? _rosetta.get(orig) : orig; } private static class LazyHolder { diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java index 4bcf29bd8..7d030d149 100644 --- a/src/main/java/com/tonikelope/megabasterd/MainPanel.java +++ b/src/main/java/com/tonikelope/megabasterd/MainPanel.java @@ -57,7 +57,7 @@ import javax.swing.UIManager; */ public final class MainPanel { - public static final String VERSION = "7.19"; + public static final String VERSION = "7.20"; public static final boolean FORCE_SMART_PROXY = false; //TRUE FOR DEBUGING SMART PROXY public static final int THROTTLE_SLICE_SIZE = 16 * 1024; public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024; diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanelView.java b/src/main/java/com/tonikelope/megabasterd/MainPanelView.java index 489671e9a..8250b28b4 100644 --- a/src/main/java/com/tonikelope/megabasterd/MainPanelView.java +++ b/src/main/java/com/tonikelope/megabasterd/MainPanelView.java @@ -1210,8 +1210,6 @@ public final class MainPanelView extends javax.swing.JFrame { MainPanel.getProxy_manager().refreshProxyList(); - updateSmartProxyStatus("SmartProxy: ON (" + String.valueOf(MainPanel.getProxy_manager().getProxyCount()) + ")"); - } else { updateSmartProxyStatus("SmartProxy: OFF"); diff --git a/src/main/java/com/tonikelope/megabasterd/MegaAPI.java b/src/main/java/com/tonikelope/megabasterd/MegaAPI.java index 5d1cb2274..f0775d665 100644 --- a/src/main/java/com/tonikelope/megabasterd/MegaAPI.java +++ b/src/main/java/com/tonikelope/megabasterd/MegaAPI.java @@ -356,7 +356,7 @@ public class MegaAPI implements Serializable { int mega_error = 0, http_error = 0, conta_error = 0, http_status; - boolean empty_response = false; + boolean empty_response = false, smart_proxy_socks = false; HttpsURLConnection con = null; @@ -366,7 +366,11 @@ public class MegaAPI implements Serializable { if (MainPanel.FORCE_SMART_PROXY) { - current_smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + String[] smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + + current_smart_proxy = smart_proxy[0]; + + smart_proxy_socks = smart_proxy[1].equals("socks"); } @@ -384,18 +388,26 @@ public class MegaAPI implements Serializable { excluded_proxy_list.add(current_smart_proxy); - current_smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + String[] smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + + current_smart_proxy = smart_proxy[0]; + + smart_proxy_socks = smart_proxy[1].equals("socks"); } else if (current_smart_proxy == null) { - current_smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + String[] smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + + current_smart_proxy = smart_proxy[0]; + + smart_proxy_socks = smart_proxy[1].equals("socks"); } if (current_smart_proxy != null) { String[] proxy_info = current_smart_proxy.split(":"); - Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy_info[0], Integer.parseInt(proxy_info[1]))); + Proxy proxy = new Proxy(smart_proxy_socks ? Proxy.Type.SOCKS : Proxy.Type.HTTP, new InetSocketAddress(proxy_info[0], Integer.parseInt(proxy_info[1]))); con = (HttpsURLConnection) url_api.openConnection(proxy); @@ -408,7 +420,7 @@ public class MegaAPI implements Serializable { if (MainPanel.isUse_proxy()) { - con = (HttpsURLConnection) url_api.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(MainPanel.getProxy_host(), MainPanel.getProxy_port()))); + con = (HttpsURLConnection) url_api.openConnection(new Proxy(smart_proxy_socks ? Proxy.Type.SOCKS : Proxy.Type.HTTP, new InetSocketAddress(MainPanel.getProxy_host(), MainPanel.getProxy_port()))); if (MainPanel.getProxy_user() != null && !"".equals(MainPanel.getProxy_user())) { diff --git a/src/main/java/com/tonikelope/megabasterd/MiscTools.java b/src/main/java/com/tonikelope/megabasterd/MiscTools.java index 29c6ef25b..c0f37f00d 100644 --- a/src/main/java/com/tonikelope/megabasterd/MiscTools.java +++ b/src/main/java/com/tonikelope/megabasterd/MiscTools.java @@ -858,11 +858,17 @@ public class MiscTools { String current_smart_proxy = null; + boolean smart_proxy_socks = false; + ArrayList excluded_proxy_list = new ArrayList<>(); if (MainPanel.FORCE_SMART_PROXY) { - current_smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + String[] smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + + current_smart_proxy = smart_proxy[0]; + + smart_proxy_socks = smart_proxy[1].equals("socks"); } @@ -882,18 +888,26 @@ public class MiscTools { excluded_proxy_list.add(current_smart_proxy); - current_smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + String[] smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + + current_smart_proxy = smart_proxy[0]; + + smart_proxy_socks = smart_proxy[1].equals("socks"); } else if (current_smart_proxy == null) { - current_smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + String[] smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + + current_smart_proxy = smart_proxy[0]; + + smart_proxy_socks = smart_proxy[1].equals("socks"); } if (current_smart_proxy != null) { String[] proxy_info = current_smart_proxy.split(":"); - Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy_info[0], Integer.parseInt(proxy_info[1]))); + Proxy proxy = new Proxy(smart_proxy_socks ? Proxy.Type.SOCKS : Proxy.Type.HTTP, new InetSocketAddress(proxy_info[0], Integer.parseInt(proxy_info[1]))); con = (HttpURLConnection) url.openConnection(proxy); @@ -901,7 +915,7 @@ public class MiscTools { if (MainPanel.isUse_proxy()) { - con = (HttpURLConnection) url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(MainPanel.getProxy_host(), MainPanel.getProxy_port()))); + con = (HttpURLConnection) url.openConnection(new Proxy(smart_proxy_socks ? Proxy.Type.SOCKS : Proxy.Type.HTTP, new InetSocketAddress(MainPanel.getProxy_host(), MainPanel.getProxy_port()))); if (MainPanel.getProxy_user() != null && !"".equals(MainPanel.getProxy_user())) { @@ -917,7 +931,7 @@ public class MiscTools { if (MainPanel.isUse_proxy()) { - con = (HttpURLConnection) url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(MainPanel.getProxy_host(), MainPanel.getProxy_port()))); + con = (HttpURLConnection) url.openConnection(new Proxy(smart_proxy_socks ? Proxy.Type.SOCKS : Proxy.Type.HTTP, new InetSocketAddress(MainPanel.getProxy_host(), MainPanel.getProxy_port()))); if (MainPanel.getProxy_user() != null && !"".equals(MainPanel.getProxy_user())) { diff --git a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form index 03e09a605..b56db3c0a 100644 --- a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form +++ b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form @@ -31,7 +31,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -191,7 +191,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -295,7 +295,7 @@ - + @@ -556,7 +556,7 @@ - + @@ -804,7 +804,7 @@ - + @@ -813,7 +813,7 @@ - + @@ -1070,7 +1070,7 @@ - + @@ -1167,10 +1167,8 @@ - - - - + + @@ -1218,9 +1216,9 @@ - + - + @@ -1294,10 +1292,8 @@ - - - - + + @@ -1307,25 +1303,27 @@ - - - + + + + + - + - + diff --git a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java index 3e6bfdc0f..1de4c0291 100644 --- a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java @@ -832,7 +832,7 @@ public class SettingsDialog extends javax.swing.JDialog { custom_proxy_textarea.addMouseListener(new ContextMenuMouseListener()); custom_proxy_list_label.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N - custom_proxy_list_label.setText("Use this proxy list (instead of the one included in MegaBasterd) Format is IP:PORT[@user:password_b64]"); + custom_proxy_list_label.setText("Use this proxy list (instead of the one included in MegaBasterd) Format is [*]IP:PORT[@user_b64:password_b64]"); javax.swing.GroupLayout downloads_panelLayout = new javax.swing.GroupLayout(downloads_panel); downloads_panel.setLayout(downloads_panelLayout); @@ -886,7 +886,7 @@ public class SettingsDialog extends javax.swing.JDialog { .addComponent(rec_smart_proxy_label, javax.swing.GroupLayout.PREFERRED_SIZE, 542, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(custom_proxy_list_label, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jScrollPane1)))) - .addGap(0, 76, Short.MAX_VALUE))) + .addGap(0, 25, Short.MAX_VALUE))) .addGap(12, 12, 12)) .addGroup(downloads_panelLayout.createSequentialGroup() .addGroup(downloads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -934,7 +934,7 @@ public class SettingsDialog extends javax.swing.JDialog { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(rec_download_slots_label) .addGap(18, 18, 18) - .addComponent(jSeparator7, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jSeparator7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(limit_download_speed_checkbox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) @@ -972,7 +972,7 @@ public class SettingsDialog extends javax.swing.JDialog { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(custom_proxy_list_label) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 186, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 224, Short.MAX_VALUE) .addContainerGap()) ); @@ -1245,7 +1245,7 @@ public class SettingsDialog extends javax.swing.JDialog { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(mega_accounts_scrollpane, javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE) + .addComponent(mega_accounts_scrollpane, javax.swing.GroupLayout.DEFAULT_SIZE, 305, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(accounts_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(remove_mega_account_button) @@ -1253,7 +1253,7 @@ public class SettingsDialog extends javax.swing.JDialog { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(elc_accounts_label) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(elc_accounts_scrollpane, javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE) + .addComponent(elc_accounts_scrollpane, javax.swing.GroupLayout.DEFAULT_SIZE, 306, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(accounts_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(remove_elc_account_button) @@ -1265,7 +1265,7 @@ public class SettingsDialog extends javax.swing.JDialog { advanced_scrollpane.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 153))); - proxy_panel.setBorder(javax.swing.BorderFactory.createTitledBorder("Proxy settings")); + proxy_panel.setBorder(javax.swing.BorderFactory.createTitledBorder((String)null)); proxy_host_label.setFont(new java.awt.Font("Dialog", 1, 18)); // NOI18N proxy_host_label.setText("Host:"); @@ -1301,7 +1301,7 @@ public class SettingsDialog extends javax.swing.JDialog { proxy_warning_label.setText("Note: MegaBasterd will use this proxy for ALL connections."); proxy_warning_label.setEnabled(false); - proxy_auth_panel.setBorder(javax.swing.BorderFactory.createTitledBorder("Authentication")); + proxy_auth_panel.setBorder(javax.swing.BorderFactory.createTitledBorder((String)null)); proxy_user_label.setFont(new java.awt.Font("Dialog", 1, 18)); // NOI18N proxy_user_label.setText("Username:"); @@ -1329,22 +1329,24 @@ public class SettingsDialog extends javax.swing.JDialog { .addGroup(proxy_auth_panelLayout.createSequentialGroup() .addContainerGap() .addComponent(proxy_user_label) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(proxy_user_textfield) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGap(6, 6, 6) + .addComponent(proxy_user_textfield, javax.swing.GroupLayout.DEFAULT_SIZE, 297, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(proxy_pass_label) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(proxy_pass_textfield)) + .addGap(6, 6, 6) + .addComponent(proxy_pass_textfield, javax.swing.GroupLayout.DEFAULT_SIZE, 461, Short.MAX_VALUE) + .addContainerGap()) ); proxy_auth_panelLayout.setVerticalGroup( proxy_auth_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(proxy_auth_panelLayout.createSequentialGroup() + .addGap(0, 12, Short.MAX_VALUE) .addGroup(proxy_auth_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(proxy_user_label) .addComponent(proxy_user_textfield, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(proxy_pass_label) .addComponent(proxy_pass_textfield, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) ); javax.swing.GroupLayout proxy_panelLayout = new javax.swing.GroupLayout(proxy_panel); @@ -1384,7 +1386,7 @@ public class SettingsDialog extends javax.swing.JDialog { .addComponent(proxy_host_textfield, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(proxy_port_label) .addComponent(proxy_port_textfield, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 18, Short.MAX_VALUE) .addComponent(proxy_auth_panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); @@ -1504,7 +1506,7 @@ public class SettingsDialog extends javax.swing.JDialog { .addComponent(zoom_label) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(zoom_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 261, Short.MAX_VALUE)) + .addGap(0, 237, Short.MAX_VALUE)) .addGroup(advanced_panelLayout.createSequentialGroup() .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) @@ -1592,7 +1594,7 @@ public class SettingsDialog extends javax.swing.JDialog { .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 1122, Short.MAX_VALUE) + .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 1071, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(status, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(6, 6, 6) @@ -1605,7 +1607,7 @@ public class SettingsDialog extends javax.swing.JDialog { layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() - .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 518, Short.MAX_VALUE) + .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 907, Short.MAX_VALUE) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) diff --git a/src/main/java/com/tonikelope/megabasterd/SmartMegaProxyManager.java b/src/main/java/com/tonikelope/megabasterd/SmartMegaProxyManager.java index eb178dda9..3014153c3 100644 --- a/src/main/java/com/tonikelope/megabasterd/SmartMegaProxyManager.java +++ b/src/main/java/com/tonikelope/megabasterd/SmartMegaProxyManager.java @@ -29,7 +29,7 @@ public final class SmartMegaProxyManager { public static final int PROXY_AUTO_REFRESH_SLEEP_TIME = 15; private static final Logger LOG = Logger.getLogger(SmartMegaProxyManager.class.getName()); private volatile String _proxy_list_url; - private final LinkedHashMap _proxy_list; + private final LinkedHashMap _proxy_list; private static final HashMap PROXY_LIST_AUTH = new HashMap<>(); private final MainPanel _main_panel; @@ -45,7 +45,7 @@ public final class SmartMegaProxyManager { return _proxy_list.size(); } - public synchronized String getProxy(ArrayList excluded) { + public synchronized String[] getProxy(ArrayList excluded) { if (_proxy_list.size() > 0) { @@ -55,9 +55,9 @@ public final class SmartMegaProxyManager { for (String k : keys) { - if (_proxy_list.get(k) < current_time && (excluded == null || !excluded.contains(k))) { + if (_proxy_list.get(k)[0] < current_time && (excluded == null || !excluded.contains(k))) { - return k; + return new String[]{k, _proxy_list.get(k)[1] == -1L ? "http" : "socks"}; } } } @@ -79,7 +79,11 @@ public final class SmartMegaProxyManager { if (_proxy_list.containsKey(proxy)) { - _proxy_list.put(proxy, System.currentTimeMillis() + PROXY_BLOCK_TIME * 1000); + Long[] proxy_data = _proxy_list.get(proxy); + + proxy_data[0] = System.currentTimeMillis() + PROXY_BLOCK_TIME * 1000; + + _proxy_list.put(proxy, proxy_data); LOG.log(Level.WARNING, "{0} Smart Proxy Manager: BLOCKING PROXY -> {1} ({2} secs)", new Object[]{Thread.currentThread().getName(), proxy, PROXY_BLOCK_TIME}); } @@ -95,7 +99,7 @@ public final class SmartMegaProxyManager { String custom_proxy_list = DBTools.selectSettingValue("custom_proxy_list"); - LinkedHashMap custom_clean_list = new LinkedHashMap<>(); + LinkedHashMap custom_clean_list = new LinkedHashMap<>(); HashMap custom_clean_list_auth = new HashMap<>(); @@ -109,7 +113,13 @@ public final class SmartMegaProxyManager { for (String proxy : custom_list) { - System.out.println(proxy); + boolean socks = false; + + if (proxy.trim().startsWith("*")) { + socks = true; + + proxy = proxy.trim().substring(1); + } if (proxy.trim().contains("@")) { @@ -117,10 +127,15 @@ public final class SmartMegaProxyManager { custom_clean_list_auth.put(proxy_parts[0], proxy_parts[1]); - custom_clean_list.put(proxy_parts[0], current_time); + Long[] proxy_data = new Long[]{current_time, socks ? 1L : -1L}; + + custom_clean_list.put(proxy_parts[0], proxy_data); } else if (proxy.trim().matches(".+?:[0-9]{1,5}")) { - custom_clean_list.put(proxy, current_time); + + Long[] proxy_data = new Long[]{current_time, socks ? 1L : -1L}; + + custom_clean_list.put(proxy, proxy_data); } } } @@ -177,21 +192,29 @@ public final class SmartMegaProxyManager { for (String proxy : proxy_list) { + boolean socks = false; + + if (proxy.trim().startsWith("*")) { + socks = true; + + proxy = proxy.trim().substring(1); + } + if (proxy.trim().contains("@")) { String[] proxy_parts = proxy.trim().split("@"); PROXY_LIST_AUTH.put(proxy_parts[0], proxy_parts[1]); - _proxy_list.put(proxy_parts[0], current_time); + Long[] proxy_data = new Long[]{current_time, socks ? 1L : -1L}; + + _proxy_list.put(proxy_parts[0], proxy_data); } else if (proxy.trim().matches(".+?:[0-9]{1,5}")) { - _proxy_list.put(proxy, current_time); + Long[] proxy_data = new Long[]{current_time, socks ? 1L : -1L}; + _proxy_list.put(proxy, proxy_data); } - if (proxy.trim().matches(".+?:[0-9]{1,5}")) { - _proxy_list.put(proxy, current_time); - } } } @@ -206,7 +229,14 @@ public final class SmartMegaProxyManager { LOG.log(Level.INFO, "{0} Smart Proxy Manager: proxy list refreshed ({1})", new Object[]{Thread.currentThread().getName(), _proxy_list.size()}); } - System.out.println(PROXY_LIST_AUTH); + Set keys = _proxy_list.keySet(); + + for (String k : keys) { + + Long[] pdata = _proxy_list.get(k); + + System.out.println(k + " " + String.valueOf(pdata[0]) + " " + String.valueOf(pdata[1])); + } } catch (MalformedURLException ex) { LOG.log(Level.SEVERE, ex.getMessage()); @@ -235,7 +265,7 @@ public final class SmartMegaProxyManager { try { String[] auth_data_parts = auth_data.split(":"); - String user = auth_data_parts[0]; + String user = new String(MiscTools.BASE642Bin(auth_data_parts[0]), "UTF-8"); String password = new String(MiscTools.BASE642Bin(auth_data_parts[1]), "UTF-8"); diff --git a/src/main/java/com/tonikelope/megabasterd/StreamChunkDownloader.java b/src/main/java/com/tonikelope/megabasterd/StreamChunkDownloader.java index 73172f7de..dd9aff0e9 100644 --- a/src/main/java/com/tonikelope/megabasterd/StreamChunkDownloader.java +++ b/src/main/java/com/tonikelope/megabasterd/StreamChunkDownloader.java @@ -49,6 +49,8 @@ public class StreamChunkDownloader implements Runnable { String current_smart_proxy = null; + boolean smart_proxy_socks = false; + long offset = -1; SmartMegaProxyManager proxy_manager = MainPanel.getProxy_manager(); @@ -57,8 +59,11 @@ public class StreamChunkDownloader implements Runnable { if (MainPanel.FORCE_SMART_PROXY) { - current_smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + String[] smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + current_smart_proxy = smart_proxy[0]; + + smart_proxy_socks = smart_proxy[1].equals("socks"); } while (!_exit && !_chunkmanager.isExit()) { @@ -93,13 +98,21 @@ public class StreamChunkDownloader implements Runnable { excluded_proxy_list.add(current_smart_proxy); - current_smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + String[] smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + + current_smart_proxy = smart_proxy[0]; + + smart_proxy_socks = smart_proxy[1].equals("socks"); Logger.getLogger(MiscTools.class.getName()).log(Level.WARNING, "{0}: worker {1} excluding proxy -> {2}", new Object[]{Thread.currentThread().getName(), _id, current_smart_proxy}); } else if (current_smart_proxy == null) { - current_smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + String[] smart_proxy = proxy_manager.getProxy(excluded_proxy_list); + + current_smart_proxy = smart_proxy[0]; + + smart_proxy_socks = smart_proxy[1].equals("socks"); } @@ -107,7 +120,7 @@ public class StreamChunkDownloader implements Runnable { String[] proxy_info = current_smart_proxy.split(":"); - Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy_info[0], Integer.parseInt(proxy_info[1]))); + Proxy proxy = new Proxy(smart_proxy_socks ? Proxy.Type.SOCKS : Proxy.Type.HTTP, new InetSocketAddress(proxy_info[0], Integer.parseInt(proxy_info[1]))); URL chunk_url = new URL(chunk_stream.getUrl()); @@ -126,7 +139,7 @@ public class StreamChunkDownloader implements Runnable { if (MainPanel.isUse_proxy()) { - con = (HttpURLConnection) chunk_url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(MainPanel.getProxy_host(), MainPanel.getProxy_port()))); + con = (HttpURLConnection) chunk_url.openConnection(new Proxy(smart_proxy_socks ? Proxy.Type.SOCKS : Proxy.Type.HTTP, new InetSocketAddress(MainPanel.getProxy_host(), MainPanel.getProxy_port()))); if (MainPanel.getProxy_user() != null && !"".equals(MainPanel.getProxy_user())) { @@ -138,7 +151,7 @@ public class StreamChunkDownloader implements Runnable { String[] proxy_info = current_smart_proxy.split(":"); - Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy_info[0], Integer.parseInt(proxy_info[1]))); + Proxy proxy = new Proxy(smart_proxy_socks ? Proxy.Type.SOCKS : Proxy.Type.HTTP, new InetSocketAddress(proxy_info[0], Integer.parseInt(proxy_info[1]))); con = (HttpURLConnection) chunk_url.openConnection(proxy); diff --git a/src/main/java/com/tonikelope/megabasterd/Upload.java b/src/main/java/com/tonikelope/megabasterd/Upload.java index ae148ec66..6dff4e316 100644 --- a/src/main/java/com/tonikelope/megabasterd/Upload.java +++ b/src/main/java/com/tonikelope/megabasterd/Upload.java @@ -1,8 +1,8 @@ package com.tonikelope.megabasterd; -import static com.tonikelope.megabasterd.Download.PROGRESS_WATCHDOG_TIMEOUT; import static com.tonikelope.megabasterd.MainPanel.*; import static com.tonikelope.megabasterd.MiscTools.*; +import static com.tonikelope.megabasterd.Transference.PROGRESS_WATCHDOG_TIMEOUT; import java.io.File; import java.io.FileWriter; import java.io.IOException; diff --git a/src/main/resources/images/mbasterd_screen.png b/src/main/resources/images/mbasterd_screen.png index a0cec0169..5391d44cc 100644 Binary files a/src/main/resources/images/mbasterd_screen.png and b/src/main/resources/images/mbasterd_screen.png differ