int unpack_msgpack_raw32(struct qserver *server, char **valp, unsigned char **datap, unsigned char *last) { uint32_t len; if (*datap + 5 > last) { malformed_packet(server, "packet too small"); return 0; } (*datap)++; if (!unpack_msgpack_uint32(server, &len, datap, last, 1)) return 0; return unpack_msgpack_raw_len(server, valp, datap, last, len); }
int unpack_msgpack_raw16(struct qserver *server, char **valp, unsigned char **datap, unsigned char *last) { uint16_t len; if (*datap + 3 > last) { malformed_packet(server, "packet too small"); return (0); } (*datap)++; if (!unpack_msgpack_uint16(server, &len, datap, last, 1)) { return (0); } return (unpack_msgpack_raw_len(server, valp, datap, last, (uint32_t)len)); }
int unpack_msgpack_raw(struct qserver *server, char **valp, unsigned char **datap, unsigned char *last) { unsigned char type, len; if (*datap + 1 > last) { malformed_packet(server, "packet too small"); return 0; } type = (**datap & 0xa0); len = (**datap & 0x1f); if (0xa0 != type) { malformed_packet(server, "invalid raw type 0x%02hhx", **datap); return 0; } (*datap)++; return unpack_msgpack_raw_len(server, valp, datap, last, (uint32_t)len); }