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 762d1617899e82226eb3ef78e6271f08c0989ab0..0551285bf652a5f204b9a5cb1f708ecf227ce17f 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
@@ -257,7 +257,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)) |
+ break; |
+{%- else %} |
+ if (message->has_flag(mojo::internal::kMessageExpectsResponse) || |
+ message->has_flag(mojo::internal::kMessageIsResponse)) { |
+ break; |
+ } |
+{%- 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); |
} |
@@ -268,7 +293,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)) |
+ break; |
+ 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 -%} |