* @param s stream
*/
-void rdp_process_pdu(rdpRdp* rdp, STREAM* s)
+static void rdp_process_tpkt_pdu(rdpRdp* rdp, STREAM* s)
{
int length;
uint16 pduType;
boolean processed;
enum DomainMCSPDU MCSPDU;
- /* TODO: Check Fast Path header */
-
MCSPDU = DomainMCSPDU_SendDataIndication;
mcs_read_domain_mcspdu_header(s, &MCSPDU, &length);
}
}
+static void rdp_process_fastpath_pdu(rdpRdp* rdp, STREAM* s)
+{
+ uint32 length = fastpath_read_header(s, NULL);
+
+ printf("FastPath PDU: length=%d\n", length);
+}
+
+static void rdp_process_pdu(rdpRdp* rdp, STREAM* s)
+{
+ if (tpkt_verify_header(s))
+ rdp_process_tpkt_pdu(rdp, s);
+ else
+ rdp_process_fastpath_pdu(rdp, s);
+}
+
/**
* Receive an RDP packet.\n
* @param rdp RDP module
*/
/**
+ * Verify if a packet has valid TPKT header.\n
+ * @param s
+ * @return boolean
+ */
+
+boolean tpkt_verify_header(STREAM* s)
+{
+ uint8 version;
+
+ stream_peek_uint8(s, version);
+ if (version == 3)
+ return True;
+ else
+ return False;
+}
+
+/**
* Read a TPKT header.\n
* @param s
* @return length
*/
-uint16
-tpkt_read_header(STREAM* s)
+uint16 tpkt_read_header(STREAM* s)
{
uint8 version;
uint16 length;
* @param length
*/
-void
-tpkt_write_header(STREAM* s, int length)
+void tpkt_write_header(STREAM* s, int length)
{
stream_write_uint8(s, 3); /* version */
stream_write_uint8(s, 0); /* reserved */
#define TPKT_HEADER_LENGTH 4
-uint16
-tpkt_read_header(STREAM* s);
-void
-tpkt_write_header(STREAM* s, int length);
+boolean tpkt_verify_header(STREAM* s);
+uint16 tpkt_read_header(STREAM* s);
+void tpkt_write_header(STREAM* s, int length);
#endif /* __TPKT_H */