Blame


1 e342de7d 2015-11-11 adrien package p9p
2 e342de7d 2015-11-11 adrien
3 e342de7d 2015-11-11 adrien import "fmt"
4 e342de7d 2015-11-11 adrien
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
9 e342de7d 2015-11-11 adrien }
10 e342de7d 2015-11-11 adrien
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
68 e342de7d 2015-11-11 adrien }
69 e342de7d 2015-11-11 adrien
70 e342de7d 2015-11-11 adrien return nil, fmt.Errorf("unknown message type")
71 e342de7d 2015-11-11 adrien }
72 e342de7d 2015-11-11 adrien
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
78 e342de7d 2015-11-11 adrien }
79 e342de7d 2015-11-11 adrien
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
83 e342de7d 2015-11-11 adrien }
84 e342de7d 2015-11-11 adrien
85 e342de7d 2015-11-11 adrien type MessageTauth struct {
86 e342de7d 2015-11-11 adrien Afid Fid
87 e342de7d 2015-11-11 adrien Uname string
88 e342de7d 2015-11-11 adrien Aname string
89 e342de7d 2015-11-11 adrien }
90 e342de7d 2015-11-11 adrien
91 e342de7d 2015-11-11 adrien type MessageRauth struct {
92 e342de7d 2015-11-11 adrien Qid Qid
93 e342de7d 2015-11-11 adrien }
94 e342de7d 2015-11-11 adrien
95 e342de7d 2015-11-11 adrien type MessageTflush struct {
96 e342de7d 2015-11-11 adrien Oldtag Tag
97 e342de7d 2015-11-11 adrien }
98 e342de7d 2015-11-11 adrien
99 e342de7d 2015-11-11 adrien type MessageRflush struct{}
100 e342de7d 2015-11-11 adrien
101 e342de7d 2015-11-11 adrien type MessageTattach struct {
102 e342de7d 2015-11-11 adrien Fid Fid
103 e342de7d 2015-11-11 adrien Afid Fid
104 e342de7d 2015-11-11 adrien Uname string
105 e342de7d 2015-11-11 adrien Aname string
106 e342de7d 2015-11-11 adrien }
107 e342de7d 2015-11-11 adrien
108 e342de7d 2015-11-11 adrien type MessageRattach struct {
109 e342de7d 2015-11-11 adrien Qid Qid
110 e342de7d 2015-11-11 adrien }
111 e342de7d 2015-11-11 adrien
112 e342de7d 2015-11-11 adrien type MessageTwalk struct {
113 e342de7d 2015-11-11 adrien Fid Fid
114 e342de7d 2015-11-11 adrien Newfid Fid
115 e342de7d 2015-11-11 adrien Wnames []string
116 e342de7d 2015-11-11 adrien }
117 e342de7d 2015-11-11 adrien
118 e342de7d 2015-11-11 adrien type MessageRwalk struct {
119 e342de7d 2015-11-11 adrien Qids []Qid
120 e342de7d 2015-11-11 adrien }
121 e342de7d 2015-11-11 adrien
122 e342de7d 2015-11-11 adrien type MessageTopen struct {
123 e342de7d 2015-11-11 adrien Fid Fid
124 e342de7d 2015-11-11 adrien Mode Flag
125 e342de7d 2015-11-11 adrien }
126 e342de7d 2015-11-11 adrien
127 e342de7d 2015-11-11 adrien type MessageRopen struct {
128 e342de7d 2015-11-11 adrien Qid Qid
129 e342de7d 2015-11-11 adrien IOUnit uint32
130 e342de7d 2015-11-11 adrien }
131 e342de7d 2015-11-11 adrien
132 e342de7d 2015-11-11 adrien type MessageTcreate struct {
133 e342de7d 2015-11-11 adrien Fid Fid
134 e342de7d 2015-11-11 adrien Name string
135 e342de7d 2015-11-11 adrien Perm uint32
136 e342de7d 2015-11-11 adrien Mode Flag
137 e342de7d 2015-11-11 adrien }
138 e342de7d 2015-11-11 adrien
139 e342de7d 2015-11-11 adrien type MessageRcreate struct {
140 e342de7d 2015-11-11 adrien Qid Qid
141 e342de7d 2015-11-11 adrien IOUnit uint32
142 e342de7d 2015-11-11 adrien }
143 e342de7d 2015-11-11 adrien
144 e342de7d 2015-11-11 adrien type MessageTread struct {
145 e342de7d 2015-11-11 adrien Fid Fid
146 e342de7d 2015-11-11 adrien Offset uint64
147 e342de7d 2015-11-11 adrien Count uint32
148 e342de7d 2015-11-11 adrien }
149 e342de7d 2015-11-11 adrien
150 e342de7d 2015-11-11 adrien type MessageRread struct {
151 e342de7d 2015-11-11 adrien Data []byte
152 e342de7d 2015-11-11 adrien }
153 e342de7d 2015-11-11 adrien
154 e342de7d 2015-11-11 adrien type MessageTwrite struct {
155 e342de7d 2015-11-11 adrien Fid Fid
156 e342de7d 2015-11-11 adrien Offset uint64
157 e342de7d 2015-11-11 adrien Data []byte
158 e342de7d 2015-11-11 adrien }
159 e342de7d 2015-11-11 adrien
160 e342de7d 2015-11-11 adrien type MessageRwrite struct {
161 e342de7d 2015-11-11 adrien Count uint32
162 e342de7d 2015-11-11 adrien }
163 e342de7d 2015-11-11 adrien
164 e342de7d 2015-11-11 adrien type MessageTclunk struct {
165 e342de7d 2015-11-11 adrien Fid Fid
166 e342de7d 2015-11-11 adrien }
167 e342de7d 2015-11-11 adrien
168 e342de7d 2015-11-11 adrien type MessageRclunk struct{}
169 e342de7d 2015-11-11 adrien
170 e342de7d 2015-11-11 adrien type MessageTremove struct {
171 e342de7d 2015-11-11 adrien Fid Fid
172 e342de7d 2015-11-11 adrien }
173 e342de7d 2015-11-11 adrien
174 e342de7d 2015-11-11 adrien type MessageRremove struct{}
175 e342de7d 2015-11-11 adrien
176 e342de7d 2015-11-11 adrien type MessageTstat struct {
177 e342de7d 2015-11-11 adrien Fid Fid
178 e342de7d 2015-11-11 adrien }
179 e342de7d 2015-11-11 adrien
180 e342de7d 2015-11-11 adrien type MessageRstat struct {
181 e342de7d 2015-11-11 adrien Stat Dir
182 e342de7d 2015-11-11 adrien }
183 e342de7d 2015-11-11 adrien
184 e342de7d 2015-11-11 adrien type MessageTwstat struct {
185 e342de7d 2015-11-11 adrien Fid Fid
186 e342de7d 2015-11-11 adrien Stat Dir
187 e342de7d 2015-11-11 adrien }
188 e342de7d 2015-11-11 adrien
189 e342de7d 2015-11-11 adrien type MessageRwstat struct{}
190 e342de7d 2015-11-11 adrien
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 }