Use Client_find_by_session() instead of a few open-coded loops.
[umurmur.git] / src / Mumble.proto
1 package MumbleProto;
2
3 option optimize_for = SPEED;
4
5 message Version {
6         optional uint32 version = 1;
7         optional string release = 2;
8         optional string os = 3;
9         optional string os_version = 4;
10 }
11
12 message UDPTunnel {
13         required bytes packet = 1;
14 }
15
16 message Authenticate {
17         optional string username = 1;
18         optional string password = 2;
19         repeated string tokens = 3;
20         repeated int32 celt_versions = 4;
21         optional bool opus = 5 [default = false];
22 }
23
24 message Ping {
25         optional uint64 timestamp = 1;
26         optional uint32 good = 2;
27         optional uint32 late = 3;
28         optional uint32 lost = 4;
29         optional uint32 resync = 5;
30         optional uint32 udp_packets = 6;
31         optional uint32 tcp_packets = 7;
32         optional float udp_ping_avg = 8;
33         optional float udp_ping_var = 9;
34         optional float tcp_ping_avg = 10;
35         optional float tcp_ping_var = 11;
36 }
37
38 message Reject {
39         enum RejectType {
40                 None = 0;
41                 WrongVersion = 1;
42                 InvalidUsername = 2;
43                 WrongUserPW = 3;
44                 WrongServerPW = 4;
45                 UsernameInUse = 5;
46                 ServerFull = 6;
47                 NoCertificate = 7;
48         }
49         optional RejectType type = 1;
50         optional string reason = 2;
51 }
52
53 message ServerConfig {
54         optional uint32 max_bandwidth = 1;
55         optional string welcome_text = 2;
56         optional bool allow_html = 3;
57         optional uint32 message_length = 4;
58         optional uint32 image_message_length = 5;
59 }
60
61 message ServerSync {
62         optional uint32 session = 1;
63         optional uint32 max_bandwidth = 2;
64         optional string welcome_text = 3;
65         optional uint64 permissions = 4;
66 }
67
68 message ChannelRemove {
69         required uint32 channel_id = 1;
70 }
71
72 message ChannelState {
73         optional uint32 channel_id = 1;
74         optional uint32 parent = 2;
75         optional string name = 3;
76         repeated uint32 links = 4;
77         optional string description = 5;
78         repeated uint32 links_add = 6;
79         repeated uint32 links_remove = 7;
80         optional bool temporary = 8 [default = false];
81         optional int32 position = 9 [default = 0];
82         optional bytes description_hash = 10;
83 }
84
85 message UserRemove {
86         required uint32 session = 1;
87         optional uint32 actor = 2;
88         optional string reason = 3;
89         optional bool ban = 4;
90 }
91
92 message UserState {
93         optional uint32 session = 1;
94         optional uint32 actor = 2;
95         optional string name = 3;
96         optional uint32 user_id = 4;
97         optional uint32 channel_id = 5;
98         optional bool mute = 6;
99         optional bool deaf = 7;
100         optional bool suppress = 8;
101         optional bool self_mute = 9;
102         optional bool self_deaf = 10;
103         optional bytes texture = 11;
104         optional bytes plugin_context = 12;
105         optional string plugin_identity = 13;
106         optional string comment = 14;
107         optional string hash = 15;
108         optional bytes comment_hash = 16;
109         optional bytes texture_hash = 17;
110         optional bool priority_speaker = 18;
111         optional bool recording = 19;
112 }
113
114 message BanList {
115         message BanEntry {
116                 required bytes address = 1;
117                 required uint32 mask = 2;
118                 optional string name = 3;
119                 optional string hash = 4;
120                 optional string reason = 5;
121                 optional string start = 6;
122                 optional uint32 duration = 7;
123         }
124         repeated BanEntry bans = 1;
125         optional bool query = 2 [default = false];
126 }
127
128 message TextMessage {
129         optional uint32 actor = 1;
130         repeated uint32 session = 2;
131         repeated uint32 channel_id = 3;
132         repeated uint32 tree_id = 4;
133         required string message = 5;
134 }
135
136 message PermissionDenied {
137         enum DenyType {
138                 Text = 0;
139                 Permission = 1;
140                 SuperUser = 2;
141                 ChannelName = 3;
142                 TextTooLong = 4;
143                 H9K = 5;
144                 TemporaryChannel = 6;
145                 MissingCertificate = 7;
146                 UserName = 8;
147                 ChannelFull = 9;
148                 NestingLimit = 10;
149         }
150         optional uint32 permission = 1;
151         optional uint32 channel_id = 2;
152         optional uint32 session = 3;
153         optional string reason = 4;
154         optional DenyType type = 5;
155         optional string name = 6;
156 }
157
158 message ACL {
159         message ChanGroup {
160                 required string name = 1;
161                 optional bool inherited = 2 [default = true];
162                 optional bool inherit = 3 [default = true];
163                 optional bool inheritable = 4 [default = true];
164                 repeated uint32 add = 5;
165                 repeated uint32 remove = 6;
166                 repeated uint32 inherited_members = 7;
167         }
168         message ChanACL {
169                 optional bool apply_here = 1 [default = true];
170                 optional bool apply_subs = 2 [default = true];
171                 optional bool inherited = 3 [default = true];
172                 optional uint32 user_id = 4;
173                 optional string group = 5;
174                 optional uint32 grant = 6;
175                 optional uint32 deny = 7;
176         }
177         required uint32 channel_id = 1;
178         optional bool inherit_acls = 2 [default = true];
179         repeated ChanGroup groups = 3;
180         repeated ChanACL acls = 4;
181         optional bool query = 5 [default = false];
182 }
183
184 message QueryUsers {
185         repeated uint32 ids = 1;
186         repeated string names = 2;
187 }
188
189 message CryptSetup {
190         optional bytes key = 1;
191         optional bytes client_nonce = 2;
192         optional bytes server_nonce = 3;
193 }
194
195 message ContextActionModify {
196         enum Context {
197                 Server = 0x01;
198                 Channel = 0x02;
199                 User = 0x04;
200         }
201         enum Operation {
202                 Add = 0;
203                 Remove = 1;
204         }
205         required string action = 1;
206         optional string text = 2;
207         optional uint32 context = 3;
208         optional Operation operation = 4;
209 }
210
211 message ContextAction {
212         optional uint32 session = 1;
213         optional uint32 channel_id = 2;
214         required string action = 3;
215 }
216
217 message UserList {
218         message User {
219                 required uint32 user_id = 1;
220                 optional string name = 2;
221         }
222         repeated User users = 1;
223 }
224
225 message VoiceTarget {
226         message Target {
227                 repeated uint32 session = 1;
228                 optional uint32 channel_id = 2;
229                 optional string group = 3;
230                 optional bool links = 4 [default = false];
231                 optional bool children = 5 [default = false];
232         }
233         optional uint32 id = 1;
234         repeated Target targets = 2;
235 }
236
237 message PermissionQuery {
238         optional uint32 channel_id = 1;
239         optional uint32 permissions = 2;
240         optional bool flush = 3 [default = false];
241 }
242
243 message CodecVersion {
244         required int32 alpha = 1;
245         required int32 beta = 2;
246         required bool prefer_alpha = 3 [default = true];
247         optional bool opus = 4 [default = false];
248 }
249
250 message UserStats {
251         message Stats {
252                 optional uint32 good = 1;
253                 optional uint32 late = 2;
254                 optional uint32 lost = 3;
255                 optional uint32 resync = 4;
256         }
257
258         optional uint32 session = 1;
259         optional bool stats_only = 2 [default = false];
260         repeated bytes certificates = 3;
261         optional Stats from_client = 4;
262         optional Stats from_server = 5;
263
264         optional uint32 udp_packets = 6;
265         optional uint32 tcp_packets = 7;
266         optional float udp_ping_avg = 8;
267         optional float udp_ping_var = 9;
268         optional float tcp_ping_avg = 10;
269         optional float tcp_ping_var = 11;
270
271         optional Version version = 12;
272         repeated int32 celt_versions = 13;
273         optional bytes address = 14;
274         optional uint32 bandwidth = 15;
275         optional uint32 onlinesecs = 16;
276         optional uint32 idlesecs = 17;
277         optional bool strong_certificate = 18 [default = false];
278         optional bool opus = 19 [default = false];
279 }
280
281 message SuggestConfig {
282         optional uint32 version = 1;
283         optional bool positional = 2;
284         optional bool push_to_talk = 3;
285 }
286
287 message RequestBlob {
288         repeated uint32 session_texture = 1;
289         repeated uint32 session_comment = 2;
290         repeated uint32 channel_description = 3;
291 }