You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.4 KiB
67 lines
1.4 KiB
// Copyright 2018 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 osp
|
|
|
|
// TODO(pthatcher):
|
|
// - Read and write size prefixes
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/ugorji/go/codec"
|
|
"io"
|
|
)
|
|
|
|
const PresentationStartRequestTypeKey = 104
|
|
|
|
// AKA presentation-start-request
|
|
type PresentationStartRequest struct {
|
|
// Must be public to allow (de)serialization
|
|
RequestID uint64 `codec:"0"`
|
|
PresentationID string `codec:"1"`
|
|
URL string `codec:"2"`
|
|
}
|
|
|
|
// Read with type/size prefix
|
|
func ReadMessage(r io.Reader) (interface{}, error) {
|
|
typeKey, err := ReadVaruint(r)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
switch typeKey {
|
|
case PresentationStartRequestTypeKey:
|
|
var msg PresentationStartRequest
|
|
h := &codec.CborHandle{}
|
|
dec := codec.NewDecoder(r, h)
|
|
err = dec.Decode(&msg)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return msg, nil
|
|
default:
|
|
return nil, fmt.Errorf("Unknown type key: %d", typeKey)
|
|
}
|
|
}
|
|
|
|
// Write with type/size prefix
|
|
func WriteMessage(msg interface{}, w io.Writer) error {
|
|
var typeKey uint64
|
|
switch msg.(type) {
|
|
case PresentationStartRequest:
|
|
typeKey = uint64(PresentationStartRequestTypeKey)
|
|
default:
|
|
return fmt.Errorf("Unknown message type: %v", msg)
|
|
}
|
|
|
|
err := WriteVaruint(typeKey, w)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
h := &codec.CborHandle{}
|
|
enc := codec.NewEncoder(w, h)
|
|
return enc.Encode(msg)
|
|
}
|