| Index: mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| index ef091d6b29ded1c6d3c8af6ea006a417753b9ce1..8d04c4607a8f1e97c16bf66276602e5dc79aeb74 100644
|
| --- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| +++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| @@ -251,7 +251,32 @@ bool {{class_name}}Stub::AcceptWithResponder(
|
| }
|
|
|
| bool {{class_name}}RequestValidator::Accept(mojo::Message* message) {
|
| - // TODO(yzshen): implement validation logic.
|
| +{%- if interface.methods %}
|
| + switch (message->header()->name) {
|
| +{%- for method in interface.methods %}
|
| + case internal::k{{class_name}}_{{method.name}}_Name: {
|
| +{%- if method.response_parameters != None %}
|
| + if (!message->has_flag(mojo::internal::kMessageExpectsResponse))
|
| + return false;
|
| +{%- else %}
|
| + if (message->has_flag(mojo::internal::kMessageExpectsResponse) ||
|
| + message->has_flag(mojo::internal::kMessageIsResponse)) {
|
| + return false;
|
| + }
|
| +{%- endif %}
|
| + mojo::internal::BoundsChecker bounds_checker(
|
| + message->payload(), message->payload_num_bytes(),
|
| + message->handles()->size());
|
| + if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate(
|
| + message->payload(), &bounds_checker)) {
|
| + return false;
|
| + }
|
| + break;
|
| + }
|
| +{%- endfor %}
|
| + }
|
| +{%- endif %}
|
| +
|
| return sink_->Accept(message);
|
| }
|
|
|
| @@ -262,7 +287,25 @@ bool {{class_name}}RequestValidator::Accept(mojo::Message* message) {
|
| }
|
|
|
| bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
|
| - // TODO(yzshen): implement validation logic.
|
| +{%- if interface.methods %}
|
| + switch (message->header()->name) {
|
| +{%- for method in interface.methods if method.response_parameters != None %}
|
| + case internal::k{{class_name}}_{{method.name}}_Name: {
|
| + if (!message->has_flag(mojo::internal::kMessageIsResponse))
|
| + return false;
|
| + mojo::internal::BoundsChecker bounds_checker(
|
| + message->payload(), message->payload_num_bytes(),
|
| + message->handles()->size());
|
| + if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validate(
|
| + message->payload(), &bounds_checker)) {
|
| + return false;
|
| + }
|
| + break;
|
| + }
|
| +{%- endfor %}
|
| + }
|
| +{%- endif %}
|
| +
|
| return sink_->Accept(message);
|
| }
|
| {%- endif -%}
|
|
|