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 "Tremove"
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(tag Tag, msg Message) *Fcall {
110 switch msg.Type() {
111 case Tversion, Rversion:
112 tag = NOTAG
115 return &Fcall{
116 Type: msg.Type(),
117 Tag: tag,
118 Message: msg,
122 func newErrorFcall(tag Tag, err error) *Fcall {
123 var msg Message
125 switch v := err.(type) {
126 case MessageRerror:
127 msg = v
128 case *MessageRerror:
129 msg = *v
130 default:
131 msg = MessageRerror{Ename: v.Error()}
134 return &Fcall{
135 Type: Rerror,
136 Tag: tag,
137 Message: msg,
141 func (fc *Fcall) String() string {
142 return fmt.Sprintf("%v(%v) %v", fc.Type, fc.Tag, string9p(fc.Message))