| // Copyright 2016 The Vanadium 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 internal |
| |
| import ( |
| "fmt" |
| |
| "mojo/public/go/system" |
| |
| mojom "mojom/vanadium/discovery" |
| |
| "v.io/v23/context" |
| "v.io/v23/discovery" |
| ) |
| |
| type mupdate struct { |
| ctx *context.T |
| u discovery.Update |
| } |
| |
| func (u *mupdate) IsLost() (bool, error) { return u.u.IsLost(), nil } |
| func (u *mupdate) GetId() ([AdIdLen]uint8, error) { return u.u.Id(), nil } |
| func (u *mupdate) GetInterfaceName() (string, error) { return u.u.InterfaceName(), nil } |
| func (u *mupdate) GetAddresses() ([]string, error) { return u.u.Addresses(), nil } |
| func (u *mupdate) GetAttribute(name string) (string, error) { return u.u.Attribute(name), nil } |
| |
| func (u *mupdate) GetAttachment(name string) (system.ConsumerHandle, error) { |
| r, producer, consumer := system.GetCore().CreateDataPipe(nil) |
| if r != system.MOJO_RESULT_OK { |
| return nil, fmt.Errorf("can't create data pipe: %v", r) |
| } |
| go func() { |
| defer producer.Close() |
| |
| dataOrErr := <-u.u.Attachment(u.ctx, name) |
| if dataOrErr.Error != nil { |
| u.ctx.Error(dataOrErr.Error) |
| } else { |
| producer.WriteData([]byte(dataOrErr.Data), system.MOJO_WRITE_DATA_FLAG_ALL_OR_NONE) |
| } |
| }() |
| return consumer, nil |
| } |
| |
| func (u *mupdate) GetAdvertisement() (mojom.Advertisement, error) { |
| ad := u.u.Advertisement() |
| return v2mAd(&ad), nil |
| } |
| |
| func newMojoUpdate(ctx *context.T, update discovery.Update) mojom.Update { |
| return &mupdate{ctx, update} |
| } |