1 e342de7d 2015-11-11 adrien package p9p
3 e342de7d 2015-11-11 adrien import "fmt"
5 e342de7d 2015-11-11 adrien // Message represents the target of an fcall.
6 e342de7d 2015-11-11 adrien type Message interface {
7 e342de7d 2015-11-11 adrien // Type returns the type of call for the target message.
8 e342de7d 2015-11-11 adrien Type() FcallType
11 e342de7d 2015-11-11 adrien // newMessage returns a new instance of the message based on the Fcall type.
12 e342de7d 2015-11-11 adrien func newMessage(typ FcallType) (Message, error) {
13 e342de7d 2015-11-11 adrien switch typ {
14 e342de7d 2015-11-11 adrien case Tversion:
15 e342de7d 2015-11-11 adrien return MessageTversion{}, nil
16 e342de7d 2015-11-11 adrien case Rversion:
17 e342de7d 2015-11-11 adrien return MessageRversion{}, nil
18 e342de7d 2015-11-11 adrien case Tauth:
19 e342de7d 2015-11-11 adrien return MessageTauth{}, nil
20 e342de7d 2015-11-11 adrien case Rauth:
21 e342de7d 2015-11-11 adrien return MessageRauth{}, nil
22 e342de7d 2015-11-11 adrien case Tattach:
23 e342de7d 2015-11-11 adrien return MessageTattach{}, nil
24 e342de7d 2015-11-11 adrien case Rattach:
25 e342de7d 2015-11-11 adrien return MessageRattach{}, nil
26 e342de7d 2015-11-11 adrien case Rerror:
27 e342de7d 2015-11-11 adrien return MessageRerror{}, nil
28 e342de7d 2015-11-11 adrien case Tflush:
29 e342de7d 2015-11-11 adrien return MessageTflush{}, nil
30 e342de7d 2015-11-11 adrien case Rflush:
31 e342de7d 2015-11-11 adrien return MessageRflush{}, nil // No message body for this response.
32 e342de7d 2015-11-11 adrien case Twalk:
33 e342de7d 2015-11-11 adrien return MessageTwalk{}, nil
34 e342de7d 2015-11-11 adrien case Rwalk:
35 e342de7d 2015-11-11 adrien return MessageRwalk{}, nil
36 e342de7d 2015-11-11 adrien case Topen:
37 e342de7d 2015-11-11 adrien return MessageTopen{}, nil
38 e342de7d 2015-11-11 adrien case Ropen:
39 e342de7d 2015-11-11 adrien return MessageRopen{}, nil
40 e342de7d 2015-11-11 adrien case Tcreate:
41 e342de7d 2015-11-11 adrien return MessageTcreate{}, nil
42 e342de7d 2015-11-11 adrien case Rcreate:
43 e342de7d 2015-11-11 adrien return MessageRcreate{}, nil
44 e342de7d 2015-11-11 adrien case Tread:
45 e342de7d 2015-11-11 adrien return MessageTread{}, nil
46 e342de7d 2015-11-11 adrien case Rread:
47 e342de7d 2015-11-11 adrien return MessageRread{}, nil
48 e342de7d 2015-11-11 adrien case Twrite:
49 e342de7d 2015-11-11 adrien return MessageTwrite{}, nil
50 e342de7d 2015-11-11 adrien case Rwrite:
51 e342de7d 2015-11-11 adrien return MessageRwrite{}, nil
52 e342de7d 2015-11-11 adrien case Tclunk:
53 e342de7d 2015-11-11 adrien return MessageTclunk{}, nil
54 e342de7d 2015-11-11 adrien case Rclunk:
55 e342de7d 2015-11-11 adrien return MessageRclunk{}, nil // no response body
56 e342de7d 2015-11-11 adrien case Tremove:
57 e342de7d 2015-11-11 adrien return MessageTremove{}, nil
58 e342de7d 2015-11-11 adrien case Rremove:
59 e342de7d 2015-11-11 adrien return MessageRremove{}, nil
60 e342de7d 2015-11-11 adrien case Tstat:
61 e342de7d 2015-11-11 adrien return MessageTstat{}, nil
62 e342de7d 2015-11-11 adrien case Rstat:
63 e342de7d 2015-11-11 adrien return MessageRstat{}, nil
64 e342de7d 2015-11-11 adrien case Twstat:
65 e342de7d 2015-11-11 adrien return MessageTwstat{}, nil
66 e342de7d 2015-11-11 adrien case Rwstat:
67 e342de7d 2015-11-11 adrien return MessageRwstat{}, nil
70 e342de7d 2015-11-11 adrien return nil, fmt.Errorf("unknown message type")
73 e342de7d 2015-11-11 adrien // MessageVersion encodes the message body for Tversion and Rversion RPC
74 e342de7d 2015-11-11 adrien // calls. The body is identical in both directions.
75 e342de7d 2015-11-11 adrien type MessageTversion struct {
76 e342de7d 2015-11-11 adrien MSize uint32
77 e342de7d 2015-11-11 adrien Version string
80 e342de7d 2015-11-11 adrien type MessageRversion struct {
81 e342de7d 2015-11-11 adrien MSize uint32
82 e342de7d 2015-11-11 adrien Version string
85 e342de7d 2015-11-11 adrien type MessageTauth struct {
87 e342de7d 2015-11-11 adrien Uname string
88 e342de7d 2015-11-11 adrien Aname string
91 e342de7d 2015-11-11 adrien type MessageRauth struct {
95 e342de7d 2015-11-11 adrien type MessageTflush struct {
96 e342de7d 2015-11-11 adrien Oldtag Tag
99 e342de7d 2015-11-11 adrien type MessageRflush struct{}
101 e342de7d 2015-11-11 adrien type MessageTattach struct {
104 e342de7d 2015-11-11 adrien Uname string
105 e342de7d 2015-11-11 adrien Aname string
108 e342de7d 2015-11-11 adrien type MessageRattach struct {
112 e342de7d 2015-11-11 adrien type MessageTwalk struct {
114 e342de7d 2015-11-11 adrien Newfid Fid
115 e342de7d 2015-11-11 adrien Wnames []string
118 e342de7d 2015-11-11 adrien type MessageRwalk struct {
119 e342de7d 2015-11-11 adrien Qids []Qid
122 e342de7d 2015-11-11 adrien type MessageTopen struct {
124 e342de7d 2015-11-11 adrien Mode Flag
127 e342de7d 2015-11-11 adrien type MessageRopen struct {
129 e342de7d 2015-11-11 adrien IOUnit uint32
132 e342de7d 2015-11-11 adrien type MessageTcreate struct {
134 e342de7d 2015-11-11 adrien Name string
135 e342de7d 2015-11-11 adrien Perm uint32
136 e342de7d 2015-11-11 adrien Mode Flag
139 e342de7d 2015-11-11 adrien type MessageRcreate struct {
141 e342de7d 2015-11-11 adrien IOUnit uint32
144 e342de7d 2015-11-11 adrien type MessageTread struct {
146 e342de7d 2015-11-11 adrien Offset uint64
147 e342de7d 2015-11-11 adrien Count uint32
150 e342de7d 2015-11-11 adrien type MessageRread struct {
151 e342de7d 2015-11-11 adrien Data []byte
154 e342de7d 2015-11-11 adrien type MessageTwrite struct {
156 e342de7d 2015-11-11 adrien Offset uint64
157 e342de7d 2015-11-11 adrien Data []byte
160 e342de7d 2015-11-11 adrien type MessageRwrite struct {
161 e342de7d 2015-11-11 adrien Count uint32
164 e342de7d 2015-11-11 adrien type MessageTclunk struct {
168 e342de7d 2015-11-11 adrien type MessageRclunk struct{}
170 e342de7d 2015-11-11 adrien type MessageTremove struct {
174 e342de7d 2015-11-11 adrien type MessageRremove struct{}
176 e342de7d 2015-11-11 adrien type MessageTstat struct {
180 e342de7d 2015-11-11 adrien type MessageRstat struct {
184 e342de7d 2015-11-11 adrien type MessageTwstat struct {
189 e342de7d 2015-11-11 adrien type MessageRwstat struct{}
191 e342de7d 2015-11-11 adrien func (MessageTversion) Type() FcallType { return Tversion }
192 e342de7d 2015-11-11 adrien func (MessageRversion) Type() FcallType { return Rversion }
193 e342de7d 2015-11-11 adrien func (MessageTauth) Type() FcallType { return Tauth }
194 e342de7d 2015-11-11 adrien func (MessageRauth) Type() FcallType { return Rauth }
195 e342de7d 2015-11-11 adrien func (MessageTflush) Type() FcallType { return Tflush }
196 e342de7d 2015-11-11 adrien func (MessageRflush) Type() FcallType { return Rflush }
197 e342de7d 2015-11-11 adrien func (MessageTattach) Type() FcallType { return Tattach }
198 e342de7d 2015-11-11 adrien func (MessageRattach) Type() FcallType { return Rattach }
199 e342de7d 2015-11-11 adrien func (MessageTwalk) Type() FcallType { return Twalk }
200 e342de7d 2015-11-11 adrien func (MessageRwalk) Type() FcallType { return Rwalk }
201 e342de7d 2015-11-11 adrien func (MessageTopen) Type() FcallType { return Topen }
202 e342de7d 2015-11-11 adrien func (MessageRopen) Type() FcallType { return Ropen }
203 e342de7d 2015-11-11 adrien func (MessageTcreate) Type() FcallType { return Tcreate }
204 e342de7d 2015-11-11 adrien func (MessageRcreate) Type() FcallType { return Rcreate }
205 e342de7d 2015-11-11 adrien func (MessageTread) Type() FcallType { return Tread }
206 e342de7d 2015-11-11 adrien func (MessageRread) Type() FcallType { return Rread }
207 e342de7d 2015-11-11 adrien func (MessageTwrite) Type() FcallType { return Twrite }
208 e342de7d 2015-11-11 adrien func (MessageRwrite) Type() FcallType { return Rwrite }
209 e342de7d 2015-11-11 adrien func (MessageTclunk) Type() FcallType { return Tclunk }
210 e342de7d 2015-11-11 adrien func (MessageRclunk) Type() FcallType { return Rclunk }
211 e342de7d 2015-11-11 adrien func (MessageTremove) Type() FcallType { return Tremove }
212 e342de7d 2015-11-11 adrien func (MessageRremove) Type() FcallType { return Rremove }
213 e342de7d 2015-11-11 adrien func (MessageTstat) Type() FcallType { return Tstat }
214 e342de7d 2015-11-11 adrien func (MessageRstat) Type() FcallType { return Rstat }
215 e342de7d 2015-11-11 adrien func (MessageTwstat) Type() FcallType { return Twstat }
216 e342de7d 2015-11-11 adrien func (MessageRwstat) Type() FcallType { return Rwstat }