decode
Parse a UtpHeader from the first 20 bytes of buf starting at offset. Returns null when there aren't 20 bytes available or the type nibble is not a known UtpType. libtorrent's incoming_packet() likewise rejects buf.size() < sizeof(utp_header) and get_type() >= NUM_TYPES.
Note: this does NOT validate the version; callers that need libtorrent's "version != 1 → drop" rule should check UtpHeader.version themselves.