From ec39f22ad873cf489f31b4811fa87b8f20437928 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 2 Feb 2015 18:06:05 -0500 Subject: [PATCH] Fix packet type for legacy controller packets and privatize some constants to prevent this bug from happening again --- .../nvstream/av/audio/AudioStream.java | 7 ++--- .../nvstream/av/video/VideoStream.java | 13 ++++----- .../nvstream/control/ControlStream.java | 4 +-- .../nvstream/input/ControllerPacket.java | 12 ++++---- .../nvstream/input/ControllerStream.java | 4 +-- .../nvstream/input/KeyboardPacket.java | 2 +- .../nvstream/input/MouseButtonPacket.java | 10 +++---- .../nvstream/input/MouseScrollPacket.java | 6 ++-- .../nvstream/input/MultiControllerPacket.java | 29 ++++++++++++++++--- 9 files changed, 53 insertions(+), 34 deletions(-) diff --git a/moonlight-common/src/com/limelight/nvstream/av/audio/AudioStream.java b/moonlight-common/src/com/limelight/nvstream/av/audio/AudioStream.java index 22f8244c..4820a393 100644 --- a/moonlight-common/src/com/limelight/nvstream/av/audio/AudioStream.java +++ b/moonlight-common/src/com/limelight/nvstream/av/audio/AudioStream.java @@ -13,11 +13,10 @@ import com.limelight.nvstream.av.RtpPacket; import com.limelight.nvstream.av.RtpReorderQueue; public class AudioStream { - public static final int RTP_PORT = 48000; - public static final int RTCP_PORT = 47999; + private static final int RTP_PORT = 48000; - public static final int RTP_RECV_BUFFER = 64 * 1024; - public static final int MAX_PACKET_SIZE = 100; + private static final int RTP_RECV_BUFFER = 64 * 1024; + private static final int MAX_PACKET_SIZE = 100; private DatagramSocket rtp; diff --git a/moonlight-common/src/com/limelight/nvstream/av/video/VideoStream.java b/moonlight-common/src/com/limelight/nvstream/av/video/VideoStream.java index 723f2791..f5285bd4 100644 --- a/moonlight-common/src/com/limelight/nvstream/av/video/VideoStream.java +++ b/moonlight-common/src/com/limelight/nvstream/av/video/VideoStream.java @@ -15,22 +15,21 @@ import com.limelight.nvstream.av.RtpPacket; import com.limelight.nvstream.av.RtpReorderQueue; public class VideoStream { - public static final int RTP_PORT = 47998; - public static final int RTCP_PORT = 47999; - public static final int FIRST_FRAME_PORT = 47996; + private static final int RTP_PORT = 47998; + private static final int FIRST_FRAME_PORT = 47996; - public static final int FIRST_FRAME_TIMEOUT = 5000; - public static final int RTP_RECV_BUFFER = 256 * 1024; + private static final int FIRST_FRAME_TIMEOUT = 5000; + private static final int RTP_RECV_BUFFER = 256 * 1024; // We can't request an IDR frame until the depacketizer knows // that a packet was lost. This timeout bounds the time that // the RTP queue will wait for missing/reordered packets. - public static final int MAX_RTP_QUEUE_DELAY_MS = 10; + private static final int MAX_RTP_QUEUE_DELAY_MS = 10; // The ring size MUST be greater than or equal to // the maximum number of packets in a fully // presentable frame - public static final int VIDEO_RING_SIZE = 384; + private static final int VIDEO_RING_SIZE = 384; private DatagramSocket rtp; private Socket firstFrameSocket; diff --git a/moonlight-common/src/com/limelight/nvstream/control/ControlStream.java b/moonlight-common/src/com/limelight/nvstream/control/ControlStream.java index 9697c5f4..3fda80b6 100644 --- a/moonlight-common/src/com/limelight/nvstream/control/ControlStream.java +++ b/moonlight-common/src/com/limelight/nvstream/control/ControlStream.java @@ -15,9 +15,9 @@ import com.limelight.nvstream.av.ConnectionStatusListener; public class ControlStream implements ConnectionStatusListener { - public static final int PORT = 47995; + private static final int PORT = 47995; - public static final int CONTROL_TIMEOUT = 5000; + private static final int CONTROL_TIMEOUT = 5000; private static final int IDX_START_A = 0; private static final int IDX_START_B = 1; diff --git a/moonlight-common/src/com/limelight/nvstream/input/ControllerPacket.java b/moonlight-common/src/com/limelight/nvstream/input/ControllerPacket.java index 315fdbf5..aed7c3b8 100644 --- a/moonlight-common/src/com/limelight/nvstream/input/ControllerPacket.java +++ b/moonlight-common/src/com/limelight/nvstream/input/ControllerPacket.java @@ -4,7 +4,7 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; public class ControllerPacket extends MultiControllerPacket { - public static final byte[] HEADER = + private static final byte[] HEADER = { 0x0A, 0x00, @@ -14,7 +14,7 @@ public class ControllerPacket extends MultiControllerPacket { 0x14 }; - public static final byte[] TAIL = + private static final byte[] TAIL = { (byte)0x9C, 0x00, @@ -24,7 +24,7 @@ public class ControllerPacket extends MultiControllerPacket { 0x00 }; - public static final int PACKET_TYPE = 0x18; + private static final int PACKET_TYPE = 0x18; public static final short A_FLAG = 0x1000; public static final short B_FLAG = 0x2000; @@ -42,15 +42,15 @@ public class ControllerPacket extends MultiControllerPacket { public static final short RS_CLK_FLAG = 0x0080; public static final short SPECIAL_BUTTON_FLAG = 0x0400; - public static final short PAYLOAD_LENGTH = 24; - public static final short PACKET_LENGTH = PAYLOAD_LENGTH + + private static final short PAYLOAD_LENGTH = 24; + private static final short PACKET_LENGTH = PAYLOAD_LENGTH + InputPacket.HEADER_LENGTH; public ControllerPacket(short buttonFlags, byte leftTrigger, byte rightTrigger, short leftStickX, short leftStickY, short rightStickX, short rightStickY) { - super((short) 0, buttonFlags, leftTrigger, rightTrigger, leftStickX, + super(PACKET_TYPE, (short) 0, buttonFlags, leftTrigger, rightTrigger, leftStickX, leftStickY, rightStickX, rightStickY); this.buttonFlags = buttonFlags; diff --git a/moonlight-common/src/com/limelight/nvstream/input/ControllerStream.java b/moonlight-common/src/com/limelight/nvstream/input/ControllerStream.java index 506a30bf..f898f993 100644 --- a/moonlight-common/src/com/limelight/nvstream/input/ControllerStream.java +++ b/moonlight-common/src/com/limelight/nvstream/input/ControllerStream.java @@ -20,9 +20,9 @@ import com.limelight.nvstream.ConnectionContext; public class ControllerStream { - public final static int PORT = 35043; + private final static int PORT = 35043; - public final static int CONTROLLER_TIMEOUT = 3000; + private final static int CONTROLLER_TIMEOUT = 3000; private ConnectionContext context; diff --git a/moonlight-common/src/com/limelight/nvstream/input/KeyboardPacket.java b/moonlight-common/src/com/limelight/nvstream/input/KeyboardPacket.java index f870727b..ff4d4b90 100644 --- a/moonlight-common/src/com/limelight/nvstream/input/KeyboardPacket.java +++ b/moonlight-common/src/com/limelight/nvstream/input/KeyboardPacket.java @@ -5,7 +5,7 @@ import java.nio.ByteOrder; public class KeyboardPacket extends InputPacket { private static final int PACKET_TYPE = 0x0A; - public static final int PACKET_LENGTH = 14; + private static final int PACKET_LENGTH = 14; public static final byte KEY_DOWN = 0x03; public static final byte KEY_UP = 0x04; diff --git a/moonlight-common/src/com/limelight/nvstream/input/MouseButtonPacket.java b/moonlight-common/src/com/limelight/nvstream/input/MouseButtonPacket.java index bdb9e55d..0ed05469 100644 --- a/moonlight-common/src/com/limelight/nvstream/input/MouseButtonPacket.java +++ b/moonlight-common/src/com/limelight/nvstream/input/MouseButtonPacket.java @@ -8,13 +8,13 @@ public class MouseButtonPacket extends InputPacket { byte buttonEventType; byte mouseButton; - public static final int PACKET_TYPE = 0x5; - public static final int PAYLOAD_LENGTH = 5; - public static final int PACKET_LENGTH = PAYLOAD_LENGTH + + private static final int PACKET_TYPE = 0x5; + private static final int PAYLOAD_LENGTH = 5; + private static final int PACKET_LENGTH = PAYLOAD_LENGTH + InputPacket.HEADER_LENGTH; - public static final byte PRESS_EVENT = 0x07; - public static final byte RELEASE_EVENT = 0x08; + private static final byte PRESS_EVENT = 0x07; + private static final byte RELEASE_EVENT = 0x08; public static final byte BUTTON_LEFT = 0x01; public static final byte BUTTON_MIDDLE = 0x02; diff --git a/moonlight-common/src/com/limelight/nvstream/input/MouseScrollPacket.java b/moonlight-common/src/com/limelight/nvstream/input/MouseScrollPacket.java index b5fcec65..b9c2a9dd 100644 --- a/moonlight-common/src/com/limelight/nvstream/input/MouseScrollPacket.java +++ b/moonlight-common/src/com/limelight/nvstream/input/MouseScrollPacket.java @@ -4,9 +4,9 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; public class MouseScrollPacket extends InputPacket { - public static final int PACKET_TYPE = 0xa; - public static final int PAYLOAD_LENGTH = 10; - public static final int PACKET_LENGTH = PAYLOAD_LENGTH + + private static final int PACKET_TYPE = 0xa; + private static final int PAYLOAD_LENGTH = 10; + private static final int PACKET_LENGTH = PAYLOAD_LENGTH + InputPacket.HEADER_LENGTH; short scroll; diff --git a/moonlight-common/src/com/limelight/nvstream/input/MultiControllerPacket.java b/moonlight-common/src/com/limelight/nvstream/input/MultiControllerPacket.java index 5487598d..0a76b3e4 100644 --- a/moonlight-common/src/com/limelight/nvstream/input/MultiControllerPacket.java +++ b/moonlight-common/src/com/limelight/nvstream/input/MultiControllerPacket.java @@ -4,7 +4,7 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; public class MultiControllerPacket extends InputPacket { - public static final byte[] TAIL = + private static final byte[] TAIL = { (byte)0x9C, 0x00, @@ -14,10 +14,10 @@ public class MultiControllerPacket extends InputPacket { 0x00 }; - public static final int PACKET_TYPE = 0x1e; + private static final int PACKET_TYPE = 0x1e; - public static final short PAYLOAD_LENGTH = 30; - public static final short PACKET_LENGTH = PAYLOAD_LENGTH + + private static final short PAYLOAD_LENGTH = 30; + private static final short PACKET_LENGTH = PAYLOAD_LENGTH + InputPacket.HEADER_LENGTH; short controllerNumber; @@ -47,6 +47,27 @@ public class MultiControllerPacket extends InputPacket { this.rightStickX = rightStickX; this.rightStickY = rightStickY; } + + public MultiControllerPacket(int packetType, + short controllerNumber, short buttonFlags, + byte leftTrigger, byte rightTrigger, + short leftStickX, short leftStickY, + short rightStickX, short rightStickY) + { + super(packetType); + + this.controllerNumber = controllerNumber; + + this.buttonFlags = buttonFlags; + this.leftTrigger = leftTrigger; + this.rightTrigger = rightTrigger; + + this.leftStickX = leftStickX; + this.leftStickY = leftStickY; + + this.rightStickX = rightStickX; + this.rightStickY = rightStickY; + } @Override public void toWirePayload(ByteBuffer bb) {