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 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
214 } | 214 } |
215 | 215 |
216 {#--- Request validator definitions #} | 216 {#--- Request validator definitions #} |
217 | 217 |
218 {{class_name}}RequestValidator::{{class_name}}RequestValidator( | 218 {{class_name}}RequestValidator::{{class_name}}RequestValidator( |
219 mojo::MessageReceiver* sink) : MessageFilter(sink) { | 219 mojo::MessageReceiver* sink) : MessageFilter(sink) { |
220 } | 220 } |
221 | 221 |
222 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { | 222 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
223 {%- if interface.methods %} | 223 {%- if interface.methods %} |
224 if (message->has_flag(mojo::internal::kMessageIsResponse)) { | |
225 ReportValidationError( | |
226 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION ); | |
yzshen1
2015/03/03 18:05:37
(1) Do you think we should rename this error? -- b
rudominer
2015/03/04 00:12:01
Let's do this in a separate CL. I filed b/463684
| |
227 return false; | |
228 } | |
224 switch (message->header()->name) { | 229 switch (message->header()->name) { |
225 {%- for method in interface.methods %} | 230 {%- for method in interface.methods %} |
226 case internal::k{{class_name}}_{{method.name}}_Name: { | 231 case internal::k{{class_name}}_{{method.name}}_Name: { |
227 {%- if method.response_parameters != None %} | 232 {%- if method.response_parameters != None %} |
228 if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) | 233 if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) { |
229 break; | 234 ReportValidationError( |
235 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINA TION); | |
236 return false; | |
237 } | |
230 {%- else %} | 238 {%- else %} |
231 if (message->has_flag(mojo::internal::kMessageExpectsResponse) || | 239 if (message->has_flag(mojo::internal::kMessageExpectsResponse)) { |
232 message->has_flag(mojo::internal::kMessageIsResponse)) { | 240 ReportValidationError( |
233 break; | 241 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINA TION); |
242 return false; | |
234 } | 243 } |
235 {%- endif %} | 244 {%- endif %} |
236 mojo::internal::BoundsChecker bounds_checker( | 245 mojo::internal::BoundsChecker bounds_checker( |
237 message->payload(), message->payload_num_bytes(), | 246 message->payload(), message->payload_num_bytes(), |
238 message->handles()->size()); | 247 message->handles()->size()); |
239 if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate( | 248 if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate( |
240 message->payload(), &bounds_checker)) { | 249 message->payload(), &bounds_checker)) { |
241 return false; | 250 return false; |
242 } | 251 } |
243 break; | 252 break; |
244 } | 253 } |
245 {%- endfor %} | 254 {%- endfor %} |
255 default: { | |
256 // Unrecognized message. | |
257 ReportValidationError( | |
258 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); | |
259 return false; | |
260 } | |
246 } | 261 } |
247 {%- endif %} | 262 {%- endif %} |
248 | 263 |
249 assert(sink_); | 264 assert(sink_); |
250 return sink_->Accept(message); | 265 return sink_->Accept(message); |
251 } | 266 } |
252 | 267 |
253 {#--- Response validator definitions #} | 268 {#--- Response validator definitions #} |
254 {% if interface|has_callbacks %} | 269 {% if interface|has_callbacks %} |
255 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( | 270 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( |
256 mojo::MessageReceiver* sink) : MessageFilter(sink) { | 271 mojo::MessageReceiver* sink) : MessageFilter(sink) { |
257 } | 272 } |
258 | 273 |
259 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { | 274 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { |
260 {%- if interface.methods %} | 275 {%- if interface.methods %} |
276 if (!message->has_flag(mojo::internal::kMessageIsResponse)) { | |
277 ReportValidationError( | |
278 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION ); | |
279 return false; | |
280 } | |
261 switch (message->header()->name) { | 281 switch (message->header()->name) { |
262 {%- for method in interface.methods if method.response_parameters != None %} | 282 {%- for method in interface.methods if method.response_parameters != None %} |
263 case internal::k{{class_name}}_{{method.name}}_Name: { | 283 case internal::k{{class_name}}_{{method.name}}_Name: { |
264 if (!message->has_flag(mojo::internal::kMessageIsResponse)) | |
265 break; | |
266 mojo::internal::BoundsChecker bounds_checker( | 284 mojo::internal::BoundsChecker bounds_checker( |
267 message->payload(), message->payload_num_bytes(), | 285 message->payload(), message->payload_num_bytes(), |
268 message->handles()->size()); | 286 message->handles()->size()); |
269 if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validat e( | 287 if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validat e( |
270 message->payload(), &bounds_checker)) { | 288 message->payload(), &bounds_checker)) { |
271 return false; | 289 return false; |
272 } | 290 } |
273 break; | 291 break; |
274 } | 292 } |
275 {%- endfor %} | 293 {%- endfor %} |
294 default: { | |
295 // Unrecognized message. | |
296 ReportValidationError( | |
297 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); | |
298 return false; | |
299 } | |
276 } | 300 } |
277 {%- endif %} | 301 {%- endif %} |
278 | 302 |
279 assert(sink_); | 303 assert(sink_); |
280 return sink_->Accept(message); | 304 return sink_->Accept(message); |
281 } | 305 } |
282 {%- endif -%} | 306 {%- endif -%} |
OLD | NEW |