The current spec requires an id/value pair length field indicating how many bytes constitute the id/value pairs in the controlpacket, prior to any payload that may be in the controlpacket as well. From an implementer's point of view this means allocating and building a buffer to hold this data so it can be counted and the value inserted logically prior to this buffer. This is particularly problematic as the value is a Variable Byte Integer so space in a larger control packet buffer cannot be preallocated then filled afterwards (same annoyance occurs with the remaining length field earlier in the control packet).