From 2074f8b85fe4030fb111160026a82b21e7e69f9e Mon Sep 17 00:00:00 2001 From: tonikelope Date: Tue, 24 Oct 2017 00:58:26 +0200 Subject: [PATCH] 2.21 --- src/megabasterd/ChunkWriter.java | 2 +- src/megabasterd/CryptTools.java | 6 +-- src/megabasterd/Download.java | 2 +- src/megabasterd/KissVideoStreamServer.java | 34 ++++++++--------- src/megabasterd/LinkGrabberDialog.java | 9 ++++- src/megabasterd/MainPanel.java | 3 +- src/megabasterd/MegaAPI.java | 2 +- src/megabasterd/MegaCrypterAPI.java | 2 +- src/megabasterd/MiscTools.java | 2 +- src/megabasterd/StreamChunk.java | 1 - src/megabasterd/StreamChunkDownloader.java | 28 +++++++------- src/megabasterd/StreamChunkWriter.java | 43 ++++++++++------------ src/megabasterd/StreamerDialog.java | 10 ++++- 13 files changed, 75 insertions(+), 69 deletions(-) diff --git a/src/megabasterd/ChunkWriter.java b/src/megabasterd/ChunkWriter.java index e55746c48..ac05b0b49 100644 --- a/src/megabasterd/ChunkWriter.java +++ b/src/megabasterd/ChunkWriter.java @@ -101,7 +101,7 @@ public final class ChunkWriter implements Runnable, SecureSingleThreadNotifiable @Override public void run() { Chunk current_chunk; - byte[] buffer = new byte[16 * 1024]; + byte[] buffer = new byte[MainPanel.DEFAULT_BYTE_BUFFER_SIZE]; int reads; try { diff --git a/src/megabasterd/CryptTools.java b/src/megabasterd/CryptTools.java index 669f4faa8..aad840594 100644 --- a/src/megabasterd/CryptTools.java +++ b/src/megabasterd/CryptTools.java @@ -340,7 +340,7 @@ public final class CryptTools { try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { - byte[] buffer = new byte[16 * 1024]; + byte[] buffer = new byte[MainPanel.DEFAULT_BYTE_BUFFER_SIZE]; int reads; @@ -461,7 +461,7 @@ public final class CryptTools { try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { - byte[] buffer = new byte[16 * 1024]; + byte[] buffer = new byte[MainPanel.DEFAULT_BYTE_BUFFER_SIZE]; int reads; @@ -569,7 +569,7 @@ public final class CryptTools { String enc_dlc_key; try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { - byte[] buffer = new byte[16 * 1024]; + byte[] buffer = new byte[MainPanel.DEFAULT_BYTE_BUFFER_SIZE]; int reads; while ((reads = is.read(buffer)) != -1) { diff --git a/src/megabasterd/Download.java b/src/megabasterd/Download.java index 118bf6bd1..dfe51ca87 100644 --- a/src/megabasterd/Download.java +++ b/src/megabasterd/Download.java @@ -1042,7 +1042,7 @@ public final class Download implements Transference, Runnable, SecureSingleThrea long chunk_id = 1; long tot = 0L; - byte[] chunk_buffer = new byte[16 * 1024]; + byte[] chunk_buffer = new byte[MainPanel.DEFAULT_BYTE_BUFFER_SIZE]; byte[] byte_block = new byte[16]; int[] int_block; int re, reads, to_read; diff --git a/src/megabasterd/KissVideoStreamServer.java b/src/megabasterd/KissVideoStreamServer.java index d4a64ad0a..f6ed85db6 100644 --- a/src/megabasterd/KissVideoStreamServer.java +++ b/src/megabasterd/KissVideoStreamServer.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import static java.util.logging.Level.SEVERE; +import java.util.logging.Logger; import static java.util.logging.Logger.getLogger; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -41,10 +42,9 @@ import org.apache.http.impl.client.CloseableHttpClient; public final class KissVideoStreamServer implements HttpHandler, SecureSingleThreadNotifiable { public static final int WORKER_STATUS_FILE_INFO = 0x01; - public static final int WORKER_STATUS_CONNECT = 0x02; - public static final int WORKER_STATUS_STREAM = 0x03; - public static final int WORKER_STATUS_RETRY = 0x04; - public static final int WORKER_STATUS_EXIT = 0x05; + public static final int WORKER_STATUS_STREAM = 0x02; + public static final int WORKER_STATUS_RETRY = 0x03; + public static final int WORKER_STATUS_EXIT = 0x04; public static final int WORKERS = 4; private final MainPanel _main_panel; @@ -109,7 +109,7 @@ public final class KissVideoStreamServer implements HttpHandler, SecureSingleThr public void start(int port, String context) throws IOException { swingReflectionInvoke("setForeground", _main_panel.getView().getKiss_server_status(), new Color(0, 128, 0)); - swingReflectionInvoke("setText", _main_panel.getView().getKiss_server_status(), "Kissvideostreamer on localhost:" + STREAMER_PORT + " (Waiting for request...)"); + swingReflectionInvoke("setText", _main_panel.getView().getKiss_server_status(), "Stream server running on localhost:" + STREAMER_PORT + " (Waiting for request...)"); HttpServer httpserver = HttpServer.create(new InetSocketAddress(InetAddress.getLoopbackAddress(), port), 0); @@ -141,10 +141,6 @@ public final class KissVideoStreamServer implements HttpHandler, SecureSingleThr conta_info++; break; - case WORKER_STATUS_CONNECT: - conta_connect++; - break; - case WORKER_STATUS_STREAM: conta_stream++; break; @@ -159,11 +155,11 @@ public final class KissVideoStreamServer implements HttpHandler, SecureSingleThr if (conta_info > 0 || conta_connect > 0 || conta_stream > 0 || conta_retry > 0) { - status = "Kissvideostreamer on localhost:" + STREAMER_PORT + " Info: " + conta_info + " / Conn: " + conta_connect + " / Stream: " + conta_stream + " / Retry: " + conta_retry; + status = "Stream server running on localhost:" + STREAMER_PORT + " Info: " + conta_info + " / Stream: " + conta_stream + " / Retry: " + conta_retry; } else { - status = "Kissvideostreamer on localhost:" + STREAMER_PORT + " (Waiting for request...)"; + status = "Stream server running on localhost:" + STREAMER_PORT + " (Waiting for request...)"; } swingReflectionInvoke("setText", _main_panel.getView().getKiss_server_status(), status); @@ -419,7 +415,9 @@ public final class KissVideoStreamServer implements HttpHandler, SecureSingleThr String link; - String[] url_parts = url_path.substring(url_path.indexOf("/video/") + 7).split("#"); + System.out.println(url_path.substring(url_path.indexOf("/video/") + 7)); + + String[] url_parts = new String(MiscTools.UrlBASE642Bin(url_path.substring(url_path.indexOf("/video/") + 7))).split("#"); mega_account = url_parts[0]; @@ -427,7 +425,7 @@ public final class KissVideoStreamServer implements HttpHandler, SecureSingleThr mega_account = null; } - link = new String(MiscTools.UrlBASE642Bin(url_parts[1])); + link = new String(url_parts[1]); HashMap cache_info, file_info; @@ -496,7 +494,7 @@ public final class KissVideoStreamServer implements HttpHandler, SecureSingleThr resheaders.add("Connection", "close"); - byte[] buffer = new byte[16 * 1024]; + byte[] buffer = new byte[MainPanel.DEFAULT_BYTE_BUFFER_SIZE]; int reads; @@ -571,8 +569,6 @@ public final class KissVideoStreamServer implements HttpHandler, SecureSingleThr chunkwriter = new StreamChunkWriter(this, link, file_info, mega_account, pipeout, temp_url, 0, file_size - 1); } - updateStatus(WORKER_STATUS_CONNECT); - THREAD_POOL.execute(chunkwriter); for (int i = 0; i < WORKERS; i++) { @@ -602,7 +598,11 @@ public final class KissVideoStreamServer implements HttpHandler, SecureSingleThr } } } catch (Exception ex) { - //Logger.getLogger(KissVideoStreamServer.class.getName()).log(Level.SEVERE, null, ex); + + if (!(ex instanceof IOException)) { + Logger.getLogger(KissVideoStreamServer.class.getName()).log(Level.SEVERE, null, ex); + } + } finally { System.out.println("KissVideoStreamerHandle: bye bye"); diff --git a/src/megabasterd/LinkGrabberDialog.java b/src/megabasterd/LinkGrabberDialog.java index 8d3c6b56b..083a63d8b 100644 --- a/src/megabasterd/LinkGrabberDialog.java +++ b/src/megabasterd/LinkGrabberDialog.java @@ -85,6 +85,9 @@ public final class LinkGrabberDialog extends javax.swing.JDialog implements Clip swingReflectionInvoke("addItem", use_mega_account_down_combobox, o); } + + swingReflectionInvoke("addItem", use_mega_account_down_combobox, ""); + } else { swingReflectionInvoke("setEnabled", use_mega_account_down_combobox, false); swingReflectionInvoke("setEnabled", use_mega_account_down_label, false); @@ -282,7 +285,7 @@ public final class LinkGrabberDialog extends javax.swing.JDialog implements Clip try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { - byte[] buffer = new byte[16 * 1024]; + byte[] buffer = new byte[MainPanel.DEFAULT_BYTE_BUFFER_SIZE]; int reads; @@ -352,7 +355,7 @@ public final class LinkGrabberDialog extends javax.swing.JDialog implements Clip private void use_mega_account_down_comboboxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_use_mega_account_down_comboboxItemStateChanged String selected_item = (String) use_mega_account_down_combobox.getSelectedItem(); - if (_main_panel.isUse_mega_account_down() && selected_item != null && !selected_item.equals(_last_selected_account)) { + if (_main_panel.isUse_mega_account_down() && !"".equals(selected_item) && selected_item != null && !selected_item.equals(_last_selected_account)) { use_mega_account_down_combobox.setEnabled(false); @@ -444,6 +447,8 @@ public final class LinkGrabberDialog extends javax.swing.JDialog implements Clip swingReflectionInvokeAndWait("setEnabled", ((LinkGrabberDialog) tthis).getDance_button(), true); } }); + } else if(!selected_item.equals(_last_selected_account)) { + _last_selected_account=null; } }//GEN-LAST:event_use_mega_account_down_comboboxItemStateChanged diff --git a/src/megabasterd/MainPanel.java b/src/megabasterd/MainPanel.java index 2a967c07d..f33cf1045 100644 --- a/src/megabasterd/MainPanel.java +++ b/src/megabasterd/MainPanel.java @@ -59,8 +59,9 @@ import org.apache.http.auth.UsernamePasswordCredentials; */ public final class MainPanel { - public static final String VERSION = "2.20"; + public static final String VERSION = "2.21"; public static final int THROTTLE_SLICE_SIZE = 16 * 1024; + public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024; public static final int STREAMER_PORT = 1337; public static final int WATCHDOG_PORT = 1338; public static final int DEFAULT_MEGA_PROXY_PORT = 9999; diff --git a/src/megabasterd/MegaAPI.java b/src/megabasterd/MegaAPI.java index ba1e03239..fd94665f6 100644 --- a/src/megabasterd/MegaAPI.java +++ b/src/megabasterd/MegaAPI.java @@ -310,7 +310,7 @@ public final class MegaAPI { try (ByteArrayOutputStream byte_res = new ByteArrayOutputStream()) { - byte[] buffer = new byte[16 * 1024]; + byte[] buffer = new byte[MainPanel.DEFAULT_BYTE_BUFFER_SIZE]; int reads; diff --git a/src/megabasterd/MegaCrypterAPI.java b/src/megabasterd/MegaCrypterAPI.java index 48f45df0b..174fd0fb1 100644 --- a/src/megabasterd/MegaCrypterAPI.java +++ b/src/megabasterd/MegaCrypterAPI.java @@ -65,7 +65,7 @@ public final class MegaCrypterAPI { try (ByteArrayOutputStream byte_res = new ByteArrayOutputStream()) { - byte[] buffer = new byte[16 * 1024]; + byte[] buffer = new byte[MainPanel.DEFAULT_BYTE_BUFFER_SIZE]; int reads; diff --git a/src/megabasterd/MiscTools.java b/src/megabasterd/MiscTools.java index 0d8590bc2..fd1bd5b03 100644 --- a/src/megabasterd/MiscTools.java +++ b/src/megabasterd/MiscTools.java @@ -576,7 +576,7 @@ public final class MiscTools { try (ByteArrayOutputStream byte_res = new ByteArrayOutputStream()) { - byte[] buffer = new byte[16 * 1024]; + byte[] buffer = new byte[MainPanel.DEFAULT_BYTE_BUFFER_SIZE]; int reads; diff --git a/src/megabasterd/StreamChunk.java b/src/megabasterd/StreamChunk.java index 9476c2c12..1af9e8a49 100644 --- a/src/megabasterd/StreamChunk.java +++ b/src/megabasterd/StreamChunk.java @@ -1,4 +1,3 @@ - package megabasterd; import java.io.ByteArrayInputStream; diff --git a/src/megabasterd/StreamChunkDownloader.java b/src/megabasterd/StreamChunkDownloader.java index 50a363648..7d97de9a3 100644 --- a/src/megabasterd/StreamChunkDownloader.java +++ b/src/megabasterd/StreamChunkDownloader.java @@ -41,19 +41,13 @@ public class StreamChunkDownloader implements Runnable { @Override public void run() { - StreamChunk chunk_stream; - int reads, http_status; - byte[] buffer = new byte[THROTTLE_SLICE_SIZE]; - InputStream is; - boolean error; - System.out.println(Thread.currentThread().getName() + " Worker [" + _id + "]: let's do some work!"); try (CloseableHttpClient httpclient = MiscTools.getApacheKissHttpClient()) { - - String url=_chunkwriter.getUrl(); - error = false; + String url = _chunkwriter.getUrl(); + + boolean error = false; long offset = -1; @@ -69,15 +63,19 @@ public class StreamChunkDownloader implements Runnable { if (!error) { offset = _chunkwriter.nextOffset(); - + } else { - - url=_chunkwriter.getUrl(); + + url = _chunkwriter.getUrl(); } if (offset >= 0) { - chunk_stream = new StreamChunk(offset, _chunkwriter.calculateChunkSize(offset), url); + int reads, http_status; + + byte[] buffer = new byte[THROTTLE_SLICE_SIZE]; + + StreamChunk chunk_stream = new StreamChunk(offset, _chunkwriter.calculateChunkSize(offset), url); System.out.println(Thread.currentThread().getName() + " Worker [" + _id + "]: offset: " + offset + " size: " + chunk_stream.getSize()); @@ -89,7 +87,7 @@ public class StreamChunkDownloader implements Runnable { if (!_exit) { - is = httpresponse.getEntity().getContent(); + InputStream is = httpresponse.getEntity().getContent(); http_status = httpresponse.getStatusLine().getStatusCode(); @@ -152,7 +150,7 @@ public class StreamChunkDownloader implements Runnable { _chunkwriter.secureNotifyAll(); - System.out.println("Worker [" + _id + "]: bye bye"); + System.out.println(Thread.currentThread().getName() + " Worker [" + _id + "]: bye bye"); } } diff --git a/src/megabasterd/StreamChunkWriter.java b/src/megabasterd/StreamChunkWriter.java index 903c4431a..c1962677d 100644 --- a/src/megabasterd/StreamChunkWriter.java +++ b/src/megabasterd/StreamChunkWriter.java @@ -1,8 +1,3 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ package megabasterd; import java.io.IOException; @@ -37,13 +32,13 @@ public class StreamChunkWriter implements Runnable, SecureMultiThreadNotifiable private final Object _secure_notify_lock; private final Object _chunk_offset_lock; private final KissVideoStreamServer _server; - private volatile boolean _exit; + private volatile boolean _exit; public StreamChunkWriter(KissVideoStreamServer server, String link, HashMap file_info, String mega_account, PipedOutputStream pipeos, String url, long start_offset, long end_offset) { - _server=server; - _link=link; - _mega_account=mega_account; - _file_info=file_info; + _server = server; + _link = link; + _mega_account = mega_account; + _file_info = file_info; _bytes_written = start_offset; _pipeos = pipeos; _start_offset = start_offset; @@ -53,22 +48,22 @@ public class StreamChunkWriter implements Runnable, SecureMultiThreadNotifiable _notified_threads = new ConcurrentHashMap<>(); _secure_notify_lock = new Object(); _chunk_offset_lock = new Object(); - _url=url; + _url = url; _exit = false; } public String getUrl() throws IOException, InterruptedException { - - if(!MiscTools.checkMegaDownloadUrl(_url)) { - - _url = _server.getMegaFileDownloadUrl(_link, (String)_file_info.get("pass_hash"), (String)_file_info.get("noexpiretoken"), _mega_account); + + if (!MiscTools.checkMegaDownloadUrl(_url)) { + + _url = _server.getMegaFileDownloadUrl(_link, (String) _file_info.get("pass_hash"), (String) _file_info.get("noexpiretoken"), _mega_account); _file_info.put("url", _url); _server.getLink_cache().put(_link, _file_info); } - + return _url; } - + public boolean isExit() { return _exit; } @@ -80,10 +75,6 @@ public class StreamChunkWriter implements Runnable, SecureMultiThreadNotifiable @Override public void run() { - StreamChunk current_chunk; - byte[] buffer = new byte[16 * 1024]; - int reads; - try { System.out.println("StreamChunkWriter: let's do some work! Start: " + _start_offset + " End: " + _end_offset); @@ -92,10 +83,14 @@ public class StreamChunkWriter implements Runnable, SecureMultiThreadNotifiable while (!_exit && _bytes_written < _end_offset && _chunk_queue.containsKey(_bytes_written)) { - current_chunk = _chunk_queue.get(_bytes_written); + StreamChunk current_chunk = _chunk_queue.get(_bytes_written); InputStream is = current_chunk.getInputStream(); + byte[] buffer = new byte[MainPanel.DEFAULT_BYTE_BUFFER_SIZE]; + + int reads; + while (!_exit && (reads = is.read(buffer)) != -1) { _pipeos.write(buffer, 0, reads); @@ -132,7 +127,9 @@ public class StreamChunkWriter implements Runnable, SecureMultiThreadNotifiable _exit = true; - System.out.println("StreamChunkWriter: bye bye"); + secureNotifyAll(); + + System.out.println(Thread.currentThread().getName() + " StreamChunkWriter: bye bye"); } public long nextOffset() { diff --git a/src/megabasterd/StreamerDialog.java b/src/megabasterd/StreamerDialog.java index a4faa775a..186b36887 100644 --- a/src/megabasterd/StreamerDialog.java +++ b/src/megabasterd/StreamerDialog.java @@ -68,6 +68,8 @@ public final class StreamerDialog extends javax.swing.JDialog implements Clipboa swingReflectionInvoke("addItem", use_mega_account_down_combobox, o); } + + swingReflectionInvoke("addItem", use_mega_account_down_combobox, ""); } else { swingReflectionInvoke("setEnabled", use_mega_account_down_combobox, false); swingReflectionInvoke("setEnabled", use_mega_account_down_label, false); @@ -207,7 +209,9 @@ public final class StreamerDialog extends javax.swing.JDialog implements Clipboa if (findFirstRegex("://mega(\\.co)?\\.nz/#[^fF]", link, 0) != null || findFirstRegex("https?://[^/]+/![^!]+![0-9a-fA-F]+", link, 0) != null) { - stream_link = "http://localhost:1337/video/" + (_last_selected_account != null ? _last_selected_account : "") + "#" + MiscTools.Bin2UrlBASE64(link.getBytes()); + data = MiscTools.Bin2UrlBASE64(((_last_selected_account != null ? _last_selected_account : "") + "#" + link).getBytes()); + + stream_link = "http://localhost:1337/video/" + data; } else { @@ -245,7 +249,7 @@ public final class StreamerDialog extends javax.swing.JDialog implements Clipboa private void use_mega_account_down_comboboxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_use_mega_account_down_comboboxItemStateChanged String selected_item = (String) use_mega_account_down_combobox.getSelectedItem(); - if (_main_panel.isUse_mega_account_down() && selected_item != null && !selected_item.equals(_last_selected_account)) { + if (_main_panel.isUse_mega_account_down() && !"".equals(selected_item) && selected_item != null && !selected_item.equals(_last_selected_account)) { use_mega_account_down_combobox.setEnabled(false); @@ -337,6 +341,8 @@ public final class StreamerDialog extends javax.swing.JDialog implements Clipboa swingReflectionInvokeAndWait("setEnabled", ((StreamerDialog) tthis).getDance_button(), true); } }); + } else if(!selected_item.equals(_last_selected_account)) { + _last_selected_account=null; } }//GEN-LAST:event_use_mega_account_down_comboboxItemStateChanged