commit - a1abef654c766e1f022ea89243c1f770d37e2597
commit + ff3a2c1817311f7b28eec657a0544308e7ddb173
blob - cea51abbed40bd4a90013dd0cdc103327d4c1576
blob + 35aabe914d53b914cfbe3befdb1be5a659dee702
--- kamirepl.c
+++ kamirepl.c
static void write_hdr(uint32_t, uint8_t, uint16_t);
static void excmd(const char **, int);
+static void pp_msg(uint32_t, uint8_t, uint16_t, const uint8_t *);
static void handle_9p(const uint8_t *, size_t);
static void clr(void);
static void prompt(void);
write_str(sl, s);
} else {
log_warnx("Unknown command %s", *argv);
+ }
+}
+
+static void
+pp_msg(uint32_t len, uint8_t type, uint16_t tag, const uint8_t *d)
+{
+ uint32_t msize;
+ uint16_t slen;
+
+ printf("len=%"PRIu32" type=%d[%s] tag=0x%x[%d] ", len,
+ type, pp_msg_type(type), tag, tag);
+
+ len -= HEADERSIZE;
+
+ switch (type) {
+ case Rversion:
+ if (len < 6) {
+ printf("invalid: not enough space for msize "
+ "and version provided.");
+ break;
+ }
+
+ memcpy(&msize, d, sizeof(msize));
+ d += sizeof(msize);
+ len -= sizeof(msize);
+ msize = le32toh(msize);
+
+ memcpy(&slen, d, sizeof(slen));
+ d += sizeof(slen);
+ len -= sizeof(slen);
+ slen = le32toh(slen);
+
+ if (len != slen) {
+ printf("invalid: version string length doesn't "
+ "match. Got %d; want %d", slen, len);
+ break;
+ }
+
+ printf("msize=%"PRIu32" version[%"PRIu16"]=\"",
+ msize, slen);
+ fwrite(d, 1, slen, stdout);
+ printf("\"");
+
+ break;
}
+
+ printf("\n");
}
static void
tag = le16toh(tag);
clr();
- log_info("type=%"PRIu32"[%s] tag=%d len=%"PRIu32, type,
- pp_msg_type(type), tag, len);
+ pp_msg(len, type, tag, data);
prompt();
}