OLD | NEW |
1 {%- import "interface_macros.tmpl" as interface_macros %} | 1 {%- import "interface_macros.tmpl" as interface_macros %} |
2 {%- import "struct_macros.tmpl" as struct_macros %} | 2 {%- import "struct_macros.tmpl" as struct_macros %} |
3 {%- set class_name = interface.name %} | 3 {%- set class_name = interface.name %} |
4 {%- set proxy_name = interface.name ~ "Proxy" %} | 4 {%- set proxy_name = interface.name ~ "Proxy" %} |
5 {%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %} | 5 {%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %} |
6 | 6 |
7 {%- macro alloc_params(struct) %} | 7 {%- macro alloc_params(struct) %} |
8 {%- for param in struct.packed.packed_fields_in_ordinal_order %} | 8 {%- for param in struct.packed.packed_fields_in_ordinal_order %} |
9 {{param.field.kind|cpp_result_type}} p_{{param.field.name}}{}; | 9 {{param.field.kind|cpp_result_type}} p_{{param.field.name}}{}; |
10 {%- endfor %} | 10 {%- endfor %} |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 } | 220 } |
221 | 221 |
222 {#--- Request validator definitions #} | 222 {#--- Request validator definitions #} |
223 | 223 |
224 {{class_name}}RequestValidator::{{class_name}}RequestValidator( | 224 {{class_name}}RequestValidator::{{class_name}}RequestValidator( |
225 mojo::MessageReceiver* sink) : MessageFilter(sink) { | 225 mojo::MessageReceiver* sink) : MessageFilter(sink) { |
226 } | 226 } |
227 | 227 |
228 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { | 228 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
229 {%- if interface.methods %} | 229 {%- if interface.methods %} |
| 230 if (message->has_flag(mojo::internal::kMessageIsResponse)) { |
| 231 ReportValidationError( |
| 232 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION
); |
| 233 return false; |
| 234 } |
230 switch (message->header()->name) { | 235 switch (message->header()->name) { |
231 {%- for method in interface.methods %} | 236 {%- for method in interface.methods %} |
232 case internal::k{{class_name}}_{{method.name}}_Name: { | 237 case internal::k{{class_name}}_{{method.name}}_Name: { |
233 {%- if method.response_parameters != None %} | 238 {%- if method.response_parameters != None %} |
234 if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) | 239 if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) { |
235 break; | 240 ReportValidationError( |
| 241 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINA
TION); |
| 242 return false; |
| 243 } |
236 {%- else %} | 244 {%- else %} |
237 if (message->has_flag(mojo::internal::kMessageExpectsResponse) || | 245 if (message->has_flag(mojo::internal::kMessageExpectsResponse)) { |
238 message->has_flag(mojo::internal::kMessageIsResponse)) { | 246 ReportValidationError( |
239 break; | 247 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINA
TION); |
| 248 return false; |
240 } | 249 } |
241 {%- endif %} | 250 {%- endif %} |
242 mojo::internal::BoundsChecker bounds_checker( | 251 mojo::internal::BoundsChecker bounds_checker( |
243 message->payload(), message->payload_num_bytes(), | 252 message->payload(), message->payload_num_bytes(), |
244 message->handles()->size()); | 253 message->handles()->size()); |
245 if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate( | 254 if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate( |
246 message->payload(), &bounds_checker)) { | 255 message->payload(), &bounds_checker)) { |
247 return false; | 256 return false; |
248 } | 257 } |
249 break; | 258 break; |
250 } | 259 } |
251 {%- endfor %} | 260 {%- endfor %} |
| 261 default: { |
| 262 // Unrecognized message. |
| 263 ReportValidationError( |
| 264 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
| 265 return false; |
| 266 } |
252 } | 267 } |
253 {%- endif %} | 268 {%- endif %} |
254 | 269 |
255 assert(sink_); | 270 assert(sink_); |
256 return sink_->Accept(message); | 271 return sink_->Accept(message); |
257 } | 272 } |
258 | 273 |
259 {#--- Response validator definitions #} | 274 {#--- Response validator definitions #} |
260 {% if interface|has_callbacks %} | 275 {% if interface|has_callbacks %} |
261 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( | 276 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( |
262 mojo::MessageReceiver* sink) : MessageFilter(sink) { | 277 mojo::MessageReceiver* sink) : MessageFilter(sink) { |
263 } | 278 } |
264 | 279 |
265 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { | 280 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { |
266 {%- if interface.methods %} | 281 {%- if interface.methods %} |
| 282 if (!message->has_flag(mojo::internal::kMessageIsResponse)) { |
| 283 ReportValidationError( |
| 284 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION
); |
| 285 return false; |
| 286 } |
267 switch (message->header()->name) { | 287 switch (message->header()->name) { |
268 {%- for method in interface.methods if method.response_parameters != None %} | 288 {%- for method in interface.methods if method.response_parameters != None %} |
269 case internal::k{{class_name}}_{{method.name}}_Name: { | 289 case internal::k{{class_name}}_{{method.name}}_Name: { |
270 if (!message->has_flag(mojo::internal::kMessageIsResponse)) | |
271 break; | |
272 mojo::internal::BoundsChecker bounds_checker( | 290 mojo::internal::BoundsChecker bounds_checker( |
273 message->payload(), message->payload_num_bytes(), | 291 message->payload(), message->payload_num_bytes(), |
274 message->handles()->size()); | 292 message->handles()->size()); |
275 if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validat
e( | 293 if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validat
e( |
276 message->payload(), &bounds_checker)) { | 294 message->payload(), &bounds_checker)) { |
277 return false; | 295 return false; |
278 } | 296 } |
279 break; | 297 break; |
280 } | 298 } |
281 {%- endfor %} | 299 {%- endfor %} |
| 300 default: { |
| 301 // Unrecognized message. |
| 302 ReportValidationError( |
| 303 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
| 304 return false; |
| 305 } |
282 } | 306 } |
283 {%- endif %} | 307 {%- endif %} |
284 | 308 |
285 assert(sink_); | 309 assert(sink_); |
286 return sink_->Accept(message); | 310 return sink_->Accept(message); |
287 } | 311 } |
288 {%- endif -%} | 312 {%- endif -%} |
OLD | NEW |