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

Unified Diff: mojo/public/go/bindings/message.go

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/go/bindings/invalid_handle.go ('k') | mojo/public/go/bindings/router.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/go/bindings/message.go
diff --git a/mojo/public/go/bindings/message.go b/mojo/public/go/bindings/message.go
deleted file mode 100644
index 1ce64d9e9f5fee54982c0c6180192342828b7c51..0000000000000000000000000000000000000000
--- a/mojo/public/go/bindings/message.go
+++ /dev/null
@@ -1,205 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package bindings
-
-import (
- "fmt"
-
- "mojo/public/go/system"
-)
-
-const (
- // Flag for a header of a simple message.
- MessageNoFlag = 0
-
- // Flag for a header of a message that expected a response.
- MessageExpectsResponseFlag = 1 << 0
-
- // Flag for a header of a message that is a response.
- MessageIsResponseFlag = 1 << 1
-
- dataHeaderSize = 8
- defaultAlignment = 8
- pointerBitSize = 64
-)
-
-var mapHeader DataHeader
-
-func init() {
- mapHeader = DataHeader{24, 0}
-}
-
-const (
- DifferentSizedArraysInMap = "VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS_IN_MAP"
- IllegalHandle = "VALIDATION_ERROR_ILLEGAL_HANDLE"
- IllegalMemoryRange = "VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE"
- IllegalPointer = "VALIDATION_ERROR_ILLEGAL_POINTER"
- MessageHeaderInvalidFlags = "VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS"
- MessageHeaderMissingRequestId = "VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID"
- MessageHeaderUnknownMethod = "VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD"
- MisalignedObject = "VALIDATION_ERROR_MISALIGNED_OBJECT"
- UnexpectedArrayHeader = "VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER"
- UnexpectedInvalidHandle = "VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE"
- UnexpectedNullPointer = "VALIDATION_ERROR_UNEXPECTED_NULL_POINTER"
- UnexpectedNullUnion = "VALIDATION_ERROR_UNEXPECTED_NULL_UNION"
- UnexpectedStructHeader = "VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER"
-)
-
-// ValidationError is an error that can happen during message validation.
-type ValidationError struct {
- ErrorCode string
- Message string
-}
-
-func (e *ValidationError) Error() string {
- return e.Message
-}
-
-// Payload is an interface implemented by a mojo struct that can encode/decode
-// itself into mojo archive format.
-type Payload interface {
- Encode(encoder *Encoder) error
- Decode(decoder *Decoder) error
-}
-
-// DataHeader is a header for a mojo complex element.
-type DataHeader struct {
- Size uint32
- ElementsOrVersion uint32
-}
-
-// MessageHeader is a header information for a message.
-type MessageHeader struct {
- Type uint32
- Flags uint32
- RequestId uint64
-}
-
-func (h *MessageHeader) Encode(encoder *Encoder) error {
- encoder.StartStruct(h.dataSize(), h.version())
- if err := encoder.WriteUint32(h.Type); err != nil {
- return err
- }
- if err := encoder.WriteUint32(h.Flags); err != nil {
- return err
- }
- if h.Flags != MessageNoFlag {
- if err := encoder.WriteUint64(h.RequestId); err != nil {
- return err
- }
- }
- return encoder.Finish()
-}
-
-func (h *MessageHeader) Decode(decoder *Decoder) error {
- header, err := decoder.StartStruct()
- if err != nil {
- return err
- }
- version := header.ElementsOrVersion
- if version > 1 {
- return &ValidationError{UnexpectedStructHeader,
- fmt.Sprintf("invalid message header: it should be of version 0 or 1, but has %d", version),
- }
- }
- expectedSize := uint32(dataHeaderSize + 2*4)
- if version == 1 {
- expectedSize += 8
- }
- if expectedSize != header.Size {
- return &ValidationError{UnexpectedStructHeader,
- fmt.Sprintf("unexpected struct header size: expected %d, but got %d", expectedSize, header.Size),
- }
- }
-
- if h.Type, err = decoder.ReadUint32(); err != nil {
- return err
- }
- if h.Flags, err = decoder.ReadUint32(); err != nil {
- return err
- }
- if version == 1 {
- if h.Flags != MessageExpectsResponseFlag && h.Flags != MessageIsResponseFlag {
- return &ValidationError{MessageHeaderInvalidFlags,
- fmt.Sprintf("message header flags(%v) should be MessageExpectsResponseFlag or MessageIsResponseFlag", h.Flags),
- }
- }
- if h.RequestId, err = decoder.ReadUint64(); err != nil {
- return err
- }
- } else {
- if h.Flags != MessageNoFlag {
- return &ValidationError{MessageHeaderMissingRequestId, "missing request ID in message header"}
- }
- }
- return decoder.Finish()
-}
-
-func (h *MessageHeader) dataSize() uint32 {
- var size uint32
- size = 2 * 4
- if h.Flags != MessageNoFlag {
- size += 8
- }
- return size
-}
-
-func (h *MessageHeader) version() uint32 {
- if h.Flags != MessageNoFlag {
- return 1
- } else {
- return 0
- }
-}
-
-// Message is a a raw message to be sent/received from a message pipe handle
-// which contains a message header.
-type Message struct {
- Header MessageHeader
- Bytes []byte
- Handles []system.UntypedHandle
- Payload []byte
-}
-
-func newMessage(header MessageHeader, bytes []byte, handles []system.UntypedHandle) *Message {
- return &Message{header, bytes, handles, bytes[header.dataSize()+dataHeaderSize:]}
-}
-
-// DecodePayload decodes the provided payload from the message.
-func (m *Message) DecodePayload(payload Payload) error {
- decoder := NewDecoder(m.Payload, m.Handles)
- if err := payload.Decode(decoder); err != nil {
- return err
- }
- return nil
-}
-
-// EncodeMessage returns a message with provided header that has provided
-// payload encoded in mojo archive format.
-func EncodeMessage(header MessageHeader, payload Payload) (*Message, error) {
- encoder := NewEncoder()
- if err := header.Encode(encoder); err != nil {
- return nil, err
- }
- if err := payload.Encode(encoder); err != nil {
- return nil, err
- }
- if bytes, handles, err := encoder.Data(); err != nil {
- return nil, err
- } else {
- return newMessage(header, bytes, handles), nil
- }
-}
-
-// ParseMessage parses message header from byte buffer with attached handles
-// and returnes parsed message.
-func ParseMessage(bytes []byte, handles []system.UntypedHandle) (*Message, error) {
- decoder := NewDecoder(bytes, []system.UntypedHandle{})
- var header MessageHeader
- if err := header.Decode(decoder); err != nil {
- return nil, err
- }
- return newMessage(header, bytes, handles), nil
-}
« no previous file with comments | « mojo/public/go/bindings/invalid_handle.go ('k') | mojo/public/go/bindings/router.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698