static int remdesk_recv_ctl_pdu(remdeskPlugin* remdesk, wStream* s, REMDESK_CHANNEL_HEADER* header) { int status = 1; UINT32 msgType = 0; UINT32 result = 0; if (Stream_GetRemainingLength(s) < 4) return -1; Stream_Read_UINT32(s, msgType); /* msgType (4 bytes) */ //WLog_DBG(TAG, "msgType: %d", msgType); switch (msgType) { case REMDESK_CTL_REMOTE_CONTROL_DESKTOP: break; case REMDESK_CTL_RESULT: status = remdesk_recv_ctl_result_pdu(remdesk, s, header, &result); break; case REMDESK_CTL_AUTHENTICATE: break; case REMDESK_CTL_SERVER_ANNOUNCE: status = remdesk_recv_ctl_server_announce_pdu(remdesk, s, header); break; case REMDESK_CTL_DISCONNECT: break; case REMDESK_CTL_VERSIONINFO: status = remdesk_recv_ctl_version_info_pdu(remdesk, s, header); if (remdesk->Version == 1) { if (status >= 0) status = remdesk_send_ctl_version_info_pdu(remdesk); if (status >= 0) status = remdesk_send_ctl_authenticate_pdu(remdesk); if (status >= 0) status = remdesk_send_ctl_remote_control_desktop_pdu(remdesk); } else if (remdesk->Version == 2) { if (status >= 0) status = remdesk_send_ctl_expert_on_vista_pdu(remdesk); if (status >= 0) status = remdesk_send_ctl_verify_password_pdu(remdesk); } break; case REMDESK_CTL_ISCONNECTED: break; case REMDESK_CTL_VERIFY_PASSWORD: break; case REMDESK_CTL_EXPERT_ON_VISTA: break; case REMDESK_CTL_RANOVICE_NAME: break; case REMDESK_CTL_RAEXPERT_NAME: break; case REMDESK_CTL_TOKEN: break; default: WLog_ERR(TAG, "unknown msgType: %d", msgType); status = -1; break; } return status; }
/** * Function description * * @return 0 on success, otherwise a Win32 error code */ static UINT remdesk_recv_ctl_pdu(remdeskPlugin* remdesk, wStream* s, REMDESK_CHANNEL_HEADER* header) { UINT error = CHANNEL_RC_OK; UINT32 msgType = 0; UINT32 result = 0; if (Stream_GetRemainingLength(s) < 4) { WLog_ERR(TAG, "Not enought data!"); return ERROR_INVALID_DATA; } Stream_Read_UINT32(s, msgType); /* msgType (4 bytes) */ //WLog_DBG(TAG, "msgType: %d", msgType); switch (msgType) { case REMDESK_CTL_REMOTE_CONTROL_DESKTOP: break; case REMDESK_CTL_RESULT: if ((error = remdesk_recv_ctl_result_pdu(remdesk, s, header, &result))) WLog_ERR(TAG, "remdesk_recv_ctl_result_pdu failed with error %lu", error); break; case REMDESK_CTL_AUTHENTICATE: break; case REMDESK_CTL_SERVER_ANNOUNCE: if ((error = remdesk_recv_ctl_server_announce_pdu(remdesk, s, header))) WLog_ERR(TAG, "remdesk_recv_ctl_server_announce_pdu failed with error %lu", error); break; case REMDESK_CTL_DISCONNECT: break; case REMDESK_CTL_VERSIONINFO: if ((error = remdesk_recv_ctl_version_info_pdu(remdesk, s, header))) { WLog_ERR(TAG, "remdesk_recv_ctl_version_info_pdu failed with error %lu", error); break; } if (remdesk->Version == 1) { if ((error = remdesk_send_ctl_version_info_pdu(remdesk))) { WLog_ERR(TAG, "remdesk_send_ctl_version_info_pdu failed with error %lu", error); break; } if ((error = remdesk_send_ctl_authenticate_pdu(remdesk))) { WLog_ERR(TAG, "remdesk_send_ctl_authenticate_pdu failed with error %lu", error); break; } if ((error = remdesk_send_ctl_remote_control_desktop_pdu(remdesk))) { WLog_ERR(TAG, "remdesk_send_ctl_remote_control_desktop_pdu failed with error %lu", error); break; } } else if (remdesk->Version == 2) { if ((error = remdesk_send_ctl_expert_on_vista_pdu(remdesk))) { WLog_ERR(TAG, "remdesk_send_ctl_expert_on_vista_pdu failed with error %lu", error); break; } if ((error = remdesk_send_ctl_verify_password_pdu(remdesk))) { WLog_ERR(TAG, "remdesk_send_ctl_verify_password_pdu failed with error %lu", error); break; } } break; case REMDESK_CTL_ISCONNECTED: break; case REMDESK_CTL_VERIFY_PASSWORD: break; case REMDESK_CTL_EXPERT_ON_VISTA: break; case REMDESK_CTL_RANOVICE_NAME: break; case REMDESK_CTL_RAEXPERT_NAME: break; case REMDESK_CTL_TOKEN: break; default: WLog_ERR(TAG, "unknown msgType: %d", msgType); error = ERROR_INVALID_DATA; break; } return error; }