瀏覽代碼

Add support for VMware LED status

tags/v1.9.90
Pierre Ossman 5 年之前
父節點
當前提交
62b0786cc8
共有 6 個檔案被更改,包括 34 行新增5 行删除
  1. 3
    1
      common/rfb/CConnection.cxx
  2. 16
    0
      common/rfb/CMsgReader.cxx
  3. 1
    0
      common/rfb/CMsgReader.h
  4. 2
    0
      common/rfb/ClientParams.cxx
  5. 11
    4
      common/rfb/SMsgWriter.cxx
  6. 1
    0
      common/rfb/encodings.h

+ 3
- 1
common/rfb/CConnection.cxx 查看文件

encodings.push_back(pseudoEncodingDesktopSize); encodings.push_back(pseudoEncodingDesktopSize);
encodings.push_back(pseudoEncodingExtendedDesktopSize); encodings.push_back(pseudoEncodingExtendedDesktopSize);
} }
if (supportsLEDState)
if (supportsLEDState) {
encodings.push_back(pseudoEncodingLEDState); encodings.push_back(pseudoEncodingLEDState);
encodings.push_back(pseudoEncodingVMwareLEDState);
}


encodings.push_back(pseudoEncodingDesktopName); encodings.push_back(pseudoEncodingDesktopName);
encodings.push_back(pseudoEncodingLastRect); encodings.push_back(pseudoEncodingLastRect);

+ 16
- 0
common/rfb/CMsgReader.cxx 查看文件

break; break;
case pseudoEncodingLEDState: case pseudoEncodingLEDState:
readLEDState(); readLEDState();
break;
case pseudoEncodingVMwareLEDState:
readVMwareLEDState();
break;
case pseudoEncodingQEMUKeyEvent: case pseudoEncodingQEMUKeyEvent:
handler->supportsQEMUKeyEvent(); handler->supportsQEMUKeyEvent();
break; break;


handler->setLEDState(state); handler->setLEDState(state);
} }

void CMsgReader::readVMwareLEDState()
{
rdr::U32 state;

state = is->readU32();

// As luck has it, this extension uses the same bit definitions,
// so no conversion required

handler->setLEDState(state);
}

+ 1
- 0
common/rfb/CMsgReader.h 查看文件

void readSetDesktopName(int x, int y, int w, int h); void readSetDesktopName(int x, int y, int w, int h);
void readExtendedDesktopSize(int x, int y, int w, int h); void readExtendedDesktopSize(int x, int y, int w, int h);
void readLEDState(); void readLEDState();
void readVMwareLEDState();


CMsgHandler* handler; CMsgHandler* handler;
rdr::InStream* is; rdr::InStream* is;

+ 2
- 0
common/rfb/ClientParams.cxx 查看文件

{ {
if (supportsEncoding(pseudoEncodingLEDState)) if (supportsEncoding(pseudoEncodingLEDState))
return true; return true;
if (supportsEncoding(pseudoEncodingVMwareLEDState))
return true;
return false; return false;
} }



+ 11
- 4
common/rfb/SMsgWriter.cxx 查看文件



void SMsgWriter::writeLEDState() void SMsgWriter::writeLEDState()
{ {
if (!client->supportsEncoding(pseudoEncodingLEDState))
if (!client->supportsEncoding(pseudoEncodingLEDState) &&
!client->supportsEncoding(pseudoEncodingVMwareLEDState))
throw Exception("Client does not support LED state"); throw Exception("Client does not support LED state");
if (client->ledState() == ledUnknown) if (client->ledState() == ledUnknown)
throw Exception("Server has not specified LED state"); throw Exception("Server has not specified LED state");


void SMsgWriter::writeLEDStateRect(rdr::U8 state) void SMsgWriter::writeLEDStateRect(rdr::U8 state)
{ {
if (!client->supportsEncoding(pseudoEncodingLEDState))
if (!client->supportsEncoding(pseudoEncodingLEDState) &&
!client->supportsEncoding(pseudoEncodingVMwareLEDState))
throw Exception("Client does not support LED state updates"); throw Exception("Client does not support LED state updates");
if (client->ledState() == ledUnknown) if (client->ledState() == ledUnknown)
throw Exception("Server does not support LED state updates"); throw Exception("Server does not support LED state updates");
os->writeS16(0); os->writeS16(0);
os->writeU16(0); os->writeU16(0);
os->writeU16(0); os->writeU16(0);
os->writeU32(pseudoEncodingLEDState);
os->writeU8(state);
if (client->supportsEncoding(pseudoEncodingLEDState)) {
os->writeU32(pseudoEncodingLEDState);
os->writeU8(state);
} else {
os->writeU32(pseudoEncodingVMwareLEDState);
os->writeU32(state);
}
} }


void SMsgWriter::writeQEMUKeyEventRect() void SMsgWriter::writeQEMUKeyEventRect()

+ 1
- 0
common/rfb/encodings.h 查看文件



// VMware-specific // VMware-specific
const int pseudoEncodingVMwareCursor = 0x574d5664; const int pseudoEncodingVMwareCursor = 0x574d5664;
const int pseudoEncodingVMwareLEDState = 0x574d5668;


int encodingNum(const char* name); int encodingNum(const char* name);
const char* encodingName(int num); const char* encodingName(int num);

Loading…
取消
儲存