1 e342de7d 2015-11-11 adrien package p9p
3 e342de7d 2015-11-11 adrien import "fmt"
5 e342de7d 2015-11-11 adrien type FcallType uint8
8 e342de7d 2015-11-11 adrien Tversion FcallType = iota + 100
39 e342de7d 2015-11-11 adrien func (fct FcallType) String() string {
40 e342de7d 2015-11-11 adrien switch fct {
41 e342de7d 2015-11-11 adrien case Tversion:
42 e342de7d 2015-11-11 adrien return "Tversion"
43 e342de7d 2015-11-11 adrien case Rversion:
44 e342de7d 2015-11-11 adrien return "Rversion"
45 e342de7d 2015-11-11 adrien case Tauth:
46 e342de7d 2015-11-11 adrien return "Tauth"
47 e342de7d 2015-11-11 adrien case Rauth:
48 e342de7d 2015-11-11 adrien return "Rauth"
49 e342de7d 2015-11-11 adrien case Tattach:
50 e342de7d 2015-11-11 adrien return "Tattach"
51 e342de7d 2015-11-11 adrien case Rattach:
52 e342de7d 2015-11-11 adrien return "Rattach"
53 e342de7d 2015-11-11 adrien case Terror:
54 e342de7d 2015-11-11 adrien // invalid.
55 e342de7d 2015-11-11 adrien return "Terror"
56 e342de7d 2015-11-11 adrien case Rerror:
57 e342de7d 2015-11-11 adrien return "Rerror"
58 e342de7d 2015-11-11 adrien case Tflush:
59 e342de7d 2015-11-11 adrien return "Tflush"
60 e342de7d 2015-11-11 adrien case Rflush:
61 e342de7d 2015-11-11 adrien return "Rflush"
62 e342de7d 2015-11-11 adrien case Twalk:
63 e342de7d 2015-11-11 adrien return "Twalk"
64 e342de7d 2015-11-11 adrien case Rwalk:
65 e342de7d 2015-11-11 adrien return "Rwalk"
66 e342de7d 2015-11-11 adrien case Topen:
67 e342de7d 2015-11-11 adrien return "Topen"
68 e342de7d 2015-11-11 adrien case Ropen:
69 e342de7d 2015-11-11 adrien return "Ropen"
70 e342de7d 2015-11-11 adrien case Tcreate:
71 e342de7d 2015-11-11 adrien return "Tcreate"
72 e342de7d 2015-11-11 adrien case Rcreate:
73 e342de7d 2015-11-11 adrien return "Rcreate"
74 e342de7d 2015-11-11 adrien case Tread:
75 e342de7d 2015-11-11 adrien return "Tread"
76 e342de7d 2015-11-11 adrien case Rread:
77 e342de7d 2015-11-11 adrien return "Rread"
78 e342de7d 2015-11-11 adrien case Twrite:
79 e342de7d 2015-11-11 adrien return "Twrite"
80 e342de7d 2015-11-11 adrien case Rwrite:
81 e342de7d 2015-11-11 adrien return "Rwrite"
82 e342de7d 2015-11-11 adrien case Tclunk:
83 e342de7d 2015-11-11 adrien return "Tclunk"
84 e342de7d 2015-11-11 adrien case Rclunk:
85 e342de7d 2015-11-11 adrien return "Rclunk"
86 e342de7d 2015-11-11 adrien case Tremove:
87 e342de7d 2015-11-11 adrien return "Tremote"
88 e342de7d 2015-11-11 adrien case Rremove:
89 e342de7d 2015-11-11 adrien return "Rremove"
90 e342de7d 2015-11-11 adrien case Tstat:
91 e342de7d 2015-11-11 adrien return "Tstat"
92 e342de7d 2015-11-11 adrien case Rstat:
93 e342de7d 2015-11-11 adrien return "Rstat"
94 e342de7d 2015-11-11 adrien case Twstat:
95 e342de7d 2015-11-11 adrien return "Twstat"
96 e342de7d 2015-11-11 adrien case Rwstat:
97 e342de7d 2015-11-11 adrien return "Rwstat"
99 e342de7d 2015-11-11 adrien return "Tunknown"
103 e342de7d 2015-11-11 adrien type Fcall struct {
104 e342de7d 2015-11-11 adrien Type FcallType
106 e342de7d 2015-11-11 adrien Message Message
109 e342de7d 2015-11-11 adrien func newFcall(msg Message) *Fcall {
110 e342de7d 2015-11-11 adrien var tag Tag
112 e342de7d 2015-11-11 adrien switch msg.Type() {
113 e342de7d 2015-11-11 adrien case Tversion, Rversion:
114 e342de7d 2015-11-11 adrien tag = NOTAG
117 e342de7d 2015-11-11 adrien return &Fcall{
118 e342de7d 2015-11-11 adrien Type: msg.Type(),
119 e342de7d 2015-11-11 adrien Tag: tag,
120 e342de7d 2015-11-11 adrien Message: msg,
124 e342de7d 2015-11-11 adrien func newErrorFcall(tag Tag, err error) *Fcall {
125 e342de7d 2015-11-11 adrien var msg Message
127 e342de7d 2015-11-11 adrien switch v := err.(type) {
128 e342de7d 2015-11-11 adrien case MessageRerror:
130 e342de7d 2015-11-11 adrien case *MessageRerror:
133 e342de7d 2015-11-11 adrien msg = MessageRerror{Ename: v.Error()}
136 e342de7d 2015-11-11 adrien return &Fcall{
137 e342de7d 2015-11-11 adrien Type: Rerror,
138 e342de7d 2015-11-11 adrien Tag: tag,
139 e342de7d 2015-11-11 adrien Message: msg,
143 e342de7d 2015-11-11 adrien func (fc *Fcall) String() string {
144 e342de7d 2015-11-11 adrien return fmt.Sprintf("%v(%v) %v", fc.Type, fc.Tag, string9p(fc.Message))