File indexing completed on 2024-06-23 05:24:06
0001 // SPDX-FileCopyrightText: 2023 Arjen Hiemstra <ahiemstra@heimr.nl> 0002 // 0003 // SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0004 0005 #include "PeerContext_p.h" 0006 0007 #include <freerdp/peer.h> 0008 0009 #include "krdp_logging.h" 0010 0011 namespace KRdp 0012 { 0013 0014 PeerContext *contextForPeer(freerdp_peer *peer) 0015 { 0016 return reinterpret_cast<PeerContext *>(peer->context); 0017 } 0018 0019 } 0020 0021 BOOL newPeerContext(freerdp_peer *peer, rdpContext *context) 0022 { 0023 auto peerContext = reinterpret_cast<KRdp::PeerContext *>(context); 0024 0025 // Initialize the virtual channel manager, so that we can create new 0026 // dynamic channels. 0027 peerContext->virtualChannelManager = WTSOpenServerA((LPSTR)peer->context); 0028 if (!peerContext->virtualChannelManager || peerContext->virtualChannelManager == INVALID_HANDLE_VALUE) { 0029 qCWarning(KRDP) << "Failed creating virtual channel manager"; 0030 freerdp_peer_context_free(peer); 0031 return FALSE; 0032 } 0033 0034 return TRUE; 0035 } 0036 0037 void freePeerContext(freerdp_peer *peer, rdpContext *context) 0038 { 0039 auto peerContext = reinterpret_cast<KRdp::PeerContext *>(context); 0040 0041 if (!peerContext) { 0042 return; 0043 } 0044 0045 WTSCloseServer(peerContext->virtualChannelManager); 0046 peerContext->virtualChannelManager = nullptr; 0047 }