summaryrefslogtreecommitdiffstats
path: root/proc.c
diff options
context:
space:
mode:
authornicm <nicm>2015-10-29 09:35:31 +0000
committernicm <nicm>2015-10-29 09:35:31 +0000
commit45f3cea263d1f99912cd6b353c91ccb872c26a71 (patch)
treebbd5117327dfbdadd32d328f5cf81ba591295967 /proc.c
parentbf9c933caed5c74be3c9c4da02d7c57a9dcf091d (diff)
Break version check into a separate function, and limit version to 8 bits.
Diffstat (limited to 'proc.c')
-rw-r--r--proc.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/proc.c b/proc.c
index 413b2125..12e50e2c 100644
--- a/proc.c
+++ b/proc.c
@@ -49,7 +49,8 @@ struct tmuxpeer {
void *arg;
};
-static void proc_update_event(struct tmuxpeer *);
+static int peer_check_version(struct tmuxpeer *, struct imsg *);
+static void proc_update_event(struct tmuxpeer *);
static void
proc_event_cb(unused int fd, short events, void *arg)
@@ -57,7 +58,6 @@ proc_event_cb(unused int fd, short events, void *arg)
struct tmuxpeer *peer = arg;
ssize_t n;
struct imsg imsg;
- int v;
if (!(peer->flags & PEER_BAD) && (events & EV_READ)) {
if ((n = imsg_read(&peer->ibuf)) == -1 || n == 0) {
@@ -73,14 +73,7 @@ proc_event_cb(unused int fd, short events, void *arg)
break;
log_debug("peer %p message %d", peer, imsg.hdr.type);
- v = imsg.hdr.peerid;
- if (imsg.hdr.type != MSG_VERSION &&
- v != PROTOCOL_VERSION) {
- log_debug("peer %p bad version %d", peer, v);
-
- proc_send(peer, MSG_VERSION, -1, NULL, 0);
- peer->flags |= PEER_BAD;
-
+ if (peer_check_version(peer, &imsg) != 0) {
if (imsg.fd != -1)
close(imsg.fd);
imsg_free(&imsg);
@@ -115,6 +108,24 @@ proc_signal_cb(int signo, unused short events, void *arg)
tp->signalcb(signo);
}
+static int
+peer_check_version(struct tmuxpeer *peer, struct imsg *imsg)
+{
+ int version;
+
+ version = imsg->hdr.peerid & 0xff;
+ if (imsg->hdr.type != MSG_VERSION && version != PROTOCOL_VERSION) {
+ log_debug("peer %p bad version %d", peer, version);
+
+ proc_send(peer, MSG_VERSION, -1, NULL, 0);
+ peer->flags |= PEER_BAD;
+
+ return (-1);
+ }
+ imsg->hdr.peerid >>= 8;
+ return (0);
+}
+
static void
proc_update_event(struct tmuxpeer *peer)
{