Commit graph

8 commits

Author SHA1 Message Date
Peter Hutterer
3c7820baca libeis: only remove the source on disconnect, don't destroy it
Removed sources will be cleaned up at the end of dispatch.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-07-30 21:17:54 +10:00
Peter Hutterer
8ec0f4bf7c Send the trailing null byte for composed string messages
The iobuf treats this as binary data but then we're using it as strings in the
message parsing code. So make sure all messages have a trailing null byte.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-07-30 21:01:09 +10:00
Peter Hutterer
27670000e4 libeis: only log client state transitions if they changed
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-07-29 11:52:23 +10:00
Peter Hutterer
247b6d0dcb libeis: fix wrong message field assignment
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-07-29 10:59:07 +10:00
Peter Hutterer
23c34fc77d client: handle the case of zero data bytes
When terminating the connection, we might get a read of zero

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-07-29 09:42:42 +10:00
Peter Hutterer
fb115a1f43 libeis: avoid a cleanup double-free
Aparently the compiler is not smart enough to handle the case correctly where
a cleanup variable is introduced after a goto statement.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-07-29 09:41:56 +10:00
Peter Hutterer
b840c510bf libeis: remove existing devices before disconnecting the client
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-07-29 09:41:07 +10:00
Peter Hutterer
f7a24b2fbd Add the minimal implementation for a UNIX socket libeis server
This is the minimum framework to support new clients, added devices and
pointer relative motion events. It's missing a bunch of checks and
verification, most of the server hooks aren't there yet, the only
implementation is a UNIX socket and the protocol is plain text (but at least
the last two makes it netcat-compatible).

Protocol is plain text for now and interaction is like this (S is server, C is client):
S: hello
C: connect myclientname
S: connected
C: add 2 4
S: accept 2
C: rel 2 -1 1
C: rel 2 5 4

Where the last two lines are: add device with id 2 and capability mask 0x4,
send a relative pointer motion event for device 2 with coordinates -1/1, then
5/4.

The implementation relies heavily on some abstraction and macros galore, see
the various util-* files. These are largely copied from libinput, with a few
parts removed and a few other parts added.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-07-28 19:33:34 +10:00