Blob


1 package p9pnew
3 import "fmt"
5 type FcallType uint8
7 const (
8 Tversion FcallType = iota + 100
9 Rversion
10 Tauth
11 Rauth
12 Tattach
13 Rattach
14 Terror
15 Rerror
16 Tflush
17 Rflush
18 Twalk
19 Rwalk
20 Topen
21 Ropen
22 Tcreate
23 Rcreate
24 Tread
25 Rread
26 Twrite
27 Rwrite
28 Tclunk
29 Rclunk
30 Tremove
31 Rremove
32 Tstat
33 Rstat
34 Twstat
35 Rwstat
36 Tmax
37 )
39 func (fct FcallType) String() string {
40 switch fct {
41 case Tversion:
42 return "Tversion"
43 case Rversion:
44 return "Rversion"
45 case Tauth:
46 return "Tauth"
47 case Rauth:
48 return "Rauth"
49 case Tattach:
50 return "Tattach"
51 case Rattach:
52 return "Rattach"
53 case Terror:
54 // invalid.
55 return "Terror"
56 case Rerror:
57 return "Rerror"
58 case Tflush:
59 return "Tflush"
60 case Rflush:
61 return "Rflush"
62 case Twalk:
63 return "Twalk"
64 case Rwalk:
65 return "Rwalk"
66 case Topen:
67 return "Topen"
68 case Ropen:
69 return "Ropen"
70 case Tcreate:
71 return "Tcreate"
72 case Rcreate:
73 return "Rcreate"
74 case Tread:
75 return "Tread"
76 case Rread:
77 return "Rread"
78 case Twrite:
79 return "Twrite"
80 case Rwrite:
81 return "Rwrite"
82 case Tclunk:
83 return "Tclunk"
84 case Rclunk:
85 return "Rclunk"
86 case Tremove:
87 return "Tremote"
88 case Rremove:
89 return "Rremove"
90 case Tstat:
91 return "Tstat"
92 case Rstat:
93 return "Rstat"
94 case Twstat:
95 return "Twstat"
96 case Rwstat:
97 return "Rwstat"
98 default:
99 return "Tunknown"
103 type Fcall struct {
104 Type FcallType
105 Tag Tag
106 Message Message
109 func newFcall(msg Message) *Fcall {
110 var tag Tag
111 mtype := messageType(msg)
113 switch mtype {
114 case Tversion, Rversion:
115 tag = NOTAG
118 return &Fcall{
119 Type: mtype,
120 Tag: tag,
121 Message: msg,
125 func newErrorFcall(tag Tag, err error) *Fcall {
126 var msg Message
128 switch v := err.(type) {
129 case MessageRerror:
130 msg = v
131 case *MessageRerror:
132 msg = *v
133 default:
134 msg = MessageRerror{Ename: v.Error()}
137 return &Fcall{
138 Type: Rerror,
139 Tag: tag,
140 Message: msg,
144 func (fc *Fcall) String() string {
145 return fmt.Sprintf("%v(%v) %v", fc.Type, fc.Tag, string9p(fc.Message))