BOOL rdp_client_connect_mcs_attach_user_confirm(rdpRdp* rdp, wStream* s) { if (!mcs_recv_attach_user_confirm(rdp->mcs, s)) return FALSE; if (!mcs_send_channel_join_request(rdp->mcs, rdp->mcs->userId)) return FALSE; rdp_client_transition_to_state(rdp, CONNECTION_STATE_MCS_CHANNEL_JOIN); return TRUE; }
boolean rdp_client_connect_mcs_attach_user_confirm(rdpRdp* rdp, STREAM* s) { if (!mcs_recv_attach_user_confirm(rdp->mcs, s)) return false; if (!mcs_send_channel_join_request(rdp->mcs, rdp->mcs->user_id)) return false; rdp->state = CONNECTION_STATE_MCS_CHANNEL_JOIN; return true; }
BOOL rdp_client_connect_mcs_channel_join_confirm(rdpRdp* rdp, wStream* s) { UINT32 i; UINT16 channelId; BOOL allJoined = TRUE; rdpMcs* mcs = rdp->mcs; if (!mcs_recv_channel_join_confirm(mcs, s, &channelId)) return FALSE; if (!mcs->userChannelJoined) { if (channelId != mcs->userId) return FALSE; mcs->userChannelJoined = TRUE; if (!mcs_send_channel_join_request(mcs, MCS_GLOBAL_CHANNEL_ID)) return FALSE; } else if (!mcs->globalChannelJoined) { if (channelId != MCS_GLOBAL_CHANNEL_ID) return FALSE; mcs->globalChannelJoined = TRUE; if (mcs->messageChannelId != 0) { if (!mcs_send_channel_join_request(mcs, mcs->messageChannelId)) return FALSE; allJoined = FALSE; } else { if (mcs->channelCount > 0) { if (!mcs_send_channel_join_request(mcs, mcs->channels[0].ChannelId)) return FALSE; allJoined = FALSE; } } } else if ((mcs->messageChannelId != 0) && !mcs->messageChannelJoined) { if (channelId != mcs->messageChannelId) return FALSE; mcs->messageChannelJoined = TRUE; if (mcs->channelCount > 0) { if (!mcs_send_channel_join_request(mcs, mcs->channels[0].ChannelId)) return FALSE; allJoined = FALSE; } } else { for (i = 0; i < mcs->channelCount; i++) { if (mcs->channels[i].joined) continue; if (mcs->channels[i].ChannelId != channelId) return FALSE; mcs->channels[i].joined = TRUE; break; } if (i + 1 < mcs->channelCount) { if (!mcs_send_channel_join_request(mcs, mcs->channels[i + 1].ChannelId)) return FALSE; allJoined = FALSE; } } if (mcs->userChannelJoined && mcs->globalChannelJoined && allJoined) { if (!rdp_client_establish_keys(rdp)) return FALSE; if (!rdp_send_client_info(rdp)) return FALSE; rdp_client_transition_to_state(rdp, CONNECTION_STATE_LICENSING); } return TRUE; }
boolean rdp_client_connect_mcs_channel_join_confirm(rdpRdp* rdp, STREAM* s) { int i; uint16 channel_id; boolean all_joined = true; if (!mcs_recv_channel_join_confirm(rdp->mcs, s, &channel_id)) return false; if (!rdp->mcs->user_channel_joined) { if (channel_id != rdp->mcs->user_id) return false; rdp->mcs->user_channel_joined = true; if (!mcs_send_channel_join_request(rdp->mcs, MCS_GLOBAL_CHANNEL_ID)) return false; } else if (!rdp->mcs->global_channel_joined) { if (channel_id != MCS_GLOBAL_CHANNEL_ID) return false; rdp->mcs->global_channel_joined = true; if (rdp->settings->num_channels > 0) { if (!mcs_send_channel_join_request(rdp->mcs, rdp->settings->channels[0].channel_id)) return false; all_joined = false; } } else { for (i = 0; i < rdp->settings->num_channels; i++) { if (rdp->settings->channels[i].joined) continue; if (rdp->settings->channels[i].channel_id != channel_id) return false; rdp->settings->channels[i].joined = true; break; } if (i + 1 < rdp->settings->num_channels) { if (!mcs_send_channel_join_request(rdp->mcs, rdp->settings->channels[i + 1].channel_id)) return false; all_joined = false; } } if (rdp->mcs->user_channel_joined && rdp->mcs->global_channel_joined && all_joined) { if (!rdp_client_establish_keys(rdp)) return false; if (!rdp_send_client_info(rdp)) return false; rdp->state = CONNECTION_STATE_LICENSE; } return true; }
BOOL rdp_client_connect_mcs_channel_join_confirm(rdpRdp* rdp, wStream* s) { int i; UINT16 channel_id; BOOL all_joined = TRUE; if (!mcs_recv_channel_join_confirm(rdp->mcs, s, &channel_id)) return FALSE; if (!rdp->mcs->user_channel_joined) { if (channel_id != rdp->mcs->user_id) return FALSE; rdp->mcs->user_channel_joined = TRUE; if (!mcs_send_channel_join_request(rdp->mcs, MCS_GLOBAL_CHANNEL_ID)) return FALSE; } else if (!rdp->mcs->global_channel_joined) { if (channel_id != MCS_GLOBAL_CHANNEL_ID) return FALSE; rdp->mcs->global_channel_joined = TRUE; if (rdp->settings->ChannelCount > 0) { if (!mcs_send_channel_join_request(rdp->mcs, rdp->settings->ChannelDefArray[0].ChannelId)) return FALSE; all_joined = FALSE; } } else { for (i = 0; i < rdp->settings->ChannelCount; i++) { if (rdp->settings->ChannelDefArray[i].joined) continue; if (rdp->settings->ChannelDefArray[i].ChannelId != channel_id) return FALSE; rdp->settings->ChannelDefArray[i].joined = TRUE; break; } if (i + 1 < rdp->settings->ChannelCount) { if (!mcs_send_channel_join_request(rdp->mcs, rdp->settings->ChannelDefArray[i + 1].ChannelId)) return FALSE; all_joined = FALSE; } } if (rdp->mcs->user_channel_joined && rdp->mcs->global_channel_joined && all_joined) { if (!rdp_client_establish_keys(rdp)) return FALSE; if (!rdp_send_client_info(rdp)) return FALSE; rdp->state = CONNECTION_STATE_LICENSE; } return TRUE; }