version 1.148, 2020/06/18 08:34:22 |
version 1.149, 2020/09/22 05:23:34 |
|
|
|
|
static __dead void client_exec(const char *,const char *); |
static __dead void client_exec(const char *,const char *); |
static int client_get_lock(char *); |
static int client_get_lock(char *); |
static int client_connect(struct event_base *, const char *, int); |
static int client_connect(struct event_base *, const char *, |
|
uint64_t); |
static void client_send_identify(const char *, const char *, int); |
static void client_send_identify(const char *, const char *, int); |
static void client_signal(int); |
static void client_signal(int); |
static void client_dispatch(struct imsg *, void *); |
static void client_dispatch(struct imsg *, void *); |
|
|
|
|
/* Connect client to server. */ |
/* Connect client to server. */ |
static int |
static int |
client_connect(struct event_base *base, const char *path, int flags) |
client_connect(struct event_base *base, const char *path, uint64_t flags) |
{ |
{ |
struct sockaddr_un sa; |
struct sockaddr_un sa; |
size_t size; |
size_t size; |
|
|
|
|
/* Client main loop. */ |
/* Client main loop. */ |
int |
int |
client_main(struct event_base *base, int argc, char **argv, int flags, int feat) |
client_main(struct event_base *base, int argc, char **argv, uint64_t flags, |
|
int feat) |
{ |
{ |
struct cmd_parse_result *pr; |
struct cmd_parse_result *pr; |
struct msg_command *data; |
struct msg_command *data; |
|
|
|
|
/* Save the flags. */ |
/* Save the flags. */ |
client_flags = flags; |
client_flags = flags; |
log_debug("flags are %#llx", client_flags); |
log_debug("flags are %#llx", (unsigned long long)client_flags); |
|
|
/* Initialize the client socket and start the server. */ |
/* Initialize the client socket and start the server. */ |
fd = client_connect(base, socket_path, client_flags); |
fd = client_connect(base, socket_path, client_flags); |
|
|
pid_t pid; |
pid_t pid; |
|
|
proc_send(client_peer, MSG_IDENTIFY_FLAGS, -1, &flags, sizeof flags); |
proc_send(client_peer, MSG_IDENTIFY_FLAGS, -1, &flags, sizeof flags); |
|
proc_send(client_peer, MSG_IDENTIFY_LONGFLAGS, -1, &client_flags, |
|
sizeof client_flags); |
|
|
if ((s = getenv("TERM")) == NULL) |
if ((s = getenv("TERM")) == NULL) |
s = ""; |
s = ""; |
|
|
fatalx("bad MSG_FLAGS string"); |
fatalx("bad MSG_FLAGS string"); |
|
|
memcpy(&client_flags, data, sizeof client_flags); |
memcpy(&client_flags, data, sizeof client_flags); |
log_debug("new flags are %#llx", client_flags); |
log_debug("new flags are %#llx", |
|
(unsigned long long)client_flags); |
break; |
break; |
case MSG_SHELL: |
case MSG_SHELL: |
if (datalen == 0 || data[datalen - 1] != '\0') |
if (datalen == 0 || data[datalen - 1] != '\0') |
|
|
fatalx("bad MSG_FLAGS string"); |
fatalx("bad MSG_FLAGS string"); |
|
|
memcpy(&client_flags, data, sizeof client_flags); |
memcpy(&client_flags, data, sizeof client_flags); |
log_debug("new flags are %#llx", client_flags); |
log_debug("new flags are %#llx", |
|
(unsigned long long)client_flags); |
break; |
break; |
case MSG_DETACH: |
case MSG_DETACH: |
case MSG_DETACHKILL: |
case MSG_DETACHKILL: |