Switch tmux to use imsg. This is the last major change to make the

client-server protocol more resilient and make the protocol versioning work
properly. In future, the only things requiring a protocol version bump will be
changes in the message structs, and (when both client and server have this
change) mixing different versions should nicely report an error message.

As a side effect this also makes the code tidier, fixes a problem with the way
errors reported during server startup were handled, and supports fd passing
(which will be used in future).

Looked over by eric@, thanks.

Please note that mixing a client with this change with an older server or vice
versa may cause tmux to crash or hang - tmux should be completely exited before
upgrading.
This commit is contained in:
Nicholas Marriott
2009-08-11 17:18:35 +00:00
parent 60db6e3df4
commit f0635717b3
12 changed files with 874 additions and 142 deletions

View File

@ -55,18 +55,12 @@ void
server_write_client(
struct client *c, enum msgtype type, const void *buf, size_t len)
{
struct hdr hdr;
struct imsgbuf *ibuf = &c->ibuf;
if (c->flags & CLIENT_BAD)
return;
log_debug("writing %d to client %d", type, c->fd);
hdr.type = type;
hdr.size = len;
buffer_write(c->out, &hdr, sizeof hdr);
if (buf != NULL && len > 0)
buffer_write(c->out, buf, len);
log_debug("writing %d to client %d", type, c->ibuf.fd);
imsg_compose(ibuf, type, PROTOCOL_VERSION, -1, -1, (void *) buf, len);
}
void