refactor(protocol): name key down constants by version
kMsgDKeyDown is now the current DKDL form and kMsgDKeyDown1_1 the DKDN form, matching the 1_0 suffix used for legacy forms. No wire change.
This commit is contained in:
parent
ac475f0b1b
commit
1e32335890
6 changed files with 53 additions and 45 deletions
|
|
@ -155,8 +155,8 @@ This table lists all protocol messages in alphabetical order. For a typical sequ
|
||||||
| [**DDRG**](@ref kMsgDDragInfo) | @ref kMsgDDragInfo | Data | Server→Client | Drag file info | [MsgSize](#constraint-protocol-max-message-length), [ListSize](#constraint-max-list) | 1.5+ |
|
| [**DDRG**](@ref kMsgDDragInfo) | @ref kMsgDDragInfo | Data | Server→Client | Drag file info | [MsgSize](#constraint-protocol-max-message-length), [ListSize](#constraint-max-list) | 1.5+ |
|
||||||
| [**DFTR**](@ref kMsgDFileTransfer) | @ref kMsgDFileTransfer | Data | Both | File transfer data | [MsgSize](#constraint-protocol-max-message-length) | 1.5+ |
|
| [**DFTR**](@ref kMsgDFileTransfer) | @ref kMsgDFileTransfer | Data | Both | File transfer data | [MsgSize](#constraint-protocol-max-message-length) | 1.5+ |
|
||||||
| [**DINF**](@ref kMsgDInfo) | @ref kMsgDInfo | Data | Client→Server | Screen information | [MsgSize](#constraint-protocol-max-message-length) | 1.0+ |
|
| [**DINF**](@ref kMsgDInfo) | @ref kMsgDInfo | Data | Client→Server | Screen information | [MsgSize](#constraint-protocol-max-message-length) | 1.0+ |
|
||||||
| [**DKDL**](@ref kMsgDKeyDownLang) | @ref kMsgDKeyDownLang | Data | Server→Client | Key down with language | [MsgSize](#constraint-protocol-max-message-length), [KeyMap](#constraint-keymap) | 1.8+ |
|
| [**DKDL**](@ref kMsgDKeyDown) | @ref kMsgDKeyDown | Data | Server→Client | Key down with language | [MsgSize](#constraint-protocol-max-message-length), [KeyMap](#constraint-keymap) | 1.8+ |
|
||||||
| [**DKDN**](@ref kMsgDKeyDown) | @ref kMsgDKeyDown | Data | Server→Client | Key down | [MsgSize](#constraint-protocol-max-message-length), [KeyMap](#constraint-keymap) | 1.1+ |
|
| [**DKDN**](@ref kMsgDKeyDown1_1) | @ref kMsgDKeyDown1_1 | Data | Server→Client | Key down | [MsgSize](#constraint-protocol-max-message-length), [KeyMap](#constraint-keymap) | 1.1+ |
|
||||||
| [**DKDN**](@ref kMsgDKeyDown1_0) | @ref kMsgDKeyDown1_0 | Data | Server→Client | Key down (legacy) | [MsgSize](#constraint-protocol-max-message-length), [KeyMap](#constraint-keymap) | 1.0 |
|
| [**DKDN**](@ref kMsgDKeyDown1_0) | @ref kMsgDKeyDown1_0 | Data | Server→Client | Key down (legacy) | [MsgSize](#constraint-protocol-max-message-length), [KeyMap](#constraint-keymap) | 1.0 |
|
||||||
| [**DKRP**](@ref kMsgDKeyRepeat) | @ref kMsgDKeyRepeat | Data | Server→Client | Key repeat | [MsgSize](#constraint-protocol-max-message-length), [KeyMap](#constraint-keymap) | 1.1+ |
|
| [**DKRP**](@ref kMsgDKeyRepeat) | @ref kMsgDKeyRepeat | Data | Server→Client | Key repeat | [MsgSize](#constraint-protocol-max-message-length), [KeyMap](#constraint-keymap) | 1.1+ |
|
||||||
| [**DKRP**](@ref kMsgDKeyRepeat1_0) | @ref kMsgDKeyRepeat1_0 | Data | Server→Client | Key repeat (legacy) | [MsgSize](#constraint-protocol-max-message-length), [KeyMap](#constraint-keymap) | 1.0 |
|
| [**DKRP**](@ref kMsgDKeyRepeat1_0) | @ref kMsgDKeyRepeat1_0 | Data | Server→Client | Key repeat (legacy) | [MsgSize](#constraint-protocol-max-message-length), [KeyMap](#constraint-keymap) | 1.0 |
|
||||||
|
|
@ -288,8 +288,8 @@ A modifier (modifier mask) represents the state of modifier keys (like Shift, Co
|
||||||
| **1.4** | Nov 2012 | Synergy | Encryption support (@ref SecureSocket) | 1.4+ |
|
| **1.4** | Nov 2012 | Synergy | Encryption support (@ref SecureSocket) | 1.4+ |
|
||||||
| **1.5** | Sep 2013 | Synergy | File transfer | 1.5+ |
|
| **1.5** | Sep 2013 | Synergy | File transfer | 1.5+ |
|
||||||
| **1.6** | Jan 2014 | Synergy | Clipboard streaming | 1.6+ |
|
| **1.6** | Jan 2014 | Synergy | Clipboard streaming | 1.6+ |
|
||||||
| **1.7** | Nov 2021 | Synergy | Secure input notifications | 1.7+ |
|
| **1.7** | Sep 2021 | Synergy | Secure input notifications | 1.7+ |
|
||||||
| **1.8** | Jun 2025 | Synergy | Language synchronization | 1.8+ |
|
| **1.8** | Nov 2021 | Synergy | Language synchronization | 1.8+ |
|
||||||
|
|
||||||
### Version Migration Guide
|
### Version Migration Guide
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -221,23 +221,23 @@ ServerProxy::ConnectionResult ServerProxy::parseMessage(const uint8_t *code)
|
||||||
mouseWheel();
|
mouseWheel();
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (memcmp(code, kMsgDKeyDown, 4) == 0) {
|
else if (memcmp(code, kMsgDKeyDown1_1, 4) == 0) {
|
||||||
uint16_t id = 0;
|
uint16_t id = 0;
|
||||||
uint16_t mask = 0;
|
uint16_t mask = 0;
|
||||||
uint16_t button = 0;
|
uint16_t button = 0;
|
||||||
ProtocolUtil::readf(m_stream, kMsgDKeyDown + 4, &id, &mask, &button);
|
ProtocolUtil::readf(m_stream, kMsgDKeyDown1_1 + 4, &id, &mask, &button);
|
||||||
LOG_VERBOSE("recv key down id=0x%08x, mask=0x%04x, button=0x%04x", id, mask, button);
|
LOG_VERBOSE("recv key down id=0x%08x, mask=0x%04x, button=0x%04x", id, mask, button);
|
||||||
|
|
||||||
keyDown(id, mask, button, "");
|
keyDown(id, mask, button, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (memcmp(code, kMsgDKeyDownLang, 4) == 0) {
|
else if (memcmp(code, kMsgDKeyDown, 4) == 0) {
|
||||||
std::string lang;
|
std::string lang;
|
||||||
uint16_t id = 0;
|
uint16_t id = 0;
|
||||||
uint16_t mask = 0;
|
uint16_t mask = 0;
|
||||||
uint16_t button = 0;
|
uint16_t button = 0;
|
||||||
|
|
||||||
ProtocolUtil::readf(m_stream, kMsgDKeyDownLang + 4, &id, &mask, &button, &lang);
|
ProtocolUtil::readf(m_stream, kMsgDKeyDown + 4, &id, &mask, &button, &lang);
|
||||||
LOG_VERBOSE("recv key down id=0x%08x, mask=0x%04x, button=0x%04x, lang=\"%s\"", id, mask, button, lang.c_str());
|
LOG_VERBOSE("recv key down id=0x%08x, mask=0x%04x, button=0x%04x, lang=\"%s\"", id, mask, button, lang.c_str());
|
||||||
|
|
||||||
keyDown(id, mask, button, lang);
|
keyDown(id, mask, button, lang);
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ const char *const kMsgHello = "%7s%2i%2i";
|
||||||
const char *const kMsgHelloArgs = "%2i%2i";
|
const char *const kMsgHelloArgs = "%2i%2i";
|
||||||
const char *const kMsgHelloBack = "%7s%2i%2i%s";
|
const char *const kMsgHelloBack = "%7s%2i%2i%s";
|
||||||
const char *const kMsgHelloBackArgs = "%2i%2i%s";
|
const char *const kMsgHelloBackArgs = "%2i%2i%s";
|
||||||
|
|
||||||
const char *const kMsgCNoop = "CNOP";
|
const char *const kMsgCNoop = "CNOP";
|
||||||
const char *const kMsgCClose = "CBYE";
|
const char *const kMsgCClose = "CBYE";
|
||||||
const char *const kMsgCEnter = "CINN%2i%2i%4i%2i";
|
const char *const kMsgCEnter = "CINN%2i%2i%4i%2i";
|
||||||
|
|
@ -22,9 +23,13 @@ const char *const kMsgCScreenSaver = "CSEC%1i";
|
||||||
const char *const kMsgCResetOptions = "CROP";
|
const char *const kMsgCResetOptions = "CROP";
|
||||||
const char *const kMsgCInfoAck = "CIAK";
|
const char *const kMsgCInfoAck = "CIAK";
|
||||||
const char *const kMsgCKeepAlive = "CALV";
|
const char *const kMsgCKeepAlive = "CALV";
|
||||||
const char *const kMsgDKeyDownLang = "DKDL%2i%2i%2i%s";
|
|
||||||
const char *const kMsgDKeyDown = "DKDN%2i%2i%2i";
|
// This is weird, it goes from DKDN to DKDL. Someone misunderstood the pattern (keep the
|
||||||
|
// code, pick the form by negotiated version). Do not copy this.
|
||||||
|
const char *const kMsgDKeyDown = "DKDL%2i%2i%2i%s";
|
||||||
|
const char *const kMsgDKeyDown1_1 = "DKDN%2i%2i%2i";
|
||||||
const char *const kMsgDKeyDown1_0 = "DKDN%2i%2i";
|
const char *const kMsgDKeyDown1_0 = "DKDN%2i%2i";
|
||||||
|
|
||||||
const char *const kMsgDKeyRepeat = "DKRP%2i%2i%2i%2i%s";
|
const char *const kMsgDKeyRepeat = "DKRP%2i%2i%2i%2i%s";
|
||||||
const char *const kMsgDKeyRepeat1_0 = "DKRP%2i%2i%2i";
|
const char *const kMsgDKeyRepeat1_0 = "DKRP%2i%2i%2i";
|
||||||
const char *const kMsgDKeyUp = "DKUP%2i%2i%2i";
|
const char *const kMsgDKeyUp = "DKUP%2i%2i%2i";
|
||||||
|
|
|
||||||
|
|
@ -504,7 +504,7 @@ extern const char *const kMsgCKeepAlive;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Key press with language code (v1.8+)
|
* @brief Key press event
|
||||||
*
|
*
|
||||||
* **Message Code**: `"DKDL"`
|
* **Message Code**: `"DKDL"`
|
||||||
* **Direction**: Primary → Secondary
|
* **Direction**: Primary → Secondary
|
||||||
|
|
@ -524,34 +524,6 @@ extern const char *const kMsgCKeepAlive;
|
||||||
* "DKDL\x00\x61\x00\x00\x00\x1E\x00\x00\x00\x02en"
|
* "DKDL\x00\x61\x00\x00\x00\x1E\x00\x00\x00\x02en"
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* Enhanced version of kMsgDKeyDown that includes language information
|
|
||||||
* to help clients handle unknown language characters correctly.
|
|
||||||
*
|
|
||||||
* @see kMsgDKeyDown
|
|
||||||
* @since Protocol version 1.8
|
|
||||||
*/
|
|
||||||
extern const char *const kMsgDKeyDownLang;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Key press event
|
|
||||||
*
|
|
||||||
* **Message Code**: `"DKDN"`
|
|
||||||
* **Direction**: Primary → Secondary
|
|
||||||
* **Format**: `"DKDN%2i%2i%2i"`
|
|
||||||
* **Parameters**:
|
|
||||||
* - `$1`: KeyID (2 bytes) - Virtual key identifier, often called a "keysym" on Linux/X11. This is platform-dependent
|
|
||||||
* and corresponds to values like `XK_a` on X11/Linux, `'a'` on macOS, and `'A'` on Windows.
|
|
||||||
* - `$2`: KeyModifierMask (2 bytes) - Active modifier keys
|
|
||||||
* - `$3`: KeyButton (2 bytes) - Physical key code, often called a "keycode" or "scancode". This is the raw,
|
|
||||||
* platform-dependent scan code of the key pressed.
|
|
||||||
*
|
|
||||||
* **Example**:
|
|
||||||
*
|
|
||||||
* 'a' key (KeyID 0x61), no modifiers, physical key (KeyButton 0x1E)
|
|
||||||
* ```
|
|
||||||
* "DKDN\x00\x61\x00\x00\x00\x1E"
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* **Key Mapping Strategy**:
|
* **Key Mapping Strategy**:
|
||||||
* The KeyButton parameter is crucial for proper key release handling.
|
* The KeyButton parameter is crucial for proper key release handling.
|
||||||
* The secondary screen should:
|
* The secondary screen should:
|
||||||
|
|
@ -564,11 +536,42 @@ extern const char *const kMsgDKeyDownLang;
|
||||||
* - Different keyboard layouts may produce different KeyIDs
|
* - Different keyboard layouts may produce different KeyIDs
|
||||||
* - Modifier keys released before the main key can alter KeyID
|
* - Modifier keys released before the main key can alter KeyID
|
||||||
*
|
*
|
||||||
* @see kMsgDKeyUp, kMsgDKeyDownLang
|
* The language code helps clients handle characters from a keyboard layout
|
||||||
* @since Protocol version 1.1
|
* they do not have active. Only sent to clients that replied 1.8 in their hello.
|
||||||
|
*
|
||||||
|
* @see kMsgDKeyUp, kMsgDKeyDown1_1
|
||||||
|
* @since Protocol version 1.8
|
||||||
*/
|
*/
|
||||||
extern const char *const kMsgDKeyDown;
|
extern const char *const kMsgDKeyDown;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Key press event (v1.1 to v1.7)
|
||||||
|
*
|
||||||
|
* **Message Code**: `"DKDN"`
|
||||||
|
* **Direction**: Primary → Secondary
|
||||||
|
* **Format**: `"DKDN%2i%2i%2i"`
|
||||||
|
* **Parameters**:
|
||||||
|
* - `$1`: KeyID (2 bytes) - Virtual key identifier
|
||||||
|
* - `$2`: KeyModifierMask (2 bytes) - Active modifier keys
|
||||||
|
* - `$3`: KeyButton (2 bytes) - Physical key code
|
||||||
|
*
|
||||||
|
* **Example**:
|
||||||
|
*
|
||||||
|
* 'a' key (KeyID 0x61), no modifiers, physical key (KeyButton 0x1E)
|
||||||
|
* ```
|
||||||
|
* "DKDN\x00\x61\x00\x00\x00\x1E"
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Version without the language code. Used when communicating with
|
||||||
|
* protocol version 1.1 through 1.7 clients (Synergy 1.4 to 1.14.1,
|
||||||
|
* Barrier, Input Leap). The key mapping strategy is the same as for
|
||||||
|
* kMsgDKeyDown.
|
||||||
|
*
|
||||||
|
* @see kMsgDKeyDown
|
||||||
|
* @since Protocol version 1.1
|
||||||
|
*/
|
||||||
|
extern const char *const kMsgDKeyDown1_1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Key press event (legacy v1.0)
|
* @brief Key press event (legacy v1.0)
|
||||||
*
|
*
|
||||||
|
|
@ -582,8 +585,8 @@ extern const char *const kMsgDKeyDown;
|
||||||
* Legacy version without KeyButton parameter. Used only when
|
* Legacy version without KeyButton parameter. Used only when
|
||||||
* communicating with protocol version 1.0 clients.
|
* communicating with protocol version 1.0 clients.
|
||||||
*
|
*
|
||||||
* @deprecated Use kMsgDKeyDown for protocol version 1.1+
|
* @deprecated Use kMsgDKeyDown1_1 for protocol version 1.1+
|
||||||
* @see kMsgDKeyDown
|
* @see kMsgDKeyDown1_1
|
||||||
* @since Protocol version 1.0
|
* @since Protocol version 1.0
|
||||||
*/
|
*/
|
||||||
extern const char *const kMsgDKeyDown1_0;
|
extern const char *const kMsgDKeyDown1_0;
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ ClientProxy1_1::ClientProxy1_1(const std::string &name, deskflow::IStream *strea
|
||||||
void ClientProxy1_1::keyDown(KeyID key, KeyModifierMask mask, KeyButton button, const std::string &)
|
void ClientProxy1_1::keyDown(KeyID key, KeyModifierMask mask, KeyButton button, const std::string &)
|
||||||
{
|
{
|
||||||
LOG_VERBOSE("send key down to \"%s\" id=%d, mask=0x%04x, button=0x%04x", getName().c_str(), key, mask, button);
|
LOG_VERBOSE("send key down to \"%s\" id=%d, mask=0x%04x, button=0x%04x", getName().c_str(), key, mask, button);
|
||||||
ProtocolUtil::writef(getStream(), kMsgDKeyDown, key, mask, button);
|
ProtocolUtil::writef(getStream(), kMsgDKeyDown1_1, key, mask, button);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientProxy1_1::keyRepeat(
|
void ClientProxy1_1::keyRepeat(
|
||||||
|
|
|
||||||
|
|
@ -36,5 +36,5 @@ void ClientProxy1_8::keyDown(KeyID key, KeyModifierMask mask, KeyButton button,
|
||||||
(CLOG_VERBOSE "send key down to \"%s\" id=%d, mask=0x%04x, button=0x%04x, layout=%s", getName().c_str(), key,
|
(CLOG_VERBOSE "send key down to \"%s\" id=%d, mask=0x%04x, button=0x%04x, layout=%s", getName().c_str(), key,
|
||||||
mask, button, language.c_str())
|
mask, button, language.c_str())
|
||||||
);
|
);
|
||||||
ProtocolUtil::writef(getStream(), kMsgDKeyDownLang, key, mask, button, &language);
|
ProtocolUtil::writef(getStream(), kMsgDKeyDown, key, mask, button, &language);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue