func (t *tflush) handle(cs *connState) message {
	cs.WaitTag(t.OldTag)
	return &rflush{}
}
handle implements handler.handle.
package p9
import (
	"fmt"
	"io"
	"path"
	"strings"
	"sync/atomic"
	"github.com/hugelgupf/p9/internal"
	"github.com/hugelgupf/p9/internal/linux"
)
func newErr(err error) *rlerror {
	return &rlerror{Error: uint32(internal.ExtractErrno(err))}
}
type handler interface {
	handle(cs *connState) message
}
func (t *tversion) handle(cs *connState) message {
	unknown := &rversion{
		MSize:   0,
		Version: "unknown",
	}
	if t.MSize == 0 {
		return unknown
	}
	msize := t.MSize
	if t.MSize > maximumLength {
		msize = maximumLength
	}
	reqBaseVersion, reqVersion, ok := parseVersion(t.Version)
	if !ok {
		return unknown
	}
	var baseVersion baseVersion
	var version uint32
	switch reqBaseVersion {
	case version9P2000, version9P2000U:
		return unknown
	case version9P2000L:
		baseVersion = reqBaseVersion
		if reqVersion > highestSupportedVersion {
			version = highestSupportedVersion
		} else {
			version = reqVersion
		}
	}
	atomic.StoreUint32(&cs.messageSize, msize)
	atomic.StoreUint32(&cs.version, version)
	cs.baseVersion = baseVersion
	return &rversion{
		MSize:   msize,
		Version: versionString(baseVersion, version),
	}
}