blob: 174ef300a085e45b3c92d8ade73afe636a2b036c [file] [log] [blame]
// 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(jophba):
// - 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)
}