Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Side by Side Diff: third_party/mojo/src/mojo/public/go/bindings/message.go

Issue 1127293003: Update mojo sdk to rev f84766d3b6420b7cf6a113d9d65d73cb5fe18d90 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge IPC fixes Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package bindings 5 package bindings
6 6
7 import ( 7 import (
8 "fmt" 8 "fmt"
9 9
10 "mojo/public/go/system" 10 "mojo/public/go/system"
(...skipping 10 matching lines...) Expand all
21 MessageIsResponseFlag = 1 << 1 21 MessageIsResponseFlag = 1 << 1
22 22
23 dataHeaderSize = 8 23 dataHeaderSize = 8
24 defaultAlignment = 8 24 defaultAlignment = 8
25 pointerBitSize = 64 25 pointerBitSize = 64
26 ) 26 )
27 27
28 var mapHeader DataHeader 28 var mapHeader DataHeader
29 29
30 func init() { 30 func init() {
31 » mapHeader = DataHeader{24, 2} 31 » mapHeader = DataHeader{24, 0}
32 } 32 }
33 33
34 const ( 34 const (
35 DifferentSizedArraysInMap = "VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS _IN_MAP" 35 DifferentSizedArraysInMap = "VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS _IN_MAP"
36 IllegalHandle = "VALIDATION_ERROR_ILLEGAL_HANDLE" 36 IllegalHandle = "VALIDATION_ERROR_ILLEGAL_HANDLE"
37 IllegalMemoryRange = "VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE" 37 IllegalMemoryRange = "VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE"
38 IllegalPointer = "VALIDATION_ERROR_ILLEGAL_POINTER" 38 IllegalPointer = "VALIDATION_ERROR_ILLEGAL_POINTER"
39 MessageHeaderInvalidFlags = "VALIDATION_ERROR_MESSAGE_HEADER_INVALID _FLAGS" 39 MessageHeaderInvalidFlags = "VALIDATION_ERROR_MESSAGE_HEADER_INVALID _FLAGS"
40 MessageHeaderMissingRequestId = "VALIDATION_ERROR_MESSAGE_HEADER_MISSING _REQUEST_ID" 40 MessageHeaderMissingRequestId = "VALIDATION_ERROR_MESSAGE_HEADER_MISSING _REQUEST_ID"
41 MessageHeaderUnknownMethod = "VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN _METHOD" 41 MessageHeaderUnknownMethod = "VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN _METHOD"
(...skipping 28 matching lines...) Expand all
70 } 70 }
71 71
72 // MessageHeader is a header information for a message. 72 // MessageHeader is a header information for a message.
73 type MessageHeader struct { 73 type MessageHeader struct {
74 Type uint32 74 Type uint32
75 Flags uint32 75 Flags uint32
76 RequestId uint64 76 RequestId uint64
77 } 77 }
78 78
79 func (h *MessageHeader) Encode(encoder *Encoder) error { 79 func (h *MessageHeader) Encode(encoder *Encoder) error {
80 » encoder.StartStruct(h.dataSize(), h.numFields()) 80 » encoder.StartStruct(h.dataSize(), h.version())
81 if err := encoder.WriteUint32(h.Type); err != nil { 81 if err := encoder.WriteUint32(h.Type); err != nil {
82 return err 82 return err
83 } 83 }
84 if err := encoder.WriteUint32(h.Flags); err != nil { 84 if err := encoder.WriteUint32(h.Flags); err != nil {
85 return err 85 return err
86 } 86 }
87 if h.RequestId != 0 { 87 if h.RequestId != 0 {
88 if err := encoder.WriteUint64(h.RequestId); err != nil { 88 if err := encoder.WriteUint64(h.RequestId); err != nil {
89 return err 89 return err
90 } 90 }
91 } 91 }
92 return encoder.Finish() 92 return encoder.Finish()
93 } 93 }
94 94
95 func (h *MessageHeader) Decode(decoder *Decoder) error { 95 func (h *MessageHeader) Decode(decoder *Decoder) error {
96 header, err := decoder.StartStruct() 96 header, err := decoder.StartStruct()
97 if err != nil { 97 if err != nil {
98 return err 98 return err
99 } 99 }
100 » numFields := header.ElementsOrVersion 100 » version := header.ElementsOrVersion
101 » if numFields < 2 || numFields > 3 { 101 » if version > 1 {
102 return &ValidationError{UnexpectedStructHeader, 102 return &ValidationError{UnexpectedStructHeader,
103 » » » fmt.Sprintf("invalid message header: it should have 2 or 3 fileds, but has %d", numFields), 103 » » » fmt.Sprintf("invalid message header: it should be of ver sion 0 or 1, but has %d", version),
104 } 104 }
105 } 105 }
106 expectedSize := uint32(dataHeaderSize + 2*4) 106 expectedSize := uint32(dataHeaderSize + 2*4)
107 » if numFields == 3 { 107 » if version == 1 {
108 expectedSize += 8 108 expectedSize += 8
109 } 109 }
110 if expectedSize != header.Size { 110 if expectedSize != header.Size {
111 return &ValidationError{UnexpectedStructHeader, 111 return &ValidationError{UnexpectedStructHeader,
112 fmt.Sprintf("unexpected struct header size: expected %d, but got %d", expectedSize, header.Size), 112 fmt.Sprintf("unexpected struct header size: expected %d, but got %d", expectedSize, header.Size),
113 } 113 }
114 } 114 }
115 115
116 if h.Type, err = decoder.ReadUint32(); err != nil { 116 if h.Type, err = decoder.ReadUint32(); err != nil {
117 return err 117 return err
118 } 118 }
119 if h.Flags, err = decoder.ReadUint32(); err != nil { 119 if h.Flags, err = decoder.ReadUint32(); err != nil {
120 return err 120 return err
121 } 121 }
122 » if numFields == 3 { 122 » if version == 1 {
123 if h.Flags != MessageExpectsResponseFlag && h.Flags != MessageIs ResponseFlag { 123 if h.Flags != MessageExpectsResponseFlag && h.Flags != MessageIs ResponseFlag {
124 return &ValidationError{MessageHeaderInvalidFlags, 124 return &ValidationError{MessageHeaderInvalidFlags,
125 fmt.Sprintf("message header flags(%v) should be MessageExpectsResponseFlag or MessageIsResponseFlag", h.Flags), 125 fmt.Sprintf("message header flags(%v) should be MessageExpectsResponseFlag or MessageIsResponseFlag", h.Flags),
126 } 126 }
127 } 127 }
128 if h.RequestId, err = decoder.ReadUint64(); err != nil { 128 if h.RequestId, err = decoder.ReadUint64(); err != nil {
129 return err 129 return err
130 } 130 }
131 } else { 131 } else {
132 if h.Flags != MessageNoFlag { 132 if h.Flags != MessageNoFlag {
133 return &ValidationError{MessageHeaderMissingRequestId, " missing request ID in message header"} 133 return &ValidationError{MessageHeaderMissingRequestId, " missing request ID in message header"}
134 } 134 }
135 } 135 }
136 return decoder.Finish() 136 return decoder.Finish()
137 } 137 }
138 138
139 func (h *MessageHeader) dataSize() uint32 { 139 func (h *MessageHeader) dataSize() uint32 {
140 var size uint32 140 var size uint32
141 size = 2 * 4 141 size = 2 * 4
142 if h.RequestId != 0 { 142 if h.RequestId != 0 {
143 size += 8 143 size += 8
144 } 144 }
145 return size 145 return size
146 } 146 }
147 147
148 func (h *MessageHeader) numFields() uint32 { 148 func (h *MessageHeader) version() uint32 {
149 if h.RequestId != 0 { 149 if h.RequestId != 0 {
150 » » return 3 150 » » return 1
151 } else { 151 } else {
152 » » return 2 152 » » return 0
153 } 153 }
154 } 154 }
155 155
156 // Message is a a raw message to be sent/received from a message pipe handle 156 // Message is a a raw message to be sent/received from a message pipe handle
157 // which contains a message header. 157 // which contains a message header.
158 type Message struct { 158 type Message struct {
159 Header MessageHeader 159 Header MessageHeader
160 Bytes []byte 160 Bytes []byte
161 Handles []system.UntypedHandle 161 Handles []system.UntypedHandle
162 Payload []byte 162 Payload []byte
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 // ParseMessage parses message header from byte buffer with attached handles 195 // ParseMessage parses message header from byte buffer with attached handles
196 // and returnes parsed message. 196 // and returnes parsed message.
197 func ParseMessage(bytes []byte, handles []system.UntypedHandle) (*Message, error ) { 197 func ParseMessage(bytes []byte, handles []system.UntypedHandle) (*Message, error ) {
198 decoder := NewDecoder(bytes, []system.UntypedHandle{}) 198 decoder := NewDecoder(bytes, []system.UntypedHandle{})
199 var header MessageHeader 199 var header MessageHeader
200 if err := header.Decode(decoder); err != nil { 200 if err := header.Decode(decoder); err != nil {
201 return nil, err 201 return nil, err
202 } 202 }
203 return newMessage(header, bytes, handles), nil 203 return newMessage(header, bytes, handles), nil
204 } 204 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698