public static void main()

in services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientConfirmActivePDU.java [824:1129]


    public static void main(String args[]) {
        // System.setProperty("streamer.Link.debug", "true");
        System.setProperty("streamer.Element.debug", "true");
        // System.setProperty("streamer.Pipeline.debug", "true");

        /* @formatter:off */
        byte[] packet = new byte[] {
                // MCS Send Data Request
                (byte)0x64,

                // Initiator: 1004 (1001+3)
                (byte)0x00, (byte)0x03,

                // Channel ID: 1003 (I/O channel)
                (byte)0x03, (byte)0xeb,

                // Data priority: high (0x40), segmentation: begin (0x20) | end (0x10)
                (byte)0x70,

                // User data length: 432 bytes (0x1b0, variable length field)
                (byte)0x81, (byte)0xb0,

                // Total length: 432 bytes (0x1b0, LE)
                (byte)0xb0, (byte)0x01,

                // PDU type: Confirm Active PDU (0x3), TS_PROTOCOL_VERSION (0x10) (LE)
                (byte)0x13, (byte)0x00,

                // PDU source: 1004 (LE)
                (byte)0xec, (byte)0x03,

                // Share ID: 0x000103ea (LE)
                (byte)0xea, (byte)0x03, (byte)0x01, (byte)0x00,

                // Originator ID: 1002 (LE)
                (byte)0xea, (byte)0x03,

                // Length of source descriptor: 6 bytes (including NULL character) (LE)
                (byte)0x06, (byte)0x00,

                // Length of combined capabilities: 410 bytes (LE)
                (byte)0x9a, (byte)0x01,

                // Source descriptor: "MSTSC" ???
                (byte)0x4d, (byte)0x53, (byte)0x54, (byte)0x53, (byte)0x43, (byte)0x00,

                // Number of capabilities: 15 (LE)
                (byte)0x0f, (byte)0x00,

                // Padding 2 bytes
                (byte)0x00, (byte)0x00,

                // Capabilities, see http://msdn.microsoft.com/en-us/library/cc240486.aspx

                //
                // General capability set (24 bytes), see http://msdn.microsoft.com/en-us/library/cc240549.aspx
                (byte)0x01, (byte)0x00, // capability set type: CAPSTYPE_GENERAL (1) (LE)
                (byte)0x18, (byte)0x00, // length of capability set: 24 bytes (LE)
                (byte)0x01, (byte)0x00, // TS_OSMAJORTYPE_WINDOWS (1) (LE)
                (byte)0x03, (byte)0x00, // TS_OSMINORTYPE_WINDOWS_NT (3) (LE)
                (byte)0x00, (byte)0x02, // TS_CAPS_PROTOCOLVERSION (0x0200) (LE)
                (byte)0x00, (byte)0x00, // Padding 2 bytes
                (byte)0x00, (byte)0x00, // generalCompressionTypes: 0 (LE)

                // Extra flags: 0x040d (LE)
//        FastPathOutput:             (...............1) Advertiser supports fast-path output
//        ShadowCompression:          (..............0.) Advertiser NOT supports shadow compression
//        LongLengthCredentials:      (.............1..) Advertiser supports long-length credentials for the user name, password, or domain name
//        SessionAutoreconnection:    (............1...) Advertiser supports session auto-reconnection
//        ImprovedEncryptionChecksum: (...........0....) Client and server NOT support improved encryption checksum
//        Reserved1:                  (......00000.....)
//        CompressedBitMapDataFlag:   (.....1..........) No 8-UINT8 header is present for compressed bitmap data
//        Reserved2:                  (00000...........)
                (byte)0x0d, (byte)0x04,

                (byte)0x00, (byte)0x00, // updateCapabilityFlag: 0 (LE)
                (byte)0x00, (byte)0x00, // remoteUnshareFlag: 0 (LE)
                (byte)0x00, (byte)0x00, // generalCompressionLevel: 0 (LE)
                (byte)0x00, // refreshRectSupport: FALSE (0)
                (byte)0x00, // suppressOutputSupport: FALSE (0)

                //
                // Bitmap capability set (28 bytes), see http://msdn.microsoft.com/en-us/library/cc240554.aspx
                (byte)0x02, (byte)0x00, // capability set type: CAPSTYPE_BITMAP (2) (LE)
                (byte)0x1c, (byte)0x00, // length of capability set: 28 bytes (LE)
                (byte)0x10, (byte)0x00, // preferredBitsPerPixel: 16 bpp (LE)
                (byte)0x01, (byte)0x00, // receive1BitPerPixel (ignored and SHOULD be set to TRUE (0x1)): TRUE (0x1) (LE)
                (byte)0x01, (byte)0x00, // receive4BitsPerPixel (ignored and SHOULD be set to TRUE (0x1)): TRUE (0x1) (LE)
                (byte)0x01, (byte)0x00, // receive8BitsPerPixel (ignored and SHOULD be set to TRUE (0x1)): TRUE (0x1) (LE)
                (byte)0x00, (byte)0x04, // desktopWidth = 1024 pixels (LE)
                (byte)0x00, (byte)0x03, // desktopHeight = 768 pixels (LE)
                (byte)0x00, (byte)0x00, // Padding 2 bytes
                (byte)0x00, (byte)0x00, // desktopResizeFlag: FALSE (0x0) (LE)
                (byte)0x01, (byte)0x00, // bitmapCompressionFlag (must be set to TRUE (0x1)): TRUE (0x1) (LE)
                (byte)0x00, // highColorFlags (field is ignored and SHOULD be set to zero): 0
                (byte)0x01, // drawingFlags: 0x1 TODO: padding, why 0x1 ???
                (byte)0x01, (byte)0x00, // multipleRectangleSupport: TRUE (LE)
                (byte)0x00, (byte)0x00, // Padding 2 bytes

                //
                // Order Capability Set (88 bytes), see http://msdn.microsoft.com/en-us/library/cc240556.aspx
                (byte)0x03, (byte)0x00, // capability set type: CAPSTYPE_ORDER (3) (LE)
                (byte)0x58, (byte)0x00, // length of capability set: 88 bytes (LE)
                // terminalDescriptor = "" (16 bytes, UCS2)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // pad4octetsA
                (byte)0x01, (byte)0x00, // desktopSaveXGranularity (ignored): 1 (LE)
                (byte)0x14, (byte)0x00, // desktopSaveYGranularity (ignored): 20 (LE)
                (byte)0x00, (byte)0x00, // pad2octetsA (ignored)
                (byte)0x01, (byte)0x00, // maximumOrderLevel: ORD_LEVEL_1_ORDERS (1)
                (byte)0x00, (byte)0x00, // number of fonts (ignored): 0
                (byte)0x4a, (byte)0x00, // orderFlags = 0x004a (LE), SOLIDPATTERNBRUSHONLY (0x40), ZEROBOUNDSDELTASSUPPORT (0x8, MUST), NEGOTIATEORDERSUPPORT (0x2, MUST)
                // Order support: 32 bytes (no primary drawing orders are supported, so this array MUST be initialized to all zeros, use 0x01 for TRUE).
                (byte)0x00, // TS_NEG_DSTBLT_INDEX: FALSE
                (byte)0x00, // TS_NEG_PATBLT_INDEX: FALSE
                (byte)0x00, // TS_NEG_SCRBLT_INDEX: FALSE
                (byte)0x00, // TS_NEG_MEMBLT_INDEX: FALSE
                (byte)0x00, // TS_NEG_MEM3BLT_INDEX: FALSE
                (byte)0x00, // TS_NEG_ATEXTOUT_INDEX: FALSE
                (byte)0x00, // TS_NEG_AEXTTEXTOUT_INDEX: FALSE
                (byte)0x00, // TS_NEG_DRAWNINEGRID_INDEX: FALSE
                (byte)0x00, // TS_NEG_LINETO_INDEX: FALSE
                (byte)0x00, // TS_NEG_MULTI_DRAWNINEGRID_INDEX: FALSE
                (byte)0x00, // TS_NEG_OPAQUERECT_INDEX: FALSE
                (byte)0x00, // TS_NEG_SAVEBITMAP_INDEX: FALSE
                (byte)0x00, // TS_NEG_WTEXTOUT_INDEX: FALSE
                (byte)0x00, // TS_NEG_MEMBLT_R2_INDEX: FALSE
                (byte)0x00, // TS_NEG_MEM3BLT_R2_INDEX: FALSE
                (byte)0x00, // TS_NEG_MULTIDSTBLT_INDEX: FALSE
                (byte)0x00, // TS_NEG_MULTIPATBLT_INDEX: FALSE
                (byte)0x00, // TS_NEG_MULTISCRBLT_INDEX: FALSE
                (byte)0x00, // TS_NEG_MULTIOPAQUERECT_INDEX: FALSE
                (byte)0x00, // TS_NEG_FAST_INDEX_INDEX: FALSE
                (byte)0x00, // TS_NEG_POLYGON_SC_INDEX: FALSE
                (byte)0x00, // TS_NEG_POLYGON_CB_INDEX: FALSE
                (byte)0x00, // TS_NEG_POLYLINE_INDEX: TRUE
                (byte)0x00, // Unused: 0
                (byte)0x00, // TS_NEG_FAST_GLYPH_INDEX: FALSE
                (byte)0x00, // TS_NEG_ELLIPSE_SC_INDEX: FALSE
                (byte)0x00, // TS_NEG_ELLIPSE_CB_INDEX: FALSE
                (byte)0x00, // TS_NEG_INDEX_INDEX: FALSE
                (byte)0x00, // TS_NEG_WEXTTEXTOUT_INDEX: FALSE
                (byte)0x00, // TS_NEG_WLONGTEXTOUT_INDEX: FALSE
                (byte)0x00, // TS_NEG_WLONGEXTTEXTOUT_INDEX: FALSE
                (byte)0x00, // Unused: 0
                (byte)0x00, (byte)0x00, // Text flags (ignored): 0  (LE)
                (byte)0x00, (byte)0x00, // Order support extra flags: 0 (LE)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // Padding 4 bytes
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // Desktop save size (ignored): 0 (assumed to be 230400 bytes (480*480, 0x38400, LE))
                (byte)0x00, (byte)0x00, // Padding 2 bytes
                (byte)0x00, (byte)0x00, // Padding 2 bytes
                (byte)0xe4, (byte)0x04, // Text ANSI Code Page: 1252,  ANSI - Latin I (0x04e4, LE)
                (byte)0x00, (byte)0x00, // Padding 2 bytes

                //
                // Bitmap Cache Rev. 2 Capability Set (40 bytes), see http://msdn.microsoft.com/en-us/library/cc240560.aspx
                (byte)0x13, (byte)0x00, // capability set type: CAPSTYPE_BITMAPCACHE_REV2 (19) (LE)
                (byte)0x28, (byte)0x00, // length of capability set: 40 bytes (LE)
                (byte)0x00, (byte)0x00, // Cache flags: 0 (LE)
                (byte)0x00, // Padding 1 byte
                (byte)0x00, // Number of cell caches: 0
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // Bitmap cache0 cell info: 0 (LE)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // Bitmap cache1 cell info: 0 (LE)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // Bitmap cache2 cell info: 0 (LE)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // Bitmap cache3 cell info: 0 (LE)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // Bitmap cache4 cell info: 0 (LE)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // Padding 12 bytes
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // Padding
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // Padding

                //
                // Color Table Cache Capability Set (8 bytes), see http://msdn.microsoft.com/en-us/library/cc241564.aspx
                (byte)0x0a, (byte)0x00, // capability set type: CAPSTYPE_COLORCACHE (10) (LE)
                (byte)0x08, (byte)0x00, // length of capability set: 8 bytes (LE)
                (byte)0x06, (byte)0x00, // Color table cache size (must be ignored during capability exchange and is assumed to be 0x0006): 6 (LE)
                (byte)0x00, (byte)0x00, // Padding 2 bytes

                //
                // Window Activation Capability Set (12 bytes), see http://msdn.microsoft.com/en-us/library/cc240569.aspx
                (byte)0x07, (byte)0x00, // capability set type: CAPSTYPE_ACTIVATION (7) (LE)
                (byte)0x0c, (byte)0x00, // length of capability set: 12 bytes (LE)
                (byte)0x00, (byte)0x00, // helpKeyFlag (should be set to FALSE (0)): FALSE (0, LE)
                (byte)0x00, (byte)0x00, // helpKeyIndexFlag (should be set to FALSE (0)): FALSE (0, LE)
                (byte)0x00, (byte)0x00, // helpExtendedKeyFlag (should be set to FALSE (0)): FALSE (0, LE)
                (byte)0x00, (byte)0x00, // windowManagerKeyFlag (should be set to FALSE (0)): FALSE (0, LE)

                //
                // Control Capability Set (12 bytes), see http://msdn.microsoft.com/en-us/library/cc240568.aspx
                (byte)0x05, (byte)0x00, // capability set type: CAPSTYPE_ACTIVATION (7)
                (byte)0x0c, (byte)0x00, // length of capability set: 12 bytes (LE)
                (byte)0x00, (byte)0x00, // controlFlags (should be set to 0): 0 (LE)
                (byte)0x00, (byte)0x00, // remoteDetachFlag (should be set to 0): 0 (LE)
                (byte)0x02, (byte)0x00, // controlInterest (should be set to CONTROLPRIORITY_NEVER): CONTROLPRIORITY_NEVER (2) (LE)
                (byte)0x02, (byte)0x00, // detachInterest (should be set to CONTROLPRIORITY_NEVER): CONTROLPRIORITY_NEVER (2) (LE)

                //
                // Pointer Capability Set (10 bytes), see http://msdn.microsoft.com/en-us/library/cc240562.aspx
                (byte)0x08, (byte)0x00, // capability set type: CAPSTYPE_POINTER (8, LE)
                (byte)0x0a, (byte)0x00, // length of capability set: 10 bytes (LE)
                (byte)0x00, (byte)0x00, // colorPointerFlag: FALSE (LE)
                (byte)0x00, (byte)0x00, // colorPointerCacheSize: 0 (LE)
                (byte)0x14, (byte)0x00, // pointerCacheSize: 20 (LE)

                //
                // Share Capability Set (8 bytes), see http://msdn.microsoft.com/en-us/library/cc240570.aspx
                (byte)0x09, (byte)0x00, // capability set type: CAPSTYPE_SHARE (9, LE)
                (byte)0x08, (byte)0x00, // length of capability set: 8 bytes (LE)
                (byte)0x00, (byte)0x00, // nodeID (must be set to 0 by client): 0 (LE)
                (byte)0x00, (byte)0x00, // Padding 2 bytes (LE)

                //
                // Input Capability Set (88 bytes), see http://msdn.microsoft.com/en-us/library/cc240563.aspx
                (byte)0x0d, (byte)0x00, // capability set type:  CAPSTYPE_INPUT (13, LE)
                (byte)0x58, (byte)0x00, // length of capability set: 88 bytes (LE)
                (byte)0x35, (byte)0x00, // inputFlags: 0x0035  (LE),  INPUT_FLAG_FASTPATH_INPUT2 (0x20), INPUT_FLAG_VKPACKET (0x10), INPUT_FLAG_MOUSEX (0x4), INPUT_FLAG_SCANCODES (0x1)
                (byte)0x00, (byte)0x00, // Padding 2 bytes
                (byte)0x09, (byte)0x04, (byte)0x00, (byte)0x00, // keyboardLayout: "US" keyboard layout (0x000409, LE)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // keyboardType: unknown (LE)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // keyboardSubType: unknown (LE)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // keyboardFunctionKey: unknown (LE)
                // imeFileName: "", (64 bytes, including trailing NULL characters, UCS2)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,

                //
                // Brush Capability Set (8 bytes), see http://msdn.microsoft.com/en-us/library/cc240564.aspx
                (byte)0x0f, (byte)0x00, // capability set type: CAPSTYPE_BRUSH (15, LE)
                (byte)0x08, (byte)0x00, // length of capability set: 8 bytes (LE)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // brushSupportLevel: BRUSH_DEFAULT (0x0, LE)

                //
                // Sound Capability Set (8 bytes), see http://msdn.microsoft.com/en-us/library/cc240552.aspx
                (byte)0x0c, (byte)0x00, // capability set type: CAPSTYPE_SOUND (12, LE)
                (byte)0x08, (byte)0x00, // length of capability set: 8 bytes (LE)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // soundFlags: 0x0000 (LE) // SOUND_FLAG_BEEPS (0x1)

                //
                // Font Capability Set (8 bytes), see http://msdn.microsoft.com/en-us/library/cc240571.aspx
                (byte)0x0e, (byte)0x00,
                (byte)0x08, (byte)0x00,
                (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00,

                //
                // Offscreen Bitmap Cache Capability Set (12 bytes), see http://msdn.microsoft.com/en-us/library/cc240550.aspx
                (byte)0x11, (byte)0x00, // capability set type: CAPSTYPE_OFFSCREENCACHE (17, LE)
                (byte)0x0c, (byte)0x00, // length of capability set: 12 bytes (LE)
                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // offscreenSupportLevel: FALSE (LE)
                (byte)0x00, (byte)0x00, // offscreenCacheSize: 0 (LE)
                (byte)0x00, (byte)0x00, // offscreenCacheEntries: 0 (LE)

                //
                // Glyph Cache Capability Set (52 bytes), see http://msdn.microsoft.com/en-us/library/cc240565.aspx
                (byte)0x10, (byte)0x00, // capability set type: CAPSTYPE_OFFSCREENCACHE (16, LE)
                (byte)0x34, (byte)0x00, // length of capability set: 52 bytes (LE)
                // Glyph Cache (40 bytes)
                (byte)0xfe, (byte)0x00, // CacheEntries: 254 (LE)
                (byte)0x04, (byte)0x00, // CacheMaximumCellSize: 4 (LE)
                (byte)0xfe, (byte)0x00, // CacheEntries: 254 (LE)
                (byte)0x04, (byte)0x00, // CacheMaximumCellSize: 4 (LE)
                (byte)0xfe, (byte)0x00, // CacheEntries: 254 (LE)
                (byte)0x08, (byte)0x00, // CacheMaximumCellSize: 4 (LE)
                (byte)0xfe, (byte)0x00, // CacheEntries: 254 (LE)
                (byte)0x08, (byte)0x00, // CacheMaximumCellSize: 4 (LE)
                (byte)0xfe, (byte)0x00, // CacheEntries: 254 (LE)
                (byte)0x10, (byte)0x00, // CacheMaximumCellSize: 4 (LE)
                (byte)0xfe, (byte)0x00, // CacheEntries: 254 (LE)
                (byte)0x20, (byte)0x00, // CacheMaximumCellSize: 4 (LE)
                (byte)0xfe, (byte)0x00, // CacheEntries: 254 (LE)
                (byte)0x40, (byte)0x00, // CacheMaximumCellSize: 4 (LE)
                (byte)0xfe, (byte)0x00, // CacheEntries: 254 (LE)
                (byte)0x80, (byte)0x00, // CacheMaximumCellSize: 4 (LE)
                (byte)0xfe, (byte)0x00, // CacheEntries: 254 (LE)
                (byte)0x00, (byte)0x01, // CacheMaximumCellSize: 4 (LE)
                (byte)0x40, (byte)0x00, // CacheEntries: 64 (LE)
                (byte)0x00, (byte)0x08, // CacheMaximumCellSize: 2048 (LE)
                // FragCache
                (byte)0x00, (byte)0x01, // CacheEntries: 256 (LE)
                (byte)0x00, (byte)0x01, // CacheMaximumCellSize: 256 (LE)
                //
                (byte)0x00, (byte)0x00, // GlyphSupportLevel: GLYPH_SUPPORT_NONE (0x0, LE)
                (byte)0x00, (byte)0x00, // Padding 2 bytes
        };
        /* @formatter:on */

        RdpState rdpState = new RdpState();
        ScreenDescription screenDescription = new ScreenDescription();
        screenDescription.setFramebufferSize(1024, 768);

        rdpState.serverShareId = 0x000103ea;

        MockSource source = new MockSource("source", ByteBuffer.convertByteArraysToByteBuffers(new byte[] {}));
        Element confirm_active = new ClientConfirmActivePDU("confirm_active", screenDescription, rdpState);
        Element sink = new MockSink("sink", ByteBuffer.convertByteArraysToByteBuffers(packet));

        Pipeline pipeline = new PipelineImpl("test");
        pipeline.add(source, confirm_active, sink);
        pipeline.link("source", "confirm_active", "sink");
        pipeline.runMainLoop("source", STDOUT, false, false);
    }