1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-23 19:53:47 +00:00

Enable Jumbo Support on Windows KVM

This commit is contained in:
Bryan Roe
2019-02-04 17:10:37 -08:00
parent 26a3ccefd0
commit 2096619903
3 changed files with 39 additions and 25 deletions

View File

@@ -239,18 +239,19 @@ int calc_opt_compr_send(int x, int y, int captureWidth, int captureHeight, void*
// Check if the tile is too large to send // Check if the tile is too large to send
DWORD jpegSize = (DWORD)Size.QuadPart; DWORD jpegSize = (DWORD)Size.QuadPart;
if (jpegSize > 65500)
{ //if (jpegSize > 65500)
KVMDEBUG("jpegSize > 65500", jpegSize); //{
delete DIBImage; // KVMDEBUG("jpegSize > 65500", jpegSize);
*bufferSize = 0; // delete DIBImage;
// ILibCriticalLog(NULL, __FILE__, __LINE__, 252, GetLastError()); // *bufferSize = 0;
return jpegSize; // // ILibCriticalLog(NULL, __FILE__, __LINE__, 252, GetLastError());
} // return jpegSize;
//}
// Save the image stream in memory. // Save the image stream in memory.
char* Tile = (char*)ILibMemory_Allocate(jpegSize + 8, 0, NULL, NULL); char* Tile = (char*)ILibMemory_Allocate(jpegSize > 65500 ? (jpegSize + 16):(jpegSize + 8), 0, NULL, NULL);
if (jpegStream->Read(Tile + 8, jpegSize, NULL) != S_OK) if (jpegStream->Read(Tile + (jpegSize > 65500 ? 16 : 8), jpegSize, NULL) != S_OK)
{ {
KVMDEBUG("jpegStream->Read() failed", 0); KVMDEBUG("jpegStream->Read() failed", 0);
delete DIBImage; delete DIBImage;
@@ -267,13 +268,26 @@ int calc_opt_compr_send(int x, int y, int captureWidth, int captureHeight, void*
jpegStream->Release(); jpegStream->Release();
*buffer = (unsigned char*)Tile; *buffer = (unsigned char*)Tile;
*bufferSize = jpegSize + 8; *bufferSize = jpegSize + (jpegSize > 65500 ? 16 : 8);
// Place the header // Place the header
((unsigned short*)*buffer)[0] = (unsigned short)htons((unsigned short)MNG_KVM_PICTURE); // Write the type if (jpegSize > 65500)
((unsigned short*)*buffer)[1] = (unsigned short)htons((unsigned short)*bufferSize); // Write the size {
((unsigned short*)*buffer)[2] = (unsigned short)htons((unsigned short)x); // X position ((unsigned short*)*buffer)[0] = (unsigned short)htons((unsigned short)MNG_JUMBO); // Write the type
((unsigned short*)*buffer)[3] = (unsigned short)htons((unsigned short)y); // Y position ((unsigned short*)*buffer)[1] = (unsigned short)htons((unsigned short)8); // Write the size
((unsigned int*)*buffer)[1] = (unsigned int)htonl(jpegSize + 8); // Size of the Next Packet
((unsigned short*)*buffer)[4] = (unsigned short)htons((unsigned short)MNG_KVM_PICTURE); // Write the type
((unsigned short*)*buffer)[5] = 0; // RESERVED
((unsigned short*)*buffer)[6] = (unsigned short)htons((unsigned short)x); // X position
((unsigned short*)*buffer)[7] = (unsigned short)htons((unsigned short)y); // Y position
}
else
{
((unsigned short*)*buffer)[0] = (unsigned short)htons((unsigned short)MNG_KVM_PICTURE); // Write the type
((unsigned short*)*buffer)[1] = (unsigned short)htons((unsigned short)*bufferSize); // Write the size
((unsigned short*)*buffer)[2] = (unsigned short)htons((unsigned short)x); // X position
((unsigned short*)*buffer)[3] = (unsigned short)htons((unsigned short)y); // Y position
}
return 0; return 0;
} }
@@ -324,11 +338,11 @@ int get_tile_at(int x, int y, void** buffer, long long *bufferSize, void *deskto
{ {
tileInfo[row][rightcol].crc = CRC; tileInfo[row][rightcol].crc = CRC;
// Here we check whether the size of the coalesced bitmap is greater than the threshold (65500) // Here we check whether the size of the coalesced bitmap is greater than the threshold (65500)
if ((captureWidth + TILE_WIDTH) * TILE_HEIGHT * PIXEL_SIZE / COMPRESSION_RATIO > 65500) { //if ((captureWidth + TILE_WIDTH) * TILE_HEIGHT * PIXEL_SIZE / COMPRESSION_RATIO > 65500) {
tileInfo[row][rightcol].flags = (char)TILE_MARKED_NOT_SENT; // tileInfo[row][rightcol].flags = (char)TILE_MARKED_NOT_SENT;
--rightcol; // --rightcol;
break; // break;
} //}
tileInfo[row][rightcol].flags = (char)TILE_MARKED_NOT_SENT; tileInfo[row][rightcol].flags = (char)TILE_MARKED_NOT_SENT;
captureWidth += TILE_WIDTH; captureWidth += TILE_WIDTH;
@@ -344,7 +358,8 @@ int get_tile_at(int x, int y, void** buffer, long long *bufferSize, void *deskto
// int TOLERANCE = (rightcol - col) / 4; // int TOLERANCE = (rightcol - col) / 4;
// Now go to the bottom tiles, check if they have changed and record them // Now go to the bottom tiles, check if they have changed and record them
while ((botrow + 1 < TILE_HEIGHT_COUNT) && ((captureHeight + TILE_HEIGHT) * captureWidth * PIXEL_SIZE / COMPRESSION_RATIO <= 65500)) //while ((botrow + 1 < TILE_HEIGHT_COUNT) && ((captureHeight + TILE_HEIGHT) * captureWidth * PIXEL_SIZE / COMPRESSION_RATIO <= 65500))
while ((botrow + 1 < TILE_HEIGHT_COUNT))
{ {
botrow++; botrow++;
r_y = botrow * TILE_HEIGHT; r_y = botrow * TILE_HEIGHT;
@@ -426,8 +441,8 @@ int get_tile_at(int x, int y, void** buffer, long long *bufferSize, void *deskto
if (firstTime) if (firstTime)
{ {
// Re-adjust the compression ratio. // Re-adjust the compression ratio.
COMPRESSION_RATIO = (int)(((double)COMPRESSION_RATIO/(double)retval) * 60000);//Magic number: 60000 ~= 65500 //COMPRESSION_RATIO = (int)(((double)COMPRESSION_RATIO/(double)retval) * 60000);//Magic number: 60000 ~= 65500
if (COMPRESSION_RATIO <= 1) COMPRESSION_RATIO = 2; //if (COMPRESSION_RATIO <= 1) COMPRESSION_RATIO = 2;
firstTime = 0; firstTime = 0;
} }

View File

@@ -3388,8 +3388,6 @@ void MeshAgent_AgentMode_Core_ServerTimeout(duk_context *ctx, void ** args, int
int MeshAgent_AgentMode(MeshAgentHostContainer *agentHost, int paramLen, char **param, int parseCommands) int MeshAgent_AgentMode(MeshAgentHostContainer *agentHost, int paramLen, char **param, int parseCommands)
{ {
int resetNodeId = 0; int resetNodeId = 0;
//int x;
//size_t tmpLen;
#ifdef WIN32 #ifdef WIN32
int pLen; int pLen;
#endif #endif

View File

@@ -42,6 +42,7 @@ typedef enum RemoteManagementCommands
MNG_KVM_CONNECTCOUNT = 16, MNG_KVM_CONNECTCOUNT = 16,
MNG_KVM_MESSAGE = 17, MNG_KVM_MESSAGE = 17,
MNG_ECHO = 21, MNG_ECHO = 21,
MNG_JUMBO = 27,
MNG_GETDIR = 50, MNG_GETDIR = 50,
MNG_FILEMOVE = 51, MNG_FILEMOVE = 51,
MNG_FILEDELETE = 52, MNG_FILEDELETE = 52,