client

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 16, 2021 License: Apache-2.0 Imports: 44 Imported by: 2

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GenerateSDKIdentityCertificate

func GenerateSDKIdentityCertificate(ctx context.Context, sign SignFunc, sdkDeviceID string) (tls.Certificate, []*x509.Certificate, error)

func GenerateSDKManufacturerCertificate

func GenerateSDKManufacturerCertificate(ctx context.Context, sign SignFunc, ID string) (tls.Certificate, []*x509.Certificate, error)

func NewDeviceOwnershipBackendFromConfig

func NewDeviceOwnershipBackendFromConfig(app ApplicationCallback, dialTLS core.DialTLS, dialDTLS core.DialDTLS,
	cfg *DeviceOwnershipBackendConfig, errorsFunc func(err error)) (*deviceOwnershipBackend, error)

func NewDeviceOwnershipNone

func NewDeviceOwnershipNone() *deviceOwnershipNone

func NewDeviceOwnershipSDK

func NewDeviceOwnershipSDK(app ApplicationCallback, sdkDeviceID string, dialTLS core.DialTLS,
	dialDTLS core.DialDTLS, signerCert *tls.Certificate, validFrom string, certExpiry time.Duration, createSigner func(caCert []*x509.Certificate, caKey crypto.PrivateKey, validNotBefore time.Time, validNotAfter time.Time) core.CertificateSigner) (*deviceOwnershipSDK, error)

func NewDeviceOwnershipSDKFromConfig

func NewDeviceOwnershipSDKFromConfig(app ApplicationCallback, dialTLS core.DialTLS,
	dialDLTS core.DialDTLS, cfg *DeviceOwnershipSDKConfig, createSigner func(caCert []*x509.Certificate, caKey crypto.PrivateKey, validNotBefore time.Time, validNotAfter time.Time) core.CertificateSigner) (*deviceOwnershipSDK, error)

func NewRefDeviceCache

func NewRefDeviceCache(cacheExpiration time.Duration, errors func(error)) *refDeviceCache

func TokenFromOutgoingMD

func TokenFromOutgoingMD(ctx context.Context) (string, error)

TokenFromOutgoingMD extracts token stored by CtxWithToken.

Types

type ApplicationCallback

type ApplicationCallback = interface {
	GetRootCertificateAuthorities() ([]*x509.Certificate, error)
	GetManufacturerCertificateAuthorities() ([]*x509.Certificate, error)
	GetManufacturerCertificate() (tls.Certificate, error)
}

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client uses the underlying OCF local client.

func NewClient

func NewClient(
	app ApplicationCallback,
	deviceOwner DeviceOwner,
	cacheExpiration time.Duration,
	observerPollingInterval time.Duration,
	errors func(error),
	opt ...core.OptionFunc,
) (*Client, error)

NewClient constructs a new local client.

func NewClientFromConfig

func NewClientFromConfig(cfg *Config, app ApplicationCallback, createSigner func(caCert []*x509.Certificate, caKey crypto.PrivateKey, validNotBefore time.Time, validNotAfter time.Time) core.CertificateSigner, errors func(error)) (*Client, error)

NewClientFromConfig constructs a new local client from the proto configuration.

func (*Client) Close

func (c *Client) Close(ctx context.Context) error

Close clears all connections and spawned goroutines by client.

func (*Client) CoreClient

func (c *Client) CoreClient() *core.Client

func (*Client) CreateResource

func (c *Client) CreateResource(
	ctx context.Context,
	deviceID string,
	href string,
	request interface{},
	response interface{},
	opts ...CreateOption,
) error

func (*Client) DeleteResource

func (c *Client) DeleteResource(
	ctx context.Context,
	deviceID string,
	href string,
	response interface{},
	opts ...DeleteOption,
) error

func (*Client) DisownDevice

func (c *Client) DisownDevice(ctx context.Context, deviceID string) error

DisownDevice disowns a device. For unsecure device it calls factory reset. For secure device it disowns.

