Thank you for response. It is sort of proxy with some processing and modification. For clipboard it is easy to connect PC1 and PC2 by jsut calling matching methods of client adn server:
For example for clipboard client I can do: // Handlers m_clientCtx->MonitorReady = MonitorReady; m_clientCtx->ServerCapabilities = ServerCapabilities; m_clientCtx->ServerFormatList = ServerFormatList; m_clientCtx->ServerFormatListResponse = ServerFormatListResponse; m_clientCtx->ServerFormatDataRequest = ServerFormatDataRequest; m_clientCtx->ServerFormatDataResponse = ServerFormatDataResponse; m_clientCtx->ServerFileContentsRequest = ServerFileContentsRequest; m_clientCtx->ServerFileContentsResponse = ServerFileContentsResponse; and clipboard server m_serverCtx->ClientCapabilities = ClientCapabilities; m_serverCtx->TempDirectory = TempDirectory; m_serverCtx->ClientFormatList = ClientFormatList; // CHECK EXAMPLE DOWN m_serverCtx->ClientFormatListResponse = ClientFormatListResponse; m_serverCtx->ClientLockClipboardData = ClientLockClipboardData; m_serverCtx->ClientUnlockClipboardData = ClientUnlockClipboardData; m_serverCtx->ClientFormatDataRequest = ClientFormatDataRequest; m_serverCtx->ClientFormatDataResponse = ClientFormatDataResponse; m_serverCtx->ClientFileContentsRequest = ClientFileContentsRequest; m_serverCtx->ClientFileContentsResponse = ClientFileContentsResponse; And just do something like this from eervers handler: UINT ClientFormatList(CliprdrServerContext *context, CLIPRDR_FORMAT_LIST* formatList) { return m_clientCtx->ClientFormatList(m_clientCtx, formatList); } And that works. But for drives, there is server context like above: m_serverCtx->OnDriveCreate = OnDriveCreate; m_serverCtx->OnDriveDelete = OnDriveDelete; m_serverCtx->OnDriveCreateDirectoryComplete = OnDriveCreateDirectoryComplete; m_serverCtx->OnDriveDeleteDirectoryComplete = OnDriveDeleteDirectoryComplete; m_serverCtx->OnDriveQueryDirectoryComplete = OnDriveQueryDirectoryComplete; m_serverCtx->OnDriveOpenFileComplete = OnDriveOpenFileComplete; m_serverCtx->OnDriveReadFileComplete = OnDriveReadFileComplete; m_serverCtx->OnDriveWriteFileComplete = OnDriveWriteFileComplete; m_serverCtx->OnDriveCloseFileComplete = OnDriveCloseFileComplete; m_serverCtx->OnDriveDeleteFileComplete = OnDriveDeleteFileComplete; m_serverCtx->OnDriveRenameFileComplete = OnDriveRenameFileComplete; But no adequate client context so I can match calls. Best I can do is to: drive = (RDPDR_DRIVE*) calloc(1, sizeof(RDPDR_DRIVE)); drive->Type = RDPDR_DTYP_FILESYSTEM; drive->Name = _strdup("X:"); drive->Path = _strdup("C:\somefolder"); So that make drive X: on P3 to point on folder on P2 and not on P1 So i wonder if there is some solution to directly exchange messages like with clipboard? Maybe on lover level somehow? As this might be necessary for other devices also. Any thoughts? Thanks for your time. Appreciated! On Wed, Jun 21, 2017 at 10:44 PM, Alexei Lozovsky <a.lozov...@gmail.com> wrote: > On 21 June 2017 at 20:58, Predrag Manojlović <pedja...@gmail.com> wrote: > >> I was making application to work in following way: >> PC1 (WIndows RDP client) <-----> PC2 (My application redirecting data) >> <-----> PC3 (WIndows RDP server) > > Um... I don't quite understand from this diagram how your application is > integrated into the RDP communication. Is PC2 running some kind of a proxy > RDP server, or you just MitM the channel, intercept all communications > between PC1 and PC3, and process the decoded PDUs? Or it is something else? > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ FreeRDP-devel mailing list FreeRDP-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freerdp-devel