ipc: strip machinery no peer uses; keep client state in one Keyreq
ipc.c: an AF_UNIX nonblocking connect completes at once or fails with EAGAIN, so the EINPROGRESS/poll/SO_ERROR path and the fcntl juggling were dead; the deadline plumbing checked a clock that cannot fail and re-tested the deadline before every transfer although only waitfd blocks; readfield's truncation and discard loop served the unit test, since every caller owns char[Ipcfieldmax+1]; NULL-argument checks on in-tree encoders are gone (peer validation stays). The primary key frame is Ipckey, not 'legacy'; ipckeysym names the keysym mapping. srv.c: the per-connection capability and caret already lived in the persistent Keyreq; the mirror locals and 'negotiated' flag guarded a protocol rule no client relied on. proccreate never fails in libthread. gtk: focus-out no longer round-trips a reset before closing the socket that releases the engine; the caret dedup compares the packed frame; srvconnect's preedit no-ops and the insimple flag are gone.
This commit is contained in:
13
ipc.h
13
ipc.h
@@ -2,7 +2,7 @@
|
||||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* Legacy request: [flags, modifiers, key byte 0, ..., key byte 3].
|
||||
* Key request: [flags, modifiers, key byte 0, ..., key byte 3].
|
||||
* Flags request preedit and distinguish lifecycle reset from physical Escape.
|
||||
* The server identifies the connection as the engine owner; that identity is
|
||||
* not sent on the wire.
|
||||
@@ -10,7 +10,8 @@
|
||||
* Response: [eaten, commit-length-low, commit-length-high, commit...],
|
||||
* followed, when requested, by
|
||||
* [preedit-length-low, preedit-length-high, preedit...].
|
||||
* Lengths are little-endian byte counts; fields are at most Ipcfieldmax bytes.
|
||||
* Lengths are little-endian byte counts; fields are at most Ipcfieldmax bytes,
|
||||
* so callers read them into char[Ipcfieldmax+1].
|
||||
*
|
||||
* Capability control is six bytes: [0x80|want, version, 0, 0, 0, 0].
|
||||
* Caret control is sixteen bytes: [0x80, version, 1, valid, x, y, h],
|
||||
@@ -58,7 +59,7 @@ enum
|
||||
enum
|
||||
{
|
||||
Ipcunknown = -1,
|
||||
Ipclegacy,
|
||||
Ipckey,
|
||||
Ipccap,
|
||||
Ipccaret,
|
||||
};
|
||||
@@ -72,12 +73,12 @@ struct Ipcresp
|
||||
size_t preeditlen;
|
||||
};
|
||||
|
||||
uint32_t ipckey(uint32_t, uint32_t);
|
||||
uint32_t ipckeysym(uint32_t, uint32_t);
|
||||
uint32_t ipcmod(uint32_t);
|
||||
void ipcpackreq(unsigned char[Ipcreqsz], int, uint32_t, uint32_t);
|
||||
void ipcpackreset(unsigned char[Ipcreqsz], int);
|
||||
void ipcpackcap(unsigned char[Ipcreqsz], int);
|
||||
int ipcpackcaret(unsigned char[Ipccaretsz], int, int32_t, int32_t, int32_t);
|
||||
void ipcpackcaret(unsigned char[Ipccaretsz], int, int32_t, int32_t, int32_t);
|
||||
void ipcunpackreq(const unsigned char[Ipcreqsz], int*, uint32_t*, uint32_t*);
|
||||
int ipcunpackcaret(const unsigned char[Ipccaretsz], int*, int32_t*, int32_t*, int32_t*);
|
||||
int ipcreqtype(const unsigned char[Ipcreqsz]);
|
||||
@@ -85,6 +86,6 @@ int ipcreqreset(const unsigned char[Ipcreqsz]);
|
||||
int ipcpackresp(unsigned char*, size_t, int, const char*, size_t, const char*, size_t, int);
|
||||
int ipcreadn(int, void*, size_t);
|
||||
int ipcsend(int, const void*, size_t);
|
||||
int ipcreadresp(int, int, char*, size_t, char*, size_t, Ipcresp*);
|
||||
int ipcreadresp(int, int, char*, char*, Ipcresp*);
|
||||
int ipcpath(char*, size_t);
|
||||
int ipcconnect(void);
|
||||
|
||||
Reference in New Issue
Block a user