Blob


1 package p9p
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
112 switch msg.Type() {
113 case Tversion, Rversion:
114 tag = NOTAG
117 return &Fcall{
118 Type: msg.Type(),
119 Tag: tag,
120 Message: msg,
124 func newErrorFcall(tag Tag, err error) *Fcall {
125 var msg Message
127 switch v := err.(type) {
128 case MessageRerror:
129 msg = v
130 case *MessageRerror:
131 msg = *v
132 default:
133 msg = MessageRerror{Ename: v.Error()}
136 return &Fcall{
137 Type: Rerror,
138 Tag: tag,
139 Message: msg,
143 func (fc *Fcall) String() string {
144 return fmt.Sprintf("%v(%v) %v", fc.Type, fc.Tag, string9p(fc.Message))