| 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 |