57
vendor/github.com/sigma/vmw-guestinfo/message/message.go
generated
vendored
Normal file
57
vendor/github.com/sigma/vmw-guestinfo/message/message.go
generated
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
package message
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/sigma/vmw-guestinfo/bridge"
|
||||
)
|
||||
|
||||
var (
|
||||
// ErrChannelOpen represents a failure to open a channel
|
||||
ErrChannelOpen = errors.New("could not open channel")
|
||||
// ErrChannelClose represents a failure to close a channel
|
||||
ErrChannelClose = errors.New("could not close channel")
|
||||
// ErrRpciSend represents a failure to send a message
|
||||
ErrRpciSend = errors.New("unable to send RPCI command")
|
||||
// ErrRpciReceive represents a failure to receive a message
|
||||
ErrRpciReceive = errors.New("unable to receive RPCI command result")
|
||||
)
|
||||
|
||||
// Channel is a communication channel between hypervisor and virtual machine
|
||||
type Channel struct {
|
||||
privChan bridge.MessageChannel
|
||||
}
|
||||
|
||||
// NewChannel opens a new channel
|
||||
func NewChannel(proto uint32) (*Channel, error) {
|
||||
if channel := bridge.MessageOpen(proto); channel != nil {
|
||||
return &Channel{
|
||||
privChan: channel,
|
||||
}, nil
|
||||
}
|
||||
return nil, ErrChannelOpen
|
||||
}
|
||||
|
||||
// Close the channel
|
||||
func (c *Channel) Close() error {
|
||||
if status := bridge.MessageClose(bridge.MessageChannel(c.privChan)); status {
|
||||
return nil
|
||||
}
|
||||
return ErrChannelClose
|
||||
}
|
||||
|
||||
// Send a request
|
||||
func (c *Channel) Send(request []byte) error {
|
||||
if status := bridge.MessageSend(bridge.MessageChannel(c.privChan), request); status {
|
||||
return nil
|
||||
}
|
||||
return ErrRpciSend
|
||||
}
|
||||
|
||||
// Receive a response
|
||||
func (c *Channel) Receive() ([]byte, error) {
|
||||
if res, status := bridge.MessageReceive(bridge.MessageChannel(c.privChan)); status {
|
||||
return res, nil
|
||||
}
|
||||
return nil, ErrRpciReceive
|
||||
}
|
Reference in New Issue
Block a user