-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path9p_utils.go
133 lines (128 loc) · 2.93 KB
/
9p_utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package qp
import "errors"
// ErrUnknownMessageType is used to indicate an unknown type of message.
var ErrUnknownMessageType = errors.New("unknown message type")
// nineP2000 implements the conversions for 9P2000.
type nineP2000 struct{}
// Message returns an empty Message based on the provided message type.
func (nineP2000) Message(mt MessageType) (Message, error) {
switch mt {
case Tversion:
return &VersionRequest{}, nil
case Rversion:
return &VersionResponse{}, nil
case Tauth:
return &AuthRequest{}, nil
case Rauth:
return &AuthResponse{}, nil
case Tattach:
return &AttachRequest{}, nil
case Rattach:
return &AttachResponse{}, nil
case Tflush:
return &FlushRequest{}, nil
case Rflush:
return &FlushResponse{}, nil
case Twalk:
return &WalkRequest{}, nil
case Rwalk:
return &WalkResponse{}, nil
case Topen:
return &OpenRequest{}, nil
case Ropen:
return &OpenResponse{}, nil
case Tcreate:
return &CreateRequest{}, nil
case Rcreate:
return &CreateResponse{}, nil
case Tread:
return &ReadRequest{}, nil
case Rread:
return &ReadResponse{}, nil
case Twrite:
return &WriteRequest{}, nil
case Rwrite:
return &WriteResponse{}, nil
case Tclunk:
return &ClunkRequest{}, nil
case Rclunk:
return &ClunkResponse{}, nil
case Tremove:
return &RemoveRequest{}, nil
case Rremove:
return &RemoveResponse{}, nil
case Tstat:
return &StatRequest{}, nil
case Rstat:
return &StatResponse{}, nil
case Twstat:
return &WriteStatRequest{}, nil
case Rwstat:
return &WriteStatResponse{}, nil
case Rerror:
return &ErrorResponse{}, nil
default:
return nil, ErrUnknownMessageType
}
}
// MessageType returns the message type of a given message.
func (nineP2000) MessageType(d Message) (MessageType, error) {
switch d.(type) {
case *VersionRequest:
return Tversion, nil
case *VersionResponse:
return Rversion, nil
case *AuthRequest:
return Tauth, nil
case *AuthResponse:
return Rauth, nil
case *AttachRequest:
return Tattach, nil
case *AttachResponse:
return Rattach, nil
case *ErrorResponse:
return Rerror, nil
case *FlushRequest:
return Tflush, nil
case *FlushResponse:
return Rflush, nil
case *WalkRequest:
return Twalk, nil
case *WalkResponse:
return Rwalk, nil
case *OpenRequest:
return Topen, nil
case *OpenResponse:
return Ropen, nil
case *CreateRequest:
return Tcreate, nil
case *CreateResponse:
return Rcreate, nil
case *ReadRequest:
return Tread, nil
case *ReadResponse:
return Rread, nil
case *WriteRequest:
return Twrite, nil
case *WriteResponse:
return Rwrite, nil
case *ClunkRequest:
return Tclunk, nil
case *ClunkResponse:
return Rclunk, nil
case *RemoveRequest:
return Tremove, nil
case *RemoveResponse:
return Rremove, nil
case *StatRequest:
return Tstat, nil
case *StatResponse:
return Rstat, nil
case *WriteStatRequest:
return Twstat, nil
case *WriteStatResponse:
return Rwstat, nil
default:
return 0, ErrUnknownMessageType
}
}