func (*Client) FactoryReset

func (c *Client) FactoryReset(ctx context.Context, deviceID string) error

func (*Client) GetDeviceByIP

func (c *Client) GetDeviceByIP(ctx context.Context, ip string, opts ...GetDeviceByIPOption) (DeviceDetails, error)

GetDeviceByIP gets the device directly via IP address and multicast listen port 5683.

func (*Client) GetDeviceByMulticast

func (c *Client) GetDeviceByMulticast(ctx context.Context, deviceID string, opts ...GetDeviceOption) (DeviceDetails, error)

func (*Client) GetDevices

func (c *Client) GetDevices(
	ctx context.Context,
	opts ...GetDevicesOption,
) (map[string]DeviceDetails, error)

GetDevices discovers devices in the local mode. The deviceResourceType is applied on the client side, because len(deviceResourceType) > 1 does not work with Iotivity 1.3.

func (*Client) GetDevicesWithHandler

func (c *Client) GetDevicesWithHandler(ctx context.Context, handler core.DeviceHandlerV2, opts ...GetDevicesWithHandlerOption) error

GetDevicesWithHandler discovers devices using a CoAP multicast request via UDP. Device resources can be queried in DeviceHandler using device.Client,

func (*Client) GetIdentityCACerts

func (c *Client) GetIdentityCACerts() ([]*x509.Certificate, error)

func (*Client) GetIdentityCertificate

func (c *Client) GetIdentityCertificate() (tls.Certificate, error)

GetIdentityCertificate returns certificate for connection

func (*Client) GetRefDevice

func (c *Client) GetRefDevice(
	ctx context.Context,
	deviceID string,
	opts ...GetDeviceOption,
) (*RefDevice, schema.ResourceLinks, error)

GetRefDevice returns device, after using call device.Release to free resources.

func (*Client) GetRefDeviceByIP

func (c *Client) GetRefDeviceByIP(
	ctx context.Context,
	ip string,
) (*RefDevice, schema.ResourceLinks, error)

GetRefDeviceByIP gets the device directly via IP address and multicast listen port 5683. After using it, call device.Release to free resources.

func (*Client) GetResource

func (c *Client) GetResource(
	ctx context.Context,
	deviceID string,
	href string,
	response interface{},
	opts ...GetOption,
) error

func (*Client) Initialization

func (c *Client) Initialization(ctx context.Context) (err error)

func (*Client) ObserveDeviceResources

func (c *Client) ObserveDeviceResources(ctx context.Context, deviceID string, handler DeviceResourcesObservationHandler) (string, error)

func (*Client) ObserveDevices

func (c *Client) ObserveDevices(ctx context.Context, handler DevicesObservationHandler, opts ...ObserveDevicesOption) (string, error)

func (*Client) ObserveResource

func (c *Client) ObserveResource(
	ctx context.Context,
	deviceID string,
	href string,
	handler core.ObservationHandler,
	opts ...ObserveOption,
) (observationID string, _ error)

func (*Client) OffboardDevice

func (c *Client) OffboardDevice(ctx context.Context, deviceID string) error

func (*Client) OnboardDevice

func (c *Client) OnboardDevice(
	ctx context.Context,
	deviceID, authorizationProvider, cloudURL, authCode, cloudID string,
) error

func (*Client) OwnDevice

func (c *Client) OwnDevice(ctx context.Context, deviceID string, opts ...OwnOption) (string, error)

func (*Client) Reboot

func (c *Client) Reboot(ctx context.Context, deviceID string) error

func (*Client) StopObservingDeviceResources

func (c *Client) StopObservingDeviceResources(ctx context.Context, observationID string) error

func (*Client) StopObservingDevices

func (c *Client) StopObservingDevices(ctx context.Context, observationID string) error

func (*Client) StopObservingResource

func (c *Client) StopObservingResource(ctx context.Context, observationID string) error

func (*Client) UpdateResource

