Blob
1 package p9pnew3 import "fmt"5 // Message represents the target of an fcall.6 type Message interface{}8 // newMessage returns a new instance of the message based on the Fcall type.9 func newMessage(typ FcallType) (Message, error) {10 switch typ {11 case Tversion:12 return MessageTversion{}, nil13 case Rversion:14 return MessageRversion{}, nil15 case Tauth:16 return MessageTauth{}, nil17 case Rauth:18 return MessageRauth{}, nil19 case Tattach:20 return MessageTattach{}, nil21 case Rattach:22 return MessageRattach{}, nil23 case Rerror:24 return MessageRerror{}, nil25 case Tflush:26 return MessageTflush{}, nil27 case Rflush:28 return MessageRflush{}, nil // No message body for this response.29 case Twalk:30 return MessageTwalk{}, nil31 case Rwalk:32 return MessageRwalk{}, nil33 case Topen:34 return MessageTopen{}, nil35 case Ropen:36 return MessageRopen{}, nil37 case Tcreate:38 return MessageTcreate{}, nil39 case Rcreate:40 return MessageRcreate{}, nil41 case Tread:42 return MessageTread{}, nil43 case Rread:44 return MessageRread{}, nil45 case Twrite:46 return MessageTwrite{}, nil47 case Rwrite:48 return MessageRwrite{}, nil49 case Tclunk:50 return MessageTclunk{}, nil51 case Rclunk:52 return MessageRclunk{}, nil // no response body53 case Tremove:54 return MessageTremove{}, nil55 case Rremove:56 return MessageRremove{}, nil57 case Tstat:58 return MessageTstat{}, nil59 case Rstat:60 return MessageRstat{}, nil61 case Twstat:62 return MessageTwstat{}, nil63 case Rwstat:64 return MessageRwstat{}, nil65 }67 return nil, fmt.Errorf("unknown message type")68 }70 func messageType(m Message) FcallType {71 switch v := m.(type) {72 case MessageTversion:73 return Tversion74 case MessageRversion:75 return Rversion76 case MessageTauth:77 return Tauth78 case MessageRauth:79 return Rauth80 case MessageTflush:81 return Tflush82 case MessageRflush:83 return Rflush84 case MessageRerror:85 return Rerror86 case MessageTattach:87 return Tattach88 case MessageRattach:89 return Rattach90 case MessageTwalk:91 return Twalk92 case MessageRwalk:93 return Rwalk94 case MessageTopen:95 return Topen96 case MessageRopen:97 return Ropen98 case MessageTcreate:99 return Tcreate100 case MessageRcreate:101 return Rcreate102 case MessageTread:103 return Tread104 case MessageRread:105 return Rread106 case MessageTwrite:107 return Twrite108 case MessageRwrite:109 return Rwrite110 case MessageTclunk:111 return Tclunk112 case MessageRclunk:113 return Rclunk114 case MessageTremove:115 return Tremove116 case MessageRremove:117 return Rremove118 case MessageTstat:119 return Tstat120 case MessageRstat:121 return Rstat122 case MessageTwstat:123 return Twstat124 case MessageRwstat:125 return Rwstat126 case error:127 return Rerror128 default:129 // NOTE(stevvooe): This is considered a programming error.130 panic(fmt.Sprintf("unsupported message type: %T", v))131 }132 }134 // MessageVersion encodes the message body for Tversion and Rversion RPC135 // calls. The body is identical in both directions.136 type MessageTversion struct {137 MSize uint32138 Version string139 }141 type MessageRversion struct {142 MSize uint32143 Version string144 }146 type MessageTauth struct {147 Afid Fid148 Uname string149 Aname string150 }152 type MessageRauth struct {153 Qid Qid154 }156 type MessageRerror struct {157 Ename string158 }160 func (e MessageRerror) Error() string {161 return fmt.Sprintf("9p: %v", e.Ename)162 }164 type MessageTflush struct {165 Oldtag Tag166 }168 type MessageRflush struct{}170 type MessageTattach struct {171 Fid Fid172 Afid Fid173 Uname string174 Aname string175 }177 type MessageRattach struct {178 Qid Qid179 }181 type MessageTwalk struct {182 Fid Fid183 Newfid Fid184 Wnames []string185 }187 type MessageRwalk struct {188 Qids []Qid189 }191 type MessageTopen struct {192 Fid Fid193 Mode Flag194 }196 type MessageRopen struct {197 Qid Qid198 IOUnit uint32199 }201 type MessageTcreate struct {202 Fid Fid203 Name string204 Perm uint32205 Mode Flag206 }208 type MessageRcreate struct {209 Qid Qid210 IOUnit uint32211 }213 type MessageTread struct {214 Fid Fid215 Offset uint64216 Count uint32217 }219 type MessageRread struct {220 Data []byte221 }223 type MessageTwrite struct {224 Fid Fid225 Offset uint64226 Data []byte227 }229 type MessageRwrite struct {230 Count uint32231 }233 type MessageTclunk struct {234 Fid Fid235 }237 type MessageRclunk struct{}239 type MessageTremove struct {240 Fid Fid241 }243 type MessageRremove struct{}245 type MessageTstat struct {246 Fid Fid247 }249 type MessageRstat struct {250 Stat Dir251 }253 type MessageTwstat struct {254 Fid Fid255 Stat Dir256 }258 type MessageRwstat struct{}