fixed, apparently you need to call clear() (confusingly), and then

call seekp to see the pointer. the first part i didn't have ;)
use the enum identifiers to identify packet contents