func (c *Client) UpdateResource(
	ctx context.Context,
	deviceID string,
	href string,
	request interface{},
	response interface{},
	opts ...UpdateOption,
) error

type CodecOption

type CodecOption struct {
	// contains filtered or unexported fields
}

func WithCodec

func WithCodec(codec kitNetCoap.Codec) CodecOption

type Config

type Config struct {
	DeviceCacheExpirationSeconds   int64
	ObserverPollingIntervalSeconds uint64 // 0 means 3 seconds

	KeepAliveConnectionTimeoutSeconds uint64 // 0 means keepalive is disabled
	MaxMessageSize                    uint32
	DisablePeerTCPSignalMessageCSMs   bool
	DefaultTransferDurationSeconds    uint64 // 0 means 15 seconds

	// specify one of:
	DeviceOwnershipSDK     *DeviceOwnershipSDKConfig     `yaml:",omitempty"`
	DeviceOwnershipBackend *DeviceOwnershipBackendConfig `yaml:",omitempty"`
}

type CreateOption

type CreateOption = interface {
	// contains filtered or unexported methods
}

CreateOption option definition.

type DeleteOption

type DeleteOption = interface {
	// contains filtered or unexported methods
}

UpdateOption option definition.

type DeviceDetails

type DeviceDetails struct {
	// ID of the device
	ID string
	// Details result of function which can be set via option WithGetDetails(), by default it is nil.
	Details interface{}
	// IsSecured is secured.
	IsSecured bool
	// Ownership describes ownership of the device, for unsecure device it is nil.
	Ownership *doxm.Doxm
	// Resources list of the device resources.
	Resources []schema.ResourceLink
	// Resources list of the device endpoints.
	Endpoints []schema.Endpoint
	// Ownership status
	OwnershipStatus OwnershipStatus
}

DeviceDetails describes a device.

type DeviceOwner

type DeviceOwner interface {
	Initialization(ctx context.Context) error
	OwnDevice(ctx context.Context, deviceID string, otmType OTMType, own ownFunc, opts ...core.OwnOption) (string, error)

	GetIdentityCertificate() (tls.Certificate, error)
	GetIdentityCACerts() ([]*x509.Certificate, error)
}

func NewDeviceOwnerFromConfig

func NewDeviceOwnerFromConfig(cfg *Config, dialTLS core.DialTLS, dialDTLS core.DialDTLS, app ApplicationCallback, createSigner func(caCert []*x509.Certificate, caKey crypto.PrivateKey, validNotBefore time.Time, validNotAfter time.Time) core.CertificateSigner, errors func(error)) (DeviceOwner, error)

type DeviceOwnershipBackendConfig

type DeviceOwnershipBackendConfig struct {
	JWTClaimOwnerID string
	Sign            SignFunc
}

type DeviceOwnershipSDKConfig

type DeviceOwnershipSDKConfig struct {
	ID         string
	Cert       string
	CertKey    string
	ValidFrom  string //RFC3339, or now-1m, empty means now-1m
	CertExpiry *string
}

type DeviceResourcesObservationEvent

type DeviceResourcesObservationEvent struct {
	Link  schema.ResourceLink
	Event DeviceResourcesObservationEvent_type
}

type DeviceResourcesObservationEvent_type

type DeviceResourcesObservationEvent_type uint8
const DeviceResourcesObservationEvent_ADDED DeviceResourcesObservationEvent_type = 0
const DeviceResourcesObservationEvent_REMOVED DeviceResourcesObservationEvent_type = 1

type DeviceResourcesObservationHandler

type DeviceResourcesObservationHandler = interface {
	Handle(ctx context.Context, event DeviceResourcesObservationEvent) error
	OnClose()
	Error(err error)
}

type DevicesObservationEvent

type DevicesObservationEvent struct {
	DeviceID string
	Event    DevicesObservationEvent_type
}

type DevicesObservationEvent_type

type DevicesObservationEvent_type uint8
const DevicesObservationEvent_OFFLINE DevicesObservationEvent_type = 1
const DevicesObservationEvent_ONLINE DevicesObservationEvent_type = 0

