mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2025-08-18 09:25:49 +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;
|
short zero2;
|
||||||
} NV_KEYBOARD_PACKET, *PNV_KEYBOARD_PACKET;
|
} 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 PACKET_TYPE_REL_MOUSE_MOVE 0x08
|
||||||
#define MOUSE_MOVE_REL_MAGIC 0x06
|
#define MOUSE_MOVE_REL_MAGIC 0x06
|
||||||
typedef struct _NV_REL_MOUSE_MOVE_PACKET {
|
typedef struct _NV_REL_MOUSE_MOVE_PACKET {
|
||||||
|
@ -26,6 +26,7 @@ typedef struct _PACKET_HOLDER {
|
|||||||
NV_MULTI_CONTROLLER_PACKET multiController;
|
NV_MULTI_CONTROLLER_PACKET multiController;
|
||||||
NV_SCROLL_PACKET scroll;
|
NV_SCROLL_PACKET scroll;
|
||||||
NV_HAPTICS_PACKET haptics;
|
NV_HAPTICS_PACKET haptics;
|
||||||
|
NV_UNICODE_PACKET unicode;
|
||||||
} packet;
|
} packet;
|
||||||
LINKED_BLOCKING_QUEUE_ENTRY entry;
|
LINKED_BLOCKING_QUEUE_ENTRY entry;
|
||||||
} PACKET_HOLDER, *PPACKET_HOLDER;
|
} PACKET_HOLDER, *PPACKET_HOLDER;
|
||||||
@ -607,6 +608,38 @@ int LiSendKeyboardEvent(short keyCode, char keyAction, char modifiers) {
|
|||||||
return err;
|
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,
|
static int sendControllerEventInternal(short controllerNumber, short activeGamepadMask,
|
||||||
short buttonFlags, unsigned char leftTrigger, unsigned char rightTrigger,
|
short buttonFlags, unsigned char leftTrigger, unsigned char rightTrigger,
|
||||||
short leftStickX, short leftStickY, short rightStickX, short rightStickY)
|
short leftStickX, short leftStickY, short rightStickX, short rightStickY)
|
||||||
|
@ -519,6 +519,10 @@ int LiSendMouseButtonEvent(char action, int button);
|
|||||||
#define MODIFIER_META 0x08
|
#define MODIFIER_META 0x08
|
||||||
int LiSendKeyboardEvent(short keyCode, char keyAction, char modifiers);
|
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
|
// Button flags
|
||||||
#define A_FLAG 0x1000
|
#define A_FLAG 0x1000
|
||||||
#define B_FLAG 0x2000
|
#define B_FLAG 0x2000
|
||||||
|
Loading…
x
Reference in New Issue
Block a user