BOOL rdg_process_packet(rdpRdg* rdg, wStream* s) { BOOL status = TRUE; UINT16 type; Stream_SetPosition(s, 0); if (Stream_GetRemainingLength(s) < 2) return FALSE; Stream_Peek_UINT16(s, type); switch (type) { case PKT_TYPE_HANDSHAKE_RESPONSE: status = rdg_process_handshake_response(rdg, s); break; case PKT_TYPE_TUNNEL_RESPONSE: status = rdg_process_tunnel_response(rdg, s); break; case PKT_TYPE_TUNNEL_AUTH_RESPONSE: status = rdg_process_tunnel_authorization_response(rdg, s); break; case PKT_TYPE_CHANNEL_RESPONSE: status = rdg_process_channel_response(rdg, s); break; case PKT_TYPE_DATA: assert(FALSE); return FALSE; } return status; }
static BOOL TestStream_Write(void) { BOOL rc = FALSE; UINT8 u8; UINT16 u16; UINT32 u32; UINT64 u64; const BYTE data[] = "someteststreamdata"; wStream* s = Stream_New(NULL, 100); if (!s) goto out; if (s->pointer != s->buffer) goto out; Stream_Write(s, data, sizeof(data)); if (memcmp(Stream_Buffer(s), data, sizeof(data)) == 0) rc = TRUE; if (s->pointer != s->buffer + sizeof(data)) goto out; Stream_SetPosition(s, 0); if (s->pointer != s->buffer) goto out; Stream_Write_UINT8(s, 42); if (s->pointer != s->buffer + 1) goto out; Stream_SetPosition(s, 0); if (s->pointer != s->buffer) goto out; Stream_Peek_UINT8(s, u8); if (u8 != 42) goto out; Stream_Write_UINT16(s, 0x1234); if (s->pointer != s->buffer + 2) goto out; Stream_SetPosition(s, 0); if (s->pointer != s->buffer) goto out; Stream_Peek_UINT16(s, u16); if (u16 != 0x1234) goto out; Stream_Write_UINT32(s, 0x12345678UL); if (s->pointer != s->buffer + 4) goto out; Stream_SetPosition(s, 0); if (s->pointer != s->buffer) goto out; Stream_Peek_UINT32(s, u32); if (u32 != 0x12345678UL) goto out; Stream_Write_UINT64(s, 0x1234567890ABCDEFULL); if (s->pointer != s->buffer + 8) goto out; Stream_SetPosition(s, 0); if (s->pointer != s->buffer) goto out; Stream_Peek_UINT64(s, u64); if (u64 != 0x1234567890ABCDEFULL) goto out; out: Stream_Free(s, TRUE); return rc; }