type DevicesObservationHandler

type DevicesObservationHandler = interface {
	Handle(ctx context.Context, event DevicesObservationEvent) error
	OnClose()
	Error(err error)
}

type DiscoveryConfigrationOption

type DiscoveryConfigrationOption struct {
	// contains filtered or unexported fields
}

func WithDiscoveryConfigration

func WithDiscoveryConfigration(cfg core.DiscoveryConfiguration) DiscoveryConfigrationOption

WithDiscoveryConfigration allows to setup multicast request. By defualt it is send to ipv4 and ipv6.

type ErrorOption

type ErrorOption struct {
	// contains filtered or unexported fields
}

func WithError

func WithError(err func(error)) ErrorOption

type GetDetailsFunc

type GetDetailsFunc = func(context.Context, *core.Device, schema.ResourceLinks) (interface{}, error)

type GetDetailsOption

type GetDetailsOption struct {
	// contains filtered or unexported fields
}

func WithGetDetails

func WithGetDetails(getDetails func(ctx context.Context, d *core.Device, links schema.ResourceLinks) (interface{}, error)) GetDetailsOption

type GetDeviceByIPOption

type GetDeviceByIPOption = interface {
	// contains filtered or unexported methods
}

GetDeviceByIPOption option definition.

type GetDeviceOption

type GetDeviceOption = interface {
	// contains filtered or unexported methods
}

GetDeviceOption option definition.

type GetDevicesOption

type GetDevicesOption = interface {
	// contains filtered or unexported methods
}

GetDevicesOption option definition.

type GetDevicesWithHandlerOption

type GetDevicesWithHandlerOption = interface {
	// contains filtered or unexported methods
}

type GetOption

type GetOption = interface {
	// contains filtered or unexported methods
}

GetOption option definition.

type OTMType

type OTMType int
const (
	OTMType_Manufacturer OTMType = 0
	OTMType_JustWorks    OTMType = 1
)

type ObserveDevicesOption

type ObserveDevicesOption = interface {
	// contains filtered or unexported methods
}

type ObserveOption

type ObserveOption = interface {
	// contains filtered or unexported methods
}

ObserveOption option definition.

type OwnOption

type OwnOption = interface {
	// contains filtered or unexported methods
}

OwnOption option definition.

func WithActionDuringOwn

func WithActionDuringOwn(actionDuringOwn func(ctx context.Context, client *kitNetCoap.ClientCloseHandler) (string, error)) OwnOption

WithActionDuringOwn allows to set deviceID of owned device and other staffo over owner TLS.

func WithOTM

func WithOTM(otmType OTMType) OwnOption

WithOTM allows to set ownership transfer method, by default it is manufacturer.

type OwnershipStatus

type OwnershipStatus string

OwnershipStatus describes ownership status of the device

const (
	// OwnershipStatus_ReadyToBeOwned the device is ready to be owned.
	OwnershipStatus_ReadyToBeOwned OwnershipStatus = "readytobeowned"
	// OwnershipStatus_Owned the device is owned.
	OwnershipStatus_Owned OwnershipStatus = "owned"
	// OwnershipStatus_OwnedByOther the device is owned by another user.
	OwnershipStatus_OwnedByOther OwnershipStatus = "ownedbyother"
	// OwnershipStatus_Unknown the device is unsecure or cannot obtain his status.
	OwnershipStatus_Unknown OwnershipStatus = "unknown"
)

type RefDevice

type RefDevice struct {
	// contains filtered or unexported fields
}

func NewRefDevice

func NewRefDevice(dev *core.Device) *RefDevice

func (*RefDevice) Acquire

func (d *RefDevice) Acquire()

func (*RefDevice) DeleteResourceWithCodec

func (d *RefDevice) DeleteResourceWithCodec(
	ctx context.Context,
	link schema.ResourceLink,
	codec coap.Codec,
	response interface{},
	options ...coap.OptionFunc,
) error

