code: func (req *MCRequest) ParseTapCommands() (TapConnect, error) {
  	rv := TapConnect{
  		Flags: map[TapConnectFlag]interface{}{},
  		Name:  string(req.Key),
  	}
  
  	if len(req.Extras) < 4 {
  		return rv, fmt.Errorf("not enough extra bytes: %x", req.Extras)
  	}
  
  	flags := TapConnectFlag(binary.BigEndian.Uint32(req.Extras))
  
  	r := bytes.NewReader(req.Body)
  
  	for _, f := range flags.SplitFlags() {
  		fun := TapFlagParsers[f]
  		if fun == nil {
  			fun = TapParseBool
  		}
  
  		val, err := fun(r)
  		if err != nil {
  			return rv, err
  		}
  
  		rv.Flags[f] = val
  	}
  
  	var err error
  	rv.RemainingBody, err = ioutil.ReadAll(r)
  
  	return rv, err
  }
docs: // Parse the tap request into the interesting bits we may need to do something with.