in services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerIOChannelRouter.java [250:457]
protected void handleDataPdu(ByteBuffer buf) {
// (4 bytes): A 32-bit, unsigned integer. Share identifier for the packet.
long shareId = buf.readUnsignedIntLE();
if (shareId != state.serverShareId)
throw new RuntimeException("Unexpected share ID: " + shareId + ".");
// buf.skipBytes(4);
// Padding.
buf.skipBytes(1);
// (1 byte): An 8-bit, unsigned integer. The stream identifier for the
// packet.
// int streamId = buf.readUnsignedByte();
buf.skipBytes(1);
// (2 bytes): A 16-bit, unsigned integer. The uncompressed length of the
// packet in bytes.
int uncompressedLength = buf.readUnsignedShortLE();
// (1 byte): An 8-bit, unsigned integer. The type of Data PDU.
int type2 = buf.readUnsignedByte();
// (1 byte): An 8-bit, unsigned integer. The compression type and flags
// specifying the data following the Share Data Header
int compressedType = buf.readUnsignedByte();
if (compressedType != 0)
throw new RuntimeException("Compression of protocol packets is not supported. Data: " + buf + ".");
// (2 bytes): A 16-bit, unsigned integer. The compressed length of the
// packet in bytes.
int compressedLength = buf.readUnsignedShortLE();
if (compressedLength != 0)
throw new RuntimeException("Compression of protocol packets is not supported. Data: " + buf + ".");
ByteBuffer data = buf.readBytes(uncompressedLength - 18);
buf.unref();
switch (type2) {
case PDUTYPE2_UPDATE: {
// (2 bytes): A 16-bit, unsigned integer. Type of the graphics update.
int updateType = data.readUnsignedShortLE();
ByteBuffer payload = data.readBytes(data.length - data.cursor);
data.unref();
switch (updateType) {
case UPDATETYPE_ORDERS:
pushDataToPad("orders", payload);
break;
case UPDATETYPE_BITMAP:
pushDataToPad("bitmap", payload);
break;
case UPDATETYPE_PALETTE:
pushDataToPad("palette", payload);
break;
case UPDATETYPE_SYNCHRONIZE:
// Ignore
payload.unref();
break;
}
break;
}
case PDUTYPE2_CONTROL:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_CONTROL ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_POINTER:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_POINTER ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_INPUT:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_INPUT ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_SYNCHRONIZE:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_SYNCHRONIZE ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_REFRESH_RECT:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_REFRESH_RECT ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_PLAY_SOUND:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_PLAY_SOUND ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_SUPPRESS_OUTPUT:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_SUPPRESS_OUTPUT ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_SHUTDOWN_REQUEST:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_SHUTDOWN_REQUEST ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_SHUTDOWN_DENIED:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_SHUTDOWN_DENIED ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_SAVE_SESSION_INFO:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_SAVE_SESSION_INFO ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_FONTLIST:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_FONTLIST ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_FONTMAP:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_FONTMAP ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_SET_KEYBOARD_INDICATORS:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_SET_KEYBOARD_INDICATORS ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_BITMAPCACHE_PERSISTENT_LIST:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_BITMAPCACHE_PERSISTENT_LIST ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_BITMAPCACHE_ERROR_PDU:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_BITMAPCACHE_ERROR_PDU ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_SET_KEYBOARD_IME_STATUS:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_SET_KEYBOARD_IME_STATUS ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_OFFSCRCACHE_ERROR_PDU:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_OFFSCRCACHE_ERROR_PDU ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_SET_ERROR_INFO_PDU:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_SET_ERROR_INFO_PDU ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_DRAWNINEGRID_ERROR_PDU:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_DRAWNINEGRID_ERROR_PDU ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_DRAWGDIPLUS_ERROR_PDU:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_DRAWGDIPLUS_ERROR_PDU ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_ARC_STATUS_PDU:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_ARC_STATUS_PDU ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_STATUS_INFO_PDU:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_STATUS_INFO_PDU ignored.");
// Ignore
data.unref();
break;
case PDUTYPE2_MONITOR_LAYOUT_PDU:
if (verbose)
System.out.println("[" + this + "] INFO: Packet PDUTYPE2_MONITOR_LAYOUT_PDU ignored.");
// Ignore
data.unref();
break;
default:
throw new RuntimeException("Unknown data PDU type: " + type2 + ", data: " + buf + ".");
}
}