Index: third_party/mojo/src/mojo/public/tools/bindings/generators/go_templates/interface.tmpl |
diff --git a/third_party/mojo/src/mojo/public/tools/bindings/generators/go_templates/interface.tmpl b/third_party/mojo/src/mojo/public/tools/bindings/generators/go_templates/interface.tmpl |
index 4d4ea394f8935516399206a13d260a1df60c84c9..9c378735b32cb802e1b9a1b1d0efb6511998de7c 100644 |
--- a/third_party/mojo/src/mojo/public/tools/bindings/generators/go_templates/interface.tmpl |
+++ b/third_party/mojo/src/mojo/public/tools/bindings/generators/go_templates/interface.tmpl |
@@ -81,7 +81,7 @@ func CreateMessagePipeFor{{interface|name}}() ({{interface|name}}Request, {{inte |
} |
{% for method in interface.methods %} |
-const {{interface|name(False)}}_{{method|name}}_Name = {{method.ordinal}} |
+const {{interface|name(False)}}_{{method|name}}_Name uint32 = {{method.ordinal}} |
{% endfor %} |
type {{interface|name}}Proxy struct { |
@@ -130,9 +130,20 @@ func (p *{{interface|name}}Proxy) {{method|name}}{{declare_request_params(method |
p.Close_proxy() |
return |
} |
+ if readResult.Message.Header.Flags != bindings.MessageIsResponseFlag { |
+ err = &bindings.ValidationError{bindings.MessageHeaderInvalidFlags, |
+ fmt.Sprintf("invalid message header flag: %v", readResult.Message.Header.Flags), |
+ } |
+ return |
+ } |
+ if got, want := readResult.Message.Header.Type, {{interface|name(False)}}_{{method|name}}_Name; got != want { |
+ err = &bindings.ValidationError{bindings.MessageHeaderUnknownMethod, |
+ fmt.Sprintf("invalid method in response: expected %v, got %v", want, got), |
+ } |
+ return |
+ } |
var response {{method.response_param_struct|name(False)}} |
if err = readResult.Message.DecodePayload(&response); err != nil { |
- err = fmt.Errorf("can't decode response: %v", err.Error()) |
p.Close_proxy() |
return |
} |
@@ -163,9 +174,18 @@ func (s *{{interface|name(False)}}Stub) Accept(message *bindings.Message) (err e |
switch message.Header.Type { |
{% for method in interface.methods %} |
case {{interface|name(False)}}_{{method|name}}_Name: |
+{% if method.response_parameters %} |
+ if message.Header.Flags != bindings.MessageExpectsResponseFlag { |
+{% else %} |
+ if message.Header.Flags != bindings.MessageNoFlag { |
+{% endif %} |
+ return &bindings.ValidationError{bindings.MessageHeaderInvalidFlags, |
+ fmt.Sprintf("invalid message header flag: %v", message.Header.Flags), |
+ } |
+ } |
var request {{method.param_struct|name(False)}} |
if err := message.DecodePayload(&request); err != nil { |
- return fmt.Errorf("can't decode request: %v", err.Error()) |
+ return err |
} |
{% if method.response_parameters %} |
var response {{method.response_param_struct|name(False)}} |
@@ -192,13 +212,16 @@ func (s *{{interface|name(False)}}Stub) Accept(message *bindings.Message) (err e |
} |
message, err = bindings.EncodeMessage(header, &response) |
if err != nil { |
- return fmt.Errorf("can't encode response: %v", err.Error()) |
+ return err |
} |
return s.connector.WriteMessage(message) |
{% endif %} |
{% endfor %} |
default: |
- return fmt.Errorf("unsupported request type %v", message.Header.Type); |
+ return &bindings.ValidationError{ |
+ bindings.MessageHeaderUnknownMethod, |
+ fmt.Sprintf("unknown method %v", message.Header.Type), |
+ } |
} |
return |
} |