56 lines
792 B
C
56 lines
792 B
C
#include "dat.h"
|
|
#include "fn.h"
|
|
|
|
static char adir[40];
|
|
|
|
static void
|
|
sendkey(int fd, u32int ks, u32int mod)
|
|
{
|
|
Keyreq kr;
|
|
|
|
kr.fd = fd;
|
|
kr.ks = ks;
|
|
kr.mod = mod;
|
|
chansend(keyc, &kr);
|
|
}
|
|
|
|
static void
|
|
clientthread(void *arg)
|
|
{
|
|
int fd;
|
|
uchar req[4];
|
|
|
|
fd = (int)(uintptr)arg;
|
|
threadsetname("client %d", fd);
|
|
while(read(fd, req, 4) == 4)
|
|
sendkey(fd, req[2] | (req[3] << 8), req[1]);
|
|
close(fd);
|
|
}
|
|
|
|
static void
|
|
srvinit(void)
|
|
{
|
|
char addr[64];
|
|
|
|
snprint(addr, sizeof(addr), "unix!/tmp/strans.%d", getuid());
|
|
remove(addr + 5);
|
|
if(announce(addr, adir) < 0)
|
|
die("announce: %r");
|
|
}
|
|
|
|
void
|
|
srvthread(void*)
|
|
{
|
|
char ldir[40];
|
|
int fd;
|
|
|
|
threadsetname("srv");
|
|
srvinit();
|
|
for(;;){
|
|
fd = listen(adir, ldir);
|
|
if(fd < 0)
|
|
continue;
|
|
proccreate(clientthread, (void*)(uintptr)fd, 8192);
|
|
}
|
|
}
|