func (*RefDevice) Device

func (d *RefDevice) Device() *core.Device

func (*RefDevice) DeviceID

func (d *RefDevice) DeviceID() string

func (*RefDevice) Disown

func (d *RefDevice) Disown(
	ctx context.Context,
	links schema.ResourceLinks,
) error

func (*RefDevice) FactoryReset

func (d *RefDevice) FactoryReset(ctx context.Context, links schema.ResourceLinks) error

func (*RefDevice) GetDeviceDetails

func (d *RefDevice) GetDeviceDetails(ctx context.Context, links schema.ResourceLinks, getDetails GetDetailsFunc) (out DeviceDetails, _ error)

func (*RefDevice) GetEndpoints

func (d *RefDevice) GetEndpoints() []schema.Endpoint

func (*RefDevice) GetOwnership

func (d *RefDevice) GetOwnership(ctx context.Context, links schema.ResourceLinks) (doxm.Doxm, error)
func (d *RefDevice) GetResourceLinks(ctx context.Context, endpoints []schema.Endpoint, options ...coap.OptionFunc) (schema.ResourceLinks, error)

func (*RefDevice) GetResourceWithCodec

func (d *RefDevice) GetResourceWithCodec(
	ctx context.Context,
	link schema.ResourceLink,
	codec coap.Codec,
	response interface{},
	options ...coap.OptionFunc) error

func (*RefDevice) IsSecured

func (d *RefDevice) IsSecured() bool

func (*RefDevice) ObserveResource

func (d *RefDevice) ObserveResource(
	ctx context.Context,
	link schema.ResourceLink,
	handler core.ObservationHandler,
	options ...coap.OptionFunc,
) (observationID string, _ error)

func (*RefDevice) ObserveResourceWithCodec

func (d *RefDevice) ObserveResourceWithCodec(
	ctx context.Context,
	link schema.ResourceLink,
	codec coap.Codec,
	handler core.ObservationHandler,
	options ...coap.OptionFunc,
) (observationID string, _ error)

func (*RefDevice) Own

func (d *RefDevice) Own(
	ctx context.Context,
	links schema.ResourceLinks,
	otmClient otm.Client,
	ownOptions ...core.OwnOption,
) error

func (*RefDevice) Provision

func (*RefDevice) Reboot

func (d *RefDevice) Reboot(ctx context.Context, links schema.ResourceLinks) error

func (*RefDevice) Release

func (d *RefDevice) Release(ctx context.Context) error

func (*RefDevice) StopObservingResource

func (d *RefDevice) StopObservingResource(
	ctx context.Context,
	observationID string,
) error

func (*RefDevice) UpdateResource

func (d *RefDevice) UpdateResource(
	ctx context.Context,
	link schema.ResourceLink,
	request interface{},
	response interface{},
	options ...coap.OptionFunc,
) error

func (*RefDevice) UpdateResourceWithCodec

func (d *RefDevice) UpdateResourceWithCodec(
	ctx context.Context,
	link schema.ResourceLink,
	codec coap.Codec,
	request interface{},
	response interface{},
	options ...coap.OptionFunc,
) error

type ResourceInterfaceOption

type ResourceInterfaceOption struct {
	// contains filtered or unexported fields
}

func WithInterface

func WithInterface(resourceInterface string) ResourceInterfaceOption

WithInterface updates/gets resource with interface directly from a device.

type ResourceTypesOption

type ResourceTypesOption struct {
	// contains filtered or unexported fields
}

func WithResourceTypes

func WithResourceTypes(resourceTypes ...string) ResourceTypesOption

type SignFunc

type SignFunc = func(ctx context.Context, csr []byte) (signedCsr []byte, err error)

type Signer

type Signer = interface {
	Sign()
}

type UpdateOption

type UpdateOption = interface {
	// contains filtered or unexported methods
}

UpdateOption option definition.

Directories

Path Synopsis
otm

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL