Continuum does not always include ExtraPosData in C2S_POSITION. game.c knows this by looking at the packet length received from net.
I might be missing something, but it looks to me there is no reliable way to figure this out in CB_PPK, everything in extra position data except energy (energy gets copied in game.c) is simply 0.
I think the easiest would be to simply change the CB_PPK definition to:
typedef void (PPKFunc)(Player p, const struct C2SPosition *pos, bool extra); }}}
DO_CBS(CB_PPK, arena, PPKFunc, (p, pos, len >= 32)); }}}