Ref T5000. Git's protocol is mostly fairly parsable. It has PACK blobs which are trickier to parse, but we don't currently need to decode them (and I think we may never need to decode them: we only need to rewrite refs and response codes, not object content).
To rewrite the actual response, we only need to rewrite this:
0033ng refs/heads/master pre-receive hook declined\n
0019ok refs/heads/master \n
...which is pretty reasonable. This doesn't emit or interpret frames and isn't suitable to upstream since it also writes all of the protocol out to tempfiles, but I'm reasonably confident I can estimate T5000 now.