stream_write_uint16(s, settings->pdu_source); /* targetUser (2 bytes) */
}
-boolean rdp_read_server_synchronize_pdu(rdpRdp* rdp, STREAM* s)
+boolean rdp_recv_server_synchronize_pdu(rdpRdp* rdp, STREAM* s)
{
return True;
}
return True;
}
-boolean rdp_read_client_synchronize_pdu(STREAM* s)
+boolean rdp_recv_client_synchronize_pdu(STREAM* s)
{
uint16 messageType;
return rdp_send_data_pdu(rdp, s, DATA_PDU_TYPE_SYNCHRONIZE, rdp->mcs->user_id);
}
-boolean rdp_read_control_pdu(STREAM* s, uint16* action)
+boolean rdp_recv_control_pdu(STREAM* s, uint16* action)
{
if (stream_get_left(s) < 8)
return False;
stream_write_uint32(s, 0); /* controlId (4 bytes) */
}
-boolean rdp_read_server_control_pdu(rdpRdp* rdp, STREAM* s)
+boolean rdp_recv_server_control_pdu(rdpRdp* rdp, STREAM* s)
{
uint16 action;
- rdp_read_control_pdu(s, &action);
+ rdp_recv_control_pdu(s, &action);
return True;
}
return rdp_send_data_pdu(rdp, s, DATA_PDU_TYPE_BITMAP_CACHE_PERSISTENT_LIST, rdp->mcs->user_id);
}
-boolean rdp_read_client_font_list_pdu(STREAM* s)
+boolean rdp_recv_client_font_list_pdu(STREAM* s)
{
if (stream_get_left(s) < 8)
return False;
return rdp_send_data_pdu(rdp, s, DATA_PDU_TYPE_FONT_LIST, rdp->mcs->user_id);
}
-boolean rdp_read_server_font_map_pdu(rdpRdp* rdp, STREAM* s)
+boolean rdp_recv_server_font_map_pdu(rdpRdp* rdp, STREAM* s)
{
return True;
}
return True;
}
-boolean rdp_read_deactivate_all(rdpRdp* rdp, STREAM* s)
+boolean rdp_recv_deactivate_all(rdpRdp* rdp, STREAM* s)
{
uint16 lengthSourceDescriptor;
{
uint16 action;
- if (!rdp_read_control_pdu(s, &action))
+ if (!rdp_recv_control_pdu(s, &action))
return False;
if (action == CTRLACTION_REQUEST_CONTROL)
{
boolean rdp_server_accept_client_font_list_pdu(rdpRdp* rdp, STREAM* s)
{
- if (!rdp_read_client_font_list_pdu(s))
+ if (!rdp_recv_client_font_list_pdu(s))
return False;
if (!rdp_send_server_font_map_pdu(rdp))
return False;
#define FONTLIST_FIRST 0x0001
#define FONTLIST_LAST 0x0002
-boolean rdp_read_deactivate_all(rdpRdp* rdp, STREAM* s);
+boolean rdp_recv_deactivate_all(rdpRdp* rdp, STREAM* s);
-boolean rdp_read_server_synchronize_pdu(rdpRdp* rdp, STREAM* s);
+boolean rdp_recv_server_synchronize_pdu(rdpRdp* rdp, STREAM* s);
boolean rdp_send_server_synchronize_pdu(rdpRdp* rdp);
-boolean rdp_read_client_synchronize_pdu(STREAM* s);
+boolean rdp_recv_client_synchronize_pdu(STREAM* s);
boolean rdp_send_client_synchronize_pdu(rdpRdp* rdp);
-boolean rdp_read_control_pdu(STREAM* s, uint16* action);
-boolean rdp_read_server_control_pdu(rdpRdp* rdp, STREAM* s);
+boolean rdp_recv_control_pdu(STREAM* s, uint16* action);
+boolean rdp_recv_server_control_pdu(rdpRdp* rdp, STREAM* s);
boolean rdp_send_server_control_cooperate_pdu(rdpRdp* rdp);
boolean rdp_send_server_control_granted_pdu(rdpRdp* rdp);
boolean rdp_send_client_control_pdu(rdpRdp* rdp, uint16 action);
boolean rdp_send_client_persistent_key_list_pdu(rdpRdp* rdp);
-boolean rdp_read_client_font_list_pdu(STREAM* s);
+boolean rdp_recv_client_font_list_pdu(STREAM* s);
boolean rdp_send_client_font_list_pdu(rdpRdp* rdp, uint16 flags);
-boolean rdp_read_server_font_map_pdu(rdpRdp* rdp, STREAM* s);
+boolean rdp_recv_server_font_map_pdu(rdpRdp* rdp, STREAM* s);
boolean rdp_send_server_font_map_pdu(rdpRdp* rdp);
boolean rdp_server_accept_client_control_pdu(rdpRdp* rdp, STREAM* s);
boolean rdp_server_accept_client_info(rdpRdp* rdp, STREAM* s)
{
- if (!rdp_read_client_info(rdp, s))
+ if (!rdp_recv_client_info(rdp, s))
return False;
if (!license_send_valid_client_error_packet(rdp->license))
return length;
}
+boolean fastpath_read_security_header(rdpFastPath* fastpath, STREAM* s)
+{
+ /* TODO: fipsInformation */
+
+ if ((fastpath->encryptionFlags & FASTPATH_OUTPUT_ENCRYPTED))
+ {
+ stream_seek(s, 8); /* dataSignature */
+ }
+
+ return True;
+}
+
static int fastpath_recv_update_surfcmd_surface_bits(rdpFastPath* fastpath, STREAM* s)
{
rdpUpdate* update = fastpath->rdp->update;
stream_set_pos(s, next_pos);
}
-void fastpath_recv_updates(rdpFastPath* fastpath, STREAM* s)
+boolean fastpath_recv_updates(rdpFastPath* fastpath, STREAM* s)
{
rdpUpdate* update = fastpath->rdp->update;
}
IFCALL(update->EndPaint, update);
+
+ return True;
+}
+
+boolean fastpath_recv_input(rdpFastPath* fastpath, STREAM* s)
+{
+ return True;
}
STREAM* fastpath_pdu_init(rdpFastPath* fastpath)
};
uint16 fastpath_read_header(rdpFastPath* fastpath, STREAM* s);
-void fastpath_recv_updates(rdpFastPath* fastpath, STREAM* s);
+boolean fastpath_read_security_header(rdpFastPath* fastpath, STREAM* s);
+boolean fastpath_recv_updates(rdpFastPath* fastpath, STREAM* s);
+boolean fastpath_recv_input(rdpFastPath* fastpath, STREAM* s);
STREAM* fastpath_pdu_init(rdpFastPath* fastpath);
void fastpath_send_pdu(rdpFastPath* fastpath, STREAM* s, uint8 numberEvents);
* @param s stream
*/
-boolean rdp_read_client_info(rdpRdp* rdp, STREAM* s)
+boolean rdp_recv_client_info(rdpRdp* rdp, STREAM* s)
{
uint16 length;
uint16 channelId;
stream_seek(s, 570); /* pad */
}
-boolean rdp_read_save_session_info(rdpRdp* rdp, STREAM* s)
+boolean rdp_recv_save_session_info(rdpRdp* rdp, STREAM* s)
{
uint32 infoType;
void rdp_write_extended_info_packet(STREAM* s, rdpSettings* settings);
boolean rdp_read_info_packet(STREAM* s, rdpSettings* settings);
void rdp_write_info_packet(STREAM* s, rdpSettings* settings);
-boolean rdp_read_client_info(rdpRdp* rdp, STREAM* s);
+boolean rdp_recv_client_info(rdpRdp* rdp, STREAM* s);
boolean rdp_send_client_info(rdpRdp* rdp);
-boolean rdp_read_save_session_info(rdpRdp* rdp, STREAM* s);
+boolean rdp_recv_save_session_info(rdpRdp* rdp, STREAM* s);
#endif /* __INFO_H */
return True;
}
-static boolean peer_read_data_pdu(rdpPeer* peer, STREAM* s)
+static boolean peer_recv_data_pdu(rdpPeer* peer, STREAM* s)
{
uint8 type;
uint16 length;
switch (type)
{
case DATA_PDU_TYPE_SYNCHRONIZE:
- if (!rdp_read_client_synchronize_pdu(s))
+ if (!rdp_recv_client_synchronize_pdu(s))
return False;
break;
return True;
}
-static boolean peer_read_tpkt_pdu(rdpPeer* peer, STREAM* s)
+static boolean peer_recv_tpkt_pdu(rdpPeer* peer, STREAM* s)
{
uint16 length;
uint16 pduType;
switch (pduType)
{
case PDU_TYPE_DATA:
- if (!peer_read_data_pdu(peer, s))
+ if (!peer_recv_data_pdu(peer, s))
return False;
break;
return True;
}
-static boolean peer_read_fastpath_pdu(rdpPeer* peer, STREAM* s)
+static boolean peer_recv_fastpath_pdu(rdpPeer* peer, STREAM* s)
{
- printf("FastPath Input PDU\n");
return True;
}
-static boolean peer_read_pdu(rdpPeer* peer, STREAM* s)
+static boolean peer_recv_pdu(rdpPeer* peer, STREAM* s)
{
if (tpkt_verify_header(s))
- return peer_read_tpkt_pdu(peer, s);
+ return peer_recv_tpkt_pdu(peer, s);
else
- return peer_read_fastpath_pdu(peer, s);
+ return peer_recv_fastpath_pdu(peer, s);
}
static int peer_recv_callback(rdpTransport* transport, STREAM* s, void* extra)
break;
case CONNECTION_STATE_ACTIVE:
- if (!peer_read_pdu(peer, s))
+ if (!peer_recv_pdu(peer, s))
return -1;
break;
return True;
}
-void rdp_read_set_error_info_data_pdu(STREAM* s)
+void rdp_recv_set_error_info_data_pdu(STREAM* s)
{
uint32 errorInfo;
rdp_print_errinfo(errorInfo);
}
-void rdp_read_data_pdu(rdpRdp* rdp, STREAM* s)
+void rdp_recv_data_pdu(rdpRdp* rdp, STREAM* s)
{
uint8 type;
uint16 length;
break;
case DATA_PDU_TYPE_CONTROL:
- rdp_read_server_control_pdu(rdp, s);
+ rdp_recv_server_control_pdu(rdp, s);
break;
case DATA_PDU_TYPE_POINTER:
break;
case DATA_PDU_TYPE_SYNCHRONIZE:
- rdp_read_server_synchronize_pdu(rdp, s);
+ rdp_recv_server_synchronize_pdu(rdp, s);
break;
case DATA_PDU_TYPE_REFRESH_RECT:
break;
case DATA_PDU_TYPE_SAVE_SESSION_INFO:
- rdp_read_save_session_info(rdp, s);
+ rdp_recv_save_session_info(rdp, s);
break;
case DATA_PDU_TYPE_FONT_LIST:
break;
case DATA_PDU_TYPE_FONT_MAP:
- rdp_read_server_font_map_pdu(rdp, s);
+ rdp_recv_server_font_map_pdu(rdp, s);
break;
case DATA_PDU_TYPE_SET_KEYBOARD_INDICATORS:
break;
case DATA_PDU_TYPE_SET_ERROR_INFO:
- rdp_read_set_error_info_data_pdu(s);
+ rdp_recv_set_error_info_data_pdu(s);
break;
case DATA_PDU_TYPE_DRAW_NINEGRID_ERROR:
* @param s stream
*/
-static boolean rdp_read_tpkt_pdu(rdpRdp* rdp, STREAM* s)
+static boolean rdp_recv_tpkt_pdu(rdpRdp* rdp, STREAM* s)
{
uint16 length;
uint16 pduType;
switch (pduType)
{
case PDU_TYPE_DATA:
- rdp_read_data_pdu(rdp, s);
+ rdp_recv_data_pdu(rdp, s);
break;
case PDU_TYPE_DEACTIVATE_ALL:
- if (!rdp_read_deactivate_all(rdp, s))
+ if (!rdp_recv_deactivate_all(rdp, s))
return False;
break;
case PDU_TYPE_SERVER_REDIRECTION:
- rdp_read_enhanced_security_redirection_packet(rdp, s);
+ rdp_recv_enhanced_security_redirection_packet(rdp, s);
break;
default:
return True;
}
-static boolean rdp_read_fastpath_pdu(rdpRdp* rdp, STREAM* s)
+static boolean rdp_recv_fastpath_pdu(rdpRdp* rdp, STREAM* s)
{
uint16 length;
length = fastpath_read_header(rdp->fastpath, s);
- if (length > stream_get_size(s))
+ if (length == 0 || length > stream_get_size(s))
{
printf("incorrect FastPath PDU header length %d\n", length);
return False;
}
- /* TODO: fipsInformation */
-
- if ((rdp->fastpath->encryptionFlags & FASTPATH_OUTPUT_ENCRYPTED))
- {
- stream_seek(s, 8); /* dataSignature */
- }
+ if (!fastpath_read_security_header(rdp->fastpath, s))
+ return False;
fastpath_recv_updates(rdp->fastpath, s);
return True;
}
-static boolean rdp_read_pdu(rdpRdp* rdp, STREAM* s)
+static boolean rdp_recv_pdu(rdpRdp* rdp, STREAM* s)
{
if (tpkt_verify_header(s))
- return rdp_read_tpkt_pdu(rdp, s);
+ return rdp_recv_tpkt_pdu(rdp, s);
else
- return rdp_read_fastpath_pdu(rdp, s);
+ return rdp_recv_fastpath_pdu(rdp, s);
}
/**
s = transport_recv_stream_init(rdp->transport, 4096);
transport_read(rdp->transport, s);
- rdp_read_pdu(rdp, s);
+ rdp_recv_pdu(rdp, s);
}
static int rdp_recv_callback(rdpTransport* transport, STREAM* s, void* extra)
break;
case CONNECTION_STATE_ACTIVE:
- if (!rdp_read_pdu(rdp, s))
+ if (!rdp_recv_pdu(rdp, s))
return -1;
break;
* @param sec_flags security flags
*/
-void rdp_read_redirection_packet(rdpRdp* rdp, STREAM* s)
+boolean rdp_recv_redirection_packet(rdpRdp* rdp, STREAM* s)
{
printf("Redirection Packet\n");
+
+ return True;
}
-void rdp_read_enhanced_security_redirection_packet(rdpRdp* rdp, STREAM* s)
+boolean rdp_recv_enhanced_security_redirection_packet(rdpRdp* rdp, STREAM* s)
{
printf("Enhanced Security Redirection Packet\n");
+
+ return True;
}
#include <freerdp/freerdp.h>
#include <freerdp/utils/stream.h>
-void rdp_read_redirection_packet(rdpRdp* rdp, STREAM* s);
-void rdp_read_enhanced_security_redirection_packet(rdpRdp* rdp, STREAM* s);
+boolean rdp_recv_redirection_packet(rdpRdp* rdp, STREAM* s);
+boolean rdp_recv_enhanced_security_redirection_packet(rdpRdp* rdp, STREAM* s);
#endif /* __REDIRECTION_H */