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