mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2025-08-17 08:55:48 +00:00
Added unicode input event (#63)
* Added unicode input event * Prevents strcpy overflow * Updated according to change requests
This commit is contained in:
parent
8abc371fb4
commit
5846a9d6aa
@ -25,6 +25,14 @@ typedef struct _NV_KEYBOARD_PACKET {
|
||||
short zero2;
|
||||
} NV_KEYBOARD_PACKET, *PNV_KEYBOARD_PACKET;
|
||||
|
||||
#define UTF8_TEXT_EVENT_MAGIC 0x17
|
||||
#define UTF8_TEXT_EVENT_MAX_COUNT 32
|
||||
typedef struct _NV_UNICODE_PACKET {
|
||||
unsigned int size;
|
||||
int magic;
|
||||
char text[UTF8_TEXT_EVENT_MAX_COUNT];
|
||||
} NV_UNICODE_PACKET, *PNV_UNICODE_PACKET;
|
||||
|
||||
#define PACKET_TYPE_REL_MOUSE_MOVE 0x08
|
||||
#define MOUSE_MOVE_REL_MAGIC 0x06
|
||||
typedef struct _NV_REL_MOUSE_MOVE_PACKET {
|
||||
|
@ -26,6 +26,7 @@ typedef struct _PACKET_HOLDER {
|
||||
NV_MULTI_CONTROLLER_PACKET multiController;
|
||||
NV_SCROLL_PACKET scroll;
|
||||
NV_HAPTICS_PACKET haptics;
|
||||
NV_UNICODE_PACKET unicode;
|
||||
} packet;
|
||||
LINKED_BLOCKING_QUEUE_ENTRY entry;
|
||||
} PACKET_HOLDER, *PPACKET_HOLDER;
|
||||
@ -607,6 +608,38 @@ int LiSendKeyboardEvent(short keyCode, char keyAction, char modifiers) {
|
||||
return err;
|
||||
}
|
||||
|
||||
int LiSendUtf8TextEvent(const char *text, unsigned int length) {
|
||||
PPACKET_HOLDER holder;
|
||||
int err;
|
||||
|
||||
if (!initialized) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
if (length > UTF8_TEXT_EVENT_MAX_COUNT) {
|
||||
return -1;
|
||||
}
|
||||
holder = allocatePacketHolder();
|
||||
if (holder == NULL) {
|
||||
return -1;
|
||||
}
|
||||
// Size + magic + string length
|
||||
holder->packetLength = 4 + 4 + length;
|
||||
// Magic + string length
|
||||
holder->packet.unicode.size = BE32(4 + length);
|
||||
holder->packet.unicode.magic = LE32(UTF8_TEXT_EVENT_MAGIC);
|
||||
memcpy(holder->packet.unicode.text, text, length);
|
||||
|
||||
err = LbqOfferQueueItem(&packetQueue, holder, &holder->entry);
|
||||
if (err != LBQ_SUCCESS) {
|
||||
LC_ASSERT(err == LBQ_BOUND_EXCEEDED);
|
||||
Limelog("Input queue reached maximum size limit\n");
|
||||
freePacketHolder(holder);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int sendControllerEventInternal(short controllerNumber, short activeGamepadMask,
|
||||
short buttonFlags, unsigned char leftTrigger, unsigned char rightTrigger,
|
||||
short leftStickX, short leftStickY, short rightStickX, short rightStickY)
|
||||
|
@ -519,6 +519,10 @@ int LiSendMouseButtonEvent(char action, int button);
|
||||
#define MODIFIER_META 0x08
|
||||
int LiSendKeyboardEvent(short keyCode, char keyAction, char modifiers);
|
||||
|
||||
// This function queues an UTF-8 encoded text to be sent to the remote server.
|
||||
// Currently maximum length is 32 bytes.
|
||||
int LiSendUtf8TextEvent(const char *text, unsigned int length);
|
||||
|
||||
// Button flags
|
||||
#define A_FLAG 0x1000
|
||||
#define B_FLAG 0x2000
|
||||
|
Loading…
x
Reference in New Issue
Block a user