├── build-common.xml ├── build-sourceforge.xml ├── gnu-getopt-1.0.11-java └── lib │ └── java-getopt-1.0.11.jar ├── gnu-getopt-1.0.13-java └── lib │ └── java-getopt-1.0.13.jar ├── keymaps ├── ar ├── da ├── de ├── en-gb ├── en-us ├── es ├── fi ├── fr ├── fr-be ├── hr ├── it ├── ja ├── lt ├── lv ├── mk ├── no ├── pl ├── pt ├── pt-br ├── ru ├── sl ├── sv ├── tk └── tr ├── log4j-java1.1 └── log4j-java1.1.jar ├── src └── com │ └── elusiva │ └── rdp │ ├── Bitmap.java │ ├── Cache.java │ ├── Common.java │ ├── CommunicationMonitor.java │ ├── ConnectionException.java │ ├── Constants.java │ ├── DataBlob.java │ ├── DisconnnectCodeMapper.java │ ├── Glyph.java │ ├── HexDump.java │ ├── ISO.java │ ├── Input.java │ ├── Licence.java │ ├── LicenceStore.java │ ├── MCS.java │ ├── OKDialog.java │ ├── Options.java │ ├── OptionsBuilder.java │ ├── OrderException.java │ ├── OrderState.java │ ├── Orders.java │ ├── PstCache.java │ ├── RDPClientChooser.java │ ├── RasterOp.java │ ├── Rdesktop.java │ ├── RdesktopCanvas.java │ ├── RdesktopComponentAdapter.java │ ├── RdesktopException.java │ ├── RdesktopFocusListener.java │ ├── RdesktopFrame.java │ ├── RdesktopRunner.java │ ├── RdesktopWindowAdapter.java │ ├── Rdp.java │ ├── RdpPacket.java │ ├── Secure.java │ ├── Utilities.java │ ├── Version.java │ ├── WrappedImage.java │ ├── YesNoDialog.java │ ├── applet │ └── RdpApplet.java │ ├── crypto │ ├── BlockMessageDigest.java │ ├── CryptoException.java │ ├── Key.java │ ├── MD5.java │ ├── RC4.java │ └── SHA1.java │ ├── keymapping │ ├── KeyCode.java │ ├── KeyCode_FileBased.java │ ├── KeyMapException.java │ └── MapDef.java │ ├── loader │ └── JRdpLoader.java │ ├── menu │ └── RdpMenu.java │ ├── orders │ ├── BoundsOrder.java │ ├── Brush.java │ ├── DeskSaveOrder.java │ ├── DestBltOrder.java │ ├── LineOrder.java │ ├── MemBltOrder.java │ ├── Order.java │ ├── PatBltOrder.java │ ├── Pen.java │ ├── PolyLineOrder.java │ ├── RectangleOrder.java │ ├── ScreenBltOrder.java │ ├── Text2Order.java │ └── TriBltOrder.java │ ├── rdp5 │ ├── Rdp5.java │ ├── TestChannel.java │ ├── VChannel.java │ ├── VChannels.java │ └── cliprdr │ │ ├── BMPToImageThread.java │ │ ├── ClipBMP.java │ │ ├── ClipChannel.java │ │ ├── ClipInterface.java │ │ ├── DIBHandler.java │ │ ├── ImageSelection.java │ │ ├── MetafilepictHandler.java │ │ ├── TextHandler.java │ │ ├── TypeHandler.java │ │ ├── TypeHandlerList.java │ │ └── UnicodeHandler.java │ └── tools │ └── SendEvent.java ├── src1.1 └── com │ └── elusiva │ └── rdp │ ├── ISO_Localised.java │ ├── Input_Localised.java │ ├── KeyCode_FileBased_Localised.java │ ├── LicenceStore_Localised.java │ ├── RdesktopCanvas_Localised.java │ ├── RdesktopFrame_Localised.java │ ├── RdpPacket_Localised.java │ └── Utilities_Localised.java ├── src1.2 └── com │ └── elusiva │ └── rdp │ ├── ISO_Localised.java │ ├── Input_Localised.java │ ├── KeyCode_FileBased_Localised.java │ ├── LicenceStore_Localised.java │ ├── RdesktopCanvas_Localised.java │ ├── RdesktopFrame_Localised.java │ ├── RdpPacket_Localised.java │ └── Utilities_Localised.java ├── src1.3 └── com │ └── elusiva │ └── rdp │ ├── ISO_Localised.java │ ├── Input_Localised.java │ ├── KeyCode_FileBased_Localised.java │ ├── LicenceStore_Localised.java │ ├── RdesktopCanvas_Localised.java │ ├── RdesktopFrame_Localised.java │ ├── RdpPacket_Localised.java │ └── Utilities_Localised.java ├── src1.4 └── com │ └── elusiva │ └── rdp │ ├── ISO_Localised.java │ ├── Input_Localised.java │ ├── KeyCode_FileBased_Localised.java │ ├── LicenceStore_Localised.java │ ├── RdesktopCanvas_Localised.java │ ├── RdesktopFrame_Localised.java │ ├── RdpPacket_Localised.java │ └── Utilities_Localised.java └── src1.5 └── com └── elusiva └── rdp ├── ISO_Localised.java ├── Input_Localised.java ├── KeyCode_FileBased_Localised.java ├── LicenceStore_Localised.java ├── RdesktopCanvas_Localised.java ├── RdesktopFrame_Localised.java ├── RdpPacket_Localised.java └── Utilities_Localised.java /build-common.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /build-sourceforge.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 42 | 43 | 44 | 45 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /gnu-getopt-1.0.11-java/lib/java-getopt-1.0.11.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/gnu-getopt-1.0.11-java/lib/java-getopt-1.0.11.jar -------------------------------------------------------------------------------- /gnu-getopt-1.0.13-java/lib/java-getopt-1.0.13.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/gnu-getopt-1.0.13-java/lib/java-getopt-1.0.13.jar -------------------------------------------------------------------------------- /keymaps/ar: -------------------------------------------------------------------------------- 1 | c 0x401 2 | 0 18 0 0x38 4 Alt 3 | 0 10 0 0x1c 0 Enter 4 | 0 8 0 0xe 0 Backspace 5 | 0 17 0 0x1d 2 Ctrl 6 | 0 9 0 0xf 0 Tab 7 | 0 16 0 0x2a 1 Shift 8 | 0 20 0 0x3a 0 Caps Lock 9 | 0 32 0 0x39 0 Space 10 | 0 27 0 0x1 0 Escape 11 | 0 33 0 0xc9 0 Page Up 12 | 0 34 0 0xd1 0 Page Down 13 | 0 35 0 0xcf 0 End 14 | 0 36 0 0xc7 0 Home 15 | 0 37 0 0xcb 0 Left 16 | 0 38 0 0xc8 0 Up 17 | 0 39 0 0xcd 0 Right 18 | 0 40 0 0xd0 0 Down 19 | 0 226 0 0xcb 0 Left 20 | 0 224 0 0xc8 0 Up 21 | 0 227 0 0xcd 0 Right 22 | 0 225 0 0xd0 0 Down 23 | 0 154 0 0xb7 0 Print Screen 24 | 0 155 0 0xd2 0 Insert 25 | 0 112 0 0x3b 0 F1 26 | 0 113 0 0x3c 0 F2 27 | 0 114 0 0x3d 0 F3 28 | 0 115 0 0x3e 0 F4 29 | 0 116 0 0x3f 0 F5 30 | 0 117 0 0x40 0 F6 31 | 0 118 0 0x41 0 F7 32 | 0 119 0 0x42 0 F8 33 | 0 120 0 0x43 0 F9 34 | 0 121 0 0x44 0 F10 35 | 0 122 0 0x57 0 F11 36 | 0 123 0 0x58 0 F12 37 | 0 144 0 0x45 0 Num Lock 38 | 0 145 0 0x46 0 Scroll Lock 39 | 0 127 0 0xd3 0 Delete 40 | 0 65406 0 0xb8 0 Alt Graph 41 | 0 65482 0 0xdd 0 Props 42 | 1 96 0 0x29 0 ` 43 | 1 96 0 0x29 8 ` 44 | 1 126 0 0x29 1 ~ 45 | 1 126 0 0x29 9 ~ 46 | 1 49 0 0x2 0 1 47 | 1 49 0 0x2 8 1 48 | 1 33 0 0x2 1 ! 49 | 1 33 0 0x2 9 ! 50 | 1 50 0 0x3 0 2 51 | 1 50 0 0x3 8 2 52 | 1 64 0 0x3 1 @ 53 | 1 64 0 0x3 9 @ 54 | 1 51 0 0x4 0 3 55 | 1 51 0 0x4 8 3 56 | 1 35 0 0x4 1 # 57 | 1 35 0 0x4 9 # 58 | 1 52 0 0x5 0 4 59 | 1 52 0 0x5 8 4 60 | 1 36 0 0x5 1 $ 61 | 1 36 0 0x5 9 $ 62 | 1 53 0 0x6 0 5 63 | 1 53 0 0x6 8 5 64 | 1 37 0 0x6 1 % 65 | 1 37 0 0x6 9 % 66 | 1 54 0 0x7 0 6 67 | 1 54 0 0x7 8 6 68 | 1 94 0 0x7 1 ^ 69 | 1 94 0 0x7 9 ^ 70 | 1 55 0 0x8 0 7 71 | 1 55 0 0x8 8 7 72 | 1 38 0 0x8 1 & 73 | 1 38 0 0x8 9 & 74 | 1 56 0 0x9 0 8 75 | 1 56 0 0x9 8 8 76 | 1 42 0 0x9 1 * 77 | 1 42 0 0x9 9 * 78 | 1 57 0 0xa 0 9 79 | 1 57 0 0xa 8 9 80 | 1 40 0 0xa 1 ( 81 | 1 40 0 0xa 9 ( 82 | 1 48 0 0xb 0 0 83 | 1 48 0 0xb 8 0 84 | 1 41 0 0xb 1 ) 85 | 1 41 0 0xb 9 ) 86 | 1 45 0 0xc 0 - 87 | 1 45 0 0xc 8 - 88 | 1 95 0 0xc 1 _ 89 | 1 95 0 0xc 9 _ 90 | 1 61 0 0xd 0 = 91 | 1 61 0 0xd 8 = 92 | 1 43 0 0xd 1 + 93 | 1 43 0 0xd 9 + 94 | 1 113 0 0x10 0 q 95 | 1 113 0 0x10 9 q 96 | 1 81 0 0x10 1 Q 97 | 1 81 0 0x10 8 Q 98 | 1 119 0 0x11 0 w 99 | 1 119 0 0x11 9 w 100 | 1 87 0 0x11 1 W 101 | 1 87 0 0x11 8 W 102 | 1 101 0 0x12 0 e 103 | 1 101 0 0x12 9 e 104 | 1 69 0 0x12 1 E 105 | 1 69 0 0x12 8 E 106 | 1 114 0 0x13 0 r 107 | 1 114 0 0x13 9 r 108 | 1 82 0 0x13 1 R 109 | 1 82 0 0x13 8 R 110 | 1 116 0 0x14 0 t 111 | 1 116 0 0x14 9 t 112 | 1 84 0 0x14 1 T 113 | 1 84 0 0x14 8 T 114 | 1 121 0 0x15 0 y 115 | 1 121 0 0x15 9 y 116 | 1 89 0 0x15 1 Y 117 | 1 89 0 0x15 8 Y 118 | 1 117 0 0x16 0 u 119 | 1 117 0 0x16 9 u 120 | 1 85 0 0x16 1 U 121 | 1 85 0 0x16 8 U 122 | 1 105 0 0x17 0 i 123 | 1 105 0 0x17 9 i 124 | 1 73 0 0x17 1 I 125 | 1 73 0 0x17 8 I 126 | 1 111 0 0x18 0 o 127 | 1 111 0 0x18 9 o 128 | 1 79 0 0x18 1 O 129 | 1 79 0 0x18 8 O 130 | 1 112 0 0x19 0 p 131 | 1 112 0 0x19 9 p 132 | 1 80 0 0x19 1 P 133 | 1 80 0 0x19 8 P 134 | 1 91 0 0x1a 0 [ 135 | 1 91 0 0x1a 8 [ 136 | 1 123 0 0x1a 1 { 137 | 1 123 0 0x1a 9 { 138 | 1 93 0 0x1b 0 ] 139 | 1 93 0 0x1b 8 ] 140 | 1 125 0 0x1b 1 } 141 | 1 125 0 0x1b 9 } 142 | 1 97 0 0x1e 0 a 143 | 1 97 0 0x1e 9 a 144 | 1 65 0 0x1e 1 A 145 | 1 65 0 0x1e 8 A 146 | 1 115 0 0x1f 0 s 147 | 1 115 0 0x1f 9 s 148 | 1 83 0 0x1f 1 S 149 | 1 83 0 0x1f 8 S 150 | 1 100 0 0x20 0 d 151 | 1 100 0 0x20 9 d 152 | 1 68 0 0x20 1 D 153 | 1 68 0 0x20 8 D 154 | 1 102 0 0x21 0 f 155 | 1 102 0 0x21 9 f 156 | 1 70 0 0x21 1 F 157 | 1 70 0 0x21 8 F 158 | 1 103 0 0x22 0 g 159 | 1 103 0 0x22 9 g 160 | 1 71 0 0x22 1 G 161 | 1 71 0 0x22 8 G 162 | 1 104 0 0x23 0 h 163 | 1 104 0 0x23 9 h 164 | 1 72 0 0x23 1 H 165 | 1 72 0 0x23 8 H 166 | 1 106 0 0x24 0 j 167 | 1 106 0 0x24 9 j 168 | 1 74 0 0x24 1 J 169 | 1 74 0 0x24 8 J 170 | 1 107 0 0x25 0 k 171 | 1 107 0 0x25 9 k 172 | 1 75 0 0x25 1 K 173 | 1 75 0 0x25 8 K 174 | 1 108 0 0x26 0 l 175 | 1 108 0 0x26 9 l 176 | 1 76 0 0x26 1 L 177 | 1 76 0 0x26 8 L 178 | 1 59 0 0x27 0 ; 179 | 1 59 0 0x27 8 ; 180 | 1 58 0 0x27 1 : 181 | 1 58 0 0x27 9 : 182 | 1 39 0 0x28 0 ' 183 | 1 39 0 0x28 8 ' 184 | 1 34 0 0x28 1 " 185 | 1 34 0 0x28 9 " 186 | 1 92 0 0x2b 0 \ 187 | 1 92 0 0x2b 8 \ 188 | 1 124 0 0x2b 1 | 189 | 1 124 0 0x2b 9 | 190 | 1 122 0 0x2c 0 z 191 | 1 122 0 0x2c 9 z 192 | 1 90 0 0x2c 1 Z 193 | 1 90 0 0x2c 8 Z 194 | 1 120 0 0x2d 0 x 195 | 1 120 0 0x2d 9 x 196 | 1 88 0 0x2d 1 X 197 | 1 88 0 0x2d 8 X 198 | 1 99 0 0x2e 0 c 199 | 1 99 0 0x2e 9 c 200 | 1 67 0 0x2e 1 C 201 | 1 67 0 0x2e 8 C 202 | 1 118 0 0x2f 0 v 203 | 1 118 0 0x2f 9 v 204 | 1 86 0 0x2f 1 V 205 | 1 86 0 0x2f 8 V 206 | 1 98 0 0x30 0 b 207 | 1 98 0 0x30 9 b 208 | 1 66 0 0x30 1 B 209 | 1 66 0 0x30 8 B 210 | 1 110 0 0x31 0 n 211 | 1 110 0 0x31 9 n 212 | 1 78 0 0x31 1 N 213 | 1 78 0 0x31 8 N 214 | 1 109 0 0x32 0 m 215 | 1 109 0 0x32 9 m 216 | 1 77 0 0x32 1 M 217 | 1 77 0 0x32 8 M 218 | 1 44 0 0x33 0 , 219 | 1 44 0 0x33 8 , 220 | 1 60 0 0x33 1 < 221 | 1 60 0 0x33 9 < 222 | 1 46 0 0x34 0 . 223 | 1 46 0 0x34 8 . 224 | 1 62 0 0x34 1 > 225 | 1 62 0 0x34 9 > 226 | 1 47 0 0x35 0 / 227 | 1 47 0 0x35 8 / 228 | 1 63 0 0x35 1 ? 229 | 1 63 0 0x35 9 ? 230 | -------------------------------------------------------------------------------- /keymaps/da: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/da -------------------------------------------------------------------------------- /keymaps/de: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/de -------------------------------------------------------------------------------- /keymaps/en-gb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/en-gb -------------------------------------------------------------------------------- /keymaps/en-us: -------------------------------------------------------------------------------- 1 | c 0x409 2 | 0 18 0 0x38 4 Alt 3 | 0 10 0 0x1c 0 Enter 4 | 0 8 0 0xe 0 Backspace 5 | 0 17 0 0x1d 2 Ctrl 6 | 0 9 0 0xf 0 Tab 7 | 0 16 0 0x2a 1 Shift 8 | 0 20 0 0x3a 0 Caps Lock 9 | 0 32 0 0x39 0 Space 10 | 0 27 0 0x1 0 Escape 11 | 0 33 0 0xc9 0 Page Up 12 | 0 34 0 0xd1 0 Page Down 13 | 0 35 0 0xcf 0 End 14 | 0 36 0 0xc7 0 Home 15 | 0 37 0 0xcb 0 Left 16 | 0 38 0 0xc8 0 Up 17 | 0 39 0 0xcd 0 Right 18 | 0 40 0 0xd0 0 Down 19 | 0 226 0 0xcb 0 Left 20 | 0 224 0 0xc8 0 Up 21 | 0 227 0 0xcd 0 Right 22 | 0 225 0 0xd0 0 Down 23 | 0 154 0 0xb7 0 Print Screen 24 | 0 155 0 0xd2 0 Insert 25 | 0 112 0 0x3b 0 F1 26 | 0 113 0 0x3c 0 F2 27 | 0 114 0 0x3d 0 F3 28 | 0 115 0 0x3e 0 F4 29 | 0 116 0 0x3f 0 F5 30 | 0 117 0 0x40 0 F6 31 | 0 118 0 0x41 0 F7 32 | 0 119 0 0x42 0 F8 33 | 0 120 0 0x43 0 F9 34 | 0 121 0 0x44 0 F10 35 | 0 122 0 0x57 0 F11 36 | 0 123 0 0x58 0 F12 37 | 0 144 0 0x45 0 Num Lock 38 | 0 145 0 0x46 0 Scroll Lock 39 | 0 127 0 0xd3 0 Delete 40 | 0 65406 0 0xb8 0 Alt Graph 41 | 0 65482 0 0xdd 0 Props 42 | 1 96 0 0x29 0 ` 43 | 1 96 0 0x29 8 ` 44 | 1 126 0 0x29 1 ~ 45 | 1 126 0 0x29 9 ~ 46 | 1 49 0 0x2 0 1 47 | 1 49 0 0x2 8 1 48 | 1 33 0 0x2 1 ! 49 | 1 33 0 0x2 9 ! 50 | 1 50 0 0x3 0 2 51 | 1 50 0 0x3 8 2 52 | 1 64 0 0x3 1 @ 53 | 1 64 0 0x3 9 @ 54 | 1 51 0 0x4 0 3 55 | 1 51 0 0x4 8 3 56 | 1 35 0 0x4 1 # 57 | 1 35 0 0x4 9 # 58 | 1 52 0 0x5 0 4 59 | 1 52 0 0x5 8 4 60 | 1 36 0 0x5 1 $ 61 | 1 36 0 0x5 9 $ 62 | 1 53 0 0x6 0 5 63 | 1 53 0 0x6 8 5 64 | 1 37 0 0x6 1 % 65 | 1 37 0 0x6 9 % 66 | 1 54 0 0x7 0 6 67 | 1 54 0 0x7 8 6 68 | 1 94 0 0x7 1 ^ 69 | 1 94 0 0x7 9 ^ 70 | 1 55 0 0x8 0 7 71 | 1 55 0 0x8 8 7 72 | 1 38 0 0x8 1 & 73 | 1 38 0 0x8 9 & 74 | 1 56 0 0x9 0 8 75 | 1 56 0 0x9 8 8 76 | 1 42 0 0x9 1 * 77 | 1 42 0 0x9 9 * 78 | 1 57 0 0xa 0 9 79 | 1 57 0 0xa 8 9 80 | 1 40 0 0xa 1 ( 81 | 1 40 0 0xa 9 ( 82 | 1 48 0 0xb 0 0 83 | 1 48 0 0xb 8 0 84 | 1 41 0 0xb 1 ) 85 | 1 41 0 0xb 9 ) 86 | 1 45 0 0xc 0 - 87 | 1 45 0 0xc 8 - 88 | 1 95 0 0xc 1 _ 89 | 1 95 0 0xc 9 _ 90 | 1 61 0 0xd 0 = 91 | 1 61 0 0xd 8 = 92 | 1 43 0 0xd 1 + 93 | 1 43 0 0xd 9 + 94 | 1 113 0 0x10 0 q 95 | 1 113 0 0x10 9 q 96 | 1 81 0 0x10 1 Q 97 | 1 81 0 0x10 8 Q 98 | 1 119 0 0x11 0 w 99 | 1 119 0 0x11 9 w 100 | 1 87 0 0x11 1 W 101 | 1 87 0 0x11 8 W 102 | 1 101 0 0x12 0 e 103 | 1 101 0 0x12 9 e 104 | 1 69 0 0x12 1 E 105 | 1 69 0 0x12 8 E 106 | 1 114 0 0x13 0 r 107 | 1 114 0 0x13 9 r 108 | 1 82 0 0x13 1 R 109 | 1 82 0 0x13 8 R 110 | 1 116 0 0x14 0 t 111 | 1 116 0 0x14 9 t 112 | 1 84 0 0x14 1 T 113 | 1 84 0 0x14 8 T 114 | 1 121 0 0x15 0 y 115 | 1 121 0 0x15 9 y 116 | 1 89 0 0x15 1 Y 117 | 1 89 0 0x15 8 Y 118 | 1 117 0 0x16 0 u 119 | 1 117 0 0x16 9 u 120 | 1 85 0 0x16 1 U 121 | 1 85 0 0x16 8 U 122 | 1 105 0 0x17 0 i 123 | 1 105 0 0x17 9 i 124 | 1 73 0 0x17 1 I 125 | 1 73 0 0x17 8 I 126 | 1 111 0 0x18 0 o 127 | 1 111 0 0x18 9 o 128 | 1 79 0 0x18 1 O 129 | 1 79 0 0x18 8 O 130 | 1 112 0 0x19 0 p 131 | 1 112 0 0x19 9 p 132 | 1 80 0 0x19 1 P 133 | 1 80 0 0x19 8 P 134 | 1 91 0 0x1a 0 [ 135 | 1 91 0 0x1a 8 [ 136 | 1 123 0 0x1a 1 { 137 | 1 123 0 0x1a 9 { 138 | 1 93 0 0x1b 0 ] 139 | 1 93 0 0x1b 8 ] 140 | 1 125 0 0x1b 1 } 141 | 1 125 0 0x1b 9 } 142 | 1 97 0 0x1e 0 a 143 | 1 97 0 0x1e 9 a 144 | 1 65 0 0x1e 1 A 145 | 1 65 0 0x1e 8 A 146 | 1 115 0 0x1f 0 s 147 | 1 115 0 0x1f 9 s 148 | 1 83 0 0x1f 1 S 149 | 1 83 0 0x1f 8 S 150 | 1 100 0 0x20 0 d 151 | 1 100 0 0x20 9 d 152 | 1 68 0 0x20 1 D 153 | 1 68 0 0x20 8 D 154 | 1 102 0 0x21 0 f 155 | 1 102 0 0x21 9 f 156 | 1 70 0 0x21 1 F 157 | 1 70 0 0x21 8 F 158 | 1 103 0 0x22 0 g 159 | 1 103 0 0x22 9 g 160 | 1 71 0 0x22 1 G 161 | 1 71 0 0x22 8 G 162 | 1 104 0 0x23 0 h 163 | 1 104 0 0x23 9 h 164 | 1 72 0 0x23 1 H 165 | 1 72 0 0x23 8 H 166 | 1 106 0 0x24 0 j 167 | 1 106 0 0x24 9 j 168 | 1 74 0 0x24 1 J 169 | 1 74 0 0x24 8 J 170 | 1 107 0 0x25 0 k 171 | 1 107 0 0x25 9 k 172 | 1 75 0 0x25 1 K 173 | 1 75 0 0x25 8 K 174 | 1 108 0 0x26 0 l 175 | 1 108 0 0x26 9 l 176 | 1 76 0 0x26 1 L 177 | 1 76 0 0x26 8 L 178 | 1 59 0 0x27 0 ; 179 | 1 59 0 0x27 8 ; 180 | 1 58 0 0x27 1 : 181 | 1 58 0 0x27 9 : 182 | 1 39 0 0x28 0 ' 183 | 1 39 0 0x28 8 ' 184 | 1 34 0 0x28 1 " 185 | 1 34 0 0x28 9 " 186 | 1 92 0 0x2b 0 \ 187 | 1 92 0 0x2b 8 \ 188 | 1 124 0 0x2b 1 | 189 | 1 124 0 0x2b 9 | 190 | 1 122 0 0x2c 0 z 191 | 1 122 0 0x2c 9 z 192 | 1 90 0 0x2c 1 Z 193 | 1 90 0 0x2c 8 Z 194 | 1 120 0 0x2d 0 x 195 | 1 120 0 0x2d 9 x 196 | 1 88 0 0x2d 1 X 197 | 1 88 0 0x2d 8 X 198 | 1 99 0 0x2e 0 c 199 | 1 99 0 0x2e 9 c 200 | 1 67 0 0x2e 1 C 201 | 1 67 0 0x2e 8 C 202 | 1 118 0 0x2f 0 v 203 | 1 118 0 0x2f 9 v 204 | 1 86 0 0x2f 1 V 205 | 1 86 0 0x2f 8 V 206 | 1 98 0 0x30 0 b 207 | 1 98 0 0x30 9 b 208 | 1 66 0 0x30 1 B 209 | 1 66 0 0x30 8 B 210 | 1 110 0 0x31 0 n 211 | 1 110 0 0x31 9 n 212 | 1 78 0 0x31 1 N 213 | 1 78 0 0x31 8 N 214 | 1 109 0 0x32 0 m 215 | 1 109 0 0x32 9 m 216 | 1 77 0 0x32 1 M 217 | 1 77 0 0x32 8 M 218 | 1 44 0 0x33 0 , 219 | 1 44 0 0x33 8 , 220 | 1 60 0 0x33 1 < 221 | 1 60 0 0x33 9 < 222 | 1 46 0 0x34 0 . 223 | 1 46 0 0x34 8 . 224 | 1 62 0 0x34 1 > 225 | 1 62 0 0x34 9 > 226 | 1 47 0 0x35 0 / 227 | 1 47 0 0x35 8 / 228 | 1 63 0 0x35 1 ? 229 | 1 63 0 0x35 9 ? 230 | -------------------------------------------------------------------------------- /keymaps/es: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/es -------------------------------------------------------------------------------- /keymaps/fi: -------------------------------------------------------------------------------- 1 | c 0x40b 2 | 0 18 0 0x38 4 Alt 3 | 0 10 0 0x1c 0 Enter 4 | 0 8 0 0xe 0 Backspace 5 | 0 17 0 0x1d 2 Ctrl 6 | 0 9 0 0xf 0 Tab 7 | 0 16 0 0x2a 1 Shift 8 | 0 20 0 0x3a 0 Caps Lock 9 | 0 32 0 0x39 0 Space 10 | 0 27 0 0x1 0 Escape 11 | 0 33 0 0xc9 0 Page Up 12 | 0 34 0 0xd1 0 Page Down 13 | 0 35 0 0xcf 0 End 14 | 0 36 0 0xc7 0 Home 15 | 0 37 0 0xcb 0 Left 16 | 0 38 0 0xc8 0 Up 17 | 0 39 0 0xcd 0 Right 18 | 0 40 0 0xd0 0 Down 19 | 0 226 0 0xcb 0 Left 20 | 0 224 0 0xc8 0 Up 21 | 0 227 0 0xcd 0 Right 22 | 0 225 0 0xd0 0 Down 23 | 0 154 0 0xb7 0 Print Screen 24 | 0 155 0 0xd2 0 Insert 25 | 0 112 0 0x3b 0 F1 26 | 0 113 0 0x3c 0 F2 27 | 0 114 0 0x3d 0 F3 28 | 0 115 0 0x3e 0 F4 29 | 0 116 0 0x3f 0 F5 30 | 0 117 0 0x40 0 F6 31 | 0 118 0 0x41 0 F7 32 | 0 119 0 0x42 0 F8 33 | 0 120 0 0x43 0 F9 34 | 0 121 0 0x44 0 F10 35 | 0 122 0 0x57 0 F11 36 | 0 123 0 0x58 0 F12 37 | 0 144 0 0x45 0 Num Lock 38 | 0 145 0 0x46 0 Scroll Lock 39 | 0 127 0 0xd3 0 Delete 40 | 0 65406 0 0xb8 0 Alt Graph 41 | 0 65482 0 0xdd 0 Props 42 | 1 49 0 0x2 0 1 43 | 1 49 0 0x2 8 1 44 | 1 33 0 0x2 1 ! 45 | 1 33 0 0x2 9 ! 46 | 1 50 0 0x3 0 2 47 | 1 50 0 0x3 8 2 48 | 1 34 0 0x3 1 " 49 | 1 34 0 0x3 9 " 50 | 1 64 0 0x3 6 @ 51 | 1 51 0 0x4 0 3 52 | 1 51 0 0x4 8 3 53 | 1 35 0 0x4 1 # 54 | 1 35 0 0x4 9 # 55 | 1 52 0 0x5 0 4 56 | 1 52 0 0x5 8 4 57 | 1 36 0 0x5 1 $ 58 | 1 36 0 0x5 9 $ 59 | 1 53 0 0x6 0 5 60 | 1 53 0 0x6 8 5 61 | 1 37 0 0x6 1 % 62 | 1 37 0 0x6 9 % 63 | 1 54 0 0x7 0 6 64 | 1 54 0 0x7 8 6 65 | 1 38 0 0x7 1 & 66 | 1 38 0 0x7 9 & 67 | 1 55 0 0x8 0 7 68 | 1 55 0 0x8 8 7 69 | 1 47 0 0x8 1 / 70 | 1 47 0 0x8 9 / 71 | 1 123 0 0x8 6 { 72 | 1 56 0 0x9 0 8 73 | 1 56 0 0x9 8 8 74 | 1 40 0 0x9 1 ( 75 | 1 40 0 0x9 9 ( 76 | 1 91 0 0x9 6 [ 77 | 1 57 0 0xa 0 9 78 | 1 57 0 0xa 8 9 79 | 1 41 0 0xa 1 ) 80 | 1 41 0 0xa 9 ) 81 | 1 93 0 0xa 6 ] 82 | 1 48 0 0xb 0 0 83 | 1 48 0 0xb 8 0 84 | 1 61 0 0xb 1 = 85 | 1 61 0 0xb 9 = 86 | 1 125 0 0xb 6 } 87 | 1 43 0 0xc 0 + 88 | 1 43 0 0xc 8 + 89 | 1 63 0 0xc 1 ? 90 | 1 63 0 0xc 9 ? 91 | 1 92 0 0xc 6 \ 92 | 1 39 0 0xd 0 ' 93 | 1 39 0 0xd 8 ' 94 | 1 96 0 0xd 1 ` 95 | 1 96 0 0xd 9 ` 96 | 1 113 0 0x10 0 q 97 | 1 113 0 0x10 9 q 98 | 1 81 0 0x10 1 Q 99 | 1 81 0 0x10 8 Q 100 | 1 119 0 0x11 0 w 101 | 1 119 0 0x11 9 w 102 | 1 87 0 0x11 1 W 103 | 1 87 0 0x11 8 W 104 | 1 101 0 0x12 0 e 105 | 1 101 0 0x12 9 e 106 | 1 69 0 0x12 1 E 107 | 1 69 0 0x12 8 E 108 | 1 114 0 0x13 0 r 109 | 1 114 0 0x13 9 r 110 | 1 82 0 0x13 1 R 111 | 1 82 0 0x13 8 R 112 | 1 116 0 0x14 0 t 113 | 1 116 0 0x14 9 t 114 | 1 84 0 0x14 1 T 115 | 1 84 0 0x14 8 T 116 | 1 121 0 0x15 0 y 117 | 1 121 0 0x15 9 y 118 | 1 89 0 0x15 1 Y 119 | 1 89 0 0x15 8 Y 120 | 1 117 0 0x16 0 u 121 | 1 117 0 0x16 9 u 122 | 1 85 0 0x16 1 U 123 | 1 85 0 0x16 8 U 124 | 1 105 0 0x17 0 i 125 | 1 105 0 0x17 9 i 126 | 1 73 0 0x17 1 I 127 | 1 73 0 0x17 8 I 128 | 1 111 0 0x18 0 o 129 | 1 111 0 0x18 9 o 130 | 1 79 0 0x18 1 O 131 | 1 79 0 0x18 8 O 132 | 1 112 0 0x19 0 p 133 | 1 112 0 0x19 9 p 134 | 1 80 0 0x19 1 P 135 | 1 80 0 0x19 8 P 136 | 1 34 0 0x1b 0 " 137 | 1 34 0 0x1b 8 " 138 | 1 94 0 0x1b 1 ^ 139 | 1 94 0 0x1b 9 ^ 140 | 1 126 0 0x1b 6 ~ 141 | 1 97 0 0x1e 0 a 142 | 1 97 0 0x1e 9 a 143 | 1 65 0 0x1e 1 A 144 | 1 65 0 0x1e 8 A 145 | 1 115 0 0x1f 0 s 146 | 1 115 0 0x1f 9 s 147 | 1 83 0 0x1f 1 S 148 | 1 83 0 0x1f 8 S 149 | 1 100 0 0x20 0 d 150 | 1 100 0 0x20 9 d 151 | 1 68 0 0x20 1 D 152 | 1 68 0 0x20 8 D 153 | 1 102 0 0x21 0 f 154 | 1 102 0 0x21 9 f 155 | 1 70 0 0x21 1 F 156 | 1 70 0 0x21 8 F 157 | 1 103 0 0x22 0 g 158 | 1 103 0 0x22 9 g 159 | 1 71 0 0x22 1 G 160 | 1 71 0 0x22 8 G 161 | 1 104 0 0x23 0 h 162 | 1 104 0 0x23 9 h 163 | 1 72 0 0x23 1 H 164 | 1 72 0 0x23 8 H 165 | 1 106 0 0x24 0 j 166 | 1 106 0 0x24 9 j 167 | 1 74 0 0x24 1 J 168 | 1 74 0 0x24 8 J 169 | 1 107 0 0x25 0 k 170 | 1 107 0 0x25 9 k 171 | 1 75 0 0x25 1 K 172 | 1 75 0 0x25 8 K 173 | 1 108 0 0x26 0 l 174 | 1 108 0 0x26 9 l 175 | 1 76 0 0x26 1 L 176 | 1 76 0 0x26 8 L 177 | 1 39 0 0x2b 0 ' 178 | 1 39 0 0x2b 8 ' 179 | 1 42 0 0x2b 1 * 180 | 1 42 0 0x2b 9 * 181 | 1 122 0 0x2c 0 z 182 | 1 122 0 0x2c 9 z 183 | 1 90 0 0x2c 1 Z 184 | 1 90 0 0x2c 8 Z 185 | 1 120 0 0x2d 0 x 186 | 1 120 0 0x2d 9 x 187 | 1 88 0 0x2d 1 X 188 | 1 88 0 0x2d 8 X 189 | 1 99 0 0x2e 0 c 190 | 1 99 0 0x2e 9 c 191 | 1 67 0 0x2e 1 C 192 | 1 67 0 0x2e 8 C 193 | 1 118 0 0x2f 0 v 194 | 1 118 0 0x2f 9 v 195 | 1 86 0 0x2f 1 V 196 | 1 86 0 0x2f 8 V 197 | 1 98 0 0x30 0 b 198 | 1 98 0 0x30 9 b 199 | 1 66 0 0x30 1 B 200 | 1 66 0 0x30 8 B 201 | 1 110 0 0x31 0 n 202 | 1 110 0 0x31 9 n 203 | 1 78 0 0x31 1 N 204 | 1 78 0 0x31 8 N 205 | 1 109 0 0x32 0 m 206 | 1 109 0 0x32 9 m 207 | 1 77 0 0x32 1 M 208 | 1 77 0 0x32 8 M 209 | 1 44 0 0x33 0 , 210 | 1 44 0 0x33 8 , 211 | 1 59 0 0x33 1 ; 212 | 1 59 0 0x33 9 ; 213 | 1 46 0 0x34 0 . 214 | 1 46 0 0x34 8 . 215 | 1 58 0 0x34 1 : 216 | 1 58 0 0x34 9 : 217 | 1 45 0 0x35 0 - 218 | 1 45 0 0x35 8 - 219 | 1 95 0 0x35 1 _ 220 | 1 95 0 0x35 9 _ 221 | 1 60 0 0x56 0 < 222 | 1 60 0 0x56 8 < 223 | 1 62 0 0x56 1 > 224 | 1 62 0 0x56 9 > 225 | 1 124 0 0x56 6 | 226 | -------------------------------------------------------------------------------- /keymaps/fr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/fr -------------------------------------------------------------------------------- /keymaps/fr-be: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/fr-be -------------------------------------------------------------------------------- /keymaps/hr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/hr -------------------------------------------------------------------------------- /keymaps/it: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/it -------------------------------------------------------------------------------- /keymaps/ja: -------------------------------------------------------------------------------- 1 | c 0x411 2 | 0 18 0 0x38 4 Alt 3 | 0 10 0 0x1c 0 Enter 4 | 0 8 0 0xe 0 Backspace 5 | 0 17 0 0x1d 2 Ctrl 6 | 0 9 0 0xf 0 Tab 7 | 0 16 0 0x2a 1 Shift 8 | 0 20 0 0x3a 0 Caps Lock 9 | 0 32 0 0x39 0 Space 10 | 0 27 0 0x1 0 Escape 11 | 0 33 0 0xc9 0 Page Up 12 | 0 34 0 0xd1 0 Page Down 13 | 0 35 0 0xcf 0 End 14 | 0 36 0 0xc7 0 Home 15 | 0 37 0 0xcb 0 Left 16 | 0 38 0 0xc8 0 Up 17 | 0 39 0 0xcd 0 Right 18 | 0 40 0 0xd0 0 Down 19 | 0 226 0 0xcb 0 Left 20 | 0 224 0 0xc8 0 Up 21 | 0 227 0 0xcd 0 Right 22 | 0 225 0 0xd0 0 Down 23 | 0 154 0 0xb7 0 Print Screen 24 | 0 155 0 0xd2 0 Insert 25 | 0 112 0 0x3b 0 F1 26 | 0 113 0 0x3c 0 F2 27 | 0 114 0 0x3d 0 F3 28 | 0 115 0 0x3e 0 F4 29 | 0 116 0 0x3f 0 F5 30 | 0 117 0 0x40 0 F6 31 | 0 118 0 0x41 0 F7 32 | 0 119 0 0x42 0 F8 33 | 0 120 0 0x43 0 F9 34 | 0 121 0 0x44 0 F10 35 | 0 122 0 0x57 0 F11 36 | 0 123 0 0x58 0 F12 37 | 0 144 0 0x45 0 Num Lock 38 | 0 145 0 0x46 0 Scroll Lock 39 | 0 127 0 0xd3 0 Delete 40 | 0 65406 0 0xb8 0 Alt Graph 41 | 0 65482 0 0xdd 0 Props 42 | 1 49 0 0x29 0 1 43 | 1 49 0 0x29 8 1 44 | 1 33 0 0x29 1 ! 45 | 1 33 0 0x29 9 ! 46 | 1 50 0 0x2 0 2 47 | 1 50 0 0x2 8 2 48 | 1 34 0 0x2 1 " 49 | 1 34 0 0x2 9 " 50 | 1 51 0 0x3 0 3 51 | 1 51 0 0x3 8 3 52 | 1 35 0 0x3 1 # 53 | 1 35 0 0x3 9 # 54 | 1 52 0 0x4 0 4 55 | 1 52 0 0x4 8 4 56 | 1 36 0 0x4 1 $ 57 | 1 36 0 0x4 9 $ 58 | 1 53 0 0x5 0 5 59 | 1 53 0 0x5 8 5 60 | 1 37 0 0x5 1 % 61 | 1 37 0 0x5 9 % 62 | 1 54 0 0x6 0 6 63 | 1 54 0 0x6 8 6 64 | 1 38 0 0x6 1 & 65 | 1 38 0 0x6 9 & 66 | 1 55 0 0x7 0 7 67 | 1 55 0 0x7 8 7 68 | 1 39 0 0x7 1 ' 69 | 1 39 0 0x7 9 ' 70 | 1 56 0 0x8 0 8 71 | 1 56 0 0x8 8 8 72 | 1 40 0 0x8 1 ( 73 | 1 40 0 0x8 9 ( 74 | 1 57 0 0x9 0 9 75 | 1 57 0 0x9 8 9 76 | 1 41 0 0x9 1 ) 77 | 1 41 0 0x9 9 ) 78 | 1 48 0 0xa 0 0 79 | 1 48 0 0xa 8 0 80 | 1 126 0 0xa 1 ~ 81 | 1 126 0 0xa 9 ~ 82 | 1 45 0 0xb 0 - 83 | 1 45 0 0xb 8 - 84 | 1 61 0 0xb 1 = 85 | 1 61 0 0xb 9 = 86 | 1 94 0 0xc 0 ^ 87 | 1 94 0 0xc 8 ^ 88 | 1 126 0 0xc 1 ~ 89 | 1 126 0 0xc 9 ~ 90 | 1 92 0 0xd 0 \ 91 | 1 92 0 0xd 8 \ 92 | 1 124 0 0xd 1 | 93 | 1 124 0 0xd 9 | 94 | 1 113 0 0x10 0 q 95 | 1 113 0 0x10 9 q 96 | 1 81 0 0x10 1 Q 97 | 1 81 0 0x10 8 Q 98 | 1 119 0 0x11 0 w 99 | 1 119 0 0x11 9 w 100 | 1 87 0 0x11 1 W 101 | 1 87 0 0x11 8 W 102 | 1 101 0 0x12 0 e 103 | 1 101 0 0x12 9 e 104 | 1 69 0 0x12 1 E 105 | 1 69 0 0x12 8 E 106 | 1 114 0 0x13 0 r 107 | 1 114 0 0x13 9 r 108 | 1 82 0 0x13 1 R 109 | 1 82 0 0x13 8 R 110 | 1 116 0 0x14 0 t 111 | 1 116 0 0x14 9 t 112 | 1 84 0 0x14 1 T 113 | 1 84 0 0x14 8 T 114 | 1 121 0 0x15 0 y 115 | 1 121 0 0x15 9 y 116 | 1 89 0 0x15 1 Y 117 | 1 89 0 0x15 8 Y 118 | 1 117 0 0x16 0 u 119 | 1 117 0 0x16 9 u 120 | 1 85 0 0x16 1 U 121 | 1 85 0 0x16 8 U 122 | 1 105 0 0x17 0 i 123 | 1 105 0 0x17 9 i 124 | 1 73 0 0x17 1 I 125 | 1 73 0 0x17 8 I 126 | 1 111 0 0x18 0 o 127 | 1 111 0 0x18 9 o 128 | 1 79 0 0x18 1 O 129 | 1 79 0 0x18 8 O 130 | 1 112 0 0x19 0 p 131 | 1 112 0 0x19 9 p 132 | 1 80 0 0x19 1 P 133 | 1 80 0 0x19 8 P 134 | 1 64 0 0x1a 0 @ 135 | 1 64 0 0x1a 8 @ 136 | 1 96 0 0x1a 1 ` 137 | 1 96 0 0x1a 9 ` 138 | 1 91 0 0x1b 0 [ 139 | 1 91 0 0x1b 8 [ 140 | 1 123 0 0x1b 1 { 141 | 1 123 0 0x1b 9 { 142 | 1 97 0 0x1e 0 a 143 | 1 97 0 0x1e 9 a 144 | 1 65 0 0x1e 1 A 145 | 1 65 0 0x1e 8 A 146 | 1 115 0 0x1f 0 s 147 | 1 115 0 0x1f 9 s 148 | 1 83 0 0x1f 1 S 149 | 1 83 0 0x1f 8 S 150 | 1 100 0 0x20 0 d 151 | 1 100 0 0x20 9 d 152 | 1 68 0 0x20 1 D 153 | 1 68 0 0x20 8 D 154 | 1 102 0 0x21 0 f 155 | 1 102 0 0x21 9 f 156 | 1 70 0 0x21 1 F 157 | 1 70 0 0x21 8 F 158 | 1 103 0 0x22 0 g 159 | 1 103 0 0x22 9 g 160 | 1 71 0 0x22 1 G 161 | 1 71 0 0x22 8 G 162 | 1 104 0 0x23 0 h 163 | 1 104 0 0x23 9 h 164 | 1 72 0 0x23 1 H 165 | 1 72 0 0x23 8 H 166 | 1 106 0 0x24 0 j 167 | 1 106 0 0x24 9 j 168 | 1 74 0 0x24 1 J 169 | 1 74 0 0x24 8 J 170 | 1 107 0 0x25 0 k 171 | 1 107 0 0x25 9 k 172 | 1 75 0 0x25 1 K 173 | 1 75 0 0x25 8 K 174 | 1 108 0 0x26 0 l 175 | 1 108 0 0x26 9 l 176 | 1 76 0 0x26 1 L 177 | 1 76 0 0x26 8 L 178 | 1 59 0 0x27 0 ; 179 | 1 59 0 0x27 8 ; 180 | 1 43 0 0x27 1 + 181 | 1 43 0 0x27 9 + 182 | 1 58 0 0x28 0 : 183 | 1 58 0 0x28 8 : 184 | 1 42 0 0x28 1 * 185 | 1 42 0 0x28 9 * 186 | 1 93 0 0x2b 0 ] 187 | 1 93 0 0x2b 8 ] 188 | 1 125 0 0x2b 1 } 189 | 1 125 0 0x2b 9 } 190 | 1 122 0 0x2c 0 z 191 | 1 122 0 0x2c 9 z 192 | 1 90 0 0x2c 1 Z 193 | 1 90 0 0x2c 8 Z 194 | 1 120 0 0x2d 0 x 195 | 1 120 0 0x2d 9 x 196 | 1 88 0 0x2d 1 X 197 | 1 88 0 0x2d 8 X 198 | 1 99 0 0x2e 0 c 199 | 1 99 0 0x2e 9 c 200 | 1 67 0 0x2e 1 C 201 | 1 67 0 0x2e 8 C 202 | 1 118 0 0x2f 0 v 203 | 1 118 0 0x2f 9 v 204 | 1 86 0 0x2f 1 V 205 | 1 86 0 0x2f 8 V 206 | 1 98 0 0x30 0 b 207 | 1 98 0 0x30 9 b 208 | 1 66 0 0x30 1 B 209 | 1 66 0 0x30 8 B 210 | 1 110 0 0x31 0 n 211 | 1 110 0 0x31 9 n 212 | 1 78 0 0x31 1 N 213 | 1 78 0 0x31 8 N 214 | 1 109 0 0x32 0 m 215 | 1 109 0 0x32 9 m 216 | 1 77 0 0x32 1 M 217 | 1 77 0 0x32 8 M 218 | 1 44 0 0x33 0 , 219 | 1 44 0 0x33 8 , 220 | 1 60 0 0x33 1 < 221 | 1 60 0 0x33 9 < 222 | 1 46 0 0x34 0 . 223 | 1 46 0 0x34 8 . 224 | 1 62 0 0x34 1 > 225 | 1 62 0 0x34 9 > 226 | 1 47 0 0x35 0 / 227 | 1 47 0 0x35 8 / 228 | 1 63 0 0x35 1 ? 229 | 1 63 0 0x35 9 ? 230 | 1 92 0 0x56 0 \ 231 | 1 92 0 0x56 8 \ 232 | 1 95 0 0x56 1 _ 233 | 1 95 0 0x56 9 _ 234 | -------------------------------------------------------------------------------- /keymaps/lt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/lt -------------------------------------------------------------------------------- /keymaps/lv: -------------------------------------------------------------------------------- 1 | c 0x426 2 | 0 18 0 0x38 4 Alt 3 | 0 10 0 0x1c 0 Enter 4 | 0 8 0 0xe 0 Backspace 5 | 0 17 0 0x1d 2 Ctrl 6 | 0 9 0 0xf 0 Tab 7 | 0 16 0 0x2a 1 Shift 8 | 0 20 0 0x3a 0 Caps Lock 9 | 0 32 0 0x39 0 Space 10 | 0 27 0 0x1 0 Escape 11 | 0 33 0 0xc9 0 Page Up 12 | 0 34 0 0xd1 0 Page Down 13 | 0 35 0 0xcf 0 End 14 | 0 36 0 0xc7 0 Home 15 | 0 37 0 0xcb 0 Left 16 | 0 38 0 0xc8 0 Up 17 | 0 39 0 0xcd 0 Right 18 | 0 40 0 0xd0 0 Down 19 | 0 226 0 0xcb 0 Left 20 | 0 224 0 0xc8 0 Up 21 | 0 227 0 0xcd 0 Right 22 | 0 225 0 0xd0 0 Down 23 | 0 154 0 0xb7 0 Print Screen 24 | 0 155 0 0xd2 0 Insert 25 | 0 112 0 0x3b 0 F1 26 | 0 113 0 0x3c 0 F2 27 | 0 114 0 0x3d 0 F3 28 | 0 115 0 0x3e 0 F4 29 | 0 116 0 0x3f 0 F5 30 | 0 117 0 0x40 0 F6 31 | 0 118 0 0x41 0 F7 32 | 0 119 0 0x42 0 F8 33 | 0 120 0 0x43 0 F9 34 | 0 121 0 0x44 0 F10 35 | 0 122 0 0x57 0 F11 36 | 0 123 0 0x58 0 F12 37 | 0 144 0 0x45 0 Num Lock 38 | 0 145 0 0x46 0 Scroll Lock 39 | 0 127 0 0xd3 0 Delete 40 | 0 65406 0 0xb8 0 Alt Graph 41 | 0 65482 0 0xdd 0 Props 42 | 1 96 0 0x29 0 ` 43 | 1 96 0 0x29 8 ` 44 | 1 126 0 0x29 1 ~ 45 | 1 126 0 0x29 9 ~ 46 | 1 49 0 0x2 0 1 47 | 1 49 0 0x2 8 1 48 | 1 33 0 0x2 1 ! 49 | 1 33 0 0x2 9 ! 50 | 1 50 0 0x3 0 2 51 | 1 50 0 0x3 8 2 52 | 1 64 0 0x3 1 @ 53 | 1 64 0 0x3 9 @ 54 | 1 51 0 0x4 0 3 55 | 1 51 0 0x4 8 3 56 | 1 35 0 0x4 1 # 57 | 1 35 0 0x4 9 # 58 | 1 52 0 0x5 0 4 59 | 1 52 0 0x5 8 4 60 | 1 36 0 0x5 1 $ 61 | 1 36 0 0x5 9 $ 62 | 1 53 0 0x6 0 5 63 | 1 53 0 0x6 8 5 64 | 1 37 0 0x6 1 % 65 | 1 37 0 0x6 9 % 66 | 1 54 0 0x7 0 6 67 | 1 54 0 0x7 8 6 68 | 1 94 0 0x7 1 ^ 69 | 1 94 0 0x7 9 ^ 70 | 1 55 0 0x8 0 7 71 | 1 55 0 0x8 8 7 72 | 1 38 0 0x8 1 & 73 | 1 38 0 0x8 9 & 74 | 1 56 0 0x9 0 8 75 | 1 56 0 0x9 8 8 76 | 1 42 0 0x9 1 * 77 | 1 42 0 0x9 9 * 78 | 1 57 0 0xa 0 9 79 | 1 57 0 0xa 8 9 80 | 1 40 0 0xa 1 ( 81 | 1 40 0 0xa 9 ( 82 | 1 48 0 0xb 0 0 83 | 1 48 0 0xb 8 0 84 | 1 41 0 0xb 1 ) 85 | 1 41 0 0xb 9 ) 86 | 1 45 0 0xc 0 - 87 | 1 45 0 0xc 8 - 88 | 1 95 0 0xc 1 _ 89 | 1 95 0 0xc 9 _ 90 | 1 61 0 0xd 0 = 91 | 1 61 0 0xd 8 = 92 | 1 43 0 0xd 1 + 93 | 1 43 0 0xd 9 + 94 | 1 113 0 0x10 0 q 95 | 1 113 0 0x10 9 q 96 | 1 81 0 0x10 1 Q 97 | 1 81 0 0x10 8 Q 98 | 1 119 0 0x11 0 w 99 | 1 119 0 0x11 9 w 100 | 1 87 0 0x11 1 W 101 | 1 87 0 0x11 8 W 102 | 1 101 0 0x12 0 e 103 | 1 101 0 0x12 9 e 104 | 1 69 0 0x12 1 E 105 | 1 69 0 0x12 8 E 106 | 1 114 0 0x13 0 r 107 | 1 114 0 0x13 9 r 108 | 1 82 0 0x13 1 R 109 | 1 82 0 0x13 8 R 110 | 1 116 0 0x14 0 t 111 | 1 116 0 0x14 9 t 112 | 1 84 0 0x14 1 T 113 | 1 84 0 0x14 8 T 114 | 1 121 0 0x15 0 y 115 | 1 121 0 0x15 9 y 116 | 1 89 0 0x15 1 Y 117 | 1 89 0 0x15 8 Y 118 | 1 117 0 0x16 0 u 119 | 1 117 0 0x16 9 u 120 | 1 85 0 0x16 1 U 121 | 1 85 0 0x16 8 U 122 | 1 105 0 0x17 0 i 123 | 1 105 0 0x17 9 i 124 | 1 73 0 0x17 1 I 125 | 1 73 0 0x17 8 I 126 | 1 111 0 0x18 0 o 127 | 1 111 0 0x18 9 o 128 | 1 79 0 0x18 1 O 129 | 1 79 0 0x18 8 O 130 | 1 112 0 0x19 0 p 131 | 1 112 0 0x19 9 p 132 | 1 80 0 0x19 1 P 133 | 1 80 0 0x19 8 P 134 | 1 91 0 0x1a 0 [ 135 | 1 91 0 0x1a 8 [ 136 | 1 123 0 0x1a 1 { 137 | 1 123 0 0x1a 9 { 138 | 1 93 0 0x1b 0 ] 139 | 1 93 0 0x1b 8 ] 140 | 1 125 0 0x1b 1 } 141 | 1 125 0 0x1b 9 } 142 | 1 97 0 0x1e 0 a 143 | 1 97 0 0x1e 9 a 144 | 1 65 0 0x1e 1 A 145 | 1 65 0 0x1e 8 A 146 | 1 115 0 0x1f 0 s 147 | 1 115 0 0x1f 9 s 148 | 1 83 0 0x1f 1 S 149 | 1 83 0 0x1f 8 S 150 | 1 100 0 0x20 0 d 151 | 1 100 0 0x20 9 d 152 | 1 68 0 0x20 1 D 153 | 1 68 0 0x20 8 D 154 | 1 102 0 0x21 0 f 155 | 1 102 0 0x21 9 f 156 | 1 70 0 0x21 1 F 157 | 1 70 0 0x21 8 F 158 | 1 103 0 0x22 0 g 159 | 1 103 0 0x22 9 g 160 | 1 71 0 0x22 1 G 161 | 1 71 0 0x22 8 G 162 | 1 104 0 0x23 0 h 163 | 1 104 0 0x23 9 h 164 | 1 72 0 0x23 1 H 165 | 1 72 0 0x23 8 H 166 | 1 106 0 0x24 0 j 167 | 1 106 0 0x24 9 j 168 | 1 74 0 0x24 1 J 169 | 1 74 0 0x24 8 J 170 | 1 107 0 0x25 0 k 171 | 1 107 0 0x25 9 k 172 | 1 75 0 0x25 1 K 173 | 1 75 0 0x25 8 K 174 | 1 108 0 0x26 0 l 175 | 1 108 0 0x26 9 l 176 | 1 76 0 0x26 1 L 177 | 1 76 0 0x26 8 L 178 | 1 59 0 0x27 0 ; 179 | 1 59 0 0x27 8 ; 180 | 1 58 0 0x27 1 : 181 | 1 58 0 0x27 9 : 182 | 1 39 0 0x28 0 ' 183 | 1 39 0 0x28 8 ' 184 | 1 34 0 0x28 1 " 185 | 1 34 0 0x28 9 " 186 | 1 92 0 0x2b 0 \ 187 | 1 92 0 0x2b 8 \ 188 | 1 124 0 0x2b 1 | 189 | 1 124 0 0x2b 9 | 190 | 1 122 0 0x2c 0 z 191 | 1 122 0 0x2c 9 z 192 | 1 90 0 0x2c 1 Z 193 | 1 90 0 0x2c 8 Z 194 | 1 120 0 0x2d 0 x 195 | 1 120 0 0x2d 9 x 196 | 1 88 0 0x2d 1 X 197 | 1 88 0 0x2d 8 X 198 | 1 99 0 0x2e 0 c 199 | 1 99 0 0x2e 9 c 200 | 1 67 0 0x2e 1 C 201 | 1 67 0 0x2e 8 C 202 | 1 118 0 0x2f 0 v 203 | 1 118 0 0x2f 9 v 204 | 1 86 0 0x2f 1 V 205 | 1 86 0 0x2f 8 V 206 | 1 98 0 0x30 0 b 207 | 1 98 0 0x30 9 b 208 | 1 66 0 0x30 1 B 209 | 1 66 0 0x30 8 B 210 | 1 110 0 0x31 0 n 211 | 1 110 0 0x31 9 n 212 | 1 78 0 0x31 1 N 213 | 1 78 0 0x31 8 N 214 | 1 109 0 0x32 0 m 215 | 1 109 0 0x32 9 m 216 | 1 77 0 0x32 1 M 217 | 1 77 0 0x32 8 M 218 | 1 44 0 0x33 0 , 219 | 1 44 0 0x33 8 , 220 | 1 60 0 0x33 1 < 221 | 1 60 0 0x33 9 < 222 | 1 46 0 0x34 0 . 223 | 1 46 0 0x34 8 . 224 | 1 62 0 0x34 1 > 225 | 1 62 0 0x34 9 > 226 | 1 47 0 0x35 0 / 227 | 1 47 0 0x35 8 / 228 | 1 63 0 0x35 1 ? 229 | 1 63 0 0x35 9 ? 230 | -------------------------------------------------------------------------------- /keymaps/mk: -------------------------------------------------------------------------------- 1 | c 0x42f 2 | 0 18 0 0x38 4 Alt 3 | 0 10 0 0x1c 0 Enter 4 | 0 8 0 0xe 0 Backspace 5 | 0 17 0 0x1d 2 Ctrl 6 | 0 9 0 0xf 0 Tab 7 | 0 16 0 0x2a 1 Shift 8 | 0 20 0 0x3a 0 Caps Lock 9 | 0 32 0 0x39 0 Space 10 | 0 27 0 0x1 0 Escape 11 | 0 33 0 0xc9 0 Page Up 12 | 0 34 0 0xd1 0 Page Down 13 | 0 35 0 0xcf 0 End 14 | 0 36 0 0xc7 0 Home 15 | 0 37 0 0xcb 0 Left 16 | 0 38 0 0xc8 0 Up 17 | 0 39 0 0xcd 0 Right 18 | 0 40 0 0xd0 0 Down 19 | 0 226 0 0xcb 0 Left 20 | 0 224 0 0xc8 0 Up 21 | 0 227 0 0xcd 0 Right 22 | 0 225 0 0xd0 0 Down 23 | 0 154 0 0xb7 0 Print Screen 24 | 0 155 0 0xd2 0 Insert 25 | 0 112 0 0x3b 0 F1 26 | 0 113 0 0x3c 0 F2 27 | 0 114 0 0x3d 0 F3 28 | 0 115 0 0x3e 0 F4 29 | 0 116 0 0x3f 0 F5 30 | 0 117 0 0x40 0 F6 31 | 0 118 0 0x41 0 F7 32 | 0 119 0 0x42 0 F8 33 | 0 120 0 0x43 0 F9 34 | 0 121 0 0x44 0 F10 35 | 0 122 0 0x57 0 F11 36 | 0 123 0 0x58 0 F12 37 | 0 144 0 0x45 0 Num Lock 38 | 0 145 0 0x46 0 Scroll Lock 39 | 0 127 0 0xd3 0 Delete 40 | 0 65406 0 0xb8 0 Alt Graph 41 | 0 65482 0 0xdd 0 Props 42 | 1 96 0 0x29 0 ` 43 | 1 96 0 0x29 8 ` 44 | 1 126 0 0x29 1 ~ 45 | 1 126 0 0x29 9 ~ 46 | 1 49 0 0x2 0 1 47 | 1 49 0 0x2 8 1 48 | 1 33 0 0x2 1 ! 49 | 1 33 0 0x2 9 ! 50 | 1 50 0 0x3 0 2 51 | 1 50 0 0x3 8 2 52 | 1 64 0 0x3 1 @ 53 | 1 64 0 0x3 9 @ 54 | 1 51 0 0x4 0 3 55 | 1 51 0 0x4 8 3 56 | 1 35 0 0x4 1 # 57 | 1 35 0 0x4 9 # 58 | 1 52 0 0x5 0 4 59 | 1 52 0 0x5 8 4 60 | 1 36 0 0x5 1 $ 61 | 1 36 0 0x5 9 $ 62 | 1 53 0 0x6 0 5 63 | 1 53 0 0x6 8 5 64 | 1 37 0 0x6 1 % 65 | 1 37 0 0x6 9 % 66 | 1 54 0 0x7 0 6 67 | 1 54 0 0x7 8 6 68 | 1 94 0 0x7 1 ^ 69 | 1 94 0 0x7 9 ^ 70 | 1 55 0 0x8 0 7 71 | 1 55 0 0x8 8 7 72 | 1 38 0 0x8 1 & 73 | 1 38 0 0x8 9 & 74 | 1 56 0 0x9 0 8 75 | 1 56 0 0x9 8 8 76 | 1 42 0 0x9 1 * 77 | 1 42 0 0x9 9 * 78 | 1 57 0 0xa 0 9 79 | 1 57 0 0xa 8 9 80 | 1 40 0 0xa 1 ( 81 | 1 40 0 0xa 9 ( 82 | 1 48 0 0xb 0 0 83 | 1 48 0 0xb 8 0 84 | 1 41 0 0xb 1 ) 85 | 1 41 0 0xb 9 ) 86 | 1 45 0 0xc 0 - 87 | 1 45 0 0xc 8 - 88 | 1 95 0 0xc 1 _ 89 | 1 95 0 0xc 9 _ 90 | 1 61 0 0xd 0 = 91 | 1 61 0 0xd 8 = 92 | 1 43 0 0xd 1 + 93 | 1 43 0 0xd 9 + 94 | 1 113 0 0x10 0 q 95 | 1 113 0 0x10 9 q 96 | 1 81 0 0x10 1 Q 97 | 1 81 0 0x10 8 Q 98 | 1 119 0 0x11 0 w 99 | 1 119 0 0x11 9 w 100 | 1 87 0 0x11 1 W 101 | 1 87 0 0x11 8 W 102 | 1 101 0 0x12 0 e 103 | 1 101 0 0x12 9 e 104 | 1 69 0 0x12 1 E 105 | 1 69 0 0x12 8 E 106 | 1 114 0 0x13 0 r 107 | 1 114 0 0x13 9 r 108 | 1 82 0 0x13 1 R 109 | 1 82 0 0x13 8 R 110 | 1 116 0 0x14 0 t 111 | 1 116 0 0x14 9 t 112 | 1 84 0 0x14 1 T 113 | 1 84 0 0x14 8 T 114 | 1 121 0 0x15 0 y 115 | 1 121 0 0x15 9 y 116 | 1 89 0 0x15 1 Y 117 | 1 89 0 0x15 8 Y 118 | 1 117 0 0x16 0 u 119 | 1 117 0 0x16 9 u 120 | 1 85 0 0x16 1 U 121 | 1 85 0 0x16 8 U 122 | 1 105 0 0x17 0 i 123 | 1 105 0 0x17 9 i 124 | 1 73 0 0x17 1 I 125 | 1 73 0 0x17 8 I 126 | 1 111 0 0x18 0 o 127 | 1 111 0 0x18 9 o 128 | 1 79 0 0x18 1 O 129 | 1 79 0 0x18 8 O 130 | 1 112 0 0x19 0 p 131 | 1 112 0 0x19 9 p 132 | 1 80 0 0x19 1 P 133 | 1 80 0 0x19 8 P 134 | 1 91 0 0x1a 0 [ 135 | 1 91 0 0x1a 8 [ 136 | 1 123 0 0x1a 1 { 137 | 1 123 0 0x1a 9 { 138 | 1 93 0 0x1b 0 ] 139 | 1 93 0 0x1b 8 ] 140 | 1 125 0 0x1b 1 } 141 | 1 125 0 0x1b 9 } 142 | 1 97 0 0x1e 0 a 143 | 1 97 0 0x1e 9 a 144 | 1 65 0 0x1e 1 A 145 | 1 65 0 0x1e 8 A 146 | 1 115 0 0x1f 0 s 147 | 1 115 0 0x1f 9 s 148 | 1 83 0 0x1f 1 S 149 | 1 83 0 0x1f 8 S 150 | 1 100 0 0x20 0 d 151 | 1 100 0 0x20 9 d 152 | 1 68 0 0x20 1 D 153 | 1 68 0 0x20 8 D 154 | 1 102 0 0x21 0 f 155 | 1 102 0 0x21 9 f 156 | 1 70 0 0x21 1 F 157 | 1 70 0 0x21 8 F 158 | 1 103 0 0x22 0 g 159 | 1 103 0 0x22 9 g 160 | 1 71 0 0x22 1 G 161 | 1 71 0 0x22 8 G 162 | 1 104 0 0x23 0 h 163 | 1 104 0 0x23 9 h 164 | 1 72 0 0x23 1 H 165 | 1 72 0 0x23 8 H 166 | 1 106 0 0x24 0 j 167 | 1 106 0 0x24 9 j 168 | 1 74 0 0x24 1 J 169 | 1 74 0 0x24 8 J 170 | 1 107 0 0x25 0 k 171 | 1 107 0 0x25 9 k 172 | 1 75 0 0x25 1 K 173 | 1 75 0 0x25 8 K 174 | 1 108 0 0x26 0 l 175 | 1 108 0 0x26 9 l 176 | 1 76 0 0x26 1 L 177 | 1 76 0 0x26 8 L 178 | 1 59 0 0x27 0 ; 179 | 1 59 0 0x27 8 ; 180 | 1 58 0 0x27 1 : 181 | 1 58 0 0x27 9 : 182 | 1 39 0 0x28 0 ' 183 | 1 39 0 0x28 8 ' 184 | 1 34 0 0x28 1 " 185 | 1 34 0 0x28 9 " 186 | 1 92 0 0x2b 0 \ 187 | 1 92 0 0x2b 8 \ 188 | 1 124 0 0x2b 1 | 189 | 1 124 0 0x2b 9 | 190 | 1 122 0 0x2c 0 z 191 | 1 122 0 0x2c 9 z 192 | 1 90 0 0x2c 1 Z 193 | 1 90 0 0x2c 8 Z 194 | 1 120 0 0x2d 0 x 195 | 1 120 0 0x2d 9 x 196 | 1 88 0 0x2d 1 X 197 | 1 88 0 0x2d 8 X 198 | 1 99 0 0x2e 0 c 199 | 1 99 0 0x2e 9 c 200 | 1 67 0 0x2e 1 C 201 | 1 67 0 0x2e 8 C 202 | 1 118 0 0x2f 0 v 203 | 1 118 0 0x2f 9 v 204 | 1 86 0 0x2f 1 V 205 | 1 86 0 0x2f 8 V 206 | 1 98 0 0x30 0 b 207 | 1 98 0 0x30 9 b 208 | 1 66 0 0x30 1 B 209 | 1 66 0 0x30 8 B 210 | 1 110 0 0x31 0 n 211 | 1 110 0 0x31 9 n 212 | 1 78 0 0x31 1 N 213 | 1 78 0 0x31 8 N 214 | 1 109 0 0x32 0 m 215 | 1 109 0 0x32 9 m 216 | 1 77 0 0x32 1 M 217 | 1 77 0 0x32 8 M 218 | 1 44 0 0x33 0 , 219 | 1 44 0 0x33 8 , 220 | 1 60 0 0x33 1 < 221 | 1 60 0 0x33 9 < 222 | 1 46 0 0x34 0 . 223 | 1 46 0 0x34 8 . 224 | 1 62 0 0x34 1 > 225 | 1 62 0 0x34 9 > 226 | 1 47 0 0x35 0 / 227 | 1 47 0 0x35 8 / 228 | 1 63 0 0x35 1 ? 229 | 1 63 0 0x35 9 ? 230 | -------------------------------------------------------------------------------- /keymaps/no: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/no -------------------------------------------------------------------------------- /keymaps/pl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/pl -------------------------------------------------------------------------------- /keymaps/pt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/pt -------------------------------------------------------------------------------- /keymaps/pt-br: -------------------------------------------------------------------------------- 1 | c 0x416 2 | 0 18 0 0x38 4 Alt 3 | 0 10 0 0x1c 0 Enter 4 | 0 8 0 0xe 0 Backspace 5 | 0 17 0 0x1d 2 Ctrl 6 | 0 9 0 0xf 0 Tab 7 | 0 16 0 0x2a 1 Shift 8 | 0 20 0 0x3a 0 Caps Lock 9 | 0 32 0 0x39 0 Space 10 | 0 27 0 0x1 0 Escape 11 | 0 33 0 0xc9 0 Page Up 12 | 0 34 0 0xd1 0 Page Down 13 | 0 35 0 0xcf 0 End 14 | 0 36 0 0xc7 0 Home 15 | 0 37 0 0xcb 0 Left 16 | 0 38 0 0xc8 0 Up 17 | 0 39 0 0xcd 0 Right 18 | 0 40 0 0xd0 0 Down 19 | 0 226 0 0xcb 0 Left 20 | 0 224 0 0xc8 0 Up 21 | 0 227 0 0xcd 0 Right 22 | 0 225 0 0xd0 0 Down 23 | 0 154 0 0xb7 0 Print Screen 24 | 0 155 0 0xd2 0 Insert 25 | 0 112 0 0x3b 0 F1 26 | 0 113 0 0x3c 0 F2 27 | 0 114 0 0x3d 0 F3 28 | 0 115 0 0x3e 0 F4 29 | 0 116 0 0x3f 0 F5 30 | 0 117 0 0x40 0 F6 31 | 0 118 0 0x41 0 F7 32 | 0 119 0 0x42 0 F8 33 | 0 120 0 0x43 0 F9 34 | 0 121 0 0x44 0 F10 35 | 0 122 0 0x57 0 F11 36 | 0 123 0 0x58 0 F12 37 | 0 144 0 0x45 0 Num Lock 38 | 0 145 0 0x46 0 Scroll Lock 39 | 0 127 0 0xd3 0 Delete 40 | 0 65406 0 0xb8 0 Alt Graph 41 | 0 65482 0 0xdd 0 Props 42 | 1 96 0 0x29 0 ` 43 | 1 96 0 0x29 8 ` 44 | 1 126 0 0x29 1 ~ 45 | 1 126 0 0x29 9 ~ 46 | 1 49 0 0x2 0 1 47 | 1 49 0 0x2 8 1 48 | 1 33 0 0x2 1 ! 49 | 1 33 0 0x2 9 ! 50 | 1 50 0 0x3 0 2 51 | 1 50 0 0x3 8 2 52 | 1 64 0 0x3 1 @ 53 | 1 64 0 0x3 9 @ 54 | 1 51 0 0x4 0 3 55 | 1 51 0 0x4 8 3 56 | 1 35 0 0x4 1 # 57 | 1 35 0 0x4 9 # 58 | 1 52 0 0x5 0 4 59 | 1 52 0 0x5 8 4 60 | 1 36 0 0x5 1 $ 61 | 1 36 0 0x5 9 $ 62 | 1 53 0 0x6 0 5 63 | 1 53 0 0x6 8 5 64 | 1 37 0 0x6 1 % 65 | 1 37 0 0x6 9 % 66 | 1 54 0 0x7 0 6 67 | 1 54 0 0x7 8 6 68 | 1 94 0 0x7 1 ^ 69 | 1 94 0 0x7 9 ^ 70 | 1 55 0 0x8 0 7 71 | 1 55 0 0x8 8 7 72 | 1 38 0 0x8 1 & 73 | 1 38 0 0x8 9 & 74 | 1 56 0 0x9 0 8 75 | 1 56 0 0x9 8 8 76 | 1 42 0 0x9 1 * 77 | 1 42 0 0x9 9 * 78 | 1 57 0 0xa 0 9 79 | 1 57 0 0xa 8 9 80 | 1 40 0 0xa 1 ( 81 | 1 40 0 0xa 9 ( 82 | 1 48 0 0xb 0 0 83 | 1 48 0 0xb 8 0 84 | 1 41 0 0xb 1 ) 85 | 1 41 0 0xb 9 ) 86 | 1 45 0 0xc 0 - 87 | 1 45 0 0xc 8 - 88 | 1 95 0 0xc 1 _ 89 | 1 95 0 0xc 9 _ 90 | 1 61 0 0xd 0 = 91 | 1 61 0 0xd 8 = 92 | 1 43 0 0xd 1 + 93 | 1 43 0 0xd 9 + 94 | 1 113 0 0x10 0 q 95 | 1 113 0 0x10 9 q 96 | 1 81 0 0x10 1 Q 97 | 1 81 0 0x10 8 Q 98 | 1 119 0 0x11 0 w 99 | 1 119 0 0x11 9 w 100 | 1 87 0 0x11 1 W 101 | 1 87 0 0x11 8 W 102 | 1 101 0 0x12 0 e 103 | 1 101 0 0x12 9 e 104 | 1 69 0 0x12 1 E 105 | 1 69 0 0x12 8 E 106 | 1 114 0 0x13 0 r 107 | 1 114 0 0x13 9 r 108 | 1 82 0 0x13 1 R 109 | 1 82 0 0x13 8 R 110 | 1 116 0 0x14 0 t 111 | 1 116 0 0x14 9 t 112 | 1 84 0 0x14 1 T 113 | 1 84 0 0x14 8 T 114 | 1 121 0 0x15 0 y 115 | 1 121 0 0x15 9 y 116 | 1 89 0 0x15 1 Y 117 | 1 89 0 0x15 8 Y 118 | 1 117 0 0x16 0 u 119 | 1 117 0 0x16 9 u 120 | 1 85 0 0x16 1 U 121 | 1 85 0 0x16 8 U 122 | 1 105 0 0x17 0 i 123 | 1 105 0 0x17 9 i 124 | 1 73 0 0x17 1 I 125 | 1 73 0 0x17 8 I 126 | 1 111 0 0x18 0 o 127 | 1 111 0 0x18 9 o 128 | 1 79 0 0x18 1 O 129 | 1 79 0 0x18 8 O 130 | 1 112 0 0x19 0 p 131 | 1 112 0 0x19 9 p 132 | 1 80 0 0x19 1 P 133 | 1 80 0 0x19 8 P 134 | 1 91 0 0x1a 0 [ 135 | 1 91 0 0x1a 8 [ 136 | 1 123 0 0x1a 1 { 137 | 1 123 0 0x1a 9 { 138 | 1 93 0 0x1b 0 ] 139 | 1 93 0 0x1b 8 ] 140 | 1 125 0 0x1b 1 } 141 | 1 125 0 0x1b 9 } 142 | 1 97 0 0x1e 0 a 143 | 1 97 0 0x1e 9 a 144 | 1 65 0 0x1e 1 A 145 | 1 65 0 0x1e 8 A 146 | 1 115 0 0x1f 0 s 147 | 1 115 0 0x1f 9 s 148 | 1 83 0 0x1f 1 S 149 | 1 83 0 0x1f 8 S 150 | 1 100 0 0x20 0 d 151 | 1 100 0 0x20 9 d 152 | 1 68 0 0x20 1 D 153 | 1 68 0 0x20 8 D 154 | 1 102 0 0x21 0 f 155 | 1 102 0 0x21 9 f 156 | 1 70 0 0x21 1 F 157 | 1 70 0 0x21 8 F 158 | 1 103 0 0x22 0 g 159 | 1 103 0 0x22 9 g 160 | 1 71 0 0x22 1 G 161 | 1 71 0 0x22 8 G 162 | 1 104 0 0x23 0 h 163 | 1 104 0 0x23 9 h 164 | 1 72 0 0x23 1 H 165 | 1 72 0 0x23 8 H 166 | 1 106 0 0x24 0 j 167 | 1 106 0 0x24 9 j 168 | 1 74 0 0x24 1 J 169 | 1 74 0 0x24 8 J 170 | 1 107 0 0x25 0 k 171 | 1 107 0 0x25 9 k 172 | 1 75 0 0x25 1 K 173 | 1 75 0 0x25 8 K 174 | 1 108 0 0x26 0 l 175 | 1 108 0 0x26 9 l 176 | 1 76 0 0x26 1 L 177 | 1 76 0 0x26 8 L 178 | 1 59 0 0x27 0 ; 179 | 1 59 0 0x27 8 ; 180 | 1 58 0 0x27 1 : 181 | 1 58 0 0x27 9 : 182 | 1 39 0 0x28 0 ' 183 | 1 39 0 0x28 8 ' 184 | 1 34 0 0x28 1 " 185 | 1 34 0 0x28 9 " 186 | 1 92 0 0x2b 0 \ 187 | 1 92 0 0x2b 8 \ 188 | 1 124 0 0x2b 1 | 189 | 1 124 0 0x2b 9 | 190 | 1 122 0 0x2c 0 z 191 | 1 122 0 0x2c 9 z 192 | 1 90 0 0x2c 1 Z 193 | 1 90 0 0x2c 8 Z 194 | 1 120 0 0x2d 0 x 195 | 1 120 0 0x2d 9 x 196 | 1 88 0 0x2d 1 X 197 | 1 88 0 0x2d 8 X 198 | 1 99 0 0x2e 0 c 199 | 1 99 0 0x2e 9 c 200 | 1 67 0 0x2e 1 C 201 | 1 67 0 0x2e 8 C 202 | 1 118 0 0x2f 0 v 203 | 1 118 0 0x2f 9 v 204 | 1 86 0 0x2f 1 V 205 | 1 86 0 0x2f 8 V 206 | 1 98 0 0x30 0 b 207 | 1 98 0 0x30 9 b 208 | 1 66 0 0x30 1 B 209 | 1 66 0 0x30 8 B 210 | 1 110 0 0x31 0 n 211 | 1 110 0 0x31 9 n 212 | 1 78 0 0x31 1 N 213 | 1 78 0 0x31 8 N 214 | 1 109 0 0x32 0 m 215 | 1 109 0 0x32 9 m 216 | 1 77 0 0x32 1 M 217 | 1 77 0 0x32 8 M 218 | 1 44 0 0x33 0 , 219 | 1 44 0 0x33 8 , 220 | 1 60 0 0x33 1 < 221 | 1 60 0 0x33 9 < 222 | 1 46 0 0x34 0 . 223 | 1 46 0 0x34 8 . 224 | 1 62 0 0x34 1 > 225 | 1 62 0 0x34 9 > 226 | 1 47 0 0x35 0 / 227 | 1 47 0 0x35 8 / 228 | 1 63 0 0x35 1 ? 229 | 1 63 0 0x35 9 ? 230 | -------------------------------------------------------------------------------- /keymaps/ru: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/ru -------------------------------------------------------------------------------- /keymaps/sl: -------------------------------------------------------------------------------- 1 | c 0x424 2 | 0 18 0 0x38 4 Alt 3 | 0 10 0 0x1c 0 Enter 4 | 0 8 0 0xe 0 Backspace 5 | 0 17 0 0x1d 2 Ctrl 6 | 0 9 0 0xf 0 Tab 7 | 0 16 0 0x2a 1 Shift 8 | 0 20 0 0x3a 0 Caps Lock 9 | 0 32 0 0x39 0 Space 10 | 0 27 0 0x1 0 Escape 11 | 0 33 0 0xc9 0 Page Up 12 | 0 34 0 0xd1 0 Page Down 13 | 0 35 0 0xcf 0 End 14 | 0 36 0 0xc7 0 Home 15 | 0 37 0 0xcb 0 Left 16 | 0 38 0 0xc8 0 Up 17 | 0 39 0 0xcd 0 Right 18 | 0 40 0 0xd0 0 Down 19 | 0 226 0 0xcb 0 Left 20 | 0 224 0 0xc8 0 Up 21 | 0 227 0 0xcd 0 Right 22 | 0 225 0 0xd0 0 Down 23 | 0 154 0 0xb7 0 Print Screen 24 | 0 155 0 0xd2 0 Insert 25 | 0 112 0 0x3b 0 F1 26 | 0 113 0 0x3c 0 F2 27 | 0 114 0 0x3d 0 F3 28 | 0 115 0 0x3e 0 F4 29 | 0 116 0 0x3f 0 F5 30 | 0 117 0 0x40 0 F6 31 | 0 118 0 0x41 0 F7 32 | 0 119 0 0x42 0 F8 33 | 0 120 0 0x43 0 F9 34 | 0 121 0 0x44 0 F10 35 | 0 122 0 0x57 0 F11 36 | 0 123 0 0x58 0 F12 37 | 0 144 0 0x45 0 Num Lock 38 | 0 145 0 0x46 0 Scroll Lock 39 | 0 127 0 0xd3 0 Delete 40 | 0 65406 0 0xb8 0 Alt Graph 41 | 0 65482 0 0xdd 0 Props 42 | 1 96 0 0x29 0 ` 43 | 1 96 0 0x29 8 ` 44 | 1 126 0 0x29 1 ~ 45 | 1 126 0 0x29 9 ~ 46 | 1 49 0 0x2 0 1 47 | 1 49 0 0x2 8 1 48 | 1 33 0 0x2 1 ! 49 | 1 33 0 0x2 9 ! 50 | 1 50 0 0x3 0 2 51 | 1 50 0 0x3 8 2 52 | 1 64 0 0x3 1 @ 53 | 1 64 0 0x3 9 @ 54 | 1 51 0 0x4 0 3 55 | 1 51 0 0x4 8 3 56 | 1 35 0 0x4 1 # 57 | 1 35 0 0x4 9 # 58 | 1 52 0 0x5 0 4 59 | 1 52 0 0x5 8 4 60 | 1 36 0 0x5 1 $ 61 | 1 36 0 0x5 9 $ 62 | 1 53 0 0x6 0 5 63 | 1 53 0 0x6 8 5 64 | 1 37 0 0x6 1 % 65 | 1 37 0 0x6 9 % 66 | 1 54 0 0x7 0 6 67 | 1 54 0 0x7 8 6 68 | 1 94 0 0x7 1 ^ 69 | 1 94 0 0x7 9 ^ 70 | 1 55 0 0x8 0 7 71 | 1 55 0 0x8 8 7 72 | 1 38 0 0x8 1 & 73 | 1 38 0 0x8 9 & 74 | 1 56 0 0x9 0 8 75 | 1 56 0 0x9 8 8 76 | 1 42 0 0x9 1 * 77 | 1 42 0 0x9 9 * 78 | 1 57 0 0xa 0 9 79 | 1 57 0 0xa 8 9 80 | 1 40 0 0xa 1 ( 81 | 1 40 0 0xa 9 ( 82 | 1 48 0 0xb 0 0 83 | 1 48 0 0xb 8 0 84 | 1 41 0 0xb 1 ) 85 | 1 41 0 0xb 9 ) 86 | 1 45 0 0xc 0 - 87 | 1 45 0 0xc 8 - 88 | 1 95 0 0xc 1 _ 89 | 1 95 0 0xc 9 _ 90 | 1 61 0 0xd 0 = 91 | 1 61 0 0xd 8 = 92 | 1 43 0 0xd 1 + 93 | 1 43 0 0xd 9 + 94 | 1 113 0 0x10 0 q 95 | 1 113 0 0x10 9 q 96 | 1 81 0 0x10 1 Q 97 | 1 81 0 0x10 8 Q 98 | 1 119 0 0x11 0 w 99 | 1 119 0 0x11 9 w 100 | 1 87 0 0x11 1 W 101 | 1 87 0 0x11 8 W 102 | 1 101 0 0x12 0 e 103 | 1 101 0 0x12 9 e 104 | 1 69 0 0x12 1 E 105 | 1 69 0 0x12 8 E 106 | 1 114 0 0x13 0 r 107 | 1 114 0 0x13 9 r 108 | 1 82 0 0x13 1 R 109 | 1 82 0 0x13 8 R 110 | 1 116 0 0x14 0 t 111 | 1 116 0 0x14 9 t 112 | 1 84 0 0x14 1 T 113 | 1 84 0 0x14 8 T 114 | 1 121 0 0x15 0 y 115 | 1 121 0 0x15 9 y 116 | 1 89 0 0x15 1 Y 117 | 1 89 0 0x15 8 Y 118 | 1 117 0 0x16 0 u 119 | 1 117 0 0x16 9 u 120 | 1 85 0 0x16 1 U 121 | 1 85 0 0x16 8 U 122 | 1 105 0 0x17 0 i 123 | 1 105 0 0x17 9 i 124 | 1 73 0 0x17 1 I 125 | 1 73 0 0x17 8 I 126 | 1 111 0 0x18 0 o 127 | 1 111 0 0x18 9 o 128 | 1 79 0 0x18 1 O 129 | 1 79 0 0x18 8 O 130 | 1 112 0 0x19 0 p 131 | 1 112 0 0x19 9 p 132 | 1 80 0 0x19 1 P 133 | 1 80 0 0x19 8 P 134 | 1 91 0 0x1a 0 [ 135 | 1 91 0 0x1a 8 [ 136 | 1 123 0 0x1a 1 { 137 | 1 123 0 0x1a 9 { 138 | 1 93 0 0x1b 0 ] 139 | 1 93 0 0x1b 8 ] 140 | 1 125 0 0x1b 1 } 141 | 1 125 0 0x1b 9 } 142 | 1 97 0 0x1e 0 a 143 | 1 97 0 0x1e 9 a 144 | 1 65 0 0x1e 1 A 145 | 1 65 0 0x1e 8 A 146 | 1 115 0 0x1f 0 s 147 | 1 115 0 0x1f 9 s 148 | 1 83 0 0x1f 1 S 149 | 1 83 0 0x1f 8 S 150 | 1 100 0 0x20 0 d 151 | 1 100 0 0x20 9 d 152 | 1 68 0 0x20 1 D 153 | 1 68 0 0x20 8 D 154 | 1 102 0 0x21 0 f 155 | 1 102 0 0x21 9 f 156 | 1 70 0 0x21 1 F 157 | 1 70 0 0x21 8 F 158 | 1 103 0 0x22 0 g 159 | 1 103 0 0x22 9 g 160 | 1 71 0 0x22 1 G 161 | 1 71 0 0x22 8 G 162 | 1 104 0 0x23 0 h 163 | 1 104 0 0x23 9 h 164 | 1 72 0 0x23 1 H 165 | 1 72 0 0x23 8 H 166 | 1 106 0 0x24 0 j 167 | 1 106 0 0x24 9 j 168 | 1 74 0 0x24 1 J 169 | 1 74 0 0x24 8 J 170 | 1 107 0 0x25 0 k 171 | 1 107 0 0x25 9 k 172 | 1 75 0 0x25 1 K 173 | 1 75 0 0x25 8 K 174 | 1 108 0 0x26 0 l 175 | 1 108 0 0x26 9 l 176 | 1 76 0 0x26 1 L 177 | 1 76 0 0x26 8 L 178 | 1 59 0 0x27 0 ; 179 | 1 59 0 0x27 8 ; 180 | 1 58 0 0x27 1 : 181 | 1 58 0 0x27 9 : 182 | 1 39 0 0x28 0 ' 183 | 1 39 0 0x28 8 ' 184 | 1 34 0 0x28 1 " 185 | 1 34 0 0x28 9 " 186 | 1 92 0 0x2b 0 \ 187 | 1 92 0 0x2b 8 \ 188 | 1 124 0 0x2b 1 | 189 | 1 124 0 0x2b 9 | 190 | 1 122 0 0x2c 0 z 191 | 1 122 0 0x2c 9 z 192 | 1 90 0 0x2c 1 Z 193 | 1 90 0 0x2c 8 Z 194 | 1 120 0 0x2d 0 x 195 | 1 120 0 0x2d 9 x 196 | 1 88 0 0x2d 1 X 197 | 1 88 0 0x2d 8 X 198 | 1 99 0 0x2e 0 c 199 | 1 99 0 0x2e 9 c 200 | 1 67 0 0x2e 1 C 201 | 1 67 0 0x2e 8 C 202 | 1 118 0 0x2f 0 v 203 | 1 118 0 0x2f 9 v 204 | 1 86 0 0x2f 1 V 205 | 1 86 0 0x2f 8 V 206 | 1 98 0 0x30 0 b 207 | 1 98 0 0x30 9 b 208 | 1 66 0 0x30 1 B 209 | 1 66 0 0x30 8 B 210 | 1 110 0 0x31 0 n 211 | 1 110 0 0x31 9 n 212 | 1 78 0 0x31 1 N 213 | 1 78 0 0x31 8 N 214 | 1 109 0 0x32 0 m 215 | 1 109 0 0x32 9 m 216 | 1 77 0 0x32 1 M 217 | 1 77 0 0x32 8 M 218 | 1 44 0 0x33 0 , 219 | 1 44 0 0x33 8 , 220 | 1 60 0 0x33 1 < 221 | 1 60 0 0x33 9 < 222 | 1 46 0 0x34 0 . 223 | 1 46 0 0x34 8 . 224 | 1 62 0 0x34 1 > 225 | 1 62 0 0x34 9 > 226 | 1 47 0 0x35 0 / 227 | 1 47 0 0x35 8 / 228 | 1 63 0 0x35 1 ? 229 | 1 63 0 0x35 9 ? 230 | -------------------------------------------------------------------------------- /keymaps/sv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/sv -------------------------------------------------------------------------------- /keymaps/tk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/keymaps/tk -------------------------------------------------------------------------------- /keymaps/tr: -------------------------------------------------------------------------------- 1 | c 0x1041f 2 | 0 18 0 0x38 4 Alt 3 | 0 10 0 0x1c 0 Enter 4 | 0 8 0 0xe 0 Backspace 5 | 0 17 0 0x1d 2 Ctrl 6 | 0 9 0 0xf 0 Tab 7 | 0 16 0 0x2a 1 Shift 8 | 0 20 0 0x3a 0 Caps Lock 9 | 0 32 0 0x39 0 Space 10 | 0 27 0 0x1 0 Escape 11 | 0 33 0 0xc9 0 Page Up 12 | 0 34 0 0xd1 0 Page Down 13 | 0 35 0 0xcf 0 End 14 | 0 36 0 0xc7 0 Home 15 | 0 37 0 0xcb 0 Left 16 | 0 38 0 0xc8 0 Up 17 | 0 39 0 0xcd 0 Right 18 | 0 40 0 0xd0 0 Down 19 | 0 226 0 0xcb 0 Left 20 | 0 224 0 0xc8 0 Up 21 | 0 227 0 0xcd 0 Right 22 | 0 225 0 0xd0 0 Down 23 | 0 154 0 0xb7 0 Print Screen 24 | 0 155 0 0xd2 0 Insert 25 | 0 112 0 0x3b 0 F1 26 | 0 113 0 0x3c 0 F2 27 | 0 114 0 0x3d 0 F3 28 | 0 115 0 0x3e 0 F4 29 | 0 116 0 0x3f 0 F5 30 | 0 117 0 0x40 0 F6 31 | 0 118 0 0x41 0 F7 32 | 0 119 0 0x42 0 F8 33 | 0 120 0 0x43 0 F9 34 | 0 121 0 0x44 0 F10 35 | 0 122 0 0x57 0 F11 36 | 0 123 0 0x58 0 F12 37 | 0 144 0 0x45 0 Num Lock 38 | 0 145 0 0x46 0 Scroll Lock 39 | 0 127 0 0xd3 0 Delete 40 | 0 65406 0 0xb8 0 Alt Graph 41 | 0 65482 0 0xdd 0 Props 42 | 1 96 0 0x29 0 ` 43 | 1 96 0 0x29 8 ` 44 | 1 126 0 0x29 1 ~ 45 | 1 126 0 0x29 9 ~ 46 | 1 49 0 0x2 0 1 47 | 1 49 0 0x2 8 1 48 | 1 33 0 0x2 1 ! 49 | 1 33 0 0x2 9 ! 50 | 1 50 0 0x3 0 2 51 | 1 50 0 0x3 8 2 52 | 1 64 0 0x3 1 @ 53 | 1 64 0 0x3 9 @ 54 | 1 51 0 0x4 0 3 55 | 1 51 0 0x4 8 3 56 | 1 35 0 0x4 1 # 57 | 1 35 0 0x4 9 # 58 | 1 52 0 0x5 0 4 59 | 1 52 0 0x5 8 4 60 | 1 36 0 0x5 1 $ 61 | 1 36 0 0x5 9 $ 62 | 1 53 0 0x6 0 5 63 | 1 53 0 0x6 8 5 64 | 1 37 0 0x6 1 % 65 | 1 37 0 0x6 9 % 66 | 1 54 0 0x7 0 6 67 | 1 54 0 0x7 8 6 68 | 1 94 0 0x7 1 ^ 69 | 1 94 0 0x7 9 ^ 70 | 1 55 0 0x8 0 7 71 | 1 55 0 0x8 8 7 72 | 1 38 0 0x8 1 & 73 | 1 38 0 0x8 9 & 74 | 1 56 0 0x9 0 8 75 | 1 56 0 0x9 8 8 76 | 1 42 0 0x9 1 * 77 | 1 42 0 0x9 9 * 78 | 1 57 0 0xa 0 9 79 | 1 57 0 0xa 8 9 80 | 1 40 0 0xa 1 ( 81 | 1 40 0 0xa 9 ( 82 | 1 48 0 0xb 0 0 83 | 1 48 0 0xb 8 0 84 | 1 41 0 0xb 1 ) 85 | 1 41 0 0xb 9 ) 86 | 1 45 0 0xc 0 - 87 | 1 45 0 0xc 8 - 88 | 1 95 0 0xc 1 _ 89 | 1 95 0 0xc 9 _ 90 | 1 61 0 0xd 0 = 91 | 1 61 0 0xd 8 = 92 | 1 43 0 0xd 1 + 93 | 1 43 0 0xd 9 + 94 | 1 113 0 0x10 0 q 95 | 1 113 0 0x10 9 q 96 | 1 81 0 0x10 1 Q 97 | 1 81 0 0x10 8 Q 98 | 1 119 0 0x11 0 w 99 | 1 119 0 0x11 9 w 100 | 1 87 0 0x11 1 W 101 | 1 87 0 0x11 8 W 102 | 1 101 0 0x12 0 e 103 | 1 101 0 0x12 9 e 104 | 1 69 0 0x12 1 E 105 | 1 69 0 0x12 8 E 106 | 1 114 0 0x13 0 r 107 | 1 114 0 0x13 9 r 108 | 1 82 0 0x13 1 R 109 | 1 82 0 0x13 8 R 110 | 1 116 0 0x14 0 t 111 | 1 116 0 0x14 9 t 112 | 1 84 0 0x14 1 T 113 | 1 84 0 0x14 8 T 114 | 1 121 0 0x15 0 y 115 | 1 121 0 0x15 9 y 116 | 1 89 0 0x15 1 Y 117 | 1 89 0 0x15 8 Y 118 | 1 117 0 0x16 0 u 119 | 1 117 0 0x16 9 u 120 | 1 85 0 0x16 1 U 121 | 1 85 0 0x16 8 U 122 | 1 105 0 0x17 0 i 123 | 1 105 0 0x17 9 i 124 | 1 73 0 0x17 1 I 125 | 1 73 0 0x17 8 I 126 | 1 111 0 0x18 0 o 127 | 1 111 0 0x18 9 o 128 | 1 79 0 0x18 1 O 129 | 1 79 0 0x18 8 O 130 | 1 112 0 0x19 0 p 131 | 1 112 0 0x19 9 p 132 | 1 80 0 0x19 1 P 133 | 1 80 0 0x19 8 P 134 | 1 91 0 0x1a 0 [ 135 | 1 91 0 0x1a 8 [ 136 | 1 123 0 0x1a 1 { 137 | 1 123 0 0x1a 9 { 138 | 1 93 0 0x1b 0 ] 139 | 1 93 0 0x1b 8 ] 140 | 1 125 0 0x1b 1 } 141 | 1 125 0 0x1b 9 } 142 | 1 97 0 0x1e 0 a 143 | 1 97 0 0x1e 9 a 144 | 1 65 0 0x1e 1 A 145 | 1 65 0 0x1e 8 A 146 | 1 115 0 0x1f 0 s 147 | 1 115 0 0x1f 9 s 148 | 1 83 0 0x1f 1 S 149 | 1 83 0 0x1f 8 S 150 | 1 100 0 0x20 0 d 151 | 1 100 0 0x20 9 d 152 | 1 68 0 0x20 1 D 153 | 1 68 0 0x20 8 D 154 | 1 102 0 0x21 0 f 155 | 1 102 0 0x21 9 f 156 | 1 70 0 0x21 1 F 157 | 1 70 0 0x21 8 F 158 | 1 103 0 0x22 0 g 159 | 1 103 0 0x22 9 g 160 | 1 71 0 0x22 1 G 161 | 1 71 0 0x22 8 G 162 | 1 104 0 0x23 0 h 163 | 1 104 0 0x23 9 h 164 | 1 72 0 0x23 1 H 165 | 1 72 0 0x23 8 H 166 | 1 106 0 0x24 0 j 167 | 1 106 0 0x24 9 j 168 | 1 74 0 0x24 1 J 169 | 1 74 0 0x24 8 J 170 | 1 107 0 0x25 0 k 171 | 1 107 0 0x25 9 k 172 | 1 75 0 0x25 1 K 173 | 1 75 0 0x25 8 K 174 | 1 108 0 0x26 0 l 175 | 1 108 0 0x26 9 l 176 | 1 76 0 0x26 1 L 177 | 1 76 0 0x26 8 L 178 | 1 59 0 0x27 0 ; 179 | 1 59 0 0x27 8 ; 180 | 1 58 0 0x27 1 : 181 | 1 58 0 0x27 9 : 182 | 1 39 0 0x28 0 ' 183 | 1 39 0 0x28 8 ' 184 | 1 34 0 0x28 1 " 185 | 1 34 0 0x28 9 " 186 | 1 92 0 0x2b 0 \ 187 | 1 92 0 0x2b 8 \ 188 | 1 124 0 0x2b 1 | 189 | 1 124 0 0x2b 9 | 190 | 1 122 0 0x2c 0 z 191 | 1 122 0 0x2c 9 z 192 | 1 90 0 0x2c 1 Z 193 | 1 90 0 0x2c 8 Z 194 | 1 120 0 0x2d 0 x 195 | 1 120 0 0x2d 9 x 196 | 1 88 0 0x2d 1 X 197 | 1 88 0 0x2d 8 X 198 | 1 99 0 0x2e 0 c 199 | 1 99 0 0x2e 9 c 200 | 1 67 0 0x2e 1 C 201 | 1 67 0 0x2e 8 C 202 | 1 118 0 0x2f 0 v 203 | 1 118 0 0x2f 9 v 204 | 1 86 0 0x2f 1 V 205 | 1 86 0 0x2f 8 V 206 | 1 98 0 0x30 0 b 207 | 1 98 0 0x30 9 b 208 | 1 66 0 0x30 1 B 209 | 1 66 0 0x30 8 B 210 | 1 110 0 0x31 0 n 211 | 1 110 0 0x31 9 n 212 | 1 78 0 0x31 1 N 213 | 1 78 0 0x31 8 N 214 | 1 109 0 0x32 0 m 215 | 1 109 0 0x32 9 m 216 | 1 77 0 0x32 1 M 217 | 1 77 0 0x32 8 M 218 | 1 44 0 0x33 0 , 219 | 1 44 0 0x33 8 , 220 | 1 60 0 0x33 1 < 221 | 1 60 0 0x33 9 < 222 | 1 46 0 0x34 0 . 223 | 1 46 0 0x34 8 . 224 | 1 62 0 0x34 1 > 225 | 1 62 0 0x34 9 > 226 | 1 47 0 0x35 0 / 227 | 1 47 0 0x35 8 / 228 | 1 63 0 0x35 1 ? 229 | 1 63 0 0x35 9 ? 230 | -------------------------------------------------------------------------------- /log4j-java1.1/log4j-java1.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/log4j-java1.1/log4j-java1.1.jar -------------------------------------------------------------------------------- /src/com/elusiva/rdp/Common.java: -------------------------------------------------------------------------------- 1 | /* Common.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:14 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Provide a static interface to individual network layers 11 | * and UI components 12 | */ 13 | package com.elusiva.rdp; 14 | 15 | import com.elusiva.rdp.rdp5.Rdp5; 16 | import com.elusiva.rdp.applet.RdpApplet; 17 | 18 | public class Common { 19 | 20 | public static boolean underApplet = false; 21 | public static Rdp5 rdp; 22 | //public static Secure secure; 23 | public static RdesktopFrame frame; 24 | public static RdesktopCanvas_Localised canvas; 25 | 26 | 27 | public static boolean isRunningAsApplication() { 28 | return !underApplet; 29 | } 30 | 31 | public static boolean isRunningAsApplet() { 32 | return underApplet; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/CommunicationMonitor.java: -------------------------------------------------------------------------------- 1 | /* CommunicationMonitor.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:19 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Provide a lock for network communications, 11 | * used primarily by the Clipboard channel to 12 | * prevent sending of mouse/keyboard input when 13 | * sending large amounts of clipboard data. 14 | */ 15 | 16 | package com.elusiva.rdp; 17 | 18 | public class CommunicationMonitor { 19 | 20 | public static Object locker = null; 21 | 22 | /** 23 | * Identify whether or not communications are locked 24 | * @return True if locked 25 | */ 26 | public static boolean locked(){ 27 | return locker != null; 28 | } 29 | 30 | /** 31 | * Wait for a lock on communications 32 | * @param o Calling object should supply reference to self 33 | */ 34 | public static void lock(Object o){ 35 | if(locker == null) locker = o; 36 | else{ 37 | while(locker != null){ 38 | try { 39 | Thread.sleep(100); 40 | } catch (InterruptedException e) { 41 | System.err.println("InterruptedException: " + e.getMessage()); 42 | e.printStackTrace(); 43 | } 44 | } 45 | } 46 | } 47 | 48 | /** 49 | * Unlock communications, only permitted if the caller holds the current lock 50 | * @param o Calling object should supply reference to self 51 | * @return 52 | */ 53 | public static boolean unlock(Object o){ 54 | if(locker == o){ 55 | locker = null; 56 | return true; 57 | } 58 | return false; 59 | } 60 | 61 | 62 | } 63 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/ConnectionException.java: -------------------------------------------------------------------------------- 1 | /* ConnectionException.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:14 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | 13 | package com.elusiva.rdp; 14 | 15 | public class ConnectionException extends Exception { 16 | 17 | public ConnectionException(String message){ 18 | super(message); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/Constants.java: -------------------------------------------------------------------------------- 1 | /* Constants.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:20 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Stores common constant values 11 | */ 12 | package com.elusiva.rdp; 13 | 14 | public class Constants { 15 | 16 | public static final boolean desktop_save = true; 17 | // public static final int keylayout = 0x809; // UK... was US, 0x409 18 | 19 | public static final boolean SystemExit = true; 20 | public static boolean encryption=true; 21 | public static boolean licence = true; 22 | 23 | public static final int WINDOWS = 1; 24 | public static final int LINUX = 2; 25 | public static final int MAC = 3; 26 | 27 | public static int OS = 0; 28 | 29 | public static boolean isBrowserRunningOnMac() { 30 | return OS == MAC; 31 | } 32 | 33 | public static boolean isBrowserRunningOnWindows() { 34 | return OS == WINDOWS; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/DataBlob.java: -------------------------------------------------------------------------------- 1 | /* DataBlob.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:29 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Encapsulates Blobs of byte data, of 11 | * arbitrary size (although data cannot 12 | * be changed once set) 13 | */ 14 | package com.elusiva.rdp; 15 | 16 | public class DataBlob { 17 | 18 | private byte[] data = null; 19 | private int size = 0; 20 | 21 | /** 22 | * Construct a DataBlob with a givne size and content. 23 | * Once constructed, the DataBlob cannot be modified 24 | * @param size Size of data 25 | * @param data Array of byte data to store in blob 26 | */ 27 | public DataBlob(int size, byte[] data) { 28 | this.size = size; 29 | this.data = data; 30 | } 31 | 32 | /** 33 | * Retrieve size of data stored in this DataBlob 34 | * @return Size of stored data 35 | */ 36 | public int getSize() { 37 | return this.size; 38 | } 39 | 40 | /** 41 | * Retrieve data stored in this DataBlob 42 | * @return Stored data 43 | */ 44 | public byte[] getData() { 45 | return this.data; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/DisconnnectCodeMapper.java: -------------------------------------------------------------------------------- 1 | package com.elusiva.rdp; 2 | 3 | /** 4 | * Created by IntelliJ IDEA. 5 | * User: Administrator 6 | * Date: Oct 1, 2010 7 | * Time: 6:19:13 PM 8 | * To change this template use File | Settings | File Templates. 9 | */ 10 | public class DisconnnectCodeMapper { 11 | /* RDP5 disconnect PDU */ 12 | public static final int exDiscReasonLicenseCantFinishProtocol = 0x0106; 13 | public static final int exDiscReasonNoInfo = 0x0000; 14 | public static final int exDiscReasonAPIInitiatedDisconnect = 0x0001; 15 | public static final int exDiscReasonAPIInitiatedLogoff = 0x0002; 16 | public static final int exDiscReasonServerIdleTimeout = 0x0003; 17 | public static final int exDiscReasonServerLogonTimeout = 0x0004; 18 | public static final int exDiscReasonReplacedByOtherConnection = 0x0005; 19 | public static final int exDiscReasonOutOfMemory = 0x0006; 20 | public static final int exDiscReasonServerDeniedConnection = 0x0007; 21 | public static final int exDiscReasonServerDeniedConnectionFips = 0x0008; 22 | public static final int exDiscReasonLicenseInternal = 0x0100; 23 | public static final int exDiscReasonLicenseNoLicenseServer = 0x0101; 24 | public static final int exDiscReasonLicenseNoLicense = 0x0102; 25 | public static final int exDiscReasonLicenseErrClientMsg = 0x0103; 26 | public static final int exDiscReasonLicenseHwidDoesntMatchLicense = 0x0104; 27 | public static final int exDiscReasonLicenseErrClientLicense = 0x0105; 28 | public static final int exDiscReasonLicenseClientEndedProtocol = 0x0107; 29 | public static final int exDiscReasonLicenseErrClientEncryption = 0x0108; 30 | public static final int exDiscReasonLicenseCantUpgradeLicense = 0x0109; 31 | public static final int exDiscReasonLicenseNoRemoteConnections = 0x010a; 32 | /** 33 | * Translate a disconnect code into a textual description of the reason for the disconnect 34 | * 35 | * @param reason Integer disconnect code received from server 36 | * @return Text description of the reason for disconnection 37 | */ 38 | static String textDisconnectReason(int reason) { 39 | String text; 40 | 41 | switch (reason) { 42 | case exDiscReasonNoInfo: 43 | text = "No information available"; 44 | break; 45 | 46 | case exDiscReasonAPIInitiatedDisconnect: 47 | text = "Server initiated disconnect"; 48 | break; 49 | 50 | case exDiscReasonAPIInitiatedLogoff: 51 | text = "Server initiated logoff"; 52 | break; 53 | 54 | case exDiscReasonServerIdleTimeout: 55 | text = "Server idle timeout reached"; 56 | break; 57 | 58 | case exDiscReasonServerLogonTimeout: 59 | text = "Server logon timeout reached"; 60 | break; 61 | 62 | case exDiscReasonReplacedByOtherConnection: 63 | text = "Another user connected to the session"; 64 | break; 65 | 66 | case exDiscReasonOutOfMemory: 67 | text = "The server is out of memory"; 68 | break; 69 | 70 | case exDiscReasonServerDeniedConnection: 71 | text = "The server denied the connection"; 72 | break; 73 | 74 | case exDiscReasonServerDeniedConnectionFips: 75 | text = "The server denied the connection for security reason"; 76 | break; 77 | 78 | case exDiscReasonLicenseInternal: 79 | text = "Internal licensing error"; 80 | break; 81 | 82 | case exDiscReasonLicenseNoLicenseServer: 83 | text = "No license server available"; 84 | break; 85 | 86 | case exDiscReasonLicenseNoLicense: 87 | text = "No valid license available"; 88 | break; 89 | 90 | case exDiscReasonLicenseErrClientMsg: 91 | text = "Invalid licensing message"; 92 | break; 93 | 94 | case exDiscReasonLicenseHwidDoesntMatchLicense: 95 | text = "Hardware id doesn't match software license"; 96 | break; 97 | 98 | case exDiscReasonLicenseErrClientLicense: 99 | text = "Client license error"; 100 | break; 101 | 102 | case exDiscReasonLicenseCantFinishProtocol: 103 | text = "Network error during licensing protocol"; 104 | break; 105 | 106 | case exDiscReasonLicenseClientEndedProtocol: 107 | text = "Licensing protocol was not completed"; 108 | break; 109 | 110 | case exDiscReasonLicenseErrClientEncryption: 111 | text = "Incorrect client license enryption"; 112 | break; 113 | 114 | case exDiscReasonLicenseCantUpgradeLicense: 115 | text = "Can't upgrade license"; 116 | break; 117 | 118 | case exDiscReasonLicenseNoRemoteConnections: 119 | text = "The server is not licensed to accept remote connections"; 120 | break; 121 | 122 | default: 123 | if (reason > 0x1000 && reason < 0x7fff) { 124 | text = "Internal protocol error"; 125 | } else { 126 | text = "Unknown reason"; 127 | } 128 | } 129 | return text; 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/Glyph.java: -------------------------------------------------------------------------------- 1 | /* Glyph.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:14 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Represents data for individual glyphs, used 11 | * for drawing text 12 | */ 13 | package com.elusiva.rdp; 14 | 15 | //import java.awt.*; 16 | //import java.awt.image.*; 17 | 18 | public class Glyph { 19 | 20 | private int font = 0; 21 | private int character = 0; 22 | private int offset = 0; 23 | private int baseline = 0; 24 | private int width = 0; 25 | private int height = 0; 26 | private byte[] fontdata = null; 27 | 28 | /** 29 | * Construct a Glyph object 30 | * @param font Font ID for Glyph 31 | * @param character Character ID for Glyph 32 | * @param offset x-offset of Glyph data for drawing 33 | * @param baseline y-offset of Glyph data for drawing 34 | * @param width Width of Glyph, in pixels 35 | * @param height Height of Glyph, in pixels 36 | * @param fontdata Data detailing Glyph's graphical representation 37 | */ 38 | public Glyph(int font, int character, int offset, int baseline, int width, int height, byte[] fontdata) { 39 | this.font = font; 40 | this.character = character; 41 | this.offset = offset; 42 | this.baseline = baseline; 43 | this.width = width; 44 | this.height = height; 45 | this.fontdata = fontdata; 46 | } 47 | 48 | /** 49 | * Retrieve the font ID for this Glyph 50 | * @return Font ID 51 | */ 52 | public int getFont() { 53 | return this.font; 54 | } 55 | 56 | /** 57 | * Retrive y-offset of Glyph data 58 | * @return y-offset 59 | */ 60 | public int getBaseLine() { 61 | return this.baseline; 62 | } 63 | 64 | /** 65 | * Return character ID of this Glyph 66 | * @return ID of character represented by this Glyph 67 | */ 68 | public int getCharacter() { 69 | return this.character; 70 | } 71 | 72 | /** 73 | * Retrive x-offset of Glyph data 74 | * @return x-offset 75 | */ 76 | public int getOffset() { 77 | return this.offset; 78 | } 79 | 80 | /** 81 | * Return width of Glyph 82 | * @return Glyph width, in pixels 83 | */ 84 | public int getWidth() { 85 | return this.width; 86 | } 87 | 88 | /** 89 | * Return height of Glyph 90 | * @return Glyph height, in pixels 91 | */ 92 | public int getHeight() { 93 | return this.height; 94 | } 95 | 96 | /** 97 | * Graphical data for this Glyph 98 | * @return Data defining graphical representation of this Glyph 99 | */ 100 | public byte[] getFontData() { 101 | return this.fontdata; 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/HexDump.java: -------------------------------------------------------------------------------- 1 | /* HexDump.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:29 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Manages debug information for all data 11 | * sent and received, outputting in hex format 12 | */ 13 | package com.elusiva.rdp; 14 | 15 | import org.apache.log4j.Logger; 16 | import org.apache.log4j.Level; 17 | 18 | public class HexDump { 19 | static Logger logger = Logger.getLogger(HexDump.class); 20 | 21 | /** 22 | * Construct a HexDump object, sets logging level to Debug 23 | */ 24 | public HexDump() { 25 | logger.setLevel(Level.DEBUG); 26 | } 27 | 28 | /** 29 | * Encode data as hex and output as debug messages along with supplied custom message 30 | * @param data Array of byte data to be encoded 31 | * @param msg Message to include with outputted hex debug messages 32 | */ 33 | public void encode(byte[] data, String msg/*PrintStream out*/) { 34 | int count = 0; 35 | String index; 36 | String number; 37 | 38 | logger.debug(msg); 39 | 40 | while(count < data.length) { 41 | index = Integer.toHexString(count); 42 | switch(index.length()) { 43 | case(1): 44 | index = "0000000".concat(index); 45 | break; 46 | case(2): 47 | index = "000000".concat(index); 48 | break; 49 | case(3): 50 | index = "00000".concat(index); 51 | break; 52 | case(4): 53 | index = "0000".concat(index); 54 | break; 55 | case(5): 56 | index = "000".concat(index); 57 | break; 58 | case(6): 59 | index = "00".concat(index); 60 | break; 61 | case(7): 62 | index = "0".concat(index); 63 | break; 64 | case(8): 65 | break; 66 | default: 67 | return; 68 | } 69 | 70 | index += ": "; 71 | //out.print(index + ": "); 72 | for(int i = 0; i < 16; i++) { 73 | if(count >= data.length) { 74 | break; 75 | } 76 | number = Integer.toHexString((data[count]&0x000000ff)); 77 | switch(number.length()) { 78 | case(1): 79 | number = "0".concat(number); 80 | break; 81 | case(2): 82 | break; 83 | default: 84 | logger.debug(index); 85 | //out.println(""); 86 | return; 87 | } 88 | index+= (number + " "); 89 | //out.print(number + " "); 90 | count++; 91 | } 92 | logger.debug(index); 93 | //out.println(""); 94 | } 95 | 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/LicenceStore.java: -------------------------------------------------------------------------------- 1 | /* LicenceStore.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Handle saving and loading of licences 11 | */ 12 | package com.elusiva.rdp; 13 | 14 | import java.io.File; 15 | import java.io.FileInputStream; 16 | import java.io.FileNotFoundException; 17 | import java.io.FileOutputStream; 18 | import java.io.IOException; 19 | 20 | import org.apache.log4j.Logger; 21 | 22 | public abstract class LicenceStore { 23 | 24 | static Logger logger = Logger.getLogger(Licence.class); 25 | 26 | /** 27 | * Load a licence from a file 28 | * @return Licence data stored in file @param option 29 | */ 30 | public byte[] load_licence(Options option){ 31 | String path = option.getLicencePath() + "/licence."+ option.getHostname(); 32 | byte[] data = null; 33 | try{ 34 | FileInputStream fd = new FileInputStream(path); 35 | data = new byte[fd.available()]; 36 | fd.read(data); 37 | } 38 | catch(FileNotFoundException e){logger.warn("Licence file not found!");} 39 | catch(IOException e){logger.warn("IOException in load_licence");} 40 | return data; 41 | } 42 | 43 | /** 44 | * Save a licence to file 45 | * @param databytes Licence data to store 46 | * @param option 47 | */ 48 | public void save_licence(byte[] databytes, Options option){ 49 | /* set and create the directory -- if it doesn't exist. */ 50 | //String home = "/root"; 51 | String dirpath = option.getLicencePath();//home+"/.rdesktop"; 52 | String filepath = dirpath +"/licence."+ option.getHostname(); 53 | 54 | File file = new File(dirpath); 55 | file.mkdir(); 56 | try{ 57 | FileOutputStream fd = new FileOutputStream(filepath); 58 | 59 | /* write to the licence file */ 60 | fd.write(databytes); 61 | fd.close(); 62 | logger.info("Stored licence at " + filepath); 63 | } 64 | catch(FileNotFoundException e){logger.warn("save_licence: file path not valid!");} 65 | catch(IOException e){logger.warn("IOException in save_licence");} 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/OKDialog.java: -------------------------------------------------------------------------------- 1 | package com.elusiva.rdp; 2 | 3 | import java.awt.*; 4 | import java.awt.event.ActionListener; 5 | import java.awt.event.ActionEvent; 6 | 7 | /** 8 | * Created by IntelliJ IDEA. 9 | * User: Administrator 10 | * Date: Sep 17, 2010 11 | * Time: 11:23:00 AM 12 | * To change this template use File | Settings | File Templates. 13 | */ 14 | class OKDialog extends Dialog implements ActionListener { 15 | 16 | public OKDialog(RdesktopFrame parent, String title, String[] message) { 17 | 18 | super(parent, title, true); 19 | 20 | Panel msg = new Panel(); 21 | msg.setLayout(new GridLayout(message.length, 1)); 22 | for (int i = 0; i < message.length; i++) 23 | msg.add(new Label(message[i], Label.CENTER)); 24 | this.add("Center", msg); 25 | 26 | Button ok = createButton("OK"); 27 | 28 | Panel p = new Panel(); 29 | p.setLayout(new FlowLayout()); 30 | 31 | p.add(ok); 32 | this.add("South", p); 33 | this.pack(); 34 | 35 | if (getSize().width < 240) 36 | setSize(new Dimension(240, getSize().height)); 37 | 38 | parent.centreWindow(this); 39 | } 40 | 41 | private Button createButton(String title) { 42 | Button button = new Button(title); 43 | button.addActionListener(this); 44 | return button; 45 | } 46 | public void actionPerformed(ActionEvent e) { 47 | this.hide(); 48 | this.dispose(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/OrderException.java: -------------------------------------------------------------------------------- 1 | /* OrderException.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:15 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp; 13 | 14 | public class OrderException extends Exception { 15 | 16 | public OrderException() { 17 | super(); 18 | } 19 | 20 | public OrderException(String s) { 21 | super(s); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/OrderState.java: -------------------------------------------------------------------------------- 1 | /* OrderState.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:15 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Storage of current order state, which may consist of one of each of a number of 11 | * order types. 12 | */ 13 | package com.elusiva.rdp; 14 | 15 | import com.elusiva.rdp.orders.*; 16 | 17 | class OrderState { 18 | private int order_type = 0; 19 | private BoundsOrder bounds = null; 20 | 21 | private DestBltOrder destblt = null; 22 | private PatBltOrder patblt = null; 23 | private ScreenBltOrder screenblt = null; 24 | private LineOrder line = null; 25 | private RectangleOrder rect = null; 26 | private DeskSaveOrder desksave = null; 27 | private MemBltOrder memblt = null; 28 | private TriBltOrder triblt = null; 29 | private PolyLineOrder polyline = null; 30 | private Text2Order text2 = null; 31 | 32 | /** 33 | * Initialise this OrderState object, initialise one of each type of order 34 | */ 35 | public OrderState(){ 36 | bounds = new BoundsOrder(); 37 | destblt = new DestBltOrder(); 38 | patblt = new PatBltOrder(); 39 | screenblt = new ScreenBltOrder(); 40 | line = new LineOrder(); 41 | rect = new RectangleOrder(); 42 | desksave = new DeskSaveOrder(); 43 | memblt = new MemBltOrder(); 44 | triblt = new TriBltOrder(); 45 | polyline = new PolyLineOrder(); 46 | text2 = new Text2Order(); 47 | } 48 | 49 | /** 50 | * Get the id of the current order type 51 | * @return Order type id 52 | */ 53 | public int getOrderType() { 54 | return this.order_type; 55 | } 56 | 57 | /** 58 | * Set the id of the current order type 59 | * @param order_type Type id to set for current order 60 | */ 61 | public void setOrderType(int order_type) { 62 | this.order_type = order_type; 63 | } 64 | 65 | /** 66 | * Retrieve the bounds order stored within this state 67 | * @return BoundsOrder from this state 68 | */ 69 | public BoundsOrder getBounds() { 70 | return this.bounds; 71 | } 72 | 73 | /** 74 | * Retrieve the dest blt order stored within this state 75 | * @return DestBltOrder from this state 76 | */ 77 | public DestBltOrder getDestBlt() { 78 | return this.destblt; 79 | } 80 | 81 | /** 82 | * Retrieve the pattern blit order stored within this state 83 | * @return PatBltOrder from this state 84 | */ 85 | public PatBltOrder getPatBlt() { 86 | return this.patblt; 87 | } 88 | 89 | /** 90 | * Retrieve the screen blit order stored within this state 91 | * @return ScreenBltOrder from this state 92 | */ 93 | public ScreenBltOrder getScreenBlt() { 94 | return this.screenblt; 95 | } 96 | 97 | /** 98 | * Retrieve the line order stored within this state 99 | * @return LineOrder from this state 100 | */ 101 | public LineOrder getLine() { 102 | return this.line; 103 | } 104 | 105 | /** 106 | * Retrieve the rectangle order stored within this state 107 | * @return RectangleOrder from this state 108 | */ 109 | public RectangleOrder getRectangle() { 110 | return this.rect; 111 | } 112 | 113 | /** 114 | * Retrieve the desktop save order stored within this state 115 | * @return DeskSaveOrder from this state 116 | */ 117 | public DeskSaveOrder getDeskSave() { 118 | return this.desksave; 119 | } 120 | 121 | /** 122 | * Retrieve the memory blit order stored within this state 123 | * @return MemBltOrder from this state 124 | */ 125 | public MemBltOrder getMemBlt() { 126 | return this.memblt; 127 | } 128 | 129 | /** 130 | * Retrieve the tri blit order stored within this state 131 | * @return TriBltOrder from this state 132 | */ 133 | public TriBltOrder getTriBlt() { 134 | return this.triblt; 135 | } 136 | 137 | /** 138 | * Retrieve the multi-point line order stored within this state 139 | * @return PolyLineOrder from this state 140 | */ 141 | public PolyLineOrder getPolyLine() { 142 | return this.polyline; 143 | } 144 | 145 | /** 146 | * Retrieve the text2 order stored within this state 147 | * @return Text2Order from this state 148 | */ 149 | public Text2Order getText2() { 150 | return this.text2; 151 | } 152 | 153 | /** 154 | * Reset all orders within this order state 155 | */ 156 | public void reset() { 157 | bounds.reset(); 158 | destblt.reset(); 159 | patblt.reset(); 160 | screenblt.reset(); 161 | line.reset(); 162 | rect.reset(); 163 | desksave.reset(); 164 | memblt.reset(); 165 | triblt.reset(); 166 | polyline.reset(); 167 | text2.reset(); 168 | } 169 | } 170 | 171 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/RdesktopComponentAdapter.java: -------------------------------------------------------------------------------- 1 | package com.elusiva.rdp; 2 | 3 | import java.awt.event.ComponentAdapter; 4 | import java.awt.event.ComponentEvent; 5 | 6 | /** 7 | * Created by IntelliJ IDEA. 8 | * User: Administrator 9 | * Date: Sep 17, 2010 10 | * Time: 11:30:26 AM 11 | * To change this template use File | Settings | File Templates. 12 | */ 13 | class RdesktopComponentAdapter extends ComponentAdapter { 14 | private RdesktopCanvas canvas; 15 | private Options option; 16 | 17 | public RdesktopComponentAdapter(RdesktopCanvas canvas, Options option) { 18 | this.canvas = canvas; 19 | this.option = option; 20 | } 21 | 22 | public void componentMoved(ComponentEvent e) { 23 | canvas.repaint(0, 0, option.getWidth(), option.getHeight()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/RdesktopException.java: -------------------------------------------------------------------------------- 1 | /* RdesktopException.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:19 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: General exception class for ProperJavaRDP 11 | */ 12 | package com.elusiva.rdp; 13 | 14 | public class RdesktopException extends Exception { 15 | 16 | public RdesktopException() { 17 | super(); 18 | } 19 | 20 | public RdesktopException(String s) { 21 | super(s); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/RdesktopFocusListener.java: -------------------------------------------------------------------------------- 1 | package com.elusiva.rdp; 2 | 3 | import java.awt.event.FocusListener; 4 | import java.awt.event.FocusEvent; 5 | 6 | /** 7 | * Created by IntelliJ IDEA. 8 | * User: Administrator 9 | * Date: Sep 17, 2010 10 | * Time: 11:29:52 AM 11 | * To change this template use File | Settings | File Templates. 12 | */ 13 | public class RdesktopFocusListener implements FocusListener { 14 | private RdesktopCanvas canvas; 15 | private Options option; 16 | 17 | public RdesktopFocusListener(RdesktopCanvas canvas, Options option) { 18 | this.canvas = canvas; 19 | this.option = option; 20 | } 21 | 22 | public void focusGained(FocusEvent arg0) { 23 | if (Constants.OS == Constants.WINDOWS) { 24 | // canvas.repaint(); 25 | canvas.repaint(0, 0, option.getWidth(), option.getHeight()); 26 | } 27 | // gained focus..need to check state of locking keys 28 | canvas.gainedFocus(); 29 | } 30 | 31 | public void focusLost(FocusEvent arg0) { 32 | // lost focus - need clear keys that are down 33 | canvas.lostFocus(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/RdesktopWindowAdapter.java: -------------------------------------------------------------------------------- 1 | package com.elusiva.rdp; 2 | 3 | import org.apache.log4j.Logger; 4 | 5 | import java.awt.event.WindowAdapter; 6 | import java.awt.event.WindowEvent; 7 | 8 | /** 9 | * Created by IntelliJ IDEA. 10 | * User: Administrator 11 | * Date: Sep 17, 2010 12 | * Time: 11:30:08 AM 13 | * To change this template use File | Settings | File Templates. 14 | */ 15 | class RdesktopWindowAdapter extends WindowAdapter { 16 | private RdesktopFrame rdesktopFrame; 17 | private RdesktopCanvas canvas; 18 | private Options option; 19 | static Logger logger = Logger.getLogger(RdesktopWindowAdapter.class); 20 | 21 | public RdesktopWindowAdapter(RdesktopFrame rdesktopFrame, RdesktopCanvas canvas, Options option) { 22 | this.rdesktopFrame = rdesktopFrame; 23 | this.canvas = canvas; 24 | this.option = option; 25 | } 26 | 27 | public void windowClosing(WindowEvent e) { 28 | rdesktopFrame.hide(); 29 | Rdesktop.stopApplet(option.getDisconnectHandler()); 30 | rdesktopFrame.disconnectPlayer(); 31 | } 32 | 33 | public void windowLostFocus(WindowEvent e) { 34 | logger.info("windowLostFocus"); 35 | // lost focus - need clear keys that are down 36 | canvas.lostFocus(); 37 | } 38 | 39 | public void windowDeiconified(WindowEvent e) { 40 | if (Constants.OS == Constants.WINDOWS) { 41 | // canvas.repaint(); 42 | canvas.repaint(0, 0, option.getWidth(), option.getHeight()); 43 | } 44 | canvas.gainedFocus(); 45 | } 46 | 47 | public void windowActivated(WindowEvent e) { 48 | if (Constants.OS == Constants.WINDOWS) { 49 | // canvas.repaint(); 50 | canvas.repaint(0, 0, option.getWidth(), option.getHeight()); 51 | } 52 | // gained focus..need to check state of locking keys 53 | canvas.gainedFocus(); 54 | } 55 | 56 | public void windowGainedFocus(WindowEvent e) { 57 | if (Constants.OS == Constants.WINDOWS) { 58 | // canvas.repaint(); 59 | canvas.repaint(0, 0, option.getWidth(), option.getHeight()); 60 | } 61 | // gained focus..need to check state of locking keys 62 | canvas.gainedFocus(); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/Utilities.java: -------------------------------------------------------------------------------- 1 | /* Utilities.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:29 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Provide replacements for useful methods that were unavailable prior to 11 | * Java 1.4 (Java 1.1 compliant). 12 | */ 13 | 14 | package com.elusiva.rdp; 15 | 16 | import java.awt.datatransfer.DataFlavor; 17 | import java.util.StringTokenizer; 18 | 19 | public class Utilities { 20 | 21 | /** 22 | * Replaces each substring of this string that matches the given regular expression with the given replacement. 23 | * @param in Input string 24 | * @param regex Regular expression describing patterns to match within input string 25 | * @param replace Patterns matching regular expression within input are replaced with this string 26 | * @return 27 | */ 28 | public static String strReplaceAll(String in, String regex, String replace){ 29 | String[] finArgs = null; 30 | StringTokenizer tok = new StringTokenizer(in, regex); 31 | for (Object[] obj = {tok,finArgs=new String[tok.countTokens()],new int[] {0}}; ((StringTokenizer)obj[0]).hasMoreTokens(); ((String[])obj[1])[((int[])obj[2])[0]++]=((StringTokenizer)obj[0]).nextToken()) {} 32 | String out = finArgs[0]; 33 | for(int i = 1; i < finArgs.length; i++){ 34 | out += replace + finArgs[i]; 35 | } 36 | return out; 37 | } 38 | 39 | /** 40 | * Split a string into segments separated by a specified substring 41 | * @param in Input string 42 | * @param splitWith String with which to split input string 43 | * @return Array of separated string segments 44 | */ 45 | public static String[] split(String in, String splitWith){ 46 | String[] out = null; 47 | StringTokenizer tok = new StringTokenizer(in, splitWith); 48 | for (Object[] obj = {tok,out=new String[tok.countTokens()],new int[] {0}}; ((StringTokenizer)obj[0]).hasMoreTokens(); ((String[])obj[1])[((int[])obj[2])[0]++]=((StringTokenizer)obj[0]).nextToken()) {} 49 | return out; 50 | } 51 | 52 | public static DataFlavor imageFlavor = new DataFlavor(java.awt.Image.class,"image/x-java-image"); 53 | 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/Version.java: -------------------------------------------------------------------------------- 1 | /* Version.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:26 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Stores version information 11 | */ 12 | 13 | package com.elusiva.rdp; 14 | 15 | import java.io.PrintWriter; 16 | import java.io.FileOutputStream; 17 | 18 | 19 | /** 20 | * Records the current version information of properJavaRDP 21 | */ 22 | 23 | public class Version 24 | { 25 | public static String version = "1.1"; 26 | 27 | /** 28 | * Display the current version of properJavaRDP 29 | */ 30 | public static void main(String[] argv) 31 | { 32 | try { 33 | if (argv.length == 0) { 34 | System.out.println(version); 35 | } else { 36 | String filename = argv[0]; 37 | System.out.println("Writing version information to: " + filename); 38 | PrintWriter file = new PrintWriter(new FileOutputStream(filename), true); 39 | 40 | file.println("product.version=" + version); 41 | file.close(); 42 | } 43 | } catch (Exception e) { 44 | System.err.println("Problem writing version information: " + e); 45 | e.printStackTrace(System.err); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/WrappedImage.java: -------------------------------------------------------------------------------- 1 | /* WrappedImage.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:19 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Adds functionality to the BufferedImage class, allowing 11 | * manipulation of colour indices, making the RGB values 12 | * invisible (in the case of Indexed Colour only). 13 | */ 14 | package com.elusiva.rdp; 15 | 16 | import java.awt.Graphics; 17 | import java.awt.image.BufferedImage; 18 | import java.awt.image.IndexColorModel; 19 | 20 | import org.apache.log4j.Logger; 21 | 22 | public class WrappedImage { 23 | static Logger logger = Logger.getLogger(RdesktopCanvas.class); 24 | IndexColorModel cm = null; 25 | BufferedImage bi = null; 26 | 27 | public WrappedImage(int arg0, int arg1, int arg2) { 28 | bi = new BufferedImage(arg0, arg1, arg2); 29 | } 30 | 31 | public WrappedImage(int arg0, int arg1, int arg2, IndexColorModel cm) { 32 | bi = new BufferedImage(arg0,arg1,BufferedImage.TYPE_INT_RGB); //super(arg0, arg1, BufferedImage.TYPE_INT_RGB); 33 | this.cm = cm; 34 | } 35 | 36 | public int getWidth(){ return bi.getWidth(); } 37 | public int getHeight(){ return bi.getHeight(); } 38 | 39 | public BufferedImage getBufferedImage(){ return bi; } 40 | 41 | public Graphics getGraphics(){ 42 | return bi.getGraphics(); 43 | } 44 | 45 | public BufferedImage getSubimage(int x,int y, int width, int height){ 46 | return bi.getSubimage(x,y,width,height); 47 | } 48 | 49 | /** 50 | * Force a colour to its true RGB representation (extracting from colour model if indexed colour) 51 | * @param color 52 | * @return 53 | */ 54 | public int checkColor(int color){ 55 | if(cm != null) return cm.getRGB(color); 56 | return color; 57 | } 58 | 59 | /** 60 | * Set the colour model for this Image 61 | * @param cm Colour model for use with this image 62 | */ 63 | public void setIndexColorModel(IndexColorModel cm){ 64 | this.cm = cm; 65 | } 66 | 67 | public void setRGB(int x, int y, int color){ 68 | //if(x >= bi.getWidth() || x < 0 || y >= bi.getHeight() || y < 0) return; 69 | 70 | if (cm != null) color = cm.getRGB(color); 71 | bi.setRGB(x,y,color); 72 | } 73 | 74 | /** 75 | * Apply a given array of colour values to an area of pixels in the image, do not convert for colour model 76 | * @param x x-coordinate for left of area to set 77 | * @param y y-coordinate for top of area to set 78 | * @param cx width of area to set 79 | * @param cy height of area to set 80 | * @param data array of pixel colour values to apply to area 81 | * @param offset offset to pixel data in data 82 | * @param w width of a line in data (measured in pixels) 83 | */ 84 | public void setRGBNoConversion(int x, int y, int cx, int cy, int[] data, int offset,int w){ 85 | bi.setRGB(x,y,cx,cy,data,offset,w); 86 | } 87 | 88 | public void setRGB(int x, int y, int cx, int cy, int[] data, int offset,int w){ 89 | if(cm != null && data != null && data.length > 0){ 90 | for(int i = 0; i < data.length; i++) 91 | data[i] = cm.getRGB(data[i]); 92 | } 93 | bi.setRGB(x,y,cx,cy,data,offset,w); 94 | } 95 | 96 | public int[] getRGB(int x, 97 | int y, 98 | int cx, 99 | int cy, 100 | int[] data, 101 | int offset, 102 | int width){ 103 | return bi.getRGB(x,y,cx,cy,data,offset,width); 104 | } 105 | 106 | public int getRGB(int x, int y){ 107 | //if(x >= this.getWidth() || x < 0 || y >= this.getHeight() || y < 0) return 0; 108 | 109 | if(cm == null) return bi.getRGB(x,y); 110 | else{ 111 | int pix = bi.getRGB(x,y) & 0xFFFFFF; 112 | int[] vals = {(pix >> 16) & 0xFF,(pix >> 8) & 0xFF,(pix) & 0xFF}; 113 | int out = cm.getDataElement(vals,0); 114 | if(cm.getRGB(out) != bi.getRGB(x,y)) logger.info("Did not get correct colour value for color (" + Integer.toHexString(pix) + "), got (" + cm.getRGB(out) + ") instead"); 115 | return out; 116 | } 117 | } 118 | 119 | } 120 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/YesNoDialog.java: -------------------------------------------------------------------------------- 1 | package com.elusiva.rdp; 2 | 3 | import java.awt.*; 4 | import java.awt.event.ActionListener; 5 | import java.awt.event.ActionEvent; 6 | 7 | /** 8 | * Created by IntelliJ IDEA. 9 | * User: Administrator 10 | * Date: Sep 17, 2010 11 | * Time: 11:22:38 AM 12 | * To change this template use File | Settings | File Templates. 13 | */ 14 | class YesNoDialog extends Dialog implements ActionListener { 15 | 16 | Button yes, no; 17 | 18 | boolean retry = false; 19 | 20 | public YesNoDialog(RdesktopFrame parent,String title, String[] message) { 21 | super(parent, title, true); 22 | 23 | Panel msg = new Panel(); 24 | msg.setLayout(new GridLayout(message.length, 1)); 25 | for (int i = 0; i < message.length; i++) 26 | msg.add(new Label(message[i], Label.CENTER)); 27 | this.add("Center", msg); 28 | 29 | Panel p = new Panel(); 30 | p.setLayout(new FlowLayout()); 31 | yes = createButton("Yes"); 32 | p.add(yes); 33 | no = createButton("No"); 34 | p.add(no); 35 | this.add("South", p); 36 | this.pack(); 37 | if (getSize().width < 240) 38 | setSize(new Dimension(240, getSize().height)); 39 | 40 | parent.centreWindow(this); 41 | } 42 | 43 | private Button createButton(String title) { 44 | Button button = new Button(title); 45 | button.addActionListener(this); 46 | return button; 47 | } 48 | 49 | public void actionPerformed(ActionEvent e) { 50 | if (e.getSource() == yes) 51 | retry = true; 52 | else 53 | retry = false; 54 | this.hide(); 55 | this.dispose(); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/crypto/BlockMessageDigest.java: -------------------------------------------------------------------------------- 1 | package com.elusiva.rdp.crypto; 2 | 3 | /** 4 | * This is a superclass for message digests that operate internally on 5 | * blocks of data. It is not intended directly for use by application 6 | * programmers. 7 | *

8 | * Copyright © 1995-1997 9 | * Systemics Ltd on behalf of the 10 | * Cryptix Development Team. 11 | *
All rights reserved. 12 | *

13 | * $Revision: 1.1.1.1 $ 14 | * @author David Hopwood 15 | * @since Cryptix 2.2.2 16 | */ 17 | public abstract class BlockMessageDigest 18 | { 19 | /** 20 | * The buffer used to store the last incomplete block. 21 | */ 22 | private byte[] buffer; 23 | 24 | /** 25 | * The number of bytes currently stored in buffer. 26 | */ 27 | private int buffered; 28 | 29 | private String algorithm ; 30 | /** 31 | * The number of bytes that have been input to the digest. 32 | */ 33 | private int count; 34 | 35 | private static final int MAX_COUNT = (1 << 28) -1; 36 | 37 | /** 38 | * The length of a data block for this algorithm. 39 | */ 40 | private int data_length; 41 | 42 | /** 43 | * Constructs a message digest with the specified algorithm name. 44 | * 45 | * @param algorithm the standard name of the digest algorithm. 46 | */ 47 | protected BlockMessageDigest(String algorithm) 48 | { 49 | this.algorithm = algorithm; 50 | data_length = engineGetDataLength(); 51 | buffer = new byte[data_length]; 52 | } 53 | 54 | /** 55 | * @return number of bits hashed so far? 56 | */ 57 | protected int bitcount() { 58 | return count * 8; 59 | } 60 | 61 | /** 62 | * SPI: Resets the digest. Subclasses that override engineReset 63 | * should always call this implementation using super.engineReset(). 64 | */ 65 | public void engineReset() 66 | { 67 | buffered = 0; 68 | count = 0; 69 | } 70 | 71 | /** 72 | * SPI: Updates the message digest with a byte of new data. 73 | * 74 | * @param b the byte to be added. 75 | */ 76 | public void engineUpdate(byte b) throws CryptoException 77 | { 78 | byte[] data = { b }; 79 | engineUpdate(data, 0, 1); 80 | } 81 | 82 | /** 83 | * SPI: Updates the message digest with new data. 84 | * 85 | * @param data the data to be added. 86 | * @param offset the start of the data in the array. 87 | * @param length the number of bytes of data to add. 88 | */ 89 | public void engineUpdate(byte[] data, int offset, int length) throws CryptoException 90 | { 91 | count += length; 92 | if (count > MAX_COUNT) 93 | throw new CryptoException(getAlgorithm() + ": Maximum input length exceeded"); 94 | 95 | int datalen = data_length; 96 | int remainder; 97 | 98 | while (length >= (remainder = datalen - buffered)) { 99 | System.arraycopy(data, offset, buffer, buffered, remainder); 100 | engineTransform(buffer); 101 | length -= remainder; 102 | offset += remainder; 103 | buffered = 0; 104 | } 105 | 106 | if (length > 0) { 107 | System.arraycopy(data, offset, buffer, buffered, length); 108 | buffered += length; 109 | } 110 | } 111 | 112 | /** 113 | * SPI: Calculates the final digest. BlockMessageDigest 114 | * subclasses should not usually override this method. 115 | * 116 | * @return the digest as a byte array. 117 | */ 118 | public byte[] engineDigest() 119 | { 120 | return engineDigest(buffer, buffered); 121 | } 122 | 123 | // 124 | // Override int engineDigest(byte[] buf, int offset, int len) 125 | // from Java 1.2 preview docs? For the time being no - it should work 126 | // anyway. 127 | // 128 | 129 | /** 130 | * SPI (for BlockMessageDigests only): Calculates the 131 | * final digest. data[0..length-1] contains the last 132 | * incomplete input block. length will be less than 133 | * engineDataLength(). 134 | * 135 | * @param data the last incomplete block. 136 | * @param length the length in bytes of the last block. 137 | * @return the digest as a byte array. 138 | */ 139 | public abstract byte[] engineDigest(byte[] data, int length); 140 | 141 | /** 142 | * SPI (for BlockMessageDigests only): Performs a 143 | * transformation on the given data, which is always one block long. 144 | */ 145 | protected abstract void engineTransform(byte[] data); 146 | 147 | /** 148 | * SPI: Returns the length of the block that this hash 149 | * function operates on. 150 | */ 151 | protected abstract int engineGetDataLength(); 152 | 153 | protected String getAlgorithm() { return this.algorithm;} 154 | } 155 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/crypto/CryptoException.java: -------------------------------------------------------------------------------- 1 | package com.elusiva.rdp.crypto; 2 | 3 | /** 4 | * This class is for any unexpected exception in the crypto library. 5 | *

6 | * Copyright © 1997 7 | * Systemics Ltd on behalf of the 8 | * Cryptix Development Team. 9 | *
All rights reserved. 10 | *

11 | * $Revision: 1.1.1.1 $ 12 | * @author David Hopwood 13 | * @since Cryptix 2.2.2 14 | */ 15 | public class CryptoException 16 | extends Exception 17 | { 18 | public CryptoException() { super(); } 19 | /** @param reason the reason why the exception was thrown. */ 20 | public CryptoException(String reason) { super(reason); } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/crypto/Key.java: -------------------------------------------------------------------------------- 1 | /* 2 | * @(#)Key.java 1.47 00/02/02 3 | * 4 | * Copyright 1996-2000 Sun Microsystems, Inc. All Rights Reserved. 5 | * 6 | * This software is the proprietary information of Sun Microsystems, Inc. 7 | * Use is subject to license terms. 8 | * 9 | */ 10 | 11 | package com.elusiva.rdp.crypto; 12 | 13 | /** 14 | * The Key interface is the top-level interface for all keys. It 15 | * defines the functionality shared by all key objects. All keys 16 | * have three characteristics: 17 | * 18 | *

43 | * 44 | * Keys are generally obtained through key generators, certificates, 45 | * or various Identity classes used to manage keys. 46 | * Keys may also be obtained from key specifications (transparent 47 | * representations of the underlying key material) through the use of a key 48 | * factory (see {@link KeyFactory}). 49 | * 50 | * @see PublicKey 51 | * @see PrivateKey 52 | * @see KeyPair 53 | * @see KeyPairGenerator 54 | * @see KeyFactory 55 | * @see java.security.spec.KeySpec 56 | * @see Identity 57 | * @see Signer 58 | * 59 | * @version 1.47 00/02/02 60 | * @author Benjamin Renaud 61 | */ 62 | 63 | public interface Key extends java.io.Serializable { 64 | 65 | // Declare serialVersionUID to be compatible with JDK1.1 66 | 67 | /** 68 | * The class fingerprint that is set to indicate 69 | * serialization compatibility with a previous 70 | * version of the class. 71 | */ 72 | static final long serialVersionUID = 6603384152749567654L; 73 | 74 | /** 75 | * Returns the standard algorithm name for this key. For 76 | * example, "DSA" would indicate that this key is a DSA key. 77 | * See Appendix A in the 79 | * Java Cryptography Architecture API Specification & Reference 80 | * for information about standard algorithm names. 81 | * 82 | * @return the name of the algorithm associated with this key. 83 | */ 84 | public String getAlgorithm(); 85 | 86 | /** 87 | * Returns the name of the primary encoding format of this key, 88 | * or null if this key does not support encoding. 89 | * The primary encoding format is 90 | * named in terms of the appropriate ASN.1 data format, if an 91 | * ASN.1 specification for this key exists. 92 | * For example, the name of the ASN.1 data format for public 93 | * keys is SubjectPublicKeyInfo, as 94 | * defined by the X.509 standard; in this case, the returned format is 95 | * "X.509". Similarly, 96 | * the name of the ASN.1 data format for private keys is 97 | * PrivateKeyInfo, 98 | * as defined by the PKCS #8 standard; in this case, the returned format is 99 | * "PKCS#8". 100 | * 101 | * @return the primary encoding format of the key. 102 | */ 103 | public String getFormat(); 104 | 105 | /** 106 | * Returns the key in its primary encoding format, or null 107 | * if this key does not support encoding. 108 | * 109 | * @return the encoded key, or null if the key does not support 110 | * encoding. 111 | */ 112 | public byte[] getEncoded(); 113 | } 114 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/keymapping/KeyCode.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/src/com/elusiva/rdp/keymapping/KeyCode.java -------------------------------------------------------------------------------- /src/com/elusiva/rdp/keymapping/KeyMapException.java: -------------------------------------------------------------------------------- 1 | /* KeyMapException.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:38 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: General exception for keymapping operations 11 | */ 12 | package com.elusiva.rdp.keymapping; 13 | /* 14 | * Created on 20-Apr-2005 15 | * 16 | * TODO To change the template for this generated file go to 17 | * Window - Preferences - Java - Code Style - Code Templates 18 | */ 19 | 20 | /** 21 | * @author Tom Elliott 22 | * 23 | * TODO To change the template for this generated type comment go to 24 | * Window - Preferences - Java - Code Style - Code Templates 25 | */ 26 | public class KeyMapException extends Exception { 27 | 28 | public KeyMapException(String s){ 29 | super(s); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/keymapping/MapDef.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kaseya/JavaRDP/7ec023411bafb0db0ffee44c1908f06e95f6189a/src/com/elusiva/rdp/keymapping/MapDef.java -------------------------------------------------------------------------------- /src/com/elusiva/rdp/loader/JRdpLoader.java: -------------------------------------------------------------------------------- 1 | /* JRdpLoader.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:42 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Launch ProperJavaRDP with settings from a config file 11 | */ 12 | package com.elusiva.rdp.loader; 13 | 14 | import java.io.DataInputStream; 15 | import java.io.FileInputStream; 16 | import java.io.IOException; 17 | import java.util.StringTokenizer; 18 | 19 | import com.elusiva.rdp.*; 20 | 21 | public class JRdpLoader { 22 | 23 | // Set of identifiers to be found within the launch file 24 | private static String[] identifiers = { 25 | "--user", 26 | "--password", 27 | "--domain", 28 | "--fullscreen", 29 | "--geometry", 30 | "--use_rdp5" 31 | }; 32 | 33 | // Set of command-line options mapping to the launch file identifiers 34 | private static String[] pairs = { 35 | "-u", 36 | "-p", 37 | "-d", 38 | "-f", 39 | "-g", 40 | "--use_rdp5" 41 | }; 42 | 43 | public static void main(String args[]){ 44 | 45 | if(args.length <= 0){ 46 | System.err.println("Expected usage: JRdpLoader launchFile"); 47 | System.exit(-1); 48 | } 49 | 50 | String launchFile = args[0]; 51 | 52 | String server = ""; String port = ""; 53 | 54 | try{ 55 | String outArgs = ""; 56 | 57 | // Open the file specified at the command-line 58 | FileInputStream fstream = new FileInputStream(launchFile); 59 | DataInputStream in = new DataInputStream(fstream); 60 | while (in.available() != 0) { 61 | String line = in.readLine(); 62 | StringTokenizer stok = new StringTokenizer(line); 63 | if(stok.hasMoreTokens()){ 64 | String identifier = stok.nextToken(); 65 | String value = ""; 66 | while(stok.hasMoreTokens()){ 67 | value += stok.nextToken(); 68 | if(stok.hasMoreTokens()) value += " "; 69 | } 70 | 71 | if(identifier.equals("--server")) server = value; 72 | else if(identifier.equals("--port")) port = value; 73 | else{ 74 | String p = getParam(identifier); 75 | if(p != null) outArgs += p + " " + value + " "; 76 | } 77 | } 78 | } 79 | 80 | if(server != null && server != ""){ 81 | outArgs += server; 82 | if(port != null && port != "") outArgs += ":" + port; 83 | 84 | //String[] finArgs = outArgs.split(" "); 85 | String[] finArgs = Utilities_Localised.split(outArgs, " "); 86 | 87 | Rdesktop.main(finArgs, null); 88 | in.close(); 89 | }else{ System.err.println("No server name provided"); System.exit(0); } 90 | 91 | 92 | } 93 | catch(IOException ioe){ System.err.println("Launch file could not be read: " + ioe.getMessage()); System.exit(-1); } 94 | catch(Exception e){ e.printStackTrace(); System.exit(-1); } 95 | } 96 | 97 | private static String getParam(String identifier){ 98 | for(int i = 0; i < identifiers.length; i++){ 99 | if(identifier.equals(identifiers[i])){ 100 | return pairs[i]; 101 | } 102 | } 103 | 104 | return null; 105 | } 106 | 107 | } 108 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/menu/RdpMenu.java: -------------------------------------------------------------------------------- 1 | /* RdpMenu.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.2 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/13 18:21:57 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Menu bar for main frame 11 | */ 12 | package com.elusiva.rdp.menu; 13 | 14 | import java.awt.*; 15 | import java.awt.event.ActionEvent; 16 | import java.awt.event.ActionListener; 17 | 18 | import com.elusiva.rdp.RdesktopFrame; 19 | import com.elusiva.rdp.RdesktopCanvas; 20 | import com.elusiva.rdp.Rdesktop; 21 | 22 | 23 | public class RdpMenu extends MenuBar { 24 | 25 | private RdesktopFrame parent; 26 | 27 | /** 28 | * Initialise the properJavaRDP menu bar and attach to an RdesktopFrame 29 | * @param parent Menu is attached to this frame 30 | */ 31 | public RdpMenu(RdesktopFrame parent){ 32 | MenuItem item; 33 | 34 | this.parent = parent; 35 | 36 | Menu m = new Menu("RDC"); 37 | 38 | item = new MenuItem("Send CTRL-ALT-DEL"); 39 | item.addActionListener(new ActionListener() { 40 | public void actionPerformed(ActionEvent e) 41 | { 42 | sendCtrlAltDel(); 43 | } 44 | }); 45 | m.add(item); 46 | 47 | m.addSeparator(); 48 | 49 | item = new MenuItem("Exit"); 50 | item.addActionListener(new ActionListener() { 51 | public void actionPerformed(ActionEvent e) 52 | { 53 | exitFrame(); 54 | } 55 | }); 56 | m.add(item); 57 | this.add(m); 58 | 59 | /* 60 | m = new Menu("Input"); 61 | m.add(new MenuItem("Insert Symbol")); 62 | m.addSeparator(); 63 | m.add(new MenuItem("Turn Caps-Lock On")); 64 | m.add(new MenuItem("Turn Num-Lock On")); 65 | m.add(new MenuItem("Turn Scroll-Lock On")); 66 | this.add(m); */ 67 | 68 | // m = new Menu("Display"); 69 | // 70 | // if(!parent.getOption().isFullscreen()){ 71 | // item = new MenuItem("Fullscreen Mode"); 72 | // item.addActionListener(new ActionListener() { 73 | // public void actionPerformed(ActionEvent e) 74 | // { 75 | // goFullScreen(); 76 | // } 77 | // }); 78 | // //mi.disable(); 79 | // }else item = new MenuItem("Windowed Mode"); 80 | // 81 | // m.add(item); 82 | // this.add(m); 83 | 84 | } 85 | 86 | private void goFullScreen() { 87 | Dimension screen_size = Toolkit.getDefaultToolkit().getScreenSize(); 88 | // ensure width a multiple of 4 89 | parent.getOption().setWidth(screen_size.width & ~3); 90 | parent.getOption().setHeight(screen_size.height); 91 | parent.getOption().enableFullScreen(); 92 | parent.goFullScreen(); 93 | } 94 | 95 | 96 | /** 97 | * @deprecated Replaced by action listeners. 98 | */ 99 | public boolean action(Event event, Object arg) { 100 | /* 101 | if(arg == "Turn Caps-Lock On") ((MenuItem) event.target).setLabel("Turn Caps-Lock Off"); 102 | if(arg == "Turn Caps-Lock Off") ((MenuItem) event.target).setLabel("Turn Caps-Lock On"); 103 | 104 | if(arg == "Turn Num-Lock On") ((MenuItem) event.target).setLabel("Turn Num-Lock Off"); 105 | if(arg == "Turn Num-Lock Off") ((MenuItem) event.target).setLabel("Turn Num-Lock On"); 106 | 107 | if(arg == "Turn Scroll-Lock On") ((MenuItem) event.target).setLabel("Turn Scroll-Lock Off"); 108 | if(arg == "Turn Scroll-Lock Off") ((MenuItem) event.target).setLabel("Turn Scroll-Lock On"); 109 | 110 | if(arg == "Exit") Common.exit(); 111 | 112 | if(arg == "Fullscreen Mode"){ 113 | parent.goFullScreen(); 114 | ((MenuItem) event.target).setLabel("Windowed Mode"); 115 | } 116 | 117 | if(arg == "Windowed Mode"){ 118 | parent.leaveFullScreen(); 119 | ((MenuItem) event.target).setLabel("Fullscreen Mode"); 120 | } 121 | */ 122 | return false; 123 | } 124 | 125 | 126 | private void sendCtrlAltDel() 127 | { 128 | RdesktopCanvas canvas = parent.getCanvas(); 129 | canvas.sendCtrlAltDel(); 130 | 131 | } 132 | 133 | private void exitFrame() 134 | { 135 | Rdesktop.stopApplet(parent.getOption().getDisconnectHandler()); 136 | parent.disconnectPlayer(); 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/BoundsOrder.java: -------------------------------------------------------------------------------- 1 | /* BoundsOrder.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class BoundsOrder implements Order { 15 | 16 | private int left = 0; 17 | private int right = 0; 18 | private int top = 0; 19 | private int bottom = 0; 20 | 21 | public BoundsOrder() { 22 | } 23 | 24 | public int getLeft() { 25 | return this.left; 26 | } 27 | 28 | public int getRight() { 29 | return this.right; 30 | } 31 | 32 | public int getTop() { 33 | return this.top; 34 | } 35 | 36 | public int getBottom() { 37 | return this.bottom; 38 | } 39 | 40 | public void setLeft(int left) { 41 | this.left = left; 42 | } 43 | 44 | public void setRight(int right) { 45 | this.right = right; 46 | } 47 | 48 | public void setTop(int top) { 49 | this.top = top; 50 | } 51 | 52 | public void setBottom(int bottom) { 53 | this.bottom = bottom; 54 | } 55 | 56 | public void reset() { 57 | left = 0; 58 | right = 0; 59 | top = 0; 60 | bottom = 0; 61 | } 62 | } 63 | 64 | 65 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/Brush.java: -------------------------------------------------------------------------------- 1 | /* Brush.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class Brush { 15 | 16 | private int xorigin = 0; 17 | private int yorigin = 0; 18 | private int style = 0; 19 | private byte[] pattern = new byte[8]; 20 | 21 | public Brush() { 22 | } 23 | 24 | public int getXOrigin() { 25 | return this.xorigin; 26 | } 27 | 28 | public int getYOrigin() { 29 | return this.yorigin; 30 | } 31 | 32 | public int getStyle() { 33 | return this.style; 34 | } 35 | 36 | public byte[] getPattern(){ 37 | return this.pattern; 38 | } 39 | 40 | public void setXOrigin(int xorigin) { 41 | this.xorigin = xorigin; 42 | } 43 | 44 | public void setYOrigin(int yorigin) { 45 | this.yorigin = yorigin; 46 | } 47 | 48 | public void setStyle(int style) { 49 | this.style = style; 50 | } 51 | 52 | public void setPattern(byte[] pattern){ 53 | this.pattern = pattern; 54 | } 55 | 56 | public void reset() { 57 | xorigin = 0; 58 | yorigin = 0; 59 | style = 0; 60 | pattern = new byte[8]; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/DeskSaveOrder.java: -------------------------------------------------------------------------------- 1 | /* DeskSaveOrder.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class DeskSaveOrder extends BoundsOrder { 15 | 16 | private int offset = 0; 17 | private int action = 0; 18 | 19 | public DeskSaveOrder() { 20 | super(); 21 | } 22 | 23 | public int getOffset() { 24 | return this.offset; 25 | } 26 | 27 | public int getAction() { 28 | return this.action; 29 | } 30 | 31 | public void setOffset(int offset) { 32 | this.offset = offset; 33 | } 34 | 35 | public void setAction(int action) { 36 | this.action = action; 37 | } 38 | 39 | public void reset() { 40 | super.reset(); 41 | offset = 0; 42 | action = 0; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/DestBltOrder.java: -------------------------------------------------------------------------------- 1 | /* DestBltOrder.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class DestBltOrder implements Order { 15 | 16 | private int x = 0; 17 | private int y = 0; 18 | private int cx = 0; 19 | private int cy = 0; 20 | private int opcode = 0; 21 | 22 | public DestBltOrder() { 23 | } 24 | 25 | public int getX() { 26 | return this.x; 27 | } 28 | 29 | public int getY() { 30 | return this.y; 31 | } 32 | 33 | public int getCX() { 34 | return this.cx; 35 | } 36 | 37 | public int getCY() { 38 | return this.cy; 39 | } 40 | 41 | public int getOpcode() { 42 | return this.opcode; 43 | } 44 | 45 | public void setX(int x) { 46 | this.x = x; 47 | } 48 | 49 | public void setY(int y) { 50 | this.y = y; 51 | } 52 | 53 | public void setCX(int cx) { 54 | this.cx = cx; 55 | } 56 | 57 | public void setCY(int cy) { 58 | this.cy = cy; 59 | } 60 | 61 | public void setOpcode(int opcode) { 62 | this.opcode = opcode; 63 | } 64 | 65 | public void reset() { 66 | x = 0; 67 | y = 0; 68 | cx = 0; 69 | cy = 0; 70 | opcode = 0; 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/LineOrder.java: -------------------------------------------------------------------------------- 1 | /* LineOrder.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class LineOrder implements Order { 15 | 16 | private int mixmode = 0; 17 | private int startx = 0; 18 | private int starty = 0; 19 | private int endx = 0; 20 | private int endy = 0; 21 | private int bgcolor = 0; 22 | private int opcode = 0; 23 | Pen pen = null; 24 | 25 | public LineOrder() { 26 | pen = new Pen(); 27 | } 28 | 29 | public int getMixmode() { 30 | return this.mixmode; 31 | } 32 | 33 | public int getStartX() { 34 | return this.startx; 35 | } 36 | 37 | public int getStartY() { 38 | return this.starty; 39 | } 40 | 41 | public int getEndX() { 42 | return this.endx; 43 | } 44 | 45 | public int getEndY() { 46 | return this.endy; 47 | } 48 | 49 | public int getBackgroundColor() { 50 | return this.bgcolor; 51 | } 52 | 53 | public int getOpcode() { 54 | return this.opcode; 55 | } 56 | 57 | public Pen getPen(){ 58 | return this.pen; 59 | } 60 | 61 | public void setMixmode(int mixmode) { 62 | this.mixmode = mixmode; 63 | } 64 | 65 | public void setStartX(int startx) { 66 | this.startx = startx; 67 | } 68 | 69 | public void setStartY(int starty) { 70 | this.starty = starty; 71 | } 72 | 73 | public void setEndX(int endx) { 74 | this.endx = endx; 75 | } 76 | 77 | public void setEndY(int endy) { 78 | this.endy = endy; 79 | } 80 | 81 | public void setBackgroundColor(int bgcolor) { 82 | this.bgcolor = bgcolor; 83 | } 84 | 85 | public void setOpcode(int opcode) { 86 | this.opcode = opcode; 87 | } 88 | 89 | public void reset() { 90 | mixmode = 0; 91 | startx = 0; 92 | starty = 0; 93 | endx = 0; 94 | endy = 0; 95 | bgcolor = 0; 96 | opcode = 0; 97 | pen.reset(); 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/MemBltOrder.java: -------------------------------------------------------------------------------- 1 | /* MemBltOrder.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class MemBltOrder extends ScreenBltOrder { 15 | 16 | private int color_table = 0; 17 | private int cache_id = 0; 18 | private int cache_idx = 0; 19 | 20 | public MemBltOrder() { 21 | super(); 22 | } 23 | 24 | public int getColorTable(){ 25 | return this.color_table; 26 | } 27 | 28 | public int getCacheID() { 29 | return this.cache_id; 30 | } 31 | 32 | public int getCacheIDX() { 33 | return this.cache_idx; 34 | } 35 | 36 | public void setColorTable(int color_table) { 37 | this.color_table = color_table; 38 | } 39 | 40 | public void setCacheID(int cache_id) { 41 | this.cache_id = cache_id; 42 | } 43 | 44 | public void setCacheIDX(int cache_idx) { 45 | this.cache_idx = cache_idx; 46 | } 47 | 48 | public void reset() { 49 | super.reset(); 50 | color_table = 0; 51 | cache_id = 0; 52 | cache_idx = 0; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/Order.java: -------------------------------------------------------------------------------- 1 | /* Order.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public interface Order { 15 | } 16 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/PatBltOrder.java: -------------------------------------------------------------------------------- 1 | /* PatBltOrder.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class PatBltOrder extends DestBltOrder { 15 | 16 | private int bgcolor = 0; 17 | private int fgcolor = 0; 18 | private Brush brush = null; 19 | 20 | public PatBltOrder() { 21 | super(); 22 | brush = new Brush(); 23 | } 24 | 25 | public int getBackgroundColor() { 26 | return this.bgcolor; 27 | } 28 | 29 | public int getForegroundColor() { 30 | return this.fgcolor; 31 | } 32 | 33 | public Brush getBrush(){ 34 | return this.brush; 35 | } 36 | 37 | public void setBackgroundColor(int bgcolor) { 38 | this.bgcolor = bgcolor; 39 | } 40 | 41 | public void setForegroundColor(int fgcolor) { 42 | this.fgcolor = fgcolor; 43 | } 44 | 45 | public void reset() { 46 | super.reset(); 47 | bgcolor = 0; 48 | fgcolor = 0; 49 | brush.reset(); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/Pen.java: -------------------------------------------------------------------------------- 1 | /* Pen.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class Pen { 15 | 16 | private int style = 0; 17 | private int width = 0; 18 | private int color = 0; 19 | 20 | public Pen() { 21 | } 22 | 23 | public int getStyle() { 24 | return this.style; 25 | } 26 | 27 | public int getWidth() { 28 | return this.width; 29 | } 30 | 31 | public int getColor() { 32 | return this.color; 33 | } 34 | 35 | public void setStyle(int style) { 36 | this.style = style; 37 | } 38 | 39 | public void setWidth(int width) { 40 | this.width = width; 41 | } 42 | 43 | public void setColor(int color) { 44 | this.color = color; 45 | } 46 | 47 | public void reset() { 48 | style = 0; 49 | width = 0; 50 | color = 0; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/PolyLineOrder.java: -------------------------------------------------------------------------------- 1 | /* PolyLineOrder.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class PolyLineOrder implements Order { 15 | 16 | private int x = 0; 17 | private int y = 0; 18 | private int flags = 0; 19 | private int fgcolor = 0; 20 | private int lines = 0; 21 | private int opcode = 0; 22 | private int datasize = 0; 23 | byte[] data = new byte[256]; 24 | 25 | public PolyLineOrder() { 26 | } 27 | 28 | public int getX() { 29 | return this.x; 30 | } 31 | 32 | public int getY() { 33 | return this.y; 34 | } 35 | 36 | public int getFlags() { 37 | return this.flags; 38 | } 39 | 40 | public int getForegroundColor() { 41 | return this.fgcolor; 42 | } 43 | 44 | public int getLines() { 45 | return this.lines; 46 | } 47 | 48 | public int getDataSize() { 49 | return this.datasize; 50 | } 51 | 52 | public byte[] getData() { 53 | return this.data; 54 | } 55 | 56 | public int getOpcode(){ 57 | return this.opcode; 58 | } 59 | 60 | public void setX(int x) { 61 | this.x = x; 62 | } 63 | 64 | public void setY(int y) { 65 | this.y = y; 66 | } 67 | 68 | public void setFlags(int flags) { 69 | this.flags = flags; 70 | } 71 | 72 | public void setForegroundColor(int fgcolor) { 73 | this.fgcolor = fgcolor; 74 | } 75 | 76 | public void setLines(int lines){ 77 | this.lines = lines; 78 | } 79 | 80 | public void setDataSize(int datasize) { 81 | this.datasize = datasize; 82 | } 83 | 84 | public void setData(byte[] data) { 85 | this.data = data; 86 | } 87 | 88 | public void setOpcode(int opcode){ 89 | this.opcode = opcode; 90 | } 91 | public void reset() { 92 | x = 0; 93 | y = 0; 94 | flags = 0; 95 | fgcolor = 0; 96 | lines = 0; 97 | datasize = 0; 98 | opcode = 0; 99 | data = new byte[256]; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/RectangleOrder.java: -------------------------------------------------------------------------------- 1 | /* RectangleOrder.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class RectangleOrder implements Order { 15 | 16 | private int x = 0; 17 | private int y = 0; 18 | private int cx = 0; 19 | private int cy = 0; 20 | public int color = 0; 21 | 22 | public RectangleOrder() { 23 | } 24 | 25 | public int getX() { 26 | return this.x; 27 | } 28 | 29 | public int getY() { 30 | return this.y; 31 | } 32 | 33 | public int getCX() { 34 | return this.cx; 35 | } 36 | 37 | public int getCY() { 38 | return this.cy; 39 | } 40 | 41 | public int getColor() { 42 | return this.color; 43 | } 44 | 45 | public void setX(int x) { 46 | this.x = x; 47 | } 48 | 49 | public void setY(int y) { 50 | this.y = y; 51 | } 52 | 53 | public void setCX(int cx) { 54 | this.cx = cx; 55 | } 56 | 57 | public void setCY(int cy) { 58 | this.cy = cy; 59 | } 60 | 61 | public void setColor(int color) { 62 | this.color = color; 63 | } 64 | 65 | public void reset() { 66 | x = 0; 67 | y = 0; 68 | cx = 0; 69 | cy = 0; 70 | color = 0; 71 | } 72 | } 73 | 74 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/ScreenBltOrder.java: -------------------------------------------------------------------------------- 1 | /* ScreenBltOrder.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class ScreenBltOrder extends DestBltOrder { 15 | 16 | private int srcx = 0; 17 | private int srcy = 0; 18 | 19 | public ScreenBltOrder() { 20 | super(); 21 | } 22 | 23 | public int getSrcX() { 24 | return this.srcx; 25 | } 26 | 27 | public int getSrcY() { 28 | return this.srcy; 29 | } 30 | 31 | public void setSrcX(int srcx) { 32 | this.srcx = srcx; 33 | } 34 | 35 | public void setSrcY(int srcy) { 36 | this.srcy = srcy; 37 | } 38 | 39 | public void reset() { 40 | super.reset(); 41 | srcx = 0; 42 | srcy = 0; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/Text2Order.java: -------------------------------------------------------------------------------- 1 | /* Text2Order.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class Text2Order implements Order { 15 | 16 | private int flags = 0; 17 | private int mixmode = 0; 18 | private int fgcolor = 0; 19 | private int bgcolor = 0; 20 | private int x = 0; 21 | private int y = 0; 22 | private int unknown = 0; 23 | 24 | private int font = 0; 25 | private int clipleft = 0; 26 | private int cliptop = 0; 27 | private int clipright = 0; 28 | private int clipbottom = 0; 29 | private int boxleft = 0; 30 | private int boxtop = 0; 31 | private int boxright = 0; 32 | private int boxbottom = 0; 33 | private int opcode = 0; 34 | 35 | private int length = 0; 36 | byte[] text = new byte[256]; 37 | 38 | public Text2Order() { 39 | } 40 | 41 | public int getFont() { 42 | return this.font; 43 | } 44 | 45 | public int getClipLeft(){ 46 | return this.clipleft; 47 | } 48 | 49 | public int getClipRight() { 50 | return this.clipright; 51 | } 52 | 53 | public int getClipTop() { 54 | return this.cliptop; 55 | } 56 | 57 | public int getClipBottom() { 58 | return this.clipbottom; 59 | } 60 | 61 | public int getBoxLeft(){ 62 | return this.boxleft; 63 | } 64 | 65 | public int getBoxRight() { 66 | return this.boxright; 67 | } 68 | 69 | public int getBoxTop() { 70 | return this.boxtop; 71 | } 72 | 73 | public int getBoxBottom() { 74 | return this.boxbottom; 75 | } 76 | 77 | public int getX() { 78 | return this.x; 79 | } 80 | 81 | public int getUnknown() { 82 | return this.unknown; 83 | } 84 | 85 | public int getY() { 86 | return this.y; 87 | } 88 | 89 | public int getFlags() { 90 | return this.flags; 91 | } 92 | 93 | public int getMixmode() { 94 | return this.mixmode; 95 | } 96 | 97 | public int getForegroundColor() { 98 | return this.fgcolor; 99 | } 100 | 101 | public int getBackgroundColor() { 102 | return this.bgcolor; 103 | } 104 | 105 | public int getLength() { 106 | return this.length; 107 | } 108 | 109 | public byte[] getText() { 110 | return this.text; 111 | } 112 | 113 | public void setFont(int font) { 114 | this.font = font; 115 | } 116 | 117 | public void setX(int x) { 118 | this.x = x; 119 | } 120 | 121 | public void setUnknown(int unknown) { 122 | this.unknown = unknown; 123 | } 124 | 125 | public void setY(int y) { 126 | this.y = y; 127 | } 128 | 129 | public void setMixmode(int mixmode) { 130 | this.mixmode = mixmode; 131 | } 132 | 133 | public void setFlags(int flags) { 134 | this.flags = flags; 135 | } 136 | 137 | public void setForegroundColor(int fgcolor) { 138 | this.fgcolor = fgcolor; 139 | } 140 | 141 | public void setBackgroundColor(int bgcolor) { 142 | this.bgcolor = bgcolor; 143 | } 144 | 145 | public void setClipLeft(int clipleft){ 146 | this.clipleft = clipleft; 147 | } 148 | 149 | public void setClipRight(int clipright) { 150 | this.clipright = clipright; 151 | } 152 | 153 | public void setClipTop(int cliptop) { 154 | this.cliptop = cliptop; 155 | } 156 | 157 | public void setClipBottom(int clipbottom) { 158 | this.clipbottom = clipbottom; 159 | } 160 | 161 | public void setBoxLeft(int boxleft){ 162 | this.boxleft = boxleft; 163 | } 164 | 165 | public void setBoxRight(int boxright) { 166 | this.boxright = boxright; 167 | } 168 | 169 | public void setBoxTop(int boxtop) { 170 | this.boxtop = boxtop; 171 | } 172 | 173 | public void setBoxBottom(int boxbottom) { 174 | this.boxbottom = boxbottom; 175 | } 176 | 177 | public void setText(byte[] text) { 178 | this.text = text; 179 | } 180 | 181 | public void setLength(int length) { 182 | this.length = length; 183 | } 184 | 185 | public void reset() { 186 | font = 0; 187 | flags = 0; 188 | mixmode = 0; 189 | unknown = 0; 190 | fgcolor = 0; 191 | bgcolor = 0; 192 | clipleft = 0; 193 | cliptop = 0; 194 | clipright = 0; 195 | clipbottom = 0; 196 | boxleft = 0; 197 | boxtop = 0; 198 | boxright = 0; 199 | boxbottom = 0; 200 | x = 0; 201 | y = 0; 202 | length = 0; 203 | opcode = 0; 204 | text = new byte[256]; 205 | } 206 | 207 | public int getOpcode(){ 208 | return opcode; 209 | } 210 | 211 | public void setOpcode(int name) { 212 | opcode = name; 213 | } 214 | } 215 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/orders/TriBltOrder.java: -------------------------------------------------------------------------------- 1 | /* TriBltOrder.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:35 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.orders; 13 | 14 | public class TriBltOrder extends PatBltOrder { 15 | 16 | private int color_table = 0; 17 | private int cache_id = 0; 18 | private int cache_idx = 0; 19 | private int srcx = 0; 20 | private int srcy = 0; 21 | private int unknown = 0; 22 | 23 | public TriBltOrder() { 24 | super(); 25 | } 26 | 27 | public int getColorTable(){ 28 | return this.color_table; 29 | } 30 | 31 | public int getCacheID() { 32 | return this.cache_id; 33 | } 34 | 35 | public int getCacheIDX() { 36 | return this.cache_idx; 37 | } 38 | 39 | public int getSrcX() { 40 | return this.srcx; 41 | } 42 | 43 | public int getSrcY() { 44 | return this.srcy; 45 | } 46 | 47 | public int getUnknown() { 48 | return this.unknown; 49 | } 50 | 51 | public void setColorTable(int color_table) { 52 | this.color_table = color_table; 53 | } 54 | 55 | public void setCacheID(int cache_id) { 56 | this.cache_id = cache_id; 57 | } 58 | 59 | public void setCacheIDX(int cache_idx) { 60 | this.cache_idx = cache_idx; 61 | } 62 | 63 | public void setSrcX(int srcx) { 64 | this.srcx = srcx; // corrected 65 | } 66 | 67 | public void setSrcY(int srcy) { 68 | this.srcy = srcy; // corrected 69 | } 70 | 71 | public void setUnknown(int unknown) { 72 | this.unknown = unknown; 73 | } 74 | 75 | public void reset() { 76 | super.reset(); 77 | color_table = 0; 78 | cache_id = 0; 79 | cache_idx = 0; 80 | srcx = 0; 81 | srcy = 0; 82 | unknown = 0; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/rdp5/Rdp5.java: -------------------------------------------------------------------------------- 1 | /* Rdp5.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:39 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Handle RDP5 orders 11 | */ 12 | 13 | package com.elusiva.rdp.rdp5; 14 | 15 | import com.elusiva.rdp.*; 16 | 17 | public class Rdp5 extends Rdp { 18 | 19 | private VChannels channels; 20 | 21 | /** 22 | * Initialise the RDP5 communications layer, with specified virtual channels 23 | * 24 | * @param channels 25 | * Virtual channels for RDP layer 26 | */ 27 | public Rdp5(VChannels channels, Options option) { 28 | super(channels, option); 29 | this.channels = channels; 30 | 31 | } 32 | 33 | public Rdp5(Options option, Secure secureLayer) { 34 | super(option, secureLayer); 35 | } 36 | 37 | /** 38 | * Process an RDP5 packet from a virtual channel 39 | * @param s Packet to be processed 40 | * @param channelno Channel on which packet was received 41 | */ 42 | void rdp5_process_channel(RdpPacket_Localised s, int channelno) { 43 | VChannel channel = channels.find_channel_by_channelno(channelno); 44 | if (channel != null) { 45 | try { 46 | channel.process(s); 47 | } catch (Exception e) { 48 | } 49 | } 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/rdp5/TestChannel.java: -------------------------------------------------------------------------------- 1 | /* TestChannel.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:39 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Dummy RDP5 channel for testing purposes 11 | */ 12 | package com.elusiva.rdp.rdp5; 13 | 14 | import com.elusiva.rdp.RdpPacket; 15 | 16 | /** 17 | * @author Tom Elliott 18 | * 19 | * TODO To change the template for this generated type comment go to 20 | * Window - Preferences - Java - Code Style - Code Templates 21 | */ 22 | public class TestChannel extends VChannel { 23 | 24 | public TestChannel(String name, int flags){ 25 | this.name = name; 26 | this.flags = flags; 27 | } 28 | 29 | private String name; 30 | private int flags; 31 | 32 | public String name() { 33 | return name; 34 | } 35 | 36 | public int flags() { 37 | return flags; 38 | } 39 | 40 | public void process(RdpPacket data) { 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/rdp5/VChannel.java: -------------------------------------------------------------------------------- 1 | /* VChannel.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:39 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Abstract class for RDP5 channels 11 | */ 12 | package com.elusiva.rdp.rdp5; 13 | 14 | import java.io.IOException; 15 | 16 | import org.apache.log4j.Logger; 17 | 18 | import com.elusiva.rdp.Constants; 19 | import com.elusiva.rdp.Input; 20 | import com.elusiva.rdp.Common; 21 | import com.elusiva.rdp.Options; 22 | import com.elusiva.rdp.RdesktopException; 23 | import com.elusiva.rdp.RdpPacket; 24 | import com.elusiva.rdp.RdpPacket_Localised; 25 | import com.elusiva.rdp.Secure; 26 | import com.elusiva.rdp.crypto.CryptoException; 27 | 28 | public abstract class VChannel { 29 | 30 | protected static Logger logger = Logger.getLogger(Input.class); 31 | 32 | private int mcs_id = 0; 33 | protected Secure secureLayer; 34 | 35 | /** 36 | * Provide the name of this channel 37 | * @return Channel name as string 38 | */ 39 | public abstract String name(); 40 | 41 | /** 42 | * Provide the set of flags specifying working options for this channel 43 | * @return Option flags 44 | */ 45 | public abstract int flags(); 46 | 47 | /** 48 | * Process a packet sent on this channel 49 | * @param data Packet sent to this channel 50 | * @throws RdesktopException 51 | * @throws IOException 52 | * @throws CryptoException 53 | */ 54 | public abstract void process(RdpPacket data) throws RdesktopException, IOException, CryptoException; 55 | public int mcs_id(){ 56 | return mcs_id; 57 | } 58 | 59 | /** 60 | * Set the MCS ID for this channel 61 | * @param mcs_id New MCS ID 62 | */ 63 | public void set_mcs_id(int mcs_id){ 64 | this.mcs_id = mcs_id; 65 | } 66 | 67 | public void setSecureLayer(Secure secureLayer) { 68 | this.secureLayer = secureLayer; 69 | } 70 | 71 | protected Secure getSecureLayer() { 72 | assert(this.secureLayer != null); 73 | return this.secureLayer; 74 | } 75 | 76 | /** 77 | * Initialise a packet for transmission over this virtual channel 78 | * @param length Desired length of packet 79 | * @param option 80 | * @return Packet prepared for this channel 81 | * @throws RdesktopException 82 | */ 83 | public RdpPacket_Localised init(int length, Options option) throws RdesktopException{ 84 | RdpPacket_Localised s; 85 | 86 | s = getSecureLayer().init(option.isEncryptionEnabled() ? Secure.SEC_ENCRYPT : 0,length + 8); 87 | s.setHeader(RdpPacket.CHANNEL_HEADER); 88 | s.incrementPosition(8); 89 | 90 | return s; 91 | } 92 | 93 | /** 94 | * Send a packet over this virtual channel 95 | * @param data Packet to be sent 96 | * @throws RdesktopException 97 | * @throws IOException 98 | * @throws CryptoException 99 | */ 100 | public void send_packet(RdpPacket_Localised data) throws RdesktopException, IOException, CryptoException 101 | { 102 | if(getSecureLayer() == null) return; 103 | int length = data.size(); 104 | 105 | int data_offset = 0; 106 | int packets_sent = 0; 107 | int num_packets = (length/VChannels.CHANNEL_CHUNK_LENGTH); 108 | num_packets += length - (VChannels.CHANNEL_CHUNK_LENGTH)*num_packets; 109 | 110 | while(data_offset < length){ 111 | 112 | int thisLength = Math.min(VChannels.CHANNEL_CHUNK_LENGTH, length - data_offset); 113 | 114 | RdpPacket_Localised s = getSecureLayer().init(Constants.encryption ? Secure.SEC_ENCRYPT : 0, 8 + thisLength); 115 | s.setLittleEndian32(length); 116 | 117 | int flags = ((data_offset == 0) ? VChannels.CHANNEL_FLAG_FIRST : 0); 118 | if(data_offset + thisLength >= length) flags |= VChannels.CHANNEL_FLAG_LAST; 119 | 120 | if ((this.flags() & VChannels.CHANNEL_OPTION_SHOW_PROTOCOL) != 0) flags |= VChannels.CHANNEL_FLAG_SHOW_PROTOCOL; 121 | 122 | s.setLittleEndian32(flags); 123 | s.copyFromPacket(data,data_offset,s.getPosition(),thisLength); 124 | s.incrementPosition(thisLength); 125 | s.markEnd(); 126 | 127 | data_offset += thisLength; 128 | 129 | if(getSecureLayer() != null) getSecureLayer().send_to_channel(s, Constants.encryption ? Secure.SEC_ENCRYPT : 0, this.mcs_id()); 130 | packets_sent++; 131 | } 132 | } 133 | 134 | } 135 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/rdp5/cliprdr/BMPToImageThread.java: -------------------------------------------------------------------------------- 1 | /* BMPToImageThread.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:41 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.rdp5.cliprdr; 13 | 14 | import java.awt.Image; 15 | import java.io.ByteArrayInputStream; 16 | import java.io.OutputStream; 17 | 18 | import com.elusiva.rdp.RdpPacket; 19 | public class BMPToImageThread extends Thread { 20 | 21 | RdpPacket data; int length; ClipInterface c; 22 | 23 | public BMPToImageThread(RdpPacket data, int length, ClipInterface c){ 24 | super(); 25 | this.data = data; 26 | this.length = length; 27 | this.c = c; 28 | } 29 | 30 | public void run(){ 31 | String thingy = ""; 32 | OutputStream out = null; 33 | 34 | int origin = data.getPosition(); 35 | 36 | int head_len = data.getLittleEndian32(); 37 | 38 | data.setPosition(origin); 39 | 40 | byte[] content = new byte[length]; 41 | 42 | for(int i = 0; i < length; i++){ 43 | content[i] = (byte) (data.get8() & 0xFF); 44 | } 45 | 46 | Image img = ClipBMP.loadbitmap(new ByteArrayInputStream(content)); 47 | ImageSelection imageSelection = new ImageSelection(img); 48 | c.copyToClipboard(imageSelection); 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/rdp5/cliprdr/ClipInterface.java: -------------------------------------------------------------------------------- 1 | /* ClipInterface.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:41 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.rdp5.cliprdr; 13 | 14 | import java.awt.datatransfer.Transferable; 15 | 16 | public interface ClipInterface { 17 | 18 | public void copyToClipboard(Transferable t); 19 | public void send_data(byte []data, int length); 20 | public void send_null(int type, int status); 21 | } 22 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/rdp5/cliprdr/DIBHandler.java: -------------------------------------------------------------------------------- 1 | /* DIBHandler.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:40 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.rdp5.cliprdr; 13 | 14 | import java.awt.Frame; 15 | import java.awt.Image; 16 | import java.awt.MediaTracker; 17 | import java.awt.datatransfer.DataFlavor; 18 | import java.awt.datatransfer.Transferable; 19 | import java.awt.datatransfer.UnsupportedFlavorException; 20 | import java.awt.image.ImageObserver; 21 | import java.io.IOException; 22 | import org.apache.log4j.Logger; 23 | 24 | import com.elusiva.rdp.Common; 25 | import com.elusiva.rdp.Input; 26 | import com.elusiva.rdp.RdpPacket; 27 | import com.elusiva.rdp.Utilities_Localised; 28 | 29 | 30 | public class DIBHandler extends TypeHandler implements ImageObserver { 31 | 32 | protected static Logger logger = Logger.getLogger(Input.class); 33 | 34 | public boolean formatValid(int format) { 35 | return (format == CF_DIB); 36 | } 37 | 38 | public boolean mimeTypeValid(String mimeType) { 39 | return mimeType.equals("image"); 40 | } 41 | 42 | public int preferredFormat() { 43 | return CF_DIB; 44 | } 45 | 46 | public String name() { 47 | return "CF_DIB"; 48 | } 49 | 50 | public void handleData(RdpPacket data, int length, ClipInterface c) { 51 | //System.out.println("DIBHandler.handleData"); 52 | BMPToImageThread t = new BMPToImageThread(data, length, c); 53 | t.start(); 54 | } 55 | 56 | public void send_data(Transferable in, ClipInterface c) { 57 | byte[] out = null; 58 | 59 | try { 60 | if (in != null && in.isDataFlavorSupported(Utilities_Localised.imageFlavor)) { 61 | Image img = (Image)in.getTransferData(Utilities_Localised.imageFlavor); 62 | ClipBMP b = new ClipBMP(); 63 | 64 | MediaTracker mediaTracker = new MediaTracker(new Frame()); 65 | mediaTracker.addImage(img, 0); 66 | 67 | try 68 | { 69 | mediaTracker.waitForID(0); 70 | } 71 | catch (InterruptedException ie) 72 | { 73 | System.err.println(ie); 74 | if(!Common.underApplet) System.exit(1); 75 | } 76 | if(img == null) return; 77 | 78 | int width = img.getWidth(this); 79 | int height = img.getHeight(this); 80 | out = b.getBitmapAsBytes(img,width,height); 81 | 82 | c.send_data(out,out.length); 83 | } 84 | } catch (UnsupportedFlavorException e) { 85 | System.err.println("Failed to send DIB: UnsupportedFlavorException"); 86 | } catch (IOException e) { 87 | System.err.println("Failed to send DIB: IOException"); 88 | } 89 | 90 | } 91 | 92 | public boolean imageUpdate(Image arg0, int arg1, int arg2, int arg3, int arg4, int arg5) { 93 | return false; 94 | } 95 | 96 | } 97 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/rdp5/cliprdr/ImageSelection.java: -------------------------------------------------------------------------------- 1 | /* ImageSelection.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:41 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.rdp5.cliprdr; 13 | 14 | import java.awt.Image; 15 | import java.awt.datatransfer.DataFlavor; 16 | import java.awt.datatransfer.Transferable; 17 | import java.awt.datatransfer.UnsupportedFlavorException; 18 | import java.io.IOException; 19 | 20 | import com.elusiva.rdp.Common; 21 | import com.elusiva.rdp.Utilities_Localised; 22 | public class ImageSelection 23 | implements Transferable 24 | { 25 | // the Image object which will be housed by the ImageSelection 26 | private Image image; 27 | 28 | public ImageSelection(Image image) { 29 | this.image = image; 30 | } 31 | 32 | // Returns the supported flavors of our implementation 33 | public DataFlavor[] getTransferDataFlavors() 34 | { 35 | return new DataFlavor[] {Utilities_Localised.imageFlavor}; 36 | } 37 | 38 | // Returns true if flavor is supported 39 | public boolean isDataFlavorSupported(DataFlavor flavor) 40 | { 41 | return Utilities_Localised.imageFlavor.equals(flavor); 42 | } 43 | 44 | // Returns Image object housed by Transferable object 45 | public Object getTransferData(DataFlavor flavor) 46 | throws UnsupportedFlavorException,IOException 47 | { 48 | if (!Utilities_Localised.imageFlavor.equals(flavor)) 49 | { 50 | throw new UnsupportedFlavorException(flavor); 51 | } 52 | // else return the payload 53 | return image; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/rdp5/cliprdr/MetafilepictHandler.java: -------------------------------------------------------------------------------- 1 | /* MetafilepictHandler.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:41 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.rdp5.cliprdr; 13 | 14 | import java.awt.datatransfer.StringSelection; 15 | import java.awt.datatransfer.Transferable; 16 | import java.io.FileNotFoundException; 17 | import java.io.FileOutputStream; 18 | import java.io.IOException; 19 | import java.io.OutputStream; 20 | 21 | import com.elusiva.rdp.RdpPacket; 22 | 23 | public class MetafilepictHandler extends TypeHandler { 24 | 25 | /* Mapping Modes */ 26 | public static final int MM_TEXT = 1; 27 | public static final int MM_LOMETRIC = 2; 28 | public static final int MM_HIMETRIC = 3; 29 | public static final int MM_LOENGLISH = 4; 30 | public static final int MM_HIENGLISH = 5; 31 | public static final int MM_TWIPS = 6; 32 | public static final int MM_ISOTROPIC = 7; 33 | public static final int MM_ANISOTROPIC = 8; 34 | 35 | String[] mapping_modes = { 36 | "undefined", 37 | "MM_TEXT", 38 | "MM_LOMETRIC", 39 | "MM_HIMETRIC", 40 | "MM_LOENGLISH", 41 | "MM_HIENGLISH", 42 | "MM_TWIPS", 43 | "MM_ISOTROPIC", 44 | "MM_ANISOTROPIC" 45 | }; 46 | 47 | public boolean formatValid(int format) { 48 | return (format == CF_METAFILEPICT); 49 | } 50 | 51 | public boolean mimeTypeValid(String mimeType) { 52 | return mimeType.equals("image"); 53 | } 54 | 55 | public int preferredFormat() { 56 | return CF_METAFILEPICT; 57 | } 58 | 59 | public Transferable handleData(RdpPacket data, int length) { 60 | String thingy = ""; 61 | OutputStream out = null; 62 | 63 | //System.out.print("Metafile mapping mode = "); 64 | int mm = data.getLittleEndian32(); 65 | //System.out.print(mapping_modes[mm]); 66 | int width = data.getLittleEndian32(); 67 | //System.out.print(", width = " + width); 68 | int height = data.getLittleEndian32(); 69 | //System.out.println(", height = " + height); 70 | 71 | try { 72 | out = new FileOutputStream("test.wmf"); 73 | 74 | for(int i = 0; i < (length-12); i++){ 75 | int aByte = data.get8(); 76 | out.write(aByte); 77 | thingy += Integer.toHexString(aByte & 0xFF) + " "; 78 | } 79 | //System.out.println(thingy); 80 | } catch (FileNotFoundException e) { 81 | e.printStackTrace(); 82 | } catch (IOException e) { 83 | e.printStackTrace(); 84 | } 85 | return(new StringSelection(thingy)); 86 | } 87 | 88 | public String name() { 89 | return "CF_METAFILEPICT"; 90 | } 91 | 92 | 93 | public byte[] fromTransferable(Transferable in) { 94 | return null; 95 | } 96 | 97 | public void handleData(RdpPacket data, int length, ClipInterface c) { 98 | String thingy = ""; 99 | OutputStream out = null; 100 | 101 | //System.out.print("Metafile mapping mode = "); 102 | int mm = data.getLittleEndian32(); 103 | //System.out.print(mapping_modes[mm]); 104 | int width = data.getLittleEndian32(); 105 | //System.out.print(", width = " + width); 106 | int height = data.getLittleEndian32(); 107 | //System.out.println(", height = " + height); 108 | 109 | try { 110 | out = new FileOutputStream("test.wmf"); 111 | 112 | for(int i = 0; i < (length-12); i++){ 113 | int aByte = data.get8(); 114 | out.write(aByte); 115 | thingy += Integer.toHexString(aByte & 0xFF) + " "; 116 | } 117 | //System.out.println(thingy); 118 | } catch (FileNotFoundException e) { 119 | e.printStackTrace(); 120 | } catch (IOException e) { 121 | e.printStackTrace(); 122 | } 123 | } 124 | 125 | /* (non-Javadoc) 126 | * @see com.elusiva.rdp.rdp5.cliprdr.TypeHandler#send_data(java.awt.datatransfer.Transferable, com.elusiva.rdp.rdp5.cliprdr.ClipInterface) 127 | */ 128 | public void send_data(Transferable in, ClipInterface c) { 129 | c.send_null(ClipChannel.CLIPRDR_DATA_RESPONSE,ClipChannel.CLIPRDR_ERROR); 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/rdp5/cliprdr/TextHandler.java: -------------------------------------------------------------------------------- 1 | /* TextHandler.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:41 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.rdp5.cliprdr; 13 | 14 | import java.awt.datatransfer.DataFlavor; 15 | import java.awt.datatransfer.StringSelection; 16 | import java.awt.datatransfer.Transferable; 17 | 18 | import com.elusiva.rdp.RdpPacket; 19 | import com.elusiva.rdp.Utilities_Localised; 20 | 21 | public class TextHandler extends TypeHandler { 22 | 23 | public boolean formatValid(int format) { 24 | return (format == CF_TEXT); 25 | } 26 | 27 | public boolean mimeTypeValid(String mimeType) { 28 | return mimeType.equals("text"); 29 | } 30 | 31 | public int preferredFormat() { 32 | return CF_TEXT; 33 | } 34 | 35 | public Transferable handleData(RdpPacket data, int length) { 36 | String thingy = ""; 37 | for(int i = 0; i < length; i++){ 38 | int aByte = data.get8(); 39 | if(aByte != 0) thingy += (char) (aByte & 0xFF); 40 | } 41 | return(new StringSelection(thingy)); 42 | } 43 | 44 | public String name() { 45 | return "CF_TEXT"; 46 | } 47 | 48 | 49 | public byte[] fromTransferable(Transferable in) { 50 | String s; 51 | if (in != null) 52 | { 53 | try { 54 | s = (String)(in.getTransferData(DataFlavor.stringFlavor)); 55 | } 56 | catch (Exception e) { 57 | s = e.toString(); 58 | } 59 | 60 | // TODO: think of a better way of fixing this 61 | s = s.replace('\n',(char) 0x0a); 62 | //s = s.replaceAll("" + (char) 0x0a, "" + (char) 0x0d + (char) 0x0a); 63 | s = Utilities_Localised.strReplaceAll(s, "" + (char) 0x0a, "" + (char) 0x0d + (char) 0x0a); 64 | return s.getBytes(); 65 | } 66 | return null; 67 | } 68 | 69 | /* (non-Javadoc) 70 | * @see com.elusiva.rdp.rdp5.cliprdr.TypeHandler#handleData(com.elusiva.rdp.RdpPacket, int, com.elusiva.rdp.rdp5.cliprdr.ClipInterface) 71 | */ 72 | public void handleData(RdpPacket data, int length, ClipInterface c) { 73 | String thingy = ""; 74 | for(int i = 0; i < length; i++){ 75 | int aByte = data.get8(); 76 | if(aByte != 0) thingy += (char) (aByte & 0xFF); 77 | } 78 | c.copyToClipboard (new StringSelection(thingy)); 79 | } 80 | 81 | /* (non-Javadoc) 82 | * @see com.elusiva.rdp.rdp5.cliprdr.TypeHandler#send_data(java.awt.datatransfer.Transferable, com.elusiva.rdp.rdp5.cliprdr.ClipInterface) 83 | */ 84 | public void send_data(Transferable in, ClipInterface c) { 85 | String s; 86 | if (in != null) 87 | { 88 | try { 89 | s = (String)(in.getTransferData(DataFlavor.stringFlavor)); 90 | } 91 | catch (Exception e) { 92 | s = e.toString(); 93 | } 94 | 95 | // TODO: think of a better way of fixing this 96 | s = s.replace('\n',(char) 0x0a); 97 | //s = s.replaceAll("" + (char) 0x0a, "" + (char) 0x0d + (char) 0x0a); 98 | s = Utilities_Localised.strReplaceAll(s, "" + (char) 0x0a, "" + (char) 0x0d + (char) 0x0a); 99 | 100 | 101 | //return s.getBytes(); 102 | c.send_data(s.getBytes(),s.length()); 103 | } 104 | } 105 | 106 | } 107 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/rdp5/cliprdr/TypeHandler.java: -------------------------------------------------------------------------------- 1 | /* TypeHandler.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:40 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.rdp5.cliprdr; 13 | 14 | import java.awt.datatransfer.DataFlavor; 15 | import java.awt.datatransfer.Transferable; 16 | 17 | import com.elusiva.rdp.RdpPacket; 18 | 19 | public abstract class TypeHandler { 20 | 21 | /* Clipboard constants, "borrowed" from GCC system headers in 22 | the w32 cross compiler */ 23 | 24 | // Format constants 25 | public static final int CF_TEXT = 1; 26 | public static final int CF_BITMAP = 2; 27 | public static final int CF_METAFILEPICT = 3; 28 | public static final int CF_SYLK = 4; 29 | public static final int CF_DIF = 5; 30 | public static final int CF_TIFF = 6; 31 | public static final int CF_OEMTEXT = 7; 32 | public static final int CF_DIB = 8; 33 | public static final int CF_PALETTE = 9; 34 | public static final int CF_PENDATA = 10; 35 | public static final int CF_RIFF = 11; 36 | public static final int CF_WAVE = 12; 37 | public static final int CF_UNICODETEXT = 13; 38 | public static final int CF_ENHMETAFILE = 14; 39 | public static final int CF_HDROP = 15; 40 | public static final int CF_LOCALE = 16; 41 | public static final int CF_MAX = 17; 42 | public static final int CF_OWNERDISPLAY = 128; 43 | public static final int CF_DSPTEXT = 129; 44 | public static final int CF_DSPBITMAP = 130; 45 | public static final int CF_DSPMETAFILEPICT = 131; 46 | public static final int CF_DSPENHMETAFILE = 142; 47 | public static final int CF_PRIVATEFIRST = 512; 48 | public static final int CF_PRIVATELAST = 767; 49 | public static final int CF_GDIOBJFIRST = 768; 50 | public static final int CF_GDIOBJLAST = 1023; 51 | 52 | public abstract String name(); 53 | public abstract void handleData(RdpPacket data, int length, ClipInterface c); 54 | public abstract int preferredFormat(); 55 | public abstract boolean formatValid(int format); 56 | public abstract boolean mimeTypeValid(String mimeType); 57 | 58 | public abstract void send_data(Transferable in, ClipInterface c); 59 | 60 | public boolean clipboardValid(DataFlavor[] dataTypes) { 61 | 62 | for(int i = 0; i < dataTypes.length; i++){ 63 | if(mimeTypeValid(dataTypes[i].getPrimaryType())) return true; 64 | } 65 | return false; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/rdp5/cliprdr/TypeHandlerList.java: -------------------------------------------------------------------------------- 1 | /* TypeHandlerList.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:41 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.rdp5.cliprdr; 13 | 14 | import java.awt.datatransfer.DataFlavor; 15 | import java.util.ArrayList; 16 | import java.util.Iterator; 17 | 18 | import com.elusiva.rdp.RdpPacket; 19 | 20 | public class TypeHandlerList { 21 | 22 | ArrayList handlers = new ArrayList(); 23 | private int count; 24 | 25 | public TypeHandlerList(){ 26 | count = 0; 27 | } 28 | 29 | 30 | public void add(TypeHandler t){ 31 | if(t != null){ handlers.add(t); count++; } 32 | } 33 | 34 | public TypeHandler getHandlerForFormat(int format){ 35 | TypeHandler handler = null; 36 | for(Iterator i = handlers.iterator(); i.hasNext();){ 37 | handler = (TypeHandler)i.next(); 38 | if((handler != null) && handler.formatValid(format)) return handler; 39 | } 40 | return null; 41 | } 42 | 43 | public TypeHandlerList getHandlersForMimeType(String mimeType){ 44 | TypeHandlerList outList = new TypeHandlerList(); 45 | 46 | TypeHandler handler = null; 47 | for(Iterator i = handlers.iterator(); i.hasNext();){ 48 | handler = (TypeHandler)i.next(); 49 | if(handler.mimeTypeValid(mimeType)) outList.add(handler); 50 | } 51 | return outList; 52 | } 53 | 54 | public TypeHandlerList getHandlersForClipboard(DataFlavor[] dataTypes){ 55 | TypeHandlerList outList = new TypeHandlerList(); 56 | 57 | TypeHandler handler = null; 58 | for(Iterator i = handlers.iterator(); i.hasNext();){ 59 | handler = (TypeHandler)i.next(); 60 | if(handler.clipboardValid(dataTypes)) outList.add(handler); 61 | } 62 | return outList; 63 | } 64 | 65 | public void writeTypeDefinitions(RdpPacket data){ 66 | TypeHandler handler = null; 67 | for(Iterator i = handlers.iterator(); i.hasNext();){ 68 | handler = (TypeHandler)i.next(); 69 | data.setLittleEndian32(handler.preferredFormat()); 70 | data.incrementPosition(32); 71 | } 72 | } 73 | 74 | public int count(){ 75 | return count; 76 | } 77 | 78 | public TypeHandler getFirst() { 79 | if(count > 0) 80 | return (TypeHandler) handlers.get(0); 81 | else return null; 82 | } 83 | 84 | public Iterator iterator(){ 85 | return handlers.iterator(); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /src/com/elusiva/rdp/rdp5/cliprdr/UnicodeHandler.java: -------------------------------------------------------------------------------- 1 | /* UnicodeHandler.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:40 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: 11 | */ 12 | package com.elusiva.rdp.rdp5.cliprdr; 13 | 14 | import java.awt.datatransfer.DataFlavor; 15 | import java.awt.datatransfer.StringSelection; 16 | import java.awt.datatransfer.Transferable; 17 | 18 | import com.elusiva.rdp.RdpPacket; 19 | import com.elusiva.rdp.RdpPacket_Localised; 20 | import com.elusiva.rdp.Utilities_Localised; 21 | 22 | public class UnicodeHandler extends TypeHandler { 23 | 24 | public boolean formatValid(int format) { 25 | return (format == CF_UNICODETEXT); 26 | } 27 | 28 | public boolean mimeTypeValid(String mimeType) { 29 | return mimeType.equals("text"); 30 | } 31 | 32 | public int preferredFormat() { 33 | return CF_UNICODETEXT; 34 | } 35 | 36 | public void handleData(RdpPacket data, int length, ClipInterface c) { 37 | String thingy = ""; 38 | for(int i = 0; i < length; i+=2){ 39 | int aByte = data.getLittleEndian16(); 40 | if(aByte != 0) thingy += (char) (aByte); 41 | } 42 | c.copyToClipboard(new StringSelection(thingy)); 43 | //return(new StringSelection(thingy)); 44 | } 45 | 46 | public String name() { 47 | return "CF_UNICODETEXT"; 48 | } 49 | 50 | public byte[] fromTransferable(Transferable in) { 51 | String s; 52 | if (in != null) 53 | { 54 | try { 55 | s = (String)(in.getTransferData(DataFlavor.stringFlavor)); 56 | } 57 | catch (Exception e) { 58 | s = e.toString(); 59 | } 60 | 61 | // TODO: think of a better way of fixing this 62 | s = s.replace('\n',(char) 0x0a); 63 | //s = s.replaceAll("" + (char) 0x0a, "" + (char) 0x0d + (char) 0x0a); 64 | s = Utilities_Localised.strReplaceAll(s, "" + (char) 0x0a, "" + (char) 0x0d + (char) 0x0a); 65 | byte[] sBytes = s.getBytes(); 66 | int length = sBytes.length; 67 | int lengthBy2 = length*2; 68 | RdpPacket p = new RdpPacket_Localised(lengthBy2); 69 | for(int i = 0; i < sBytes.length; i++){ 70 | p.setLittleEndian16(sBytes[i]); 71 | } 72 | sBytes = new byte[length*2]; 73 | p.copyToByteArray(sBytes,0,0,lengthBy2); 74 | return sBytes; 75 | } 76 | return null; 77 | } 78 | 79 | /* (non-Javadoc) 80 | * @see com.elusiva.rdp.rdp5.cliprdr.TypeHandler#send_data(java.awt.datatransfer.Transferable) 81 | */ 82 | public void send_data(Transferable in, ClipInterface c) { 83 | byte[] data = fromTransferable(in); 84 | c.send_data(data,data.length); 85 | } 86 | 87 | } 88 | -------------------------------------------------------------------------------- /src1.1/com/elusiva/rdp/ISO_Localised.java: -------------------------------------------------------------------------------- 1 | /* ISO.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:59 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.1 specific extension of ISO class 11 | */ 12 | // Created on 03-Sep-2003 13 | 14 | package com.elusiva.rdp; 15 | 16 | 17 | public class ISO_Localised extends ISO { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src1.1/com/elusiva/rdp/Input_Localised.java: -------------------------------------------------------------------------------- 1 | /* Input_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:59 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.1 specific extension of Input class 11 | */ 12 | // Created on 03-Sep-2003 13 | 14 | package com.elusiva.rdp; 15 | 16 | import com.elusiva.rdp.keymapping.KeyCode; 17 | import com.elusiva.rdp.keymapping.KeyCode_FileBased; 18 | 19 | public class Input_Localised extends Input { 20 | 21 | public Input_Localised(RdesktopCanvas c, Rdp r, String k){ 22 | super(c,r,k); 23 | } 24 | 25 | public Input_Localised(RdesktopCanvas c, Rdp r, KeyCode_FileBased k){ 26 | super(c,r,k); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src1.1/com/elusiva/rdp/KeyCode_FileBased_Localised.java: -------------------------------------------------------------------------------- 1 | /* KeyCode_FileBased_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:59 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.1 specific extension of KeyCode_FileBased class 11 | */ 12 | package com.elusiva.rdp; 13 | 14 | import java.awt.event.KeyEvent; 15 | import java.io.InputStream; 16 | 17 | import com.elusiva.rdp.keymapping.KeyCode_FileBased; 18 | import com.elusiva.rdp.keymapping.KeyMapException; 19 | 20 | 21 | public class KeyCode_FileBased_Localised extends KeyCode_FileBased { 22 | 23 | /** 24 | * @param fstream 25 | * @throws KeyMapException 26 | */ 27 | public KeyCode_FileBased_Localised(InputStream fstream) throws KeyMapException { 28 | super(fstream); 29 | } 30 | 31 | public KeyCode_FileBased_Localised(String s) throws KeyMapException{ 32 | super(s); 33 | } 34 | 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src1.1/com/elusiva/rdp/LicenceStore_Localised.java: -------------------------------------------------------------------------------- 1 | /* LicenceStore_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:59 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.1 specific extension of LicenceStore class 11 | */ 12 | // Created on 05-Aug-2003 13 | 14 | package com.elusiva.rdp; 15 | 16 | public class LicenceStore_Localised extends LicenceStore { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src1.1/com/elusiva/rdp/RdesktopCanvas_Localised.java: -------------------------------------------------------------------------------- 1 | /* RdesktopCanvas_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:59 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.1 specific extension of RdesktopCanvas class 11 | */ 12 | // Created on 03-Sep-2003 13 | 14 | package com.elusiva.rdp; 15 | import java.awt.Graphics; 16 | import java.awt.Rectangle; 17 | import java.awt.image.*; 18 | import java.awt.*; 19 | 20 | import com.elusiva.rdp.Options; 21 | 22 | public class RdesktopCanvas_Localised extends RdesktopCanvas { 23 | RdesktopCanvas_Localised(int width, int height){ 24 | super(width,height); 25 | } 26 | 27 | public void update(Graphics g) { 28 | Rectangle r = g.getClipBounds(); 29 | g.drawImage(backstore.getSubimage(r.x,r.y,r.width,r.height),r.x,r.y,null); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src1.1/com/elusiva/rdp/RdesktopFrame_Localised.java: -------------------------------------------------------------------------------- 1 | /* RdesktopFrame_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:59 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.1 specific extension of RdesktopFrame class 11 | */ 12 | // Created on 03-Sep-2003 13 | 14 | package com.elusiva.rdp; 15 | 16 | 17 | public class RdesktopFrame_Localised extends RdesktopFrame { 18 | protected void checkFullScreenWidthHeight(){ 19 | if(Options.fullscreen){ 20 | // can't remove frame decoration so reduce size to compensate 21 | Options.height -= 26; 22 | Options.width -= 8; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src1.1/com/elusiva/rdp/Utilities_Localised.java: -------------------------------------------------------------------------------- 1 | /* Utilities_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:59 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.1 specific extension of Utilities class 11 | */ 12 | package com.elusiva.rdp; 13 | 14 | public class Utilities_Localised extends Utilities { 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src1.2/com/elusiva/rdp/ISO_Localised.java: -------------------------------------------------------------------------------- 1 | /* ISO.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:44 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.2 specific extension of ISO class 11 | */ 12 | // Created on 05-Aug-2003 13 | 14 | package com.elusiva.rdp; 15 | 16 | public class ISO_Localised extends ISO { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src1.2/com/elusiva/rdp/Input_Localised.java: -------------------------------------------------------------------------------- 1 | /* Input_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:44 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.2 specific extension of Input class 11 | */ 12 | //Created on 07-Jul-2003 13 | 14 | package com.elusiva.rdp; 15 | import java.awt.event.*; 16 | 17 | import com.elusiva.rdp.keymapping.KeyCode; 18 | import com.elusiva.rdp.keymapping.KeyCode_FileBased; 19 | 20 | public class Input_Localised extends Input { 21 | public void clearKeys(){ 22 | super.clearKeys(); 23 | if (lastKeyEvent != null && lastKeyEvent.isAltGraphDown()) sendScancode(getTime(),RDP_KEYRELEASE,0x38 | KeyCode.SCANCODE_EXTENDED); //r.alt 24 | } 25 | public void setKeys(){ 26 | super.setKeys(); 27 | if (lastKeyEvent != null && lastKeyEvent.isAltGraphDown()) sendScancode(getTime(),RDP_KEYPRESS,0x38 | KeyCode.SCANCODE_EXTENDED); //r.alt 28 | } 29 | 30 | public Input_Localised(RdesktopCanvas c, Rdp r, String k){ 31 | super(c,r,k); 32 | } 33 | 34 | public Input_Localised(RdesktopCanvas c, Rdp r, KeyCode_FileBased k){ 35 | super(c,r,k); 36 | } 37 | 38 | 39 | public boolean handleShortcutKeys(long time, KeyEvent e, boolean pressed){ 40 | if (super.handleShortcutKeys(time,e,pressed)) return true; 41 | 42 | if (!altDown) return false; // all of the below have ALT on 43 | 44 | switch(e.getKeyCode()){ 45 | case KeyEvent.VK_MINUS: // for laptops that can't do Ctrl+Alt+Minus 46 | if (ctrlDown){ 47 | if(pressed){ 48 | sendScancode(time,RDP_KEYRELEASE,0x1d); // Ctrl 49 | sendScancode(time,RDP_KEYPRESS,0x37 | KeyCode.SCANCODE_EXTENDED); // PrtSc 50 | logger.debug("shortcut pressed: sent ALT+PRTSC"); 51 | } 52 | else{ 53 | sendScancode(time,RDP_KEYRELEASE,0x37 | KeyCode.SCANCODE_EXTENDED); // PrtSc 54 | sendScancode(time,RDP_KEYPRESS,0x1d); // Ctrl 55 | } 56 | } 57 | break; 58 | default: return false; 59 | } 60 | return true; 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /src1.2/com/elusiva/rdp/KeyCode_FileBased_Localised.java: -------------------------------------------------------------------------------- 1 | /* KeyCode_FileBased_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:44 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.2 specific extension of KeyCode_FileBased class 11 | */ 12 | package com.elusiva.rdp; 13 | 14 | import java.awt.event.KeyEvent; 15 | import java.io.InputStream; 16 | 17 | import com.elusiva.rdp.keymapping.KeyCode_FileBased; 18 | import com.elusiva.rdp.keymapping.KeyMapException; 19 | 20 | 21 | public class KeyCode_FileBased_Localised extends KeyCode_FileBased { 22 | 23 | /** 24 | * @param fstream 25 | * @throws KeyMapException 26 | */ 27 | public KeyCode_FileBased_Localised(InputStream fstream) throws KeyMapException { 28 | super(fstream); 29 | } 30 | 31 | public KeyCode_FileBased_Localised(String s) throws KeyMapException{ 32 | super(s); 33 | } 34 | 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src1.2/com/elusiva/rdp/LicenceStore_Localised.java: -------------------------------------------------------------------------------- 1 | /* LicenceStore_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:44 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.2 specific extension of LicenceStore class 11 | */ 12 | // Created on 05-Aug-2003 13 | 14 | package com.elusiva.rdp; 15 | 16 | public class LicenceStore_Localised extends LicenceStore { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src1.2/com/elusiva/rdp/RdesktopCanvas_Localised.java: -------------------------------------------------------------------------------- 1 | /* RdesktopCanvas_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:44 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.2 specific extension of RdesktopCanvas class 11 | */ 12 | // Created on 03-Sep-2003 13 | 14 | package com.elusiva.rdp; 15 | import java.awt.image.*; 16 | import java.awt.*; 17 | 18 | import com.elusiva.rdp.Options; 19 | 20 | 21 | public class RdesktopCanvas_Localised extends RdesktopCanvas { 22 | 23 | RdesktopCanvas_Localised(int width, int height){ 24 | super(width,height); 25 | } 26 | 27 | protected Cursor createCustomCursor(Image wincursor, Point p, String s, int cache_idx){ 28 | return Toolkit.getDefaultToolkit().createCustomCursor(wincursor, p, ""); 29 | } 30 | 31 | 32 | public void update(Graphics g){ 33 | Rectangle r = g.getClipBounds(); 34 | g.drawImage(backstore.getSubimage(r.x,r.y,r.width,r.height),r.x,r.y,null); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src1.2/com/elusiva/rdp/RdesktopFrame_Localised.java: -------------------------------------------------------------------------------- 1 | /* RdesktopFrame_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:44 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.2 specific extension of RdesktopFrame class 11 | */ 12 | // Created on 07-Jul-2003 13 | 14 | package com.elusiva.rdp; 15 | 16 | public class RdesktopFrame_Localised extends RdesktopFrame { 17 | protected void checkFullScreenWidthHeight(){ 18 | if(Options.fullscreen){ 19 | // can't remove frame decoration so reduce size to compensate 20 | Options.height -= 26; 21 | Options.width -= 8; 22 | } 23 | } 24 | } 25 | 26 | 27 | -------------------------------------------------------------------------------- /src1.2/com/elusiva/rdp/Utilities_Localised.java: -------------------------------------------------------------------------------- 1 | /* Utilities_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:44 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.2 specific extension of Utilities class 11 | */ 12 | package com.elusiva.rdp; 13 | 14 | public class Utilities_Localised extends Utilities { 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src1.3/com/elusiva/rdp/ISO_Localised.java: -------------------------------------------------------------------------------- 1 | /* ISO.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:52 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.3 specific extension of ISO class 11 | */ 12 | // Created on 05-Aug-2003 13 | 14 | package com.elusiva.rdp; 15 | 16 | public class ISO_Localised extends ISO { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src1.3/com/elusiva/rdp/Input_Localised.java: -------------------------------------------------------------------------------- 1 | /* Input_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:52 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.3 specific extension of Input class 11 | */ 12 | //Created on 07-Jul-2003 13 | 14 | package com.elusiva.rdp; 15 | import java.awt.*; 16 | import java.awt.event.*; 17 | 18 | import com.elusiva.rdp.Options; 19 | import com.elusiva.rdp.keymapping.KeyCode; 20 | import com.elusiva.rdp.keymapping.KeyCode_FileBased; 21 | 22 | public class Input_Localised extends Input { 23 | public void clearKeys(){ 24 | super.clearKeys(); 25 | if (lastKeyEvent != null && lastKeyEvent.isAltGraphDown()) sendScancode(getTime(),RDP_KEYRELEASE,0x38 | KeyCode.SCANCODE_EXTENDED); //r.alt 26 | } 27 | public void setKeys(){ 28 | super.setKeys(); 29 | if (lastKeyEvent != null && lastKeyEvent.isAltGraphDown()) sendScancode(getTime(),RDP_KEYPRESS,0x38 | KeyCode.SCANCODE_EXTENDED); //r.alt 30 | } 31 | 32 | public boolean handleShortcutKeys(long time, KeyEvent e, boolean pressed){ 33 | if (super.handleShortcutKeys(time,e,pressed)) return true; 34 | 35 | if (!altDown) return false; // all of the below have ALT on 36 | 37 | switch(e.getKeyCode()){ 38 | case KeyEvent.VK_MINUS: // for laptops that can't do Ctrl+Alt+Minus 39 | if (ctrlDown){ 40 | if(pressed){ 41 | sendScancode(time,RDP_KEYRELEASE,0x1d); // Ctrl 42 | sendScancode(time,RDP_KEYPRESS,0x37 | KeyCode.SCANCODE_EXTENDED); // PrtSc 43 | logger.debug("shortcut pressed: sent ALT+PRTSC"); 44 | } 45 | else{ 46 | sendScancode(time,RDP_KEYRELEASE,0x37 | KeyCode.SCANCODE_EXTENDED); // PrtSc 47 | sendScancode(time,RDP_KEYPRESS,0x1d); // Ctrl 48 | } 49 | } 50 | break; 51 | default: return false; 52 | } 53 | return true; 54 | } 55 | 56 | protected void doLockKeys(){ 57 | // doesn't work on Java 1.4.1_02 or 1.4.2 on Linux, there is a bug in java.... 58 | // does work on the same version on Windows. 59 | if(!Rdesktop.readytosend) return; 60 | if(Constants.OS == Constants.LINUX) return; // broken for linux 61 | if(Constants.OS == Constants.MAC) return; // unsupported operation for mac 62 | logger.debug("doLockKeys"); 63 | 64 | try { 65 | Toolkit tk = Toolkit.getDefaultToolkit(); 66 | if (tk.getLockingKeyState(KeyEvent.VK_CAPS_LOCK) != capsLockOn){ 67 | capsLockOn = !capsLockOn; 68 | logger.debug("CAPS LOCK toggle"); 69 | sendScancode(getTime(),RDP_KEYPRESS,0x3a); 70 | sendScancode(getTime(),RDP_KEYRELEASE,0x3a); 71 | 72 | } 73 | if (tk.getLockingKeyState(KeyEvent.VK_NUM_LOCK) != numLockOn){ 74 | numLockOn = !numLockOn; 75 | logger.debug("NUM LOCK toggle"); 76 | sendScancode(getTime(),RDP_KEYPRESS,0x45); 77 | sendScancode(getTime(),RDP_KEYRELEASE,0x45); 78 | 79 | } 80 | if (tk.getLockingKeyState(KeyEvent.VK_SCROLL_LOCK) != scrollLockOn){ 81 | scrollLockOn = !scrollLockOn; 82 | logger.debug("SCROLL LOCK toggle"); 83 | sendScancode(getTime(),RDP_KEYPRESS,0x46); 84 | sendScancode(getTime(),RDP_KEYRELEASE,0x46); 85 | } 86 | }catch(Exception e){ 87 | Options.useLockingKeyState = false; 88 | } 89 | } 90 | 91 | 92 | public Input_Localised(RdesktopCanvas c, Rdp r, String k){ 93 | super(c,r,k); 94 | } 95 | 96 | public Input_Localised(RdesktopCanvas c, Rdp r, KeyCode_FileBased k){ 97 | super(c,r,k); 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src1.3/com/elusiva/rdp/KeyCode_FileBased_Localised.java: -------------------------------------------------------------------------------- 1 | /* KeyCode_FileBased_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:53 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.3 specific extension of KeyCode_FileBased class 11 | */ 12 | package com.elusiva.rdp; 13 | 14 | import java.awt.event.KeyEvent; 15 | import java.io.InputStream; 16 | import java.util.HashMap; 17 | 18 | import com.elusiva.rdp.Options; 19 | import com.elusiva.rdp.keymapping.KeyCode_FileBased; 20 | import com.elusiva.rdp.keymapping.KeyMapException; 21 | 22 | 23 | public class KeyCode_FileBased_Localised extends KeyCode_FileBased { 24 | 25 | private HashMap keysCurrentlyDown = new HashMap(); 26 | 27 | /** 28 | * @param fstream 29 | * @throws KeyMapException 30 | */ 31 | public KeyCode_FileBased_Localised(InputStream fstream) throws KeyMapException { 32 | super(fstream); 33 | } 34 | 35 | public KeyCode_FileBased_Localised(String s) throws KeyMapException{ 36 | super(s); 37 | } 38 | 39 | private void updateCapsLock(KeyEvent e){ 40 | if(Options.useLockingKeyState){ 41 | try { 42 | Options.useLockingKeyState = true; 43 | capsLockDown = e.getComponent().getToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK); 44 | } catch (Exception uoe){ Options.useLockingKeyState = false; } 45 | } 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src1.3/com/elusiva/rdp/LicenceStore_Localised.java: -------------------------------------------------------------------------------- 1 | /* LicenceStore_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:53 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.3 specific extension of LicenceStore class 11 | */ 12 | // Created on 05-Aug-2003 13 | 14 | package com.elusiva.rdp; 15 | 16 | public class LicenceStore_Localised extends LicenceStore { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src1.3/com/elusiva/rdp/RdesktopCanvas_Localised.java: -------------------------------------------------------------------------------- 1 | /* RdesktopCanvas_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:53 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.3 specific extension of RdesktopCanvas class 11 | */ 12 | // Created on 03-Sep-2003 13 | 14 | package com.elusiva.rdp; 15 | import java.awt.image.*; 16 | import java.awt.*; 17 | 18 | import com.elusiva.rdp.Options; 19 | 20 | 21 | public class RdesktopCanvas_Localised extends RdesktopCanvas { 22 | 23 | private Robot robot = null; 24 | 25 | RdesktopCanvas_Localised(int width, int height){ 26 | super(width,height); 27 | } 28 | 29 | public void movePointer(int x, int y){ 30 | Point p = this.getLocationOnScreen(); 31 | x = x + p.x; 32 | y = y + p.y; 33 | robot.mouseMove(x, y); 34 | } 35 | 36 | protected Cursor createCustomCursor(Image wincursor, Point p, String s, int cache_idx){ 37 | return Toolkit.getDefaultToolkit().createCustomCursor(wincursor, p, ""); 38 | } 39 | 40 | public void addNotify(){ 41 | super.addNotify(); 42 | 43 | if (robot == null) { 44 | try { 45 | robot = new Robot(); 46 | } catch(AWTException e) { 47 | logger.warn("Pointer movement not allowed"); 48 | } 49 | } 50 | } 51 | 52 | public void update(Graphics g){ 53 | Rectangle r = g.getClipBounds(); 54 | g.drawImage(backstore.getSubimage(r.x,r.y,r.width,r.height),r.x,r.y,null); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src1.3/com/elusiva/rdp/RdesktopFrame_Localised.java: -------------------------------------------------------------------------------- 1 | /* RdesktopFrame_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:53 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.3 specific extension of RdesktopFrame class 11 | */ 12 | // Created on 07-Jul-2003 13 | 14 | package com.elusiva.rdp; 15 | 16 | public class RdesktopFrame_Localised extends RdesktopFrame { 17 | protected void checkFullScreenWidthHeight(){ 18 | if(Options.fullscreen){ 19 | // can't remove frame decoration so reduce size to compensate 20 | Options.height -= 26; 21 | Options.width -= 8; 22 | } 23 | } 24 | } 25 | 26 | 27 | -------------------------------------------------------------------------------- /src1.3/com/elusiva/rdp/Utilities_Localised.java: -------------------------------------------------------------------------------- 1 | /* Utilities_Localised.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:53 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.3 specific extension of Utilities class 11 | */ 12 | package com.elusiva.rdp; 13 | 14 | public class Utilities_Localised extends Utilities { 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src1.4/com/elusiva/rdp/ISO_Localised.java: -------------------------------------------------------------------------------- 1 | /* ISO.java 2 | * Component: ProperJavaRDP 3 | * 4 | * Revision: $Revision: 1.1.1.1 $ 5 | * Author: $Author: suvarov $ 6 | * Date: $Date: 2007/03/08 00:26:53 $ 7 | * 8 | * Copyright (c) 2005 Propero Limited 9 | * 10 | * Purpose: Java 1.4 specific extension of ISO class 11 | */ 12 | // Created on 05-Aug-2003 13 | 14 | package com.elusiva.rdp; 15 | 16 | import java.io.IOException; 17 | import java.net.InetAddress; 18 | import java.net.InetSocketAddress; 19 | import java.net.Socket; 20 | 21 | public class ISO_Localised extends ISO { 22 | 23 | /* 24 | protected Socket negotiateSSL(Socket sock) throws Exception { 25 | // The default host/port to connect to 26 | String host="localhost"; 27 | int port=4433; 28 | String keyfile="client.pem"; 29 | String rootfile="root.pem"; 30 | String randomfile="random.pem"; 31 | String password="password"; 32 | LongOpt Longopts[]=new LongOpt[13]; 33 | int iterate=1; 34 | boolean acceptunverified=false; 35 | boolean fakeseed=false; 36 | boolean checkDates=false; 37 | short[] cipherSuites=null; 38 | int delay=0; 39 | boolean negotiateTLS=true; 40 | 41 | SSLContext ctx=new SSLContext(); 42 | SSLPolicyInt policy=new SSLPolicyInt(); 43 | 44 | if(cipherSuites!=null) 45 | policy.setCipherSuites(cipherSuites); 46 | 47 | policy.acceptUnverifiableCertificates(true); 48 | policy.negotiateTLS(negotiateTLS); 49 | ctx.setPolicy(policy); 50 | 51 | 52 | SSLSocket s = null; 53 | 54 | s = new SSLSocket(ctx,sock,host,port,SSLSocket.CLIENT); 55 | logger.info("Layered SSL socket on existing socket"); 56 | 57 | Vector cc=s.getCertificateChain(); 58 | int cs=s.getCipherSuite(); 59 | 60 | System.out.println("Cipher suite: "+SSLPolicyInt.getCipherSuiteName 61 | (cs)); 62 | 63 | if(cc!=null){ 64 | System.out.println("Cert chain"); 65 | 66 | for(int i=0;i