|
|
|
@ -284,73 +284,6 @@ void SConnection::setEncodings(int nEncodings, const rdr::S32* encodings)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SMsgHandler::setEncodings(nEncodings, encodings);
|
|
|
|
|
|
|
|
|
|
if (cp.supportsExtendedClipboard) {
|
|
|
|
|
rdr::U32 sizes[] = { 0 };
|
|
|
|
|
writer()->writeClipboardCaps(rfb::clipboardUTF8 |
|
|
|
|
|
rfb::clipboardRequest |
|
|
|
|
|
rfb::clipboardPeek |
|
|
|
|
|
rfb::clipboardNotify |
|
|
|
|
|
rfb::clipboardProvide,
|
|
|
|
|
sizes);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::clientCutText(const char* str, int len)
|
|
|
|
|
{
|
|
|
|
|
hasLocalClipboard = false;
|
|
|
|
|
|
|
|
|
|
strFree(clientClipboard);
|
|
|
|
|
clientClipboard = NULL;
|
|
|
|
|
|
|
|
|
|
clientClipboard = latin1ToUTF8(str);
|
|
|
|
|
|
|
|
|
|
handleClipboardAnnounce(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::handleClipboardRequest(rdr::U32 flags)
|
|
|
|
|
{
|
|
|
|
|
if (!(flags & rfb::clipboardUTF8))
|
|
|
|
|
return;
|
|
|
|
|
if (!hasLocalClipboard)
|
|
|
|
|
return;
|
|
|
|
|
handleClipboardRequest();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::handleClipboardPeek(rdr::U32 flags)
|
|
|
|
|
{
|
|
|
|
|
if (!hasLocalClipboard)
|
|
|
|
|
return;
|
|
|
|
|
if (cp.clipboardFlags() & rfb::clipboardNotify)
|
|
|
|
|
writer()->writeClipboardNotify(rfb::clipboardUTF8);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::handleClipboardNotify(rdr::U32 flags)
|
|
|
|
|
{
|
|
|
|
|
strFree(clientClipboard);
|
|
|
|
|
clientClipboard = NULL;
|
|
|
|
|
|
|
|
|
|
if (flags & rfb::clipboardUTF8) {
|
|
|
|
|
handleClipboardAnnounce(true);
|
|
|
|
|
hasLocalClipboard = false;
|
|
|
|
|
} else {
|
|
|
|
|
handleClipboardAnnounce(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::handleClipboardProvide(rdr::U32 flags,
|
|
|
|
|
const size_t* lengths,
|
|
|
|
|
const rdr::U8* const* data)
|
|
|
|
|
{
|
|
|
|
|
if (!(flags & rfb::clipboardUTF8))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
strFree(clientClipboard);
|
|
|
|
|
clientClipboard = NULL;
|
|
|
|
|
|
|
|
|
|
clientClipboard = convertLF((const char*)data[0], lengths[0]);
|
|
|
|
|
|
|
|
|
|
handleClipboardData(clientClipboard, strlen(clientClipboard));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::clearBinaryClipboard()
|
|
|
|
@ -464,56 +397,13 @@ void SConnection::enableContinuousUpdates(bool enable,
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::handleClipboardRequest()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::handleClipboardAnnounce(bool available)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::handleClipboardData(const char* data, int len)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::requestClipboard()
|
|
|
|
|
{
|
|
|
|
|
if (clientClipboard != NULL) {
|
|
|
|
|
handleClipboardData(clientClipboard, strlen(clientClipboard));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (cp.supportsExtendedClipboard &&
|
|
|
|
|
(cp.clipboardFlags() & rfb::clipboardRequest))
|
|
|
|
|
writer()->writeClipboardRequest(rfb::clipboardUTF8);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::announceClipboard(bool available)
|
|
|
|
|
{
|
|
|
|
|
hasLocalClipboard = available;
|
|
|
|
|
|
|
|
|
|
if (cp.supportsExtendedClipboard &&
|
|
|
|
|
(cp.clipboardFlags() & rfb::clipboardNotify))
|
|
|
|
|
writer()->writeClipboardNotify(available ? rfb::clipboardUTF8 : 0);
|
|
|
|
|
else {
|
|
|
|
|
if (available)
|
|
|
|
|
handleClipboardRequest();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::sendClipboardData(const char* data, int len)
|
|
|
|
|
{
|
|
|
|
|
if (cp.supportsExtendedClipboard &&
|
|
|
|
|
(cp.clipboardFlags() & rfb::clipboardProvide)) {
|
|
|
|
|
CharArray filtered(convertCRLF(data));
|
|
|
|
|
size_t sizes[1] = { strlen(filtered.buf) + 1 };
|
|
|
|
|
const rdr::U8* data[1] = { (const rdr::U8*)filtered.buf };
|
|
|
|
|
writer()->writeClipboardProvide(rfb::clipboardUTF8, sizes, data);
|
|
|
|
|
} else {
|
|
|
|
|
CharArray latin1(utf8ToLatin1(data));
|
|
|
|
|
|
|
|
|
|
writer()->writeServerCutText(latin1.buf, strlen(latin1.buf));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConnection::writeFakeColourMap(void)
|
|
|
|
|