lib9p

Go 9P library.
Log | Files | Refs | LICENSE

commit 6924559fb2165ec052ec4c40a9d1f7dc76294ee4
parent f62e5a3699de784ec9d8cf593496188a7aca38ae
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Fri, 27 Oct 2023 08:03:53 +0900

change message struct

Diffstat:
Mfcall.go | 821+++++++++++++++++++++++++++++++++++++------------------------------------------
Mserver.go | 142+++++++++++++++++++++++++++++++++++++++----------------------------------------
2 files changed, 453 insertions(+), 510 deletions(-)

diff --git a/fcall.go b/fcall.go @@ -40,14 +40,14 @@ const ( ) // Ample room for Twrite/Rread header (iounit). -// Twrite: size[4] type[1] tag[2] fid[4] offset[8] count[4] = 23 -// Rread: size[4] type[1] tag[2] count[4] = 11 +// Twrite: size[4] type[1] Tag[2] fid[4] offset[8] count[4] = 23 +// Rread: size[4] type[1] Tag[2] count[4] = 11 // In Plan9, this const is 24. const IOHDRSZ = 23 -// The tag used by version messages. +// The Tag used by version messages. // The client can use it, when establishing a connection, to -// override tag matching in version messages. +// override Tag matching in version messages. const NOTAG = ^uint16(0) // Msg represents any kind of message of 9P. @@ -63,10 +63,12 @@ type Msg interface { Size() uint32 // Type returns the type field of message. Type() MsgType - // Tag returns the tag of message. + // GetTag returns the Tag of message. // Tag is the identifier of each message. - Tag() uint16 - // SetTag sets the tag field of the message. + // The Get prefix is to avoid name confliction with the each + // message's Tag field. + GetTag() uint16 + // SetTag sets the Tag field of the message. SetTag(uint16) // Marshal convert Msg to byte array to be transmitted. @@ -80,7 +82,7 @@ type bufMsg []byte func (msg bufMsg) Size() uint32 { return gbit32(msg[0:4]) } func (msg bufMsg) Type() MsgType { return MsgType(msg[4]) } -func (msg bufMsg) Tag() uint16 { return gbit16(msg[5:7]) } +func (msg bufMsg) GetTag() uint16 { return gbit16(msg[5:7]) } func (msg bufMsg) SetTag(t uint16) { pbit16(msg[5:7], t) } func (msg bufMsg) marshal() []byte { return []byte(msg)[:msg.Size()] } func (msg bufMsg) String() string { @@ -145,32 +147,30 @@ func (msg bufMsg) String() string { } type TVersion struct { - tag uint16 - mSize uint32 - version string + Tag uint16 + Msize uint32 + Version string } func newTVersion(buf []byte) *TVersion { msg := new(TVersion) - msg.tag = gbit16(buf[5:7]) - msg.mSize = gbit32(buf[7:11]) + msg.Tag = gbit16(buf[5:7]) + msg.Msize = gbit32(buf[7:11]) vs := gbit16(buf[11:13]) - msg.version = string(buf[13 : 13+vs]) + msg.Version = string(buf[13 : 13+vs]) return msg } -func (msg *TVersion) Size() uint32 { return uint32(4 + 1 + 2 + 4 + 2 + len(msg.version)) } +func (msg *TVersion) Size() uint32 { return uint32(4 + 1 + 2 + 4 + 2 + len(msg.Version)) } func (msg *TVersion) Type() MsgType { return Tversion } -func (msg *TVersion) Tag() uint16 { return msg.tag } -func (msg *TVersion) SetTag(t uint16) { msg.tag = t } -func (msg *TVersion) MSize() uint32 { return msg.mSize } -func (msg *TVersion) Version() string { return msg.version } +func (msg *TVersion) GetTag() uint16 { return msg.Tag } +func (msg *TVersion) SetTag(t uint16) { msg.Tag = t } func (msg *TVersion) marshal() []byte { m := make([]byte, msg.Size()) pbit32(m[0:4], msg.Size()) m[4] = uint8(Tversion) - pbit16(m[5:7], msg.Tag()) - pbit32(m[7:11], msg.MSize()) - v := msg.Version() + pbit16(m[5:7], msg.Tag) + pbit32(m[7:11], msg.Msize) + v := msg.Version pbit16(m[11:13], uint16(len(v))) for i := 0; i < len(v); i++ { m[13+i] = v[i] @@ -178,32 +178,28 @@ func (msg *TVersion) marshal() []byte { return m } func (msg *TVersion) String() string { - return fmt.Sprintf("Tversion tag %d msize %d version '%s'", - msg.Tag(), msg.MSize(), msg.Version()) + return fmt.Sprintf("Tversion Tag %d msize %d version '%s'", + msg.Tag, msg.Msize, msg.Version) } type RVersion struct { - tag uint16 - mSize uint32 - version string + Tag uint16 + Msize uint32 + Version string } func newRVersion(buf []byte) *RVersion { msg := new(RVersion) - msg.tag = gbit16(buf[5:7]) - msg.mSize = gbit32(buf[7:11]) + msg.Tag = gbit16(buf[5:7]) + msg.Msize = gbit32(buf[7:11]) vs := gbit16(buf[11:13]) - msg.version = string(buf[13 : 13+vs]) + msg.Version = string(buf[13 : 13+vs]) return msg } -func (msg *RVersion) Size() uint32 { return uint32(4 + 1 + 2 + 4 + 2 + len(msg.version)) } +func (msg *RVersion) Size() uint32 { return uint32(4 + 1 + 2 + 4 + 2 + len(msg.Version)) } func (msg *RVersion) Type() MsgType { return Rversion } -func (msg *RVersion) Tag() uint16 { return msg.tag } -func (msg *RVersion) SetTag(t uint16) { msg.tag = t } -func (msg *RVersion) MSize() uint32 { return msg.mSize } -func (msg *RVersion) SetMSize(s uint32) { msg.mSize = s } -func (msg *RVersion) Version() string { return msg.version } -func (msg *RVersion) SetVersion(v string) { msg.version = v } +func (msg *RVersion) GetTag() uint16 { return msg.Tag } +func (msg *RVersion) SetTag(t uint16) { msg.Tag = t } func (msg *RVersion) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -211,31 +207,31 @@ func (msg *RVersion) marshal() []byte { cur += 4 buf[cur] = uint8(Rversion) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - pbit32(buf[cur:cur+4], msg.MSize()) + pbit32(buf[cur:cur+4], msg.Msize) cur += 4 - pbit16(buf[cur:cur+2], uint16(len(msg.Version()))) + pbit16(buf[cur:cur+2], uint16(len(msg.Version))) cur += 2 - for i, b := range []byte(msg.Version()) { + for i, b := range []byte(msg.Version) { buf[cur+i] = b } - cur += len(msg.Version()) + cur += len(msg.Version) if cur != len(buf) { panic("length of buf and cursor not match") } return buf } func (msg *RVersion) String() string { - return fmt.Sprintf("Rversion tag %d msize %d version '%s'", - msg.Tag(), msg.MSize(), msg.Version()) + return fmt.Sprintf("Rversion Tag %d msize %d version '%s'", + msg.Tag, msg.Msize, msg.Version) } type TAuth struct { - tag uint16 - afid uint32 - uname string - aname string + Tag uint16 + Afid uint32 + Uname string + Aname string } func newTAuth(buf []byte) *TAuth { @@ -243,17 +239,17 @@ func newTAuth(buf []byte) *TAuth { msg := new(TAuth) cur += 4 cur += 1 // message type - msg.tag = gbit16(buf[cur : cur+2]) + msg.Tag = gbit16(buf[cur : cur+2]) cur += 2 - msg.afid = gbit32(buf[cur : cur+4]) + msg.Afid = gbit32(buf[cur : cur+4]) cur += 4 l := int(gbit16(buf[cur : cur+2])) cur += 2 - msg.uname = string(buf[cur : cur+l]) + msg.Uname = string(buf[cur : cur+l]) cur += l l = int(gbit16(buf[cur : cur+2])) cur += 2 - msg.aname = string(buf[cur : cur+l]) + msg.Aname = string(buf[cur : cur+l]) cur += l if cur != int(gbit32(buf[0:4])) { panic("length of buf and cursor position not match") @@ -261,14 +257,11 @@ func newTAuth(buf []byte) *TAuth { return msg } func (msg *TAuth) Size() uint32 { - return uint32(4 + 1 + 2 + 4 + 2 + len(msg.uname) + 2 + len(msg.aname)) + return uint32(4 + 1 + 2 + 4 + 2 + len(msg.Uname) + 2 + len(msg.Aname)) } func (msg *TAuth) Type() MsgType { return Tauth } -func (msg *TAuth) Tag() uint16 { return msg.tag } -func (msg *TAuth) SetTag(t uint16) { msg.tag = t } -func (msg *TAuth) AFid() uint32 { return msg.afid } -func (msg *TAuth) UName() string { return msg.uname } -func (msg *TAuth) AName() string { return msg.aname } +func (msg *TAuth) GetTag() uint16 { return msg.Tag } +func (msg *TAuth) SetTag(t uint16) { msg.Tag = t } func (msg *TAuth) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -276,54 +269,51 @@ func (msg *TAuth) marshal() []byte { cur += 4 buf[cur] = uint8(Tauth) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - pbit32(buf[cur:cur+4], msg.AFid()) + pbit32(buf[cur:cur+4], msg.Afid) cur += 4 - uname := msg.UName() - pbit16(buf[cur:cur+2], uint16(len(uname))) + pbit16(buf[cur:cur+2], uint16(len(msg.Uname))) cur += 2 - for i := 0; i < len(uname); i++ { - buf[cur+i] = uname[i] + for i := 0; i < len(msg.Uname); i++ { + buf[cur+i] = msg.Uname[i] } - cur += len(uname) - aname := msg.AName() - pbit16(buf[cur:cur+2], uint16(len(aname))) + cur += len(msg.Uname) + pbit16(buf[cur:cur+2], uint16(len(msg.Aname))) cur += 2 - for i := 0; i < len(aname); i++ { - buf[cur+i] = aname[i] + for i := 0; i < len(msg.Aname); i++ { + buf[cur+i] = msg.Aname[i] } - cur += len(aname) + cur += len(msg.Aname) if cur != len(buf) { panic("length of buf and cursor position don't match") } return buf } func (msg *TAuth) String() string { - afid := int64(msg.AFid()) + afid := int64(msg.Afid) if afid == int64(NOFID) { afid = -1 } - return fmt.Sprintf("Tauth tag %d afid %d uname %s aname %s", - msg.Tag(), afid, msg.UName(), msg.AName()) + return fmt.Sprintf("Tauth Tag %d afid %d uname %s aname %s", + msg.Tag, afid, msg.Uname, msg.Aname) } type RAuth struct { - tag uint16 - aqid Qid + Tag uint16 + Aqid Qid } func newRAuth(buf []byte) *RAuth { msg := new(RAuth) - msg.tag = gbit16(buf[5:7]) - msg.aqid = unmarshalQid(buf[7:]) + msg.Tag = gbit16(buf[5:7]) + msg.Aqid = unmarshalQid(buf[7:]) return msg } func (msg *RAuth) Size() uint32 { return 4 + 1 + 2 + 13 } func (msg *RAuth) Type() MsgType { return Rauth } -func (msg *RAuth) Tag() uint16 { return msg.tag } -func (msg *RAuth) SetTag(t uint16) { msg.tag = t } -func (msg *RAuth) AQid() Qid { return msg.aqid } +func (msg *RAuth) GetTag() uint16 { return msg.Tag } +func (msg *RAuth) SetTag(t uint16) { msg.Tag = t } func (msg *RAuth) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -331,9 +321,9 @@ func (msg *RAuth) marshal() []byte { cur += 4 buf[cur] = uint8(Rauth) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - qid := msg.AQid().marshal() + qid := msg.Aqid.marshal() for i := 0; i < len(qid); i++ { buf[cur+i] = qid[i] } @@ -344,16 +334,16 @@ func (msg *RAuth) marshal() []byte { return buf } func (msg *RAuth) String() string { - return fmt.Sprintf("Tauth tag %d aqid %v", - msg.Tag(), msg.AQid()) + return fmt.Sprintf("Tauth Tag %d aqid %v", + msg.Tag, msg.Aqid) } type TAttach struct { - tag uint16 - fid uint32 - afid uint32 - uname string - aname string + Tag uint16 + Fid uint32 + Afid uint32 + Uname string + Aname string } func newTAttach(buf []byte) *TAttach { @@ -361,19 +351,19 @@ func newTAttach(buf []byte) *TAttach { msg := new(TAttach) cur += 4 cur += 1 // message type - msg.tag = gbit16(buf[cur : cur+2]) + msg.Tag = gbit16(buf[cur : cur+2]) cur += 2 - msg.fid = gbit32(buf[cur : cur+4]) + msg.Fid = gbit32(buf[cur : cur+4]) cur += 4 - msg.afid = gbit32(buf[cur : cur+4]) + msg.Afid = gbit32(buf[cur : cur+4]) cur += 4 l := int(gbit16(buf[cur : cur+2])) cur += 2 - msg.uname = string(buf[cur : cur+l]) + msg.Uname = string(buf[cur : cur+l]) cur += l l = int(gbit16(buf[cur : cur+2])) cur += 2 - msg.aname = string(buf[cur : cur+l]) + msg.Aname = string(buf[cur : cur+l]) cur += l if cur != int(gbit32(buf[0:4])) { panic("length of buf and cursor position not match") @@ -381,15 +371,11 @@ func newTAttach(buf []byte) *TAttach { return msg } func (msg *TAttach) Size() uint32 { - return uint32(4 + 1 + 2 + 4 + 4 + 2 + len(msg.uname) + 2 + len(msg.aname)) + return uint32(4 + 1 + 2 + 4 + 4 + 2 + len(msg.Uname) + 2 + len(msg.Aname)) } func (msg *TAttach) Type() MsgType { return Tattach } -func (msg *TAttach) Tag() uint16 { return msg.tag } -func (msg *TAttach) SetTag(t uint16) { msg.tag = t } -func (msg *TAttach) Fid() uint32 { return msg.fid } -func (msg *TAttach) AFid() uint32 { return msg.afid } -func (msg *TAttach) UName() string { return msg.uname } -func (msg *TAttach) AName() string { return msg.aname } +func (msg *TAttach) GetTag() uint16 { return msg.Tag } +func (msg *TAttach) SetTag(t uint16) { msg.Tag = t } func (msg *TAttach) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -397,60 +383,57 @@ func (msg *TAttach) marshal() []byte { cur += 4 buf[cur] = uint8(msg.Type()) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - pbit32(buf[cur:cur+4], msg.Fid()) + pbit32(buf[cur:cur+4], msg.Fid) cur += 4 - pbit32(buf[cur:cur+4], msg.AFid()) + pbit32(buf[cur:cur+4], msg.Afid) cur += 4 - uname := msg.UName() - pbit16(buf[cur:cur+2], uint16(len(uname))) + pbit16(buf[cur:cur+2], uint16(len(msg.Uname))) cur += 2 - for i := 0; i < len(uname); i++ { - buf[cur+i] = uname[i] + for i := 0; i < len(msg.Uname); i++ { + buf[cur+i] = msg.Uname[i] } - cur += len(uname) - aname := msg.AName() - pbit16(buf[cur:cur+2], uint16(len(aname))) + cur += len(msg.Uname) + pbit16(buf[cur:cur+2], uint16(len(msg.Aname))) cur += 2 - for i := 0; i < len(aname); i++ { - buf[cur+i] = aname[i] + for i := 0; i < len(msg.Aname); i++ { + buf[cur+i] = msg.Aname[i] } - cur += len(aname) + cur += len(msg.Aname) if cur != len(buf) { panic("length of buf and cursor position don't match") } return buf } func (msg *TAttach) String() string { - fid := int64(msg.Fid()) + fid := int64(msg.Fid) if fid == int64(NOFID) { fid = -1 } - afid := int64(msg.AFid()) + afid := int64(msg.Afid) if afid == int64(NOFID) { afid = -1 } - return fmt.Sprintf("Tattach tag %d fid %d afid %d uname %s aname %s", - msg.Tag(), fid, afid, msg.UName(), msg.AName()) + return fmt.Sprintf("Tattach Tag %d fid %d afid %d uname %s aname %s", + msg.Tag, fid, afid, msg.Uname, msg.Aname) } type RAttach struct { - tag uint16 - qid Qid + Tag uint16 + Qid Qid } func newRAttach(buf []byte) *RAttach { msg := new(RAttach) - msg.tag = gbit16(buf[5:7]) - msg.qid = unmarshalQid(buf[7:]) + msg.Tag = gbit16(buf[5:7]) + msg.Qid = unmarshalQid(buf[7:]) return msg } func (msg *RAttach) Size() uint32 { return 4 + 1 + 2 + 13 } func (msg *RAttach) Type() MsgType { return Rattach } -func (msg *RAttach) Tag() uint16 { return msg.tag } -func (msg *RAttach) SetTag(t uint16) { msg.tag = t } -func (msg *RAttach) Qid() Qid { return msg.qid } +func (msg *RAttach) GetTag() uint16 { return msg.Tag } +func (msg *RAttach) SetTag(t uint16) { msg.Tag = t } func (msg *RAttach) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -458,9 +441,9 @@ func (msg *RAttach) marshal() []byte { cur += 4 buf[cur] = uint8(Rattach) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - qid := msg.Qid().marshal() + qid := msg.Qid.marshal() for i := 0; i < len(qid); i++ { buf[cur+i] = qid[i] } @@ -471,27 +454,26 @@ func (msg *RAttach) marshal() []byte { return buf } func (msg *RAttach) String() string { - return fmt.Sprintf("Rattach tag %d qid %v", - msg.Tag(), msg.Qid()) + return fmt.Sprintf("Rattach Tag %d qid %v", + msg.Tag, msg.Qid) } type RError struct { - tag uint16 - ename error + Tag uint16 + Ename error } func newRError(buf []byte) *RError { msg := new(RError) - msg.tag = gbit16(buf[5:7]) + msg.Tag = gbit16(buf[5:7]) es := gbit16(buf[7:9]) - msg.ename = fmt.Errorf("%s", string(buf[9:9+es])) + msg.Ename = fmt.Errorf("%s", string(buf[9:9+es])) return msg } -func (msg *RError) Size() uint32 { return uint32(4 + 1 + 2 + 2 + len(msg.EName())) } +func (msg *RError) Size() uint32 { return uint32(4 + 1 + 2 + 2 + len(msg.Ename.Error())) } func (msg *RError) Type() MsgType { return Rerror } -func (msg *RError) Tag() uint16 { return msg.tag } -func (msg *RError) SetTag(t uint16) { msg.tag = t } -func (msg *RError) EName() string { return msg.ename.Error() } +func (msg *RError) GetTag() uint16 { return msg.Tag } +func (msg *RError) SetTag(t uint16) { msg.Tag = t } func (msg *RError) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -499,9 +481,9 @@ func (msg *RError) marshal() []byte { cur += 4 buf[cur] = uint8(Rerror) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - ename := msg.EName() + ename := msg.Ename.Error() pbit16(buf[cur:cur+2], uint16(len(ename))) cur += 2 for i := 0; i < len(ename); i++ { @@ -515,68 +497,67 @@ func (msg *RError) marshal() []byte { } func (msg *RError) String() string { - return fmt.Sprintf("Rerror tag %d ename %v", msg.Tag(), msg.EName()) + return fmt.Sprintf("Rerror Tag %d ename %v", msg.Tag, msg.Ename.Error()) } type TFlush struct { - tag uint16 - oldtag uint16 + Tag uint16 + Oldtag uint16 } func newTFlush(buf []byte) *TFlush { msg := new(TFlush) - msg.tag = gbit16(buf[5:7]) - msg.oldtag = gbit16(buf[7:9]) + msg.Tag = gbit16(buf[5:7]) + msg.Oldtag = gbit16(buf[7:9]) return msg } func (msg *TFlush) Size() uint32 { return 9 } func (msg *TFlush) Type() MsgType { return Tflush } -func (msg *TFlush) Tag() uint16 { return msg.tag } -func (msg *TFlush) SetTag(t uint16) { msg.tag = t } -func (msg *TFlush) OldTag() uint16 { return msg.oldtag } +func (msg *TFlush) GetTag() uint16 { return msg.Tag } +func (msg *TFlush) SetTag(t uint16) { msg.Tag = t } func (msg *TFlush) marshal() []byte { buf := make([]byte, msg.Size()) pbit32(buf[0:4], msg.Size()) buf[4] = uint8(msg.Type()) - pbit16(buf[5:7], msg.Tag()) - pbit16(buf[7:9], msg.OldTag()) + pbit16(buf[5:7], msg.Tag) + pbit16(buf[7:9], msg.Oldtag) return buf } func (msg *TFlush) String() string { - return fmt.Sprintf("Tflush tag %d oldtag %d", msg.Tag(), msg.OldTag()) + return fmt.Sprintf("Tflush Tag %d oldTag %d", msg.Tag, msg.Oldtag) } type RFlush struct { - tag uint16 + Tag uint16 } func newRFlush(buf []byte) *RFlush { msg := new(RFlush) - msg.tag = gbit16(buf[5:7]) + msg.Tag = gbit16(buf[5:7]) return msg } func (msg *RFlush) Size() uint32 { return 7 } func (msg *RFlush) Type() MsgType { return Rflush } -func (msg *RFlush) Tag() uint16 { return msg.tag } -func (msg *RFlush) SetTag(t uint16) { msg.tag = t } +func (msg *RFlush) GetTag() uint16 { return msg.Tag } +func (msg *RFlush) SetTag(t uint16) { msg.Tag = t } func (msg *RFlush) marshal() []byte { buf := make([]byte, msg.Size()) pbit32(buf[0:4], msg.Size()) buf[4] = uint8(msg.Type()) - pbit16(buf[5:7], msg.Tag()) + pbit16(buf[5:7], msg.Tag) return buf } func (msg *RFlush) String() string { - return fmt.Sprintf("Rflush tag %d", msg.Tag()) + return fmt.Sprintf("Rflush Tag %d", msg.Tag) } type TWalk struct { - tag uint16 - fid uint32 - newFid uint32 - wname []string + Tag uint16 + Fid uint32 + Newfid uint32 + Wnames []string } func newTWalk(buf []byte) *TWalk { @@ -585,19 +566,19 @@ func newTWalk(buf []byte) *TWalk { msize := gbit32(buf[cur : cur+4]) cur += 4 cur += 1 // msgType - msg.tag = gbit16(buf[cur : cur+2]) + msg.Tag = gbit16(buf[cur : cur+2]) cur += 2 - msg.fid = gbit32(buf[cur : cur+4]) + msg.Fid = gbit32(buf[cur : cur+4]) cur += 4 - msg.newFid = gbit32(buf[cur : cur+4]) + msg.Newfid = gbit32(buf[cur : cur+4]) cur += 4 nwname := gbit16(buf[cur : cur+2]) cur += 2 - msg.wname = make([]string, nwname) + msg.Wnames = make([]string, nwname) for i := 0; i < int(nwname); i++ { size := int(gbit16(buf[cur : cur+2])) cur += 2 - msg.wname[i] = string(buf[cur : cur+size]) + msg.Wnames[i] = string(buf[cur : cur+size]) cur += size } if cur != int(msize) { @@ -608,18 +589,14 @@ func newTWalk(buf []byte) *TWalk { func (msg *TWalk) Size() uint32 { size := uint32(4 + 1 + 2 + 4 + 4 + 2) - for _, wname := range msg.wname { - size += 2 + uint32(len(wname)) + for _, wn := range msg.Wnames { + size += 2 + uint32(len(wn)) } return size } func (msg *TWalk) Type() MsgType { return Twalk } -func (msg *TWalk) Tag() uint16 { return msg.tag } -func (msg *TWalk) SetTag(t uint16) { msg.tag = t } -func (msg *TWalk) Fid() uint32 { return msg.fid } -func (msg *TWalk) NewFid() uint32 { return msg.newFid } -func (msg *TWalk) NWName() uint16 { return uint16(len(msg.wname)) } -func (msg *TWalk) WName() []string { return msg.wname } +func (msg *TWalk) GetTag() uint16 { return msg.Tag } +func (msg *TWalk) SetTag(t uint16) { msg.Tag = t } func (msg *TWalk) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -627,48 +604,48 @@ func (msg *TWalk) marshal() []byte { cur += 4 buf[cur] = uint8(Twalk) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - pbit32(buf[cur:cur+4], msg.Fid()) + pbit32(buf[cur:cur+4], msg.Fid) cur += 4 - pbit32(buf[cur:cur+4], msg.NewFid()) + pbit32(buf[cur:cur+4], msg.Newfid) cur += 4 - nwname := msg.NWName() + nwname := uint16(len(msg.Wnames)) pbit16(buf[cur:cur+2], nwname) cur += 2 - for _, wname := range msg.WName() { - pbit16(buf[cur:cur+2], uint16(len(wname))) + for _, wn := range msg.Wnames { + pbit16(buf[cur:cur+2], uint16(len(wn))) cur += 2 - for i := 0; i < len(wname); i++ { - buf[cur+i] = wname[i] + for i := 0; i < len(wn); i++ { + buf[cur+i] = wn[i] } - cur += len(wname) + cur += len(wn) } return buf } func (msg *TWalk) String() string { - s := fmt.Sprintf("Twalk tag %d fid %d newfid %d nwname %d", - msg.Tag(), msg.Fid(), msg.NewFid(), msg.NWName()) - for i, wname := range msg.WName() { - s += fmt.Sprintf(" %d:%s", i, wname) + s := fmt.Sprintf("Twalk Tag %d fid %d newfid %d nwname %d", + msg.Tag, msg.Fid, msg.Newfid, len(msg.Wnames)) + for i, wn := range msg.Wnames { + s += fmt.Sprintf(" %d:%s", i, wn) } return s } type RWalk struct { - tag uint16 - qid []Qid + Tag uint16 + Qids []Qid } func newRWalk(buf []byte) *RWalk { msg := new(RWalk) - msg.tag = gbit16(buf[5:7]) + msg.Tag = gbit16(buf[5:7]) nwqid := int(gbit16(buf[7:9])) - msg.qid = make([]Qid, nwqid) + msg.Qids = make([]Qid, nwqid) cur := 9 for i := 0; i < nwqid; i++ { - msg.qid[i] = unmarshalQid(buf[cur : cur+13]) + msg.Qids[i] = unmarshalQid(buf[cur : cur+13]) cur += 13 } if int(msg.Size()) != cur { @@ -677,12 +654,11 @@ func newRWalk(buf []byte) *RWalk { return msg } func (msg *RWalk) Size() uint32 { - return uint32(4 + 1 + 2 + 2 + len(msg.Qid())*13) + return uint32(4 + 1 + 2 + 2 + len(msg.Qids)*13) } func (msg *RWalk) Type() MsgType { return Rwalk } -func (msg *RWalk) Tag() uint16 { return msg.tag } -func (msg *RWalk) SetTag(t uint16) { msg.tag = t } -func (msg *RWalk) Qid() []Qid { return msg.qid } +func (msg *RWalk) GetTag() uint16 { return msg.Tag } +func (msg *RWalk) SetTag(t uint16) { msg.Tag = t } func (msg *RWalk) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -690,11 +666,11 @@ func (msg *RWalk) marshal() []byte { cur += 4 buf[cur] = uint8(msg.Type()) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - pbit16(buf[cur:cur+2], uint16(len(msg.Qid()))) + pbit16(buf[cur:cur+2], uint16(len(msg.Qids))) cur += 2 - for _, qid := range msg.Qid() { + for _, qid := range msg.Qids { for i, bit := range qid.marshal() { buf[cur+i] = bit } @@ -706,17 +682,17 @@ func (msg *RWalk) marshal() []byte { return buf } func (msg *RWalk) String() string { - s := fmt.Sprintf("Rwalk tag %d nwqid %d", msg.Tag(), len(msg.Qid())) - for i, q := range msg.Qid() { + s := fmt.Sprintf("Rwalk Tag %d nwqid %d", msg.Tag, len(msg.Qids)) + for i, q := range msg.Qids { s += fmt.Sprintf(" %d:%v", i, q) } return s } type TOpen struct { - tag uint16 - fid uint32 - mode OpenMode + Tag uint16 + Fid uint32 + Mode OpenMode } func newTOpen(buf []byte) *TOpen { @@ -725,11 +701,11 @@ func newTOpen(buf []byte) *TOpen { size := gbit32(buf[cur : cur+4]) cur += 4 cur += 1 // type - msg.tag = gbit16(buf[cur : cur+2]) + msg.Tag = gbit16(buf[cur : cur+2]) cur += 2 - msg.fid = gbit32(buf[cur : cur+4]) + msg.Fid = gbit32(buf[cur : cur+4]) cur += 4 - msg.mode = OpenMode(buf[cur]) + msg.Mode = OpenMode(buf[cur]) cur += 1 if cur != int(size) { panic("size and cursor position don't match") @@ -738,10 +714,8 @@ func newTOpen(buf []byte) *TOpen { } func (msg *TOpen) Size() uint32 { return 4 + 1 + 2 + 4 + 1 } func (msg *TOpen) Type() MsgType { return Topen } -func (msg *TOpen) Tag() uint16 { return msg.tag } -func (msg *TOpen) SetTag(t uint16) { msg.tag = t } -func (msg *TOpen) Fid() uint32 { return msg.fid } -func (msg *TOpen) Mode() OpenMode { return msg.mode } +func (msg *TOpen) GetTag() uint16 { return msg.Tag } +func (msg *TOpen) SetTag(t uint16) { msg.Tag = t } func (msg *TOpen) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -749,11 +723,11 @@ func (msg *TOpen) marshal() []byte { cur += 4 buf[cur] = uint8(Topen) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - pbit32(buf[cur:cur+4], msg.Fid()) + pbit32(buf[cur:cur+4], msg.Fid) cur += 4 - buf[cur] = uint8(msg.Mode()) + buf[cur] = uint8(msg.Mode) cur += 1 if cur != len(buf) { panic("length of buf and cursor position don't match") @@ -762,31 +736,29 @@ func (msg *TOpen) marshal() []byte { } func (msg *TOpen) String() string { - return fmt.Sprintf("Topen tag %d fid %d mode 0x%x", - msg.Tag(), msg.Fid(), msg.Mode()) + return fmt.Sprintf("Topen Tag %d fid %d mode 0x%x", + msg.Tag, msg.Fid, msg.Mode) } type ROpen struct { - tag uint16 - qid Qid - iounit uint32 + Tag uint16 + Qid Qid + Iounit uint32 } func newROpen(buf []byte) *ROpen { msg := new(ROpen) - msg.tag = gbit16(buf[5:7]) - msg.qid = unmarshalQid(buf[7:20]) - msg.iounit = gbit32(buf[20:24]) + msg.Tag = gbit16(buf[5:7]) + msg.Qid = unmarshalQid(buf[7:20]) + msg.Iounit = gbit32(buf[20:24]) return msg } func (msg *ROpen) Size() uint32 { return uint32(4 + 1 + 2 + 13 + 4) } func (msg *ROpen) Type() MsgType { return Ropen } -func (msg *ROpen) Tag() uint16 { return msg.tag } -func (msg *ROpen) SetTag(t uint16) { msg.tag = t } -func (msg *ROpen) Qid() Qid { return msg.qid } -func (msg *ROpen) IoUnit() uint32 { return msg.iounit } +func (msg *ROpen) GetTag() uint16 { return msg.Tag } +func (msg *ROpen) SetTag(t uint16) { msg.Tag = t } func (msg *ROpen) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -794,47 +766,46 @@ func (msg *ROpen) marshal() []byte { cur += 4 buf[cur] = uint8(msg.Type()) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - for i, bit := range msg.Qid().marshal() { + for i, bit := range msg.Qid.marshal() { buf[cur+i] = bit } cur += 13 - pbit32(buf[cur:cur+4], msg.IoUnit()) + pbit32(buf[cur:cur+4], msg.Iounit) cur += 4 if cur != len(buf) { panic("length of buf and cursor position don't match") } - return buf } func (msg *ROpen) String() string { - return fmt.Sprintf("Ropen tag %d qid %v iounit %d", - msg.Tag(), msg.Qid(), msg.IoUnit()) + return fmt.Sprintf("Ropen Tag %d qid %v iounit %d", + msg.Tag, msg.Qid, msg.Iounit) } type TCreate struct { - tag uint16 - fid uint32 - name string - perm FileMode - mode OpenMode + Tag uint16 + Fid uint32 + Name string + Perm FileMode + Mode OpenMode } func newTCreate(buf []byte) *TCreate { msg := new(TCreate) cur := 5 - msg.tag = gbit16(buf[cur : cur+2]) + msg.Tag = gbit16(buf[cur : cur+2]) cur += 2 - msg.fid = gbit32(buf[cur : cur+4]) + msg.Fid = gbit32(buf[cur : cur+4]) cur += 4 nameSize := int(gbit16(buf[cur : cur+2])) cur += 2 - msg.name = string(buf[cur : cur+nameSize]) + msg.Name = string(buf[cur : cur+nameSize]) cur += nameSize - msg.perm = FileMode(gbit32(buf[cur : cur+4])) + msg.Perm = FileMode(gbit32(buf[cur : cur+4])) cur += 4 - msg.mode = OpenMode(buf[cur]) + msg.Mode = OpenMode(buf[cur]) cur += 1 if cur != len(buf) { panic("length and cursor position don't match") @@ -843,15 +814,11 @@ func newTCreate(buf []byte) *TCreate { } func (msg *TCreate) Size() uint32 { - return uint32(4 + 1 + 2 + 4 + 2 + len(msg.name) + 4 + 1) + return uint32(4 + 1 + 2 + 4 + 2 + len(msg.Name) + 4 + 1) } func (msg *TCreate) Type() MsgType { return Tcreate } -func (msg *TCreate) Tag() uint16 { return msg.tag } -func (msg *TCreate) SetTag(t uint16) { msg.tag = t } -func (msg *TCreate) Fid() uint32 { return msg.fid } -func (msg *TCreate) Name() string { return msg.name } -func (msg *TCreate) Perm() FileMode { return msg.perm } -func (msg *TCreate) Mode() OpenMode { return msg.mode } +func (msg *TCreate) GetTag() uint16 { return msg.Tag } +func (msg *TCreate) SetTag(t uint16) { msg.Tag = t } func (msg *TCreate) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -859,21 +826,20 @@ func (msg *TCreate) marshal() []byte { cur += 4 buf[cur] = uint8(msg.Type()) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - pbit32(buf[cur:cur+4], msg.Fid()) + pbit32(buf[cur:cur+4], msg.Fid) cur += 4 - nameSize := len(msg.Name()) + nameSize := len(msg.Name) pbit16(buf[cur:cur+2], uint16(nameSize)) cur += 2 - name := msg.Name() for i := 0; i < nameSize; i++ { - buf[cur+i] = name[i] + buf[cur+i] = msg.Name[i] } cur += nameSize - pbit32(buf[cur:cur+4], uint32(msg.Perm())) + pbit32(buf[cur:cur+4], uint32(msg.Perm)) cur += 4 - buf[cur] = uint8(msg.Mode()) + buf[cur] = uint8(msg.Mode) cur += 1 if cur != len(buf) { panic("length of buf and cursor position don't match") @@ -882,31 +848,29 @@ func (msg *TCreate) marshal() []byte { } func (msg *TCreate) String() string { - return fmt.Sprintf("Tcreate tag %d fid %d name %s perm %v mode 0x%x", - msg.Tag(), msg.Fid(), msg.Name(), permString(msg.Perm()), msg.Mode()) + return fmt.Sprintf("Tcreate Tag %d fid %d name %s perm %v mode 0x%x", + msg.Tag, msg.Fid, msg.Name, permString(msg.Perm), msg.Mode) } type RCreate struct { - tag uint16 - qid Qid - iounit uint32 + Tag uint16 + Qid Qid + Iounit uint32 } func newRCreate(buf []byte) *RCreate { msg := new(RCreate) - msg.tag = gbit16(buf[5:7]) - msg.qid = unmarshalQid(buf[7:20]) - msg.iounit = gbit32(buf[20:24]) + msg.Tag = gbit16(buf[5:7]) + msg.Qid = unmarshalQid(buf[7:20]) + msg.Iounit = gbit32(buf[20:24]) return msg } func (msg *RCreate) Size() uint32 { return uint32(4 + 1 + 2 + 13 + 4) } func (msg *RCreate) Type() MsgType { return Rcreate } -func (msg *RCreate) Tag() uint16 { return msg.tag } -func (msg *RCreate) SetTag(t uint16) { msg.tag = t } -func (msg *RCreate) Qid() Qid { return msg.qid } -func (msg *RCreate) IoUnit() uint32 { return msg.iounit } +func (msg *RCreate) GetTag() uint16 { return msg.Tag } +func (msg *RCreate) SetTag(t uint16) { msg.Tag = t } func (msg *RCreate) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -914,30 +878,29 @@ func (msg *RCreate) marshal() []byte { cur += 4 buf[cur] = uint8(msg.Type()) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - for i, bit := range msg.Qid().marshal() { + for i, bit := range msg.Qid.marshal() { buf[cur+i] = bit } cur += 13 - pbit32(buf[cur:cur+4], msg.IoUnit()) + pbit32(buf[cur:cur+4], msg.Iounit) cur += 4 if cur != len(buf) { panic("length of buf and cursor position don't match") } - return buf } func (msg *RCreate) String() string { - return fmt.Sprintf("Rcreate tag %d qid %v iounit %d", - msg.Tag(), msg.Qid(), msg.IoUnit()) + return fmt.Sprintf("Rcreate Tag %d qid %v iounit %d", + msg.Tag, msg.Qid, msg.Iounit) } type TRead struct { - tag uint16 - fid uint32 - offset uint64 - count uint32 + Tag uint16 + Fid uint32 + Offset uint64 + Count uint32 } func newTRead(buf []byte) *TRead { @@ -946,13 +909,13 @@ func newTRead(buf []byte) *TRead { size := gbit32(buf[cur : cur+4]) cur += 4 cur += 1 // type - msg.tag = gbit16(buf[cur : cur+2]) + msg.Tag = gbit16(buf[cur : cur+2]) cur += 2 - msg.fid = gbit32(buf[cur : cur+4]) + msg.Fid = gbit32(buf[cur : cur+4]) cur += 4 - msg.offset = gbit64(buf[cur : cur+8]) + msg.Offset = gbit64(buf[cur : cur+8]) cur += 8 - msg.count = gbit32(buf[cur : cur+4]) + msg.Count = gbit32(buf[cur : cur+4]) cur += 4 if cur != int(size) { panic(fmt.Errorf("size %d != cursor position %d", size, cur)) @@ -961,11 +924,8 @@ func newTRead(buf []byte) *TRead { } func (msg *TRead) Size() uint32 { return 4 + 1 + 2 + 4 + 8 + 4 } func (msg *TRead) Type() MsgType { return Tread } -func (msg *TRead) Tag() uint16 { return msg.tag } -func (msg *TRead) SetTag(t uint16) { msg.tag = t } -func (msg *TRead) Fid() uint32 { return msg.fid } -func (msg *TRead) Offset() uint64 { return msg.offset } -func (msg *TRead) Count() uint32 { return msg.count } +func (msg *TRead) GetTag() uint16 { return msg.Tag } +func (msg *TRead) SetTag(t uint16) { msg.Tag = t } func (msg *TRead) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -973,13 +933,13 @@ func (msg *TRead) marshal() []byte { cur += 4 buf[cur] = uint8(msg.Type()) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - pbit32(buf[cur:cur+4], msg.Fid()) + pbit32(buf[cur:cur+4], msg.Fid) cur += 4 - pbit64(buf[cur:cur+8], msg.Offset()) + pbit64(buf[cur:cur+8], msg.Offset) cur += 8 - pbit32(buf[cur:cur+4], msg.Count()) + pbit32(buf[cur:cur+4], msg.Count) cur += 4 if cur != len(buf) { panic("length of buf and cursor position don't match") @@ -987,38 +947,36 @@ func (msg *TRead) marshal() []byte { return buf } func (msg *TRead) String() string { - return fmt.Sprintf("Tread tag %d fid %d offset %d count %d", - msg.Tag(), msg.Fid(), msg.Offset(), msg.Count()) + return fmt.Sprintf("Tread Tag %d fid %d offset %d count %d", + msg.Tag, msg.Fid, msg.Offset, msg.Count) } type RRead struct { - tag uint16 - count uint32 - data []byte + Tag uint16 + Count uint32 + Data []byte } func newRRead(buf []byte) *RRead { msg := new(RRead) - msg.tag = gbit16(buf[5:7]) - msg.count = gbit32(buf[7:11]) - msg.data = make([]byte, msg.count) - for i := 0; i < int(msg.count); i++ { - msg.data[i] = buf[11+i] + msg.Tag = gbit16(buf[5:7]) + msg.Count = gbit32(buf[7:11]) + msg.Data = make([]byte, msg.Count) + for i := 0; i < int(msg.Count); i++ { + msg.Data[i] = buf[11+i] } return msg } func (msg *RRead) Size() uint32 { - return uint32(4 + 1 + 2 + 4 + msg.Count()) + return uint32(4 + 1 + 2 + 4 + msg.Count) } func (msg *RRead) Type() MsgType { return Rread } -func (msg *RRead) Tag() uint16 { return msg.tag } -func (msg *RRead) SetTag(t uint16) { msg.tag = t } -func (msg *RRead) Count() uint32 { return msg.count } -func (msg *RRead) Data() []byte { return msg.data } +func (msg *RRead) GetTag() uint16 { return msg.Tag } +func (msg *RRead) SetTag(t uint16) { msg.Tag = t } func (msg *RRead) marshal() []byte { - if uint32(len(msg.Data())) != msg.Count() { + if uint32(len(msg.Data)) != msg.Count { panic(fmt.Errorf("data size %d and count %d don't match", - len(msg.Data()), msg.Count())) + len(msg.Data), msg.Count)) } cur := 0 buf := make([]byte, msg.Size()) @@ -1026,78 +984,73 @@ func (msg *RRead) marshal() []byte { cur += 4 buf[cur] = uint8(msg.Type()) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - pbit32(buf[cur:cur+4], msg.Count()) + pbit32(buf[cur:cur+4], msg.Count) cur += 4 - data := msg.Data() - for i := 0; i < len(data); i++ { - buf[cur+i] = data[i] + for i := 0; i < len(msg.Data); i++ { + buf[cur+i] = msg.Data[i] } - cur += len(data) + cur += len(msg.Data) if cur != len(buf) { panic("length of buf and cursor position don't match") } return buf } func (msg *RRead) String() string { - s := fmt.Sprintf("Rread tag %d count %d '", - msg.Tag(), msg.Count()) - data := msg.Data() + s := fmt.Sprintf("Rread Tag %d count %d '", + msg.Tag, msg.Count) i := 0 - for ; i+4 < len(data) && i < 64; i += 4 { - s += fmt.Sprintf(" %02x%02x%02x%02x", uint8(data[i]), uint8(data[i+1]), - uint8(data[i+2]), uint8(data[i+3])) + for ; i+4 < len(msg.Data) && i < 64; i += 4 { + s += fmt.Sprintf(" %02x%02x%02x%02x", + uint8(msg.Data[i]), uint8(msg.Data[i+1]), + uint8(msg.Data[i+2]), uint8(msg.Data[i+3])) } - if i != len(data) && i != 64 { + if i != len(msg.Data) && i != 64 { s += " " } - for ; i < len(data) && i < 64; i++ { - s += fmt.Sprintf("%02x", uint8(data[i])) + for ; i < len(msg.Data) && i < 64; i++ { + s += fmt.Sprintf("%02x", uint8(msg.Data[i])) } s += "'" return s } type TWrite struct { - tag uint16 - fid uint32 - offset uint64 - count uint32 - data []byte + Tag uint16 + Fid uint32 + Offset uint64 + Count uint32 + Data []byte } func newTWrite(buf []byte) *TWrite { cur := 5 msg := new(TWrite) - msg.tag = gbit16(buf[cur : cur+2]) + msg.Tag = gbit16(buf[cur : cur+2]) cur += 2 - msg.fid = gbit32(buf[cur : cur+4]) + msg.Fid = gbit32(buf[cur : cur+4]) cur += 4 - msg.offset = gbit64(buf[cur : cur+8]) + msg.Offset = gbit64(buf[cur : cur+8]) cur += 8 - msg.count = gbit32(buf[cur : cur+4]) + msg.Count = gbit32(buf[cur : cur+4]) cur += 4 - msg.data = make([]byte, msg.count) - for i := 0; i < int(msg.count); i++ { - msg.data[i] = buf[cur+i] + msg.Data = make([]byte, msg.Count) + for i := 0; i < int(msg.Count); i++ { + msg.Data[i] = buf[cur+i] } - cur += int(msg.count) + cur += int(msg.Count) if cur != len(buf) { panic("length of buf and cursor position don't match") } return msg } func (msg *TWrite) Size() uint32 { - return uint32(4 + 1 + 2 + 4 + 8 + 4 + len(msg.Data())) + return uint32(4 + 1 + 2 + 4 + 8 + 4 + len(msg.Data)) } func (msg *TWrite) Type() MsgType { return Twrite } -func (msg *TWrite) Tag() uint16 { return msg.tag } -func (msg *TWrite) SetTag(t uint16) { msg.tag = t } -func (msg *TWrite) Fid() uint32 { return msg.fid } -func (msg *TWrite) Offset() uint64 { return msg.offset } -func (msg *TWrite) Count() uint32 { return msg.count } -func (msg *TWrite) Data() []byte { return msg.data } +func (msg *TWrite) GetTag() uint16 { return msg.Tag } +func (msg *TWrite) SetTag(t uint16) { msg.Tag = t } func (msg *TWrite) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -1105,46 +1058,45 @@ func (msg *TWrite) marshal() []byte { cur += 4 buf[cur] = uint8(msg.Type()) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - pbit32(buf[cur:cur+4], msg.Fid()) + pbit32(buf[cur:cur+4], msg.Fid) cur += 4 - pbit64(buf[cur:cur+8], msg.Offset()) + pbit64(buf[cur:cur+8], msg.Offset) cur += 8 - pbit32(buf[cur:cur+4], msg.Count()) + pbit32(buf[cur:cur+4], msg.Count) cur += 4 - for i := 0; i < int(msg.Count()); i++ { - buf[cur+i] = msg.data[i] + for i := 0; i < int(msg.Count); i++ { + buf[cur+i] = msg.Data[i] } - cur += int(msg.Count()) + cur += int(msg.Count) if cur != len(buf) { panic("length of buf and cursor position don't match") } return buf } func (msg *TWrite) String() string { - return fmt.Sprintf("Twrite tag %d fid %d offset %d count %d '%s'", - msg.Tag(), msg.Fid(), msg.Offset(), msg.Count(), msg.Data()) + return fmt.Sprintf("Twrite Tag %d fid %d offset %d count %d '%s'", + msg.Tag, msg.Fid, msg.Offset, msg.Count, msg.Data) } type RWrite struct { - tag uint16 - count uint32 + Tag uint16 + Count uint32 } func newRWrite(buf []byte) *RWrite { msg := new(RWrite) - msg.tag = gbit16(buf[5:7]) - msg.count = gbit32(buf[7:11]) + msg.Tag = gbit16(buf[5:7]) + msg.Count = gbit32(buf[7:11]) return msg } func (msg *RWrite) Size() uint32 { return uint32(4 + 1 + 2 + 4) } func (msg *RWrite) Type() MsgType { return Rwrite } -func (msg *RWrite) Tag() uint16 { return msg.tag } -func (msg *RWrite) SetTag(t uint16) { msg.tag = t } -func (msg *RWrite) Count() uint32 { return msg.count } +func (msg *RWrite) GetTag() uint16 { return msg.Tag } +func (msg *RWrite) SetTag(t uint16) { msg.Tag = t } func (msg *RWrite) marshal() []byte { cur := 0 buf := make([]byte, msg.Size()) @@ -1152,9 +1104,9 @@ func (msg *RWrite) marshal() []byte { cur += 4 buf[cur] = uint8(msg.Type()) cur += 1 - pbit16(buf[cur:cur+2], msg.Tag()) + pbit16(buf[cur:cur+2], msg.Tag) cur += 2 - pbit32(buf[cur:cur+4], msg.Count()) + pbit32(buf[cur:cur+4], msg.Count) cur += 4 if cur != len(buf) { panic("length of buf and cursor position don't match") @@ -1163,170 +1115,166 @@ func (msg *RWrite) marshal() []byte { } func (msg *RWrite) String() string { - return fmt.Sprintf("Rwrite tag %d count %d", msg.Tag(), msg.Count()) + return fmt.Sprintf("Rwrite Tag %d count %d", msg.Tag, msg.Count) } type TClunk struct { - tag uint16 - fid uint32 + Tag uint16 + Fid uint32 } func newTClunk(buf []byte) *TClunk { msg := new(TClunk) - msg.tag = gbit16(buf[5:7]) - msg.fid = gbit32(buf[7:11]) + msg.Tag = gbit16(buf[5:7]) + msg.Fid = gbit32(buf[7:11]) return msg } func (msg *TClunk) Size() uint32 { return 4 + 1 + 2 + 4 } func (msg *TClunk) Type() MsgType { return Tclunk } -func (msg *TClunk) Tag() uint16 { return msg.tag } -func (msg *TClunk) SetTag(t uint16) { msg.tag = t } -func (msg *TClunk) Fid() uint32 { return msg.fid } +func (msg *TClunk) GetTag() uint16 { return msg.Tag } +func (msg *TClunk) SetTag(t uint16) { msg.Tag = t } func (msg *TClunk) marshal() []byte { m := make([]byte, msg.Size()) pbit32(m[0:4], msg.Size()) m[4] = uint8(Tclunk) - pbit16(m[5:7], msg.Tag()) - pbit32(m[7:11], msg.Fid()) + pbit16(m[5:7], msg.Tag) + pbit32(m[7:11], msg.Fid) return m } func (msg *TClunk) String() string { - return fmt.Sprintf("Tclunk tag %d fid %d", - msg.Tag(), msg.Fid()) + return fmt.Sprintf("Tclunk Tag %d fid %d", + msg.Tag, msg.Fid) } type RClunk struct { - tag uint16 + Tag uint16 } func newRClunk(buf []byte) *RClunk { msg := new(RClunk) - msg.tag = gbit16(buf[5:7]) + msg.Tag = gbit16(buf[5:7]) return msg } func (msg *RClunk) Size() uint32 { return 7 } func (msg *RClunk) Type() MsgType { return Rclunk } -func (msg *RClunk) Tag() uint16 { return msg.tag } -func (msg *RClunk) SetTag(t uint16) { msg.tag = t } +func (msg *RClunk) GetTag() uint16 { return msg.Tag } +func (msg *RClunk) SetTag(t uint16) { msg.Tag = t } func (msg *RClunk) marshal() []byte { m := make([]byte, msg.Size()) pbit32(m[0:4], msg.Size()) m[4] = uint8(Rclunk) - pbit16(m[5:7], msg.Tag()) + pbit16(m[5:7], msg.Tag) return m } func (msg *RClunk) String() string { - return fmt.Sprintf("Rclunk tag %d", msg.Tag()) + return fmt.Sprintf("Rclunk Tag %d", msg.Tag) } type TRemove struct { - tag uint16 - fid uint32 + Tag uint16 + Fid uint32 } func newTRemove(buf []byte) *TRemove { msg := new(TRemove) - msg.tag = gbit16(buf[5:7]) - msg.fid = gbit32(buf[7:11]) + msg.Tag = gbit16(buf[5:7]) + msg.Fid = gbit32(buf[7:11]) return msg } func (msg *TRemove) Size() uint32 { return 4 + 1 + 2 + 4 } func (msg *TRemove) Type() MsgType { return Tremove } -func (msg *TRemove) Tag() uint16 { return msg.tag } -func (msg *TRemove) SetTag(t uint16) { msg.tag = t } -func (msg *TRemove) Fid() uint32 { return msg.fid } +func (msg *TRemove) GetTag() uint16 { return msg.Tag } +func (msg *TRemove) SetTag(t uint16) { msg.Tag = t } func (msg *TRemove) marshal() []byte { m := make([]byte, msg.Size()) pbit32(m[0:4], msg.Size()) m[4] = uint8(msg.Type()) - pbit16(m[5:7], msg.Tag()) - pbit32(m[7:11], msg.Fid()) + pbit16(m[5:7], msg.Tag) + pbit32(m[7:11], msg.Fid) return m } func (msg *TRemove) String() string { - return fmt.Sprintf("Tremove tag %d fid %d", msg.Tag(), msg.Fid()) + return fmt.Sprintf("Tremove Tag %d fid %d", msg.Tag, msg.Fid) } type RRemove struct { - tag uint16 + Tag uint16 } func newRRemove(buf []byte) *RRemove { msg := new(RRemove) - msg.tag = gbit16(buf[5:7]) + msg.Tag = gbit16(buf[5:7]) return msg } func (msg *RRemove) Size() uint32 { return 4 + 1 + 2 } func (msg *RRemove) Type() MsgType { return Rremove } -func (msg *RRemove) Tag() uint16 { return msg.tag } -func (msg *RRemove) SetTag(t uint16) { msg.tag = t } +func (msg *RRemove) GetTag() uint16 { return msg.Tag } +func (msg *RRemove) SetTag(t uint16) { msg.Tag = t } func (msg *RRemove) marshal() []byte { m := make([]byte, msg.Size()) pbit32(m[0:4], msg.Size()) m[4] = uint8(msg.Type()) - pbit16(m[5:7], msg.Tag()) + pbit16(m[5:7], msg.Tag) return m } func (msg *RRemove) String() string { - return fmt.Sprintf("Rremove tag %d", msg.Tag()) + return fmt.Sprintf("Rremove Tag %d", msg.Tag) } type TStat struct { - tag uint16 - fid uint32 + Tag uint16 + Fid uint32 } func newTStat(buf []byte) *TStat { msg := new(TStat) - msg.tag = gbit16(buf[5:7]) - msg.fid = gbit32(buf[7:11]) + msg.Tag = gbit16(buf[5:7]) + msg.Fid = gbit32(buf[7:11]) return msg } func (msg *TStat) Size() uint32 { return 4 + 1 + 2 + 4 } func (msg *TStat) Type() MsgType { return Tstat } -func (msg *TStat) Tag() uint16 { return msg.tag } -func (msg *TStat) SetTag(t uint16) { msg.tag = t } -func (msg *TStat) Fid() uint32 { return msg.fid } +func (msg *TStat) GetTag() uint16 { return msg.Tag } +func (msg *TStat) SetTag(t uint16) { msg.Tag = t } func (msg *TStat) marshal() []byte { m := make([]byte, msg.Size()) pbit32(m[0:4], msg.Size()) m[4] = uint8(Tstat) - pbit16(m[5:7], msg.Tag()) - pbit32(m[7:11], msg.Fid()) + pbit16(m[5:7], msg.Tag) + pbit32(m[7:11], msg.Fid) return m } func (msg *TStat) String() string { - return fmt.Sprintf("Tstat tag %d fid %d", - msg.Tag(), msg.Fid()) + return fmt.Sprintf("Tstat Tag %d fid %d", + msg.Tag, msg.Fid) } type RStat struct { - tag uint16 - stat *Stat + Tag uint16 + Stat *Stat } func newRStat(buf []byte) *RStat { msg := new(RStat) size := gbit32(buf[:4]) - msg.tag = gbit16(buf[5:7]) - msg.stat = newStat(buf[9:size]) + msg.Tag = gbit16(buf[5:7]) + msg.Stat = newStat(buf[9:size]) return msg } func (msg *RStat) Size() uint32 { - return uint32(4 + 1 + 2 + 2 + 2 + msg.stat.size()) + return uint32(4 + 1 + 2 + 2 + 2 + msg.Stat.size()) } func (msg *RStat) Type() MsgType { return Rstat } -func (msg *RStat) Tag() uint16 { return msg.tag } -func (msg *RStat) SetTag(t uint16) { msg.tag = t } +func (msg *RStat) GetTag() uint16 { return msg.Tag } +func (msg *RStat) SetTag(t uint16) { msg.Tag = t } func (msg *RStat) marshal() []byte { buf := make([]byte, msg.Size()) pbit32(buf[0:4], msg.Size()) buf[4] = uint8(Rstat) - pbit16(buf[5:7], msg.Tag()) - - fiBuf := msg.stat.marshal() + pbit16(buf[5:7], msg.Tag) + fiBuf := msg.Stat.marshal() pbit16(buf[7:9], uint16(len(fiBuf))) for i := 0; i < len(fiBuf); i++ { buf[9+i] = fiBuf[i] @@ -1335,38 +1283,35 @@ func (msg *RStat) marshal() []byte { } func (msg *RStat) String() string { - return fmt.Sprintf("Rstat tag %d stat %s", msg.Tag(), msg.stat) + return fmt.Sprintf("Rstat Tag %d stat %s", msg.Tag, msg.Stat) } type TWStat struct { - tag uint16 - fid uint32 - stat *Stat + Tag uint16 + Fid uint32 + Stat *Stat } func newTWStat(buf []byte) *TWStat { msg := new(TWStat) - msg.tag = gbit16(buf[5:7]) - msg.fid = gbit32(buf[7:11]) - msg.stat = newStat(buf[13:]) + msg.Tag = gbit16(buf[5:7]) + msg.Fid = gbit32(buf[7:11]) + msg.Stat = newStat(buf[13:]) return msg } func (msg *TWStat) Size() uint32 { - return uint32(4 + 1 + 2 + 4 + 2 + 2 + msg.stat.size()) + return uint32(4 + 1 + 2 + 4 + 2 + 2 + msg.Stat.size()) } func (msg *TWStat) Type() MsgType { return Twstat } -func (msg *TWStat) Tag() uint16 { return msg.tag } -func (msg *TWStat) SetTag(t uint16) { msg.tag = t } -func (msg *TWStat) Fid() uint32 { return msg.fid } -func (msg *TWStat) Stat() *Stat { return msg.stat } +func (msg *TWStat) GetTag() uint16 { return msg.Tag } +func (msg *TWStat) SetTag(t uint16) { msg.Tag = t } func (msg *TWStat) marshal() []byte { buf := make([]byte, msg.Size()) pbit32(buf[0:4], msg.Size()) buf[4] = uint8(msg.Type()) - pbit16(buf[5:7], msg.Tag()) - pbit32(buf[7:11], msg.Fid()) - - fiBuf := msg.stat.marshal() + pbit16(buf[5:7], msg.Tag) + pbit32(buf[7:11], msg.Fid) + fiBuf := msg.Stat.marshal() pbit16(buf[11:13], uint16(len(fiBuf))) for i := 0; i < len(fiBuf); i++ { buf[13+i] = fiBuf[i] @@ -1375,29 +1320,29 @@ func (msg *TWStat) marshal() []byte { } func (msg *TWStat) String() string { - return fmt.Sprintf("Twstat tag %d fid %d stat %s", msg.Tag(), msg.Fid(), msg.stat) + return fmt.Sprintf("Twstat Tag %d fid %d stat %s", msg.Tag, msg.Fid, msg.Stat) } type RWStat struct { - tag uint16 + Tag uint16 } func newRWStat(buf []byte) *RWStat { msg := new(RWStat) - msg.tag = gbit16(buf[5:7]) + msg.Tag = gbit16(buf[5:7]) return msg } func (msg *RWStat) Size() uint32 { return 4 + 1 + 2 } func (msg *RWStat) Type() MsgType { return Rwstat } -func (msg *RWStat) Tag() uint16 { return msg.tag } -func (msg *RWStat) SetTag(t uint16) { msg.tag = t } +func (msg *RWStat) GetTag() uint16 { return msg.Tag } +func (msg *RWStat) SetTag(t uint16) { msg.Tag = t } func (msg *RWStat) marshal() []byte { m := make([]byte, msg.Size()) pbit32(m[0:4], msg.Size()) m[4] = uint8(msg.Type()) - pbit16(m[5:7], msg.Tag()) + pbit16(m[5:7], msg.Tag) return m } func (msg *RWStat) String() string { - return fmt.Sprintf("Rwstat tag %d", msg.Tag()) + return fmt.Sprintf("Rwstat Tag %d", msg.Tag) } diff --git a/server.go b/server.go @@ -24,7 +24,7 @@ var ( func setError(r *Req, err error) { r.ofcall = &RError{ - ename: err, + Ename: err, } } @@ -157,7 +157,7 @@ func getReq(r io.Reader, s *Server) (*Req, error) { } return nil, fmt.Errorf("recv: %v", err) } - req, err := s.rPool.add(bufMsg(buf).Tag()) + req, err := s.rPool.add(bufMsg(buf).GetTag()) if err != nil { // duplicate tag: cons up a fake Req req := new(Req) @@ -173,7 +173,7 @@ func getReq(r io.Reader, s *Server) (*Req, error) { return req, ErrDupTag } req.srv = s - req.tag = bufMsg(buf).Tag() + req.tag = bufMsg(buf).GetTag() req.ifcall, err = unmarshal(buf) if err != nil { log.Printf("unmarshal: %v", err) @@ -184,7 +184,7 @@ func getReq(r io.Reader, s *Server) (*Req, error) { return req, err } if ifcall, ok := req.ifcall.(*TFlush); ok { - req.oldReq, _ = req.srv.rPool.lookup(ifcall.OldTag()) + req.oldReq, _ = req.srv.rPool.lookup(ifcall.Oldtag) } if s.chatty9P { fmt.Fprintf(os.Stderr, "<-- %v\n", req.ifcall) @@ -202,19 +202,19 @@ func getReq(r io.Reader, s *Server) (*Req, error) { // serving new Tversion. func sVersion(ctx context.Context, s *Server, r *Req) { ifcall := r.ifcall.(*TVersion) - version := ifcall.Version() + version := ifcall.Version if ok := strings.HasPrefix(version, "9P2000"); !ok { version = "unknown" } else { version = "9P2000" } - msize := ifcall.MSize() + msize := ifcall.Msize if msize > s.mSize() { msize = s.mSize() } r.ofcall = &RVersion{ - mSize: msize, - version: version, + Msize: msize, + Version: version, } respond(ctx, r, nil) } @@ -225,14 +225,14 @@ func rVersion(r *Req, err error) { if err != nil { panic(fmt.Errorf("rVersion err: %w", err)) } - r.srv.setMSize(r.ofcall.(*RVersion).MSize()) + r.srv.setMSize(r.ofcall.(*RVersion).Msize) } // sAuth serves Tauth message. func sAuth(ctx context.Context, s *Server, r *Req) { ifcall := r.ifcall.(*TAuth) var err error - r.afid, err = s.fPool.add(ifcall.AFid()) + r.afid, err = s.fPool.add(ifcall.Afid) if err != nil { respond(ctx, r, ErrDupFid) } @@ -244,32 +244,32 @@ func sAuth(ctx context.Context, s *Server, r *Req) { } } -// rAuth checks if err is nil, and if not, it deletes the +// rAuth checks if err is nil, and if not, it deletes the // allocated fid from fPool. func rAuth(r *Req, err error) { if err != nil { - r.srv.fPool.delete(r.ifcall.(*TAuth).AFid()) + r.srv.fPool.delete(r.ifcall.(*TAuth).Afid) setError(r, err) } } func sAttach(ctx context.Context, s *Server, r *Req) { ifcall := r.ifcall.(*TAttach) - fid, err := s.fPool.add(ifcall.Fid()) + fid, err := s.fPool.add(ifcall.Fid) if err != nil { respond(ctx, r, ErrDupFid) return } switch { - case s.Auth == nil && ifcall.AFid() == NOFID: - case s.Auth == nil && ifcall.AFid() != NOFID: + case s.Auth == nil && ifcall.Afid == NOFID: + case s.Auth == nil && ifcall.Afid != NOFID: respond(ctx, r, ErrBotch) return - case s.Auth != nil && ifcall.AFid() == NOFID: + case s.Auth != nil && ifcall.Afid == NOFID: respond(ctx, r, fmt.Errorf("authentication required")) return - case s.Auth != nil && ifcall.AFid() != NOFID: - afid, ok := s.fPool.lookup(ifcall.AFid()) + case s.Auth != nil && ifcall.Afid != NOFID: + afid, ok := s.fPool.lookup(ifcall.Afid) if !ok { respond(ctx, r, ErrUnknownFid) return @@ -289,7 +289,7 @@ func sAttach(ctx context.Context, s *Server, r *Req) { respond(ctx, r, fmt.Errorf("open root: %v", err)) return } - fid.Uid = ifcall.UName() + fid.Uid = ifcall.Uname fid.OMode = -1 // TODO: right? st, err := fid.File.Stat() if err != nil { @@ -297,14 +297,14 @@ func sAttach(ctx context.Context, s *Server, r *Req) { return } r.ofcall = &RAttach{ - qid: st.Sys().(*Stat).Qid, + Qid: st.Sys().(*Stat).Qid, } respond(ctx, r, nil) } func rAttach(r *Req, err error) { if err != nil { - r.srv.fPool.delete(r.ifcall.(*TAttach).Fid()) + r.srv.fPool.delete(r.ifcall.(*TAttach).Fid) setError(r, err) } } @@ -325,7 +325,7 @@ func rFlush(r *Req, err error) { func sWalk(ctx context.Context, s *Server, r *Req) { ifcall := r.ifcall.(*TWalk) - oldFid, ok := s.fPool.lookup(ifcall.Fid()) + oldFid, ok := s.fPool.lookup(ifcall.Fid) if !ok { respond(ctx, r, ErrUnknownFid) return @@ -339,28 +339,28 @@ func sWalk(ctx context.Context, s *Server, r *Req) { respond(ctx, r, fmt.Errorf("stat: %v", err)) return } - if ifcall.NWName() > 0 && oldst.Sys().(*Stat).Qid.Type&QTDIR == 0 { + if len(ifcall.Wnames) > 0 && oldst.Sys().(*Stat).Qid.Type&QTDIR == 0 { respond(ctx, r, fmt.Errorf("walk on non-dir")) return } var newFid *Fid - if ifcall.Fid() == ifcall.NewFid() { + if ifcall.Fid == ifcall.Newfid { newFid = oldFid } else { var err error - newFid, err = s.fPool.add(ifcall.NewFid()) + newFid, err = s.fPool.add(ifcall.Newfid) if err != nil { log.Printf("alloc: %v", err) respond(ctx, r, fmt.Errorf("internal error")) return } } - wqids := make([]Qid, ifcall.NWName()) + wqids := make([]Qid, len(ifcall.Wnames)) cwdp := oldFid.path cwdf := oldFid.File err = nil var n int - for i, name := range ifcall.WName() { + for i, name := range ifcall.Wnames { cwdp = path.Join(cwdp, name) cwdf, err = s.fs.OpenFile(cwdp, OREAD, 0) if err != nil { @@ -379,7 +379,7 @@ func sWalk(ctx context.Context, s *Server, r *Req) { newFid.Uid = oldFid.Uid newFid.path = cwdp r.ofcall = &RWalk{ - qid: wqids[:n], + Qids: wqids[:n], } respond(ctx, r, nil) } @@ -387,12 +387,12 @@ func sWalk(ctx context.Context, s *Server, r *Req) { func rWalk(r *Req, err error) { ifcall := r.ifcall.(*TWalk) ofcall := r.ofcall.(*RWalk) - if err != nil || len(ofcall.Qid()) < int(ifcall.NWName()) { - if ifcall.Fid() != ifcall.NewFid() { - r.srv.fPool.delete(ifcall.NewFid()) + if err != nil || len(ofcall.Qids) < len(ifcall.Wnames) { + if ifcall.Fid != ifcall.Newfid { + r.srv.fPool.delete(ifcall.Newfid) } - if len(ofcall.Qid()) == 0 { - if err == nil && ifcall.NWName() != 0 { + if len(ofcall.Qids) == 0 { + if err == nil && len(ifcall.Wnames) != 0 { setError(r, ErrNotFound) return } @@ -403,7 +403,7 @@ func rWalk(r *Req, err error) { func sOpen(ctx context.Context, s *Server, r *Req) { ifcall := r.ifcall.(*TOpen) var ok bool - r.fid, ok = s.fPool.lookup(ifcall.Fid()) + r.fid, ok = s.fPool.lookup(ifcall.Fid) if !ok { respond(ctx, r, ErrUnknownFid) return @@ -422,12 +422,12 @@ func sOpen(ctx context.Context, s *Server, r *Req) { return } qid := st.Sys().(*Stat).Qid - if qid.Type == QTDIR && ifcall.Mode() != OREAD { + if qid.Type == QTDIR && ifcall.Mode != OREAD { respond(ctx, r, fmt.Errorf("is a directory")) return } var p fs.FileMode - switch ifcall.Mode() & 3 { + switch ifcall.Mode & 3 { default: panic("invalid mode") case OREAD: @@ -439,7 +439,7 @@ func sOpen(ctx context.Context, s *Server, r *Req) { case OEXEC: p = AEXEC } - if ifcall.Mode()&OTRUNC != 0 { + if ifcall.Mode&OTRUNC != 0 { p |= AWRITE } if qid.Type&QTDIR != 0 && p != AREAD { @@ -450,7 +450,7 @@ func sOpen(ctx context.Context, s *Server, r *Req) { respond(ctx, r, ErrPerm) return } - if ifcall.Mode()&ORCLOSE != 0 { + if ifcall.Mode&ORCLOSE != 0 { parentPath := path.Dir(r.fid.path) parent, err := s.fs.OpenFile(parentPath, OREAD, 0) defer parent.Close() @@ -464,8 +464,8 @@ func sOpen(ctx context.Context, s *Server, r *Req) { } } r.ofcall = &ROpen{ - qid: qid, - iounit: s.mSize() - IOHDRSZ, + Qid: qid, + Iounit: s.mSize() - IOHDRSZ, } respond(ctx, r, nil) } @@ -475,7 +475,7 @@ func rOpen(r *Req, err error) { setError(r, err) return } - r.fid.OMode = r.ifcall.(*TOpen).Mode() + r.fid.OMode = r.ifcall.(*TOpen).Mode f, err := r.srv.fs.OpenFile(r.fid.path, r.fid.OMode, 0) if err != nil { setError(r, err) @@ -487,7 +487,7 @@ func rOpen(r *Req, err error) { func sCreate(ctx context.Context, s *Server, r *Req) { ifcall := r.ifcall.(*TCreate) var ok bool - r.fid, ok = s.fPool.lookup(ifcall.Fid()) + r.fid, ok = s.fPool.lookup(ifcall.Fid) if !ok { respond(ctx, r, ErrUnknownFid) return @@ -511,14 +511,14 @@ func sCreate(ctx context.Context, s *Server, r *Req) { respond(ctx, r, ErrOperation) return } - perm := ifcall.Perm() + perm := ifcall.Perm dirperm := dirstat.Mode() if perm&fs.ModeDir == 0 { perm &= ^FileMode(0666) | (dirperm & FileMode(0666)) } else { perm &= ^FileMode(0777) | (dirperm & FileMode(0777)) } - file, err := cfdir.Create(ifcall.Name(), r.fid.Uid, ifcall.Mode(), perm) + file, err := cfdir.Create(ifcall.Name, r.fid.Uid, ifcall.Mode, perm) if err != nil { respond(ctx, r, fmt.Errorf("create: %v", err)) return @@ -528,15 +528,15 @@ func sCreate(ctx context.Context, s *Server, r *Req) { return } r.fid.File = file - r.fid.path = path.Join(r.fid.path, ifcall.Name()) + r.fid.path = path.Join(r.fid.path, ifcall.Name) st, err := r.fid.File.Stat() if err != nil { respond(ctx, r, fmt.Errorf("stat: %v", err)) return } r.ofcall = &RCreate{ - qid: st.Sys().(*Stat).Qid, - iounit: s.mSize() - IOHDRSZ, + Qid: st.Sys().(*Stat).Qid, + Iounit: s.mSize() - IOHDRSZ, } respond(ctx, r, nil) } @@ -545,7 +545,7 @@ func rCreate(r *Req, err error) { setError(r, err) return } - r.fid.OMode = r.ifcall.(*TCreate).Mode() + r.fid.OMode = r.ifcall.(*TCreate).Mode // TODO: pass OCREATE with non 0 perm. f, err := r.srv.fs.OpenFile(r.fid.path, r.fid.OMode, 0) if err != nil { @@ -558,7 +558,7 @@ func rCreate(r *Req, err error) { func sRead(ctx context.Context, s *Server, r *Req) { ifcall := r.ifcall.(*TRead) var ok bool - r.fid, ok = s.fPool.lookup(ifcall.Fid()) + r.fid, ok = s.fPool.lookup(ifcall.Fid) if !ok { respond(ctx, r, ErrUnknownFid) return @@ -571,7 +571,7 @@ func sRead(ctx context.Context, s *Server, r *Req) { respond(ctx, r, ErrPerm) return } - data := make([]byte, ifcall.Count()) + data := make([]byte, ifcall.Count) done := make(chan struct{}) var ( n int @@ -597,11 +597,11 @@ func sRead(ctx context.Context, s *Server, r *Req) { log.Printf("get children: %v", err) } - if ifcall.Offset() != 0 && ifcall.Offset() != r.fid.dirOffset { + if ifcall.Offset != 0 && ifcall.Offset != r.fid.dirOffset { respond(ctx, r, fmt.Errorf("invalid dir offset")) return } - if ifcall.Offset() == 0 { + if ifcall.Offset == 0 { r.fid.dirIndex = 0 r.fid.dirOffset = 0 } @@ -629,7 +629,7 @@ func sRead(ctx context.Context, s *Server, r *Req) { r.fid.dirIndex = k } else { if reader, ok := r.fid.File.(io.ReaderAt); ok { - n, err = reader.ReadAt(data, int64(ifcall.Offset())) + n, err = reader.ReadAt(data, int64(ifcall.Offset)) } else { n, err = r.fid.File.Read(data) } @@ -645,8 +645,8 @@ func sRead(ctx context.Context, s *Server, r *Req) { case <-ctx.Done(): } r.ofcall = &RRead{ - count: uint32(n), - data: data[:n], + Count: uint32(n), + Data: data[:n], } respond(ctx, r, nil) } @@ -659,15 +659,13 @@ func rRead(r *Req, err error) { func sWrite(ctx context.Context, s *Server, r *Req) { ifcall := r.ifcall.(*TWrite) var ok bool - r.fid, ok = s.fPool.lookup(ifcall.Fid()) + r.fid, ok = s.fPool.lookup(ifcall.Fid) if !ok { respond(ctx, r, ErrUnknownFid) return } - // TODO: should I use exported function instead of directly - // accessing the struct field? - if ifcall.count > s.mSize()-IOHDRSZ { - ifcall.count = s.mSize() - IOHDRSZ + if ifcall.Count > s.mSize()-IOHDRSZ { + ifcall.Count = s.mSize() - IOHDRSZ } if !hasPerm(r.fid.File, r.fid.Uid, AWRITE) { respond(ctx, r, ErrPerm) @@ -689,19 +687,19 @@ func sWrite(ctx context.Context, s *Server, r *Req) { }() switch file := r.fid.File.(type) { case io.WriterAt: - n, err := file.WriteAt(ifcall.data, int64(ifcall.offset)) + n, err := file.WriteAt(ifcall.Data, int64(ifcall.Offset)) if err != nil { respond(ctx, r, fmt.Errorf("write: %v", err)) return } - ofcall.count = uint32(n) + ofcall.Count = uint32(n) case io.Writer: - n, err := file.Write(ifcall.data) + n, err := file.Write(ifcall.Data) if err != nil { respond(ctx, r, fmt.Errorf("write: %v", err)) return } - ofcall.count = uint32(n) + ofcall.Count = uint32(n) default: respond(ctx, r, ErrOperation) return @@ -726,12 +724,12 @@ func rWrite(r *Req, err error) { func sClunk(ctx context.Context, s *Server, r *Req) { ifcall := r.ifcall.(*TClunk) - _, ok := s.fPool.lookup(ifcall.Fid()) + _, ok := s.fPool.lookup(ifcall.Fid) if !ok { respond(ctx, r, ErrUnknownFid) return } - s.fPool.delete(ifcall.Fid()) + s.fPool.delete(ifcall.Fid) r.ofcall = &RClunk{} respond(ctx, r, nil) } @@ -745,12 +743,12 @@ func rClunk(r *Req, err error) { func sRemove(ctx context.Context, s *Server, r *Req) { ifcall := r.ifcall.(*TRemove) var ok bool - r.fid, ok = s.fPool.lookup(ifcall.Fid()) + r.fid, ok = s.fPool.lookup(ifcall.Fid) if !ok { respond(ctx, r, ErrUnknownFid) return } - defer s.fPool.delete(ifcall.Fid()) + defer s.fPool.delete(ifcall.Fid) parentPath := path.Dir(r.fid.path) parent, err := s.fs.OpenFile(parentPath, OREAD, 0) if err != nil { @@ -783,7 +781,7 @@ func rRemove(r *Req, err error) { func sStat(ctx context.Context, s *Server, r *Req) { ifcall := r.ifcall.(*TStat) var ok bool - r.fid, ok = s.fPool.lookup(ifcall.Fid()) + r.fid, ok = s.fPool.lookup(ifcall.Fid) if !ok { respond(ctx, r, ErrUnknownFid) return @@ -795,7 +793,7 @@ func sStat(ctx context.Context, s *Server, r *Req) { return } r.ofcall = &RStat{ - stat: fileInfo.Sys().(*Stat), + Stat: fileInfo.Sys().(*Stat), } respond(ctx, r, nil) } @@ -809,7 +807,7 @@ func rStat(r *Req, err error) { func sWStat(ctx context.Context, s *Server, r *Req) { ifcall := r.ifcall.(*TWStat) var ok bool - r.fid, ok = s.fPool.lookup(ifcall.Fid()) + r.fid, ok = s.fPool.lookup(ifcall.Fid) if !ok { respond(ctx, r, ErrUnknownFid) return @@ -819,7 +817,7 @@ func sWStat(ctx context.Context, s *Server, r *Req) { respond(ctx, r, ErrOperation) return } - wstat := ifcall.Stat() + wstat := ifcall.Stat fi, err := r.fid.File.Stat() if err != nil { respond(ctx, r, fmt.Errorf("stat: %v", err))