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 }