betwixt

package module
v0.0.0-...-41f62d4 Latest Latest
Warning

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

Go to latest
Published: Nov 26, 2016 License: Apache-2.0 Imports: 17 Imported by: 15

README

Betwixt - A LWM2M Client and Server in Go

GoDoc Build Status Coverage Status Go Report Card

Betwixt is a Lightweight M2M implementation written in Go

OMA Lightweight M2M is a protocol from the Open Mobile Alliance for M2M or IoT device management. Lightweight M2M enabler defines the application layer communication protocol between a LWM2M Server and a LWM2M Client, which is located in a LWM2M Device.

The OMA Lightweight M2M enabler includes device management and service enablement for LWM2M Devices. The target LWM2M Devices for this enabler are mainly resource constrained devices. Therefore, this enabler makes use of a light and compact protocol as well as an efficient resource data model. It provides a choice for the M2M Service Provider to deploy a M2M system to provide service to the M2M User.

Basic Client Example

package main

import (
	"github.com/zubairhamed/betwixt"
	"github.com/zubairhamed/betwixt/examples"
	"github.com/zubairhamed/betwixt/examples/objects"
)

func main() {
	cli := examples.StandardCommandLineFlags()

	registry := betwixt.NewDefaultObjectRegistry()
	c := betwixt.NewLwm2mClient("TestClient", ":0", cli.Server, registry)

	setupResources(c, registry)

	c.OnStartup(func() {
		c.Register(cli.Name)
	})

	c.Start()
}

func setupResources(client betwixt.LWM2MClient, reg betwixt.Registry) {
	client.SetEnabler(betwixt.OMA_OBJECT_LWM2M_SECURITY, objects.NewExampleSecurityObject(reg))
	client.AddObjectInstances(betwixt.OMA_OBJECT_LWM2M_SECURITY, 0, 1, 2)

	client.SetEnabler(betwixt.OMA_OBJECT_LWM2M_SERVER, objects.NewExampleServerObject(reg))
	client.AddObjectInstance(betwixt.OMA_OBJECT_LWM2M_SERVER, 1)

	client.SetEnabler(betwixt.OMA_OBJECT_LWM2M_DEVICE, objects.NewExampleDeviceObject(reg))
	client.AddObjectInstance(betwixt.OMA_OBJECT_LWM2M_DEVICE, 0)

	client.EnableObject(betwixt.OMA_OBJECT_LWM2M_ACCESS_CONTROL, objects.NewExampleAccessControlObject(reg))
	client.AddObjectInstances(betwixt.OMA_OBJECT_LWM2M_ACCESS_CONTROL, 0, 1, 2)

	client.EnableObject(betwixt.OMA_OBJECT_LWM2M_CONNECTIVITY_MONITORING, objects.NewExampleConnectivityMonitoringObject(reg))
	client.AddObjectInstance(betwixt.OMA_OBJECT_LWM2M_CONNECTIVITY_MONITORING, 0)

	client.EnableObject(betwixt.OMA_OBJECT_LWM2M_FIRMWARE_UPDATE, objects.NewExampleFirmwareUpdateObject(reg))
	client.AddObjectInstance(betwixt.OMA_OBJECT_LWM2M_FIRMWARE_UPDATE, 0)

	client.EnableObject(betwixt.OMA_OBJECT_LWM2M_LOCATION, objects.NewExampleLocationObject(reg))
	client.EnableObject(betwixt.OMA_OBJECT_LWM2M_CONNECTIVITY_STATISTICS, objects.NewExampleConnectivityStatisticsObject(reg))
}

Implementing a LWM2M Object (LWM2M 'Device' Object)

import (
	. "github.com/zubairhamed/betwixt"
	"time"
)

type DeviceObject struct {
	Model       ObjectDefinition
	currentTime time.Time
	utcOffset   string
	timeZone    string
}

func (o *DeviceObject) OnExecute(instanceId int, resourceId int, req Lwm2mRequest) Lwm2mResponse {
	return Changed()
}

func (o *DeviceObject) OnCreate(instanceId int, resourceId int, req Lwm2mRequest) Lwm2mResponse {
	return Created()
}

func (o *DeviceObject) OnDelete(instanceId int, req Lwm2mRequest) Lwm2mResponse {
	return Deleted()
}

func (o *DeviceObject) OnRead(instanceId int, resourceId int, req Lwm2mRequest) Lwm2mResponse {
	if resourceId == -1 {
		// Read Object Instance
	} else {
		// Read Resource Instance
		var val Value

		switch resourceId {
		case 0:
			val = String("Open Mobile Alliance")
			break

		case 1:
			val = String("Lightweight M2M Client")
			break

		case 2:
			val = String("345000123")
			break

		case 3:
			val = String("1.0")
			break

		case 6:
			val = Integer(POWERSOURCE_INTERNAL, POWERSOURCE_USB)
			break

		case 7:
			val = Integer(3800, 5000)
			break

		case 8:
			val = Integer(125, 900)
			break

		case 9:
			val = Integer(100)
			break

		case 10:
			val = Integer(15)
			break

		case 11:
			val = MultipleIntegers(Integer(0))
			break

		case 13:
			val = Time(o.currentTime)
			break

		case 14:
			val = String(o.utcOffset)
			break

		case 15:
			val = String(o.timeZone)
			break

		case 16:
			val = String(string(BINDINGMODE_UDP))
			break

		default:
			break
		}
		return Content(val)
	}
	return NotFound()
}

func (o *DeviceObject) OnWrite(instanceId int, resourceId int, req Lwm2mRequest) Lwm2mResponse {
	val := req.GetMessage().Payload

	switch resourceId {
	case 13:
		break

	case 14:
		o.utcOffset = val.String()
		break

	case 15:
		o.timeZone = val.String()
		break

	default:
		return NotFound()
	}
	return Changed()
}

func (o *DeviceObject) Reboot() Value {
	return Empty()
}

func (o *DeviceObject) FactoryReset() Value {
	return Empty()
}

func (o *DeviceObject) ResetErrorCode() string {
	return ""
}

func NewExampleDeviceObject(reg Registry) *DeviceObject {
	return &DeviceObject{
		Model:       reg.GetDefinition(OMA_OBJECT_LWM2M_DEVICE),
		currentTime: time.Unix(1367491215, 0),
		utcOffset:   "+02:00",
		timeZone:    "+02:00",
	}
}

Minimal LWM2M Server (See /examples/server)

package main

import (
	"github.com/zubairhamed/betwixt"
	. "github.com/zubairhamed/betwixt/examples/server"
)

func main() {
	s := NewDefaultServer("8081")

	registry := betwixt.NewDefaultObjectRegistry()

	s.UseRegistry(registry)

	s.Start()
}

Limitations

  • No dTLS support.

LWM2M - Short of it

  • Device Management Standard out of OMA

  • Lightweight and compact binary protocol based on CoAP

  • Targets as light as 8-bit MCUs

A primer on LWM2M

Specifications and Technical Information

Leshan - A fairly complete Java-based LWM2M implementation

Documentation

Overview

List of mocks used for testing

Various responses to a LWM2M Server request Typically responses represent a CoAP Request code

Index

Constants

View Source
const (
	POWERSOURCE_DC            = 0
	POWERSOURCE_INTERNAL      = 1
	POWERSOURCE_EXTERNAL      = 2
	POWERSOURCE_OVER_ETHERNET = 4
	POWERSOURCE_USB           = 5
	POWERSOURCE_AC            = 6
	POWERSOURCE_SOLAR         = 7
)
View Source
const (
	SERVER_EXEC_DISABLE            = 4
	SERVER_EXEC_REG_UPDATE_TRIGGER = 8

	DEVICE_EXEC_REBOOT           = 4
	DEVICE_EXEC_FACTORY_RESET    = 5
	DEVICE_EXEC_RESET_ERROR_CODE = 12

	FIRMWARE_EXEC_UPDATE = 2

	CONNECTIVITY_STATS_EXEC_STARTRESET = 6
)
View Source
const (
	SECURITYMODE_PRESHAREDKEY = 0
	SECURITYMODE_RAWPK        = 1
	SECURITYMODE_CERTIFICATE  = 2
	SECURITYMODE_NOSEC        = 3
)
View Source
const (
	BATTERYSTATUS_NORMAL          = 0
	BATTERYSTATUS_CHARGING        = 1
	BATTERYSTATUS_CHARGE_COMPLETE = 2
	BATTERYSTATUS_DAMAGED         = 3
	BATTERYSTATUS_LOW_BATTERY     = 4
	BATTERYSTATUS_NOT_INSTALLED   = 5
	BATTERYSTATUS_UNKNOWN         = 6
)
View Source
const (
	ERRORCODE_NO_ERROR                     = 0
	ERRORCODE_LOW_BATTERY_POWER            = 1
	ERRORCODE_EXTERNAL_POWER_SUPPLY_OFF    = 2
	ERRORCODE_GPS_MODULE_FAILURE           = 3
	ERRORCODE_LOW_RECEIVED_SIGNAL_STRENGTH = 4
	ERRORCODE_OUT_OF_MEMORY                = 5
	ERRORCODE_SMS_FAILURE                  = 6
	ERRORCODE_IP_CONNECTIVITY_FAILURE      = 7
	ERRORCODE_PERIPHERAL_MALFUNCTION       = 8
)
View Source
const (
	FWUPDATE_STATE_IDLE        = 1
	FWUPDATE_STATE_DOWNLOADING = 2
	FWUPDATE_STATE_DOWNLOADED  = 3

	FWUPDATE_RESULT_DEFAULT                  = 0
	FWUPDATE_RESULT_SUCCESSFUL               = 1
	FWUPDATE_RESULT_NOT_ENOUGH_STORAGE       = 2
	FWUPDATE_RESULT_OUT_OF_MEMORY            = 3
	FWUPDATE_RESULT_CONNECTION_LOST          = 4
	FWUPDATE_RESULT_CRC_CHECK                = 5
	FWUPDATE_RESULT_UNSUPPORTED_PACKAGE_TYPE = 6
	FWUPDATE_RESULT_INVALID_URI              = 7
)
View Source
const (
	METER                    = "m"
	KILOBYTE                 = "KB"
	BYTE                     = "Byte"
	MILLI_VOLT               = "mV"
	MILLI_AMP                = "mA"
	PERCENT                  = "%"
	DECIBEL_MILLIWATT        = "dBm"
	MILLSECOND               = "ms"
	WATT                     = "W"
	WATT_HOUR                = "Wh"
	VOLTAMPERE_REACTIVE      = "VAR"
	VOLTAMPERE_REACTIVE_HOUR = "VARh"
	SECOND                   = "s"
	DEGREE                   = "Deg"
)
View Source
const (
	TLV_FIELD_IDENTIFIER_TYPE   = 192
	TLV_FIELD_IDENTIFIER_LENGTH = 32
	TLV_FIELD_TYPE_OF_LENGTH    = 24
	TLV_FIELD_LENGTH_OF_VALUE   = 7
)
View Source
const (
	TYPEFIELD_TYPE_OBJECTINSTANCE   = 0   // 00
	TYPEFIELD_TYPE_RESOURCEINSTANCE = 64  // 01
	TYPEFIELD_TYPE_MULTIPLERESOURCE = 128 // 10
	TYPEFIELD_TYPE_RESOURCE         = 192 // 11
)

Variables

This section is empty.

Functions

func Asset

func Asset(name string) ([]byte, error)

Asset loads and returns the asset for the given name. It returns an error if the asset could not be found or could not be loaded.

func AssetDir

func AssetDir(name string) ([]string, error)

AssetDir returns the file names below a certain directory embedded in the file by go-bindata. For example if you run go-bindata on data/... and data contains the following hierarchy:

data/
  foo.txt
  img/
    a.png
    b.png

then AssetDir("data") would return []string{"foo.txt", "img"} AssetDir("data/img") would return []string{"a.png", "b.png"} AssetDir("foo.txt") and AssetDir("notexist") would return an error AssetDir("") will return []string{"data"}.

func AssetInfo

func AssetInfo(name string) (os.FileInfo, error)

AssetInfo loads and returns the asset info for the given name. It returns an error if the asset could not be found or could not be loaded.

func AssetNames

func AssetNames() []string

AssetNames returns the names of the assets.

func BuildModelResourceStringPayload

func BuildModelResourceStringPayload(instances LWM2MObjectInstances) string

BuildModelResourceStringPayload creates the string representation of resources for a LWM2M client in the Core-Resource format

func CallLwm2mEvent

func CallLwm2mEvent(e EventType, fn FnEvent)

func CreateTlvIdentifierField

func CreateTlvIdentifierField(ident uint16) []byte

CreateTlvIdentifierField Creates a TLV Identifier field

func CreateTlvLengthField

func CreateTlvLengthField(value interface{}) []byte

CreateTlvLengthField creates a TLV Length Field

func CreateTlvTypeField

func CreateTlvTypeField(identType byte, value interface{}, ident uint16) byte

|-------------||-------------||-------------||-------- ........ -----|

8-bit        8 or 16 bit     0-24 bit
Type          Identifier     Length                 Value

0bxxxxxxxx 7-6: Type of Identifier

00: Object Instance
01: Resource Instance with Value
10: Multiple Resource
11: Resource with Value

5: Length of Identifier

0: 8 bits
1: 16 bits

4-3: Type of Length

00: NO length field, value immediately follows the identifier field
01: Length field is 8 bits and Bits 2-0 must be ignored
10: Length field is 16 bits and Bits 2-0 must be ignored
11: Length field is 24 bits and Bits 2-0 must be ignored

2-0: 3 bit unsigned integer indiciating Length of the Value

func CreateTlvValueField

func CreateTlvValueField(value int) []byte

CreateTlvValueField creates a TLV Value Field

func DecodeLengthField

func DecodeLengthField(b []byte, pos int) (valueLength uint64, typeLength int)

DecodeLengthField decodes the length field and returns the type and value length

func DecodeTypeField

func DecodeTypeField(typeField byte) (typeOfIdentifier byte, lengthOfIdentifier byte, typeOfLength byte, lengthOfValue byte)

DecodeTypeField extracts/decodes the TLV type field from a byte array

func EncodeValue

func EncodeValue(resourceId LWM2MResourceType, allowMultipleValues bool, v Value) []byte

EncodeValue encodes the resource id and value and returns a byte array representation

func FnCoapDeleteClient

func FnCoapDeleteClient(b *LWM2MServer) canopus.RouteHandler

func FnCoapRegisterClient

func FnCoapRegisterClient(b *LWM2MServer) canopus.RouteHandler

func FnCoapUpdateClient

func FnCoapUpdateClient(b *LWM2MServer) canopus.RouteHandler

func GetValueByteLength

func GetValueByteLength(val interface{}) (uint32, error)

func IsExecutableResource

func IsExecutableResource(m ResourceDefinition) bool

Checks if a resource type is executable

func IsReadableResource

func IsReadableResource(m ResourceDefinition) bool

Checks if a resource type is readable

func IsWritableResource

func IsWritableResource(m ResourceDefinition) bool

Checks if a resource type is writable

func MediaTypeFromValue

func MediaTypeFromValue(v Value) canopus.MediaType

func MustAsset

func MustAsset(name string) []byte

MustAsset is like Asset but panics when Asset would return an error. It simplifies safe initialization of global variables.

func RestoreAsset

func RestoreAsset(dir, name string) error

RestoreAsset restores an asset under the given directory

func RestoreAssets

func RestoreAssets(dir, name string) error

RestoreAssets restores an asset under the given directory recursively

func ValidResourceTypeField

func ValidResourceTypeField(b []byte) error

ValidResourceTypeField Checks if a type field is of a valid type (resource instance, multiple resource etc)

Types

type BadRequestResponse

type BadRequestResponse struct {
}

func (*BadRequestResponse) GetResponseCode

func (r *BadRequestResponse) GetResponseCode() canopus.CoapCode

func (*BadRequestResponse) GetResponseValue

func (r *BadRequestResponse) GetResponseValue() Value

type BetwixtServerStatistics

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

func (*BetwixtServerStatistics) GetRequestsCount

func (s *BetwixtServerStatistics) GetRequestsCount() int

func (*BetwixtServerStatistics) IncrementCoapRequestsCount

func (s *BetwixtServerStatistics) IncrementCoapRequestsCount()

type BindingMode

type BindingMode string

Binding Modes

const (
	BINDINGMODE_UDP                         BindingMode = "U"
	BINDINGMODE_UDP_WITH_QUEUE_MODE         BindingMode = "UQ"
	BINDINGMODE_SMS                         BindingMode = "S"
	BINDINGMODE_SMS_WITH_QUEUE_MODE         BindingMode = "SQ"
	BINDINGMODE_UDP_AND_SMS                 BindingMode = "US"
	BINDINGMODE_UDP_WITH_QUEUE_MODE_AND_SMS BindingMode = "UQS"
)

type BooleanValue

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

Boolean

func (*BooleanValue) GetBytes

func (v *BooleanValue) GetBytes() []byte

func (*BooleanValue) GetContainedType

func (v *BooleanValue) GetContainedType() ValueTypeCode

func (*BooleanValue) GetStringValue

func (v *BooleanValue) GetStringValue() string

func (*BooleanValue) GetType

func (v *BooleanValue) GetType() ValueTypeCode

func (*BooleanValue) GetValue

func (v *BooleanValue) GetValue() interface{}

type ChangedResponse

type ChangedResponse struct {
}

func (*ChangedResponse) GetResponseCode

func (r *ChangedResponse) GetResponseCode() canopus.CoapCode

func (*ChangedResponse) GetResponseValue

func (r *ChangedResponse) GetResponseValue() Value

type ConflictResponse

type ConflictResponse struct {
}

func (*ConflictResponse) GetResponseCode

func (r *ConflictResponse) GetResponseCode() canopus.CoapCode

func (*ConflictResponse) GetResponseValue

func (r *ConflictResponse) GetResponseValue() Value

type ContentResponse

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

func (*ContentResponse) GetResponseCode

func (r *ContentResponse) GetResponseCode() canopus.CoapCode

func (*ContentResponse) GetResponseValue

func (r *ContentResponse) GetResponseValue() Value

type CreatedResponse

type CreatedResponse struct {
}

func (*CreatedResponse) GetResponseCode

func (r *CreatedResponse) GetResponseCode() canopus.CoapCode

func (*CreatedResponse) GetResponseValue

func (r *CreatedResponse) GetResponseValue() Value

type DefaultLWM2MClient

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

func (*DefaultLWM2MClient) AddObject

func (c *DefaultLWM2MClient) AddObject()

func (*DefaultLWM2MClient) AddObjectInstance

func (c *DefaultLWM2MClient) AddObjectInstance(t LWM2MObjectType, instance int) error

Adds a new object instance for a previously enabled LWM2M object type

func (*DefaultLWM2MClient) AddObjectInstances

func (c *DefaultLWM2MClient) AddObjectInstances(t LWM2MObjectType, instances ...int)

Adds a list of object instance for a previously enabled LWM2M object type

func (*DefaultLWM2MClient) AddResource

func (c *DefaultLWM2MClient) AddResource()

func (*DefaultLWM2MClient) Deregister

func (c *DefaultLWM2MClient) Deregister()

Unregisters this client from a LWM2M server which was previously registered

func (*DefaultLWM2MClient) EnableObject

func (c *DefaultLWM2MClient) EnableObject(t LWM2MObjectType, e ObjectEnabler) error

Registes an object enabler for a given LWM2M object type

func (*DefaultLWM2MClient) GetEnabledObjects

func (c *DefaultLWM2MClient) GetEnabledObjects() map[LWM2MObjectType]Object

Returns a list of LWM2M Enabled Objects

func (*DefaultLWM2MClient) GetObject

func (c *DefaultLWM2MClient) GetObject(n LWM2MObjectType) Object

func (*DefaultLWM2MClient) GetRegistry

func (c *DefaultLWM2MClient) GetRegistry() Registry

Returns the registry used for looking up LWM2M object type definitions

func (*DefaultLWM2MClient) OnError

func (c *DefaultLWM2MClient) OnError(fn FnOnError)

func (*DefaultLWM2MClient) OnExecute

func (c *DefaultLWM2MClient) OnExecute(fn FnOnExecute)

func (*DefaultLWM2MClient) OnObserve

func (c *DefaultLWM2MClient) OnObserve(fn FnOnError)

func (*DefaultLWM2MClient) OnRead

func (c *DefaultLWM2MClient) OnRead(fn FnOnRead)

func (*DefaultLWM2MClient) OnStartup

func (c *DefaultLWM2MClient) OnStartup(fn FnOnStartup)

Events

func (*DefaultLWM2MClient) OnWrite

func (c *DefaultLWM2MClient) OnWrite(fn FnOnWrite)

func (*DefaultLWM2MClient) Register

func (c *DefaultLWM2MClient) Register(name string) (string, error)

Registers this client to a LWM2M Server instance name must be unique and be less than 10 characers

func (*DefaultLWM2MClient) SetEnabler

func (c *DefaultLWM2MClient) SetEnabler(t LWM2MObjectType, e ObjectEnabler)

Sets/Defines an Enabler for a given LWM2M Object Type

func (*DefaultLWM2MClient) Start

func (c *DefaultLWM2MClient) Start()

Starts up the LWM2M client, listens to incoming requests and fires the OnStart event

func (*DefaultLWM2MClient) Update

func (c *DefaultLWM2MClient) Update()

func (*DefaultLWM2MClient) UseRegistry

func (c *DefaultLWM2MClient) UseRegistry(reg Registry)

type DefaultObject

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

func (*DefaultObject) AddInstance

func (o *DefaultObject) AddInstance(n int)

func (*DefaultObject) GetDefinition

func (o *DefaultObject) GetDefinition() ObjectDefinition

func (*DefaultObject) GetEnabler

func (o *DefaultObject) GetEnabler() ObjectEnabler

func (*DefaultObject) GetInstances

func (o *DefaultObject) GetInstances() []int

func (*DefaultObject) GetType

func (o *DefaultObject) GetType() LWM2MObjectType

func (*DefaultObject) RemoveInstance

func (o *DefaultObject) RemoveInstance(n int)

func (*DefaultObject) SetEnabler

func (o *DefaultObject) SetEnabler(e ObjectEnabler)

type DefaultObjectDefinition

type DefaultObjectDefinition struct {
	Id          LWM2MObjectType
	Name        string
	Description string
	Multiple    bool
	Mandatory   bool
	Resources   []ResourceDefinition
}

Objects are fundamental part of LWM2M DefaultObjectDefinition describes a LWM2M Object

func (*DefaultObjectDefinition) AllowMultiple

func (o *DefaultObjectDefinition) AllowMultiple() bool

func (*DefaultObjectDefinition) GetDescription

func (o *DefaultObjectDefinition) GetDescription() string

func (*DefaultObjectDefinition) GetName

func (o *DefaultObjectDefinition) GetName() string

func (*DefaultObjectDefinition) GetResource

func (*DefaultObjectDefinition) GetResources

func (o *DefaultObjectDefinition) GetResources() []ResourceDefinition

func (*DefaultObjectDefinition) GetType

func (*DefaultObjectDefinition) IsMandatory

func (o *DefaultObjectDefinition) IsMandatory() bool

func (*DefaultObjectDefinition) SetResources

func (o *DefaultObjectDefinition) SetResources(r []ResourceDefinition)

type DefaultObjectInstance

type DefaultObjectInstance struct {
	Id     int
	TypeId LWM2MObjectType
}

DefaultObjectInstance

func (*DefaultObjectInstance) GetId

func (o *DefaultObjectInstance) GetId() int

func (*DefaultObjectInstance) GetTypeId

func (o *DefaultObjectInstance) GetTypeId() LWM2MObjectType

type DefaultRegisteredClient

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

func (*DefaultRegisteredClient) Delete

func (c *DefaultRegisteredClient) Delete(int, int)

func (*DefaultRegisteredClient) Execute

func (c *DefaultRegisteredClient) Execute(int, int, int)

func (*DefaultRegisteredClient) GetAddress

func (c *DefaultRegisteredClient) GetAddress() string

func (*DefaultRegisteredClient) GetBindingMode

func (c *DefaultRegisteredClient) GetBindingMode() BindingMode

func (*DefaultRegisteredClient) GetId

func (c *DefaultRegisteredClient) GetId() string

func (*DefaultRegisteredClient) GetLifetime

func (c *DefaultRegisteredClient) GetLifetime() int

func (*DefaultRegisteredClient) GetName

func (c *DefaultRegisteredClient) GetName() string

func (*DefaultRegisteredClient) GetObject

func (*DefaultRegisteredClient) GetObjects

func (c *DefaultRegisteredClient) GetObjects() map[LWM2MObjectType]Object

func (*DefaultRegisteredClient) GetRegistrationDate

func (c *DefaultRegisteredClient) GetRegistrationDate() time.Time

func (*DefaultRegisteredClient) GetSmsNumber

func (c *DefaultRegisteredClient) GetSmsNumber() string

func (*DefaultRegisteredClient) GetVersion

func (c *DefaultRegisteredClient) GetVersion() string

func (*DefaultRegisteredClient) LastUpdate

func (c *DefaultRegisteredClient) LastUpdate() time.Time

func (*DefaultRegisteredClient) ReadObject

func (c *DefaultRegisteredClient) ReadObject(obj uint16, inst uint16) (Value, error)

func (*DefaultRegisteredClient) ReadResource

func (c *DefaultRegisteredClient) ReadResource(obj uint16, inst uint16, rsrc uint16) (Value, error)

func (*DefaultRegisteredClient) SetObjects

func (c *DefaultRegisteredClient) SetObjects(objects map[LWM2MObjectType]Object)

func (*DefaultRegisteredClient) Update

func (c *DefaultRegisteredClient) Update()

type DefaultRequest

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

func (*DefaultRequest) GetCoapRequest

func (r *DefaultRequest) GetCoapRequest() canopus.CoapRequest

func (*DefaultRequest) GetMessage

func (r *DefaultRequest) GetMessage() *canopus.Message

func (*DefaultRequest) GetOperationType

func (r *DefaultRequest) GetOperationType() OperationType

func (*DefaultRequest) GetPath

func (r *DefaultRequest) GetPath() string

type DefaultResourceDefinition

type DefaultResourceDefinition struct {
	Id             LWM2MResourceType
	Name           string
	Operations     OperationCode
	Multiple       bool
	Mandatory      bool
	ResourceType   ValueTypeCode
	Units          string
	RangeOrEnums   string
	Description    string
	ValueValidator Validator
}

func (*DefaultResourceDefinition) GetDescription

func (o *DefaultResourceDefinition) GetDescription() string

func (*DefaultResourceDefinition) GetId

func (*DefaultResourceDefinition) GetName

func (o *DefaultResourceDefinition) GetName() string

func (*DefaultResourceDefinition) GetOperations

func (o *DefaultResourceDefinition) GetOperations() OperationCode

func (*DefaultResourceDefinition) GetRangeOrEnums

func (o *DefaultResourceDefinition) GetRangeOrEnums() string

func (*DefaultResourceDefinition) GetResourceType

func (o *DefaultResourceDefinition) GetResourceType() ValueTypeCode

func (*DefaultResourceDefinition) GetUnits

func (o *DefaultResourceDefinition) GetUnits() string

func (*DefaultResourceDefinition) IsMandatory

func (o *DefaultResourceDefinition) IsMandatory() bool

func (*DefaultResourceDefinition) MultipleValuesAllowed

func (o *DefaultResourceDefinition) MultipleValuesAllowed() bool

type DeletedResponse

type DeletedResponse struct {
}

func (*DeletedResponse) GetResponseCode

func (r *DeletedResponse) GetResponseCode() canopus.CoapCode

func (*DeletedResponse) GetResponseValue

func (r *DeletedResponse) GetResponseValue() Value

type EmptyValue

type EmptyValue struct {
}

func (*EmptyValue) GetBytes

func (v *EmptyValue) GetBytes() []byte

func (*EmptyValue) GetContainedType

func (v *EmptyValue) GetContainedType() ValueTypeCode

func (*EmptyValue) GetStringValue

func (v *EmptyValue) GetStringValue() string

func (*EmptyValue) GetType

func (v *EmptyValue) GetType() ValueTypeCode

func (*EmptyValue) GetValue

func (v *EmptyValue) GetValue() interface{}

type EventType

type EventType int
const (
	EVENT_START EventType = 0
)

type Float64Value

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

Float64

func (*Float64Value) GetBytes

func (v *Float64Value) GetBytes() []byte

func (*Float64Value) GetContainedType

func (v *Float64Value) GetContainedType() ValueTypeCode

func (*Float64Value) GetStringValue

func (v *Float64Value) GetStringValue() string

func (*Float64Value) GetType

func (v *Float64Value) GetType() ValueTypeCode

func (*Float64Value) GetValue

func (v *Float64Value) GetValue() interface{}

type FloatValue

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

func (*FloatValue) GetBytes

func (v *FloatValue) GetBytes() []byte

func (*FloatValue) GetContainedType

func (v *FloatValue) GetContainedType() ValueTypeCode

func (*FloatValue) GetStringValue

func (v *FloatValue) GetStringValue() string

func (*FloatValue) GetType

func (v *FloatValue) GetType() ValueTypeCode

func (*FloatValue) GetValue

func (v *FloatValue) GetValue() interface{}

type FnEvent

type FnEvent func()

Event Callback

type FnOnDeregistered

type FnOnDeregistered func()

Event Callback for a deregister request

type FnOnError

type FnOnError func()

Event Callback when an error occurs

type FnOnExecute

type FnOnExecute func()

Event Callback for an execute request

type FnOnRead

type FnOnRead func()

Event Callback for a read request

type FnOnRegistered

type FnOnRegistered func(RegisteredClient)

Event Callback for a register request

type FnOnStartup

type FnOnStartup func()

Event Callback for OnStartup

type FnOnWrite

type FnOnWrite func()

Event Callback for a write request

type IPSOSmartObjects

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

This represents a list of LWM2M objects registered to the OMA NA for LWM2M donated by IPSO

func (*IPSOSmartObjects) AddObject

func (o *IPSOSmartObjects) AddObject(m ObjectDefinition, res []ResourceDefinition)

func (*IPSOSmartObjects) AddObjects

func (o *IPSOSmartObjects) AddObjects(od []ObjectDefinition)

func (*IPSOSmartObjects) GetObject

func (*IPSOSmartObjects) GetObjects

func (*IPSOSmartObjects) Initialize

func (o *IPSOSmartObjects) Initialize()

type IdentifierType

type IdentifierType byte

Type of LWM2M value

const (
	IDENTIFIER_OBJECT_INSTANCE     IdentifierType = 0
	IDENTIFIER_RESOURCE_INSTANCE   IdentifierType = 1
	IDENTIFIER_RESOURCES           IdentifierType = 2
	IDENTIFIER_RESOURCE_WITH_VALUE IdentifierType = 3
)

type InMemoryStore

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

func NewInMemoryStore

func NewInMemoryStore() *InMemoryStore

func (*InMemoryStore) Close

func (db *InMemoryStore) Close()

func (*InMemoryStore) DeleteClient

func (db *InMemoryStore) DeleteClient(name string)

func (*InMemoryStore) GetClient

func (db *InMemoryStore) GetClient(name string) RegisteredClient

func (*InMemoryStore) GetClients

func (db *InMemoryStore) GetClients() map[string]RegisteredClient

func (*InMemoryStore) Init

func (db *InMemoryStore) Init()

func (*InMemoryStore) PutClient

func (db *InMemoryStore) PutClient(name string, c RegisteredClient)

func (*InMemoryStore) UpdateTS

func (db *InMemoryStore) UpdateTS(name string)

type IntegerValue

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

func (*IntegerValue) GetBytes

func (v *IntegerValue) GetBytes() []byte

func (*IntegerValue) GetContainedType

func (v *IntegerValue) GetContainedType() ValueTypeCode

func (*IntegerValue) GetStringValue

func (v *IntegerValue) GetStringValue() string

func (*IntegerValue) GetType

func (v *IntegerValue) GetType() ValueTypeCode

func (*IntegerValue) GetValue

func (v *IntegerValue) GetValue() interface{}

type LWM2MClient

type LWM2MClient interface {
	AddObjectInstance(LWM2MObjectType, int) error
	AddObjectInstances(LWM2MObjectType, ...int)
	AddResource()
	AddObject()
	Register(string) (string, error)
	Deregister()
	Update()
	UseRegistry(Registry)
	EnableObject(LWM2MObjectType, ObjectEnabler) error
	SetEnabler(LWM2MObjectType, ObjectEnabler)
	GetRegistry() Registry
	GetEnabledObjects() map[LWM2MObjectType]Object
	GetObject(n LWM2MObjectType) Object
	Start()

	// Events
	OnStartup(FnOnStartup)
	OnRead(FnOnRead)
	OnWrite(FnOnWrite)
	OnExecute(FnOnExecute)
	OnError(FnOnError)
}

LWM2MClient interface defining a LWM2M Client

func NewLwm2mClient

func NewLwm2mClient(name, local, remote string, registry Registry) LWM2MClient

NewLWM2MClient instantiates a new instance of LWM2M Client

func NewMockClient

func NewMockClient() LWM2MClient

type LWM2MCoreObjects

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

This represents a list of LWM2M Starter Pack objects registered to the OMA NA

func (*LWM2MCoreObjects) AddObject

func (o *LWM2MCoreObjects) AddObject(m ObjectDefinition, res []ResourceDefinition)

func (*LWM2MCoreObjects) AddObjects

func (o *LWM2MCoreObjects) AddObjects(od []ObjectDefinition)

func (*LWM2MCoreObjects) GetObject

func (*LWM2MCoreObjects) GetObjects

func (*LWM2MCoreObjects) Initialize

func (o *LWM2MCoreObjects) Initialize()

type LWM2MObjectInstances

type LWM2MObjectInstances map[LWM2MObjectType]Object

LWM2MObjectInstances contains instances of LWM2M Objects by Type

type LWM2MObjectType

type LWM2MObjectType uint16

LWM2MObjectType represents a LWM2M Object Type

const (
	IPSO_OBJECT_IPSO_DIGITAL_INPUT            LWM2MObjectType = 3200
	IPSO_OBJECT_IPSO_DIGITAL_OUTPUT           LWM2MObjectType = 3201
	IPSO_OBJECT_IPSO_ANALOG_INPUT             LWM2MObjectType = 3202
	IPSO_OBJECT_IPSO_ANALOG_OUTPUT            LWM2MObjectType = 3203
	IPSO_OBJECT_IPSO_GENERIC_SENSOR           LWM2MObjectType = 3300
	IPSO_OBJECT_IPSO_ILLUMINANCE              LWM2MObjectType = 3301
	IPSO_OBJECT_IPSO_PRESENCE                 LWM2MObjectType = 3302
	IPSO_OBJECT_IPSO_TEMPERATURE              LWM2MObjectType = 3303
	IPSO_OBJECT_IPSO_HUMIDITY                 LWM2MObjectType = 3304
	IPSO_OBJECT_IPSO_POWER_MEASUREMENT        LWM2MObjectType = 3305
	IPSO_OBJECT_IPSO_ACTUATION                LWM2MObjectType = 3306
	IPSO_OBJECT_IPSO_SET_POINT                LWM2MObjectType = 3308
	IPSO_OBJECT_IPSO_LOAD_CONTROL             LWM2MObjectType = 3310
	IPSO_OBJECT_IPSO_LIGHT_CONTROL            LWM2MObjectType = 3311
	IPSO_OBJECT_IPSO_POWER_CONTROL            LWM2MObjectType = 3312
	IPSO_OBJECT_IPSO_ACCELEROMETER            LWM2MObjectType = 3313
	IPSO_OBJECT_IPSO_MAGNETOMETER             LWM2MObjectType = 3314
	IPSO_OBJECT_IPSO_BAROMETER                LWM2MObjectType = 3315
	IPSO_OBJECT_IPSO_VOLTAGE                  LWM2MObjectType = 3316
	IPSO_OBJECT_IPSO_CURRENT                  LWM2MObjectType = 3317
	IPSO_OBJECT_IPSO_FREQUENCY                LWM2MObjectType = 3318
	IPSO_OBJECT_IPSO_DEPTH                    LWM2MObjectType = 3319
	IPSO_OBJECT_IPSO_PERCENTAGE               LWM2MObjectType = 3320
	IPSO_OBJECT_IPSO_ALTITUDE                 LWM2MObjectType = 3321
	IPSO_OBJECT_IPSO_LOAD                     LWM2MObjectType = 3322
	IPSO_OBJECT_IPSO_PRESSURE                 LWM2MObjectType = 3323
	IPSO_OBJECT_IPSO_LOUDNESS                 LWM2MObjectType = 3324
	IPSO_OBJECT_IPSO_CONCENTRATION            LWM2MObjectType = 3325
	IPSO_OBJECT_IPSO_ACIDITY                  LWM2MObjectType = 3326
	IPSO_OBJECT_IPSO_CONDUCTIVITY             LWM2MObjectType = 3327
	IPSO_OBJECT_IPSO_POWER                    LWM2MObjectType = 3328
	IPSO_OBJECT_IPSO_POWER_FACTOR             LWM2MObjectType = 3329
	IPSO_OBJECT_IPSO_DISTANCE                 LWM2MObjectType = 3330
	IPSO_OBJECT_IPSO_ENERGY                   LWM2MObjectType = 3331
	IPSO_OBJECT_IPSO_DIRECTION                LWM2MObjectType = 3332
	IPSO_OBJECT_IPSO_TIME                     LWM2MObjectType = 3333
	IPSO_OBJECT_IPSO_GYROMETER                LWM2MObjectType = 3334
	IPSO_OBJECT_IPSO_COLOR                    LWM2MObjectType = 3335
	IPSO_OBJECT_IPSO_GPS_LOCATION             LWM2MObjectType = 3336
	IPSO_OBJECT_IPSO_POSITIONER               LWM2MObjectType = 3337
	IPSO_OBJECT_IPSO_BUZZER                   LWM2MObjectType = 3338
	IPSO_OBJECT_IPSO_AUDIO_CLIP               LWM2MObjectType = 3339
	IPSO_OBJECT_IPSO_TIMER                    LWM2MObjectType = 3340
	IPSO_OBJECT_IPSO_ADDRESSABLE_TEXT_DISPLAY LWM2MObjectType = 3341
	IPSO_OBJECT_IPSO_ONOFF_SWITCH             LWM2MObjectType = 3342
	IPSO_OBJECT_IPSO_LEVER_CONTROL            LWM2MObjectType = 3343
	IPSO_OBJECT_IPSO_UPDOWN_CONTROL           LWM2MObjectType = 3344
	IPSO_OBJECT_IPSO_MULTIPLE_AXIS_JOYSTICK   LWM2MObjectType = 3345
	IPSO_OBJECT_IPSO_RATE                     LWM2MObjectType = 3346
	IPSO_OBJECT_IPSO_PUSH_BUTTON              LWM2MObjectType = 3347
	IPSO_OBJECT_IPSO_MULTISTATE_SELECTOR      LWM2MObjectType = 3348
)
const (
	OMA_OBJECT_LWM2M_SECURITY                LWM2MObjectType = 0
	OMA_OBJECT_LWM2M_SERVER                  LWM2MObjectType = 1
	OMA_OBJECT_LWM2M_ACCESS_CONTROL          LWM2MObjectType = 2
	OMA_OBJECT_LWM2M_DEVICE                  LWM2MObjectType = 3
	OMA_OBJECT_LWM2M_CONNECTIVITY_MONITORING LWM2MObjectType = 4
	OMA_OBJECT_LWM2M_FIRMWARE_UPDATE         LWM2MObjectType = 5
	OMA_OBJECT_LWM2M_LOCATION                LWM2MObjectType = 6
	OMA_OBJECT_LWM2M_CONNECTIVITY_STATISTICS LWM2MObjectType = 7
)

type LWM2MResourceType

type LWM2MResourceType uint16

LWM2MResourceType represents a LWM2M Resource Type

func DecodeIdentifierField

func DecodeIdentifierField(b []byte, pos int) (identifier LWM2MResourceType, typeLength int)

Decodes the identifier field and returns the type and length

type LWM2MServer

type LWM2MServer struct {
	Name       string
	Store      Store
	CoapServer canopus.CoapServer
	Config     ServerConfig
	Stats      ServerStatistics
	Events     map[EventType]FnEvent
	Registry   Registry

	EvtOnRegistered   FnOnRegistered
	EvtOnDeregistered FnOnDeregistered
}

func NewLwm2mServer

func NewLwm2mServer(name string, store Store, cfg ServerConfig) *LWM2MServer

func (*LWM2MServer) Delete

func (b *LWM2MServer) Delete(id string)

func (*LWM2MServer) GetClient

func (b *LWM2MServer) GetClient(id string) RegisteredClient

func (*LWM2MServer) GetClients

func (b *LWM2MServer) GetClients() map[string]RegisteredClient

func (*LWM2MServer) GetServerStats

func (b *LWM2MServer) GetServerStats() ServerStatistics

func (*LWM2MServer) OnDeregistered

func (c *LWM2MServer) OnDeregistered(fn FnOnDeregistered)

func (*LWM2MServer) OnRegistered

func (c *LWM2MServer) OnRegistered(fn FnOnRegistered)

func (*LWM2MServer) Register

func (b *LWM2MServer) Register(ep string, addr string, resources []*canopus.CoreResource) (string, error)

func (*LWM2MServer) Serve

func (b *LWM2MServer) Serve() error

func (*LWM2MServer) Update

func (b *LWM2MServer) Update(id string)

func (*LWM2MServer) UseRegistry

func (b *LWM2MServer) UseRegistry(reg Registry)

type LengthValidator

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

func (*LengthValidator) Valid

func (v *LengthValidator) Valid(val interface{}) bool

type Lwm2mRequest

type Lwm2mRequest interface {
	GetPath() string
	GetMessage() *canopus.Message
	GetOperationType() OperationType
	GetCoapRequest() canopus.CoapRequest
}

Lwm2mRequest interface represents an incoming request from a server

func Default

Default is a helper/shortcut method which creates a Default LWM2M Request

func Nil

type Lwm2mResponse

type Lwm2mResponse interface {
	GetResponseCode() canopus.CoapCode
	GetResponseValue() Value
}

Lwm2mResponse interface represents an outgoing response to a server

func BadRequest

func BadRequest() Lwm2mResponse

BadRequest creates a LWM2M Response (BadRequestResponse) with CoAP code 400 - Bad Request

func Changed

func Changed() Lwm2mResponse

Changed creates a LWM2M Response (ChangedResponse) with CoAP code 204 - Changed

func Conflict

func Conflict() Lwm2mResponse

Conflict creates a LWM2M Response (ConflictResponse) with CoAP code 409 - Conflict

func Content

func Content(val Value) Lwm2mResponse

Content creates a LWM2M Response (ContentResponse) with CoAP code 205 - Content

func Created

func Created() Lwm2mResponse

Created creates a LWM2M Response (CreatedResponse) with CoAP code 201 - Created

func Deleted

func Deleted() Lwm2mResponse

Deleted creates a LWM2M Response (DeletedResponse) with CoAP code 202 - Deleted

func MethodNotAllowed

func MethodNotAllowed() Lwm2mResponse

/ MethodNotAllowed creates a LWM2M Response (MethodNotAllowedResponse) with CoAP code 405 - Method Not Allowed

func NotFound

func NotFound() Lwm2mResponse

NotFound creates a LWM2M Response (NotFoundResponse) with CoAP code 404 - Not Found

func Unauthorized

func Unauthorized() Lwm2mResponse

Unauthorized creates a LWM2M Response (UnauthorizedResponse) with CoAP code 401 - Unauthorized

type MethodNotAllowedResponse

type MethodNotAllowedResponse struct {
}

func (*MethodNotAllowedResponse) GetResponseCode

func (r *MethodNotAllowedResponse) GetResponseCode() canopus.CoapCode

func (*MethodNotAllowedResponse) GetResponseValue

func (r *MethodNotAllowedResponse) GetResponseValue() Value

type MockClient

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

func (*MockClient) AddObject

func (c *MockClient) AddObject()

func (*MockClient) AddObjectInstance

func (c *MockClient) AddObjectInstance(LWM2MObjectType, int) error

func (*MockClient) AddObjectInstances

func (c *MockClient) AddObjectInstances(LWM2MObjectType, ...int)

func (*MockClient) AddResource

func (c *MockClient) AddResource()

func (*MockClient) Deregister

func (c *MockClient) Deregister()

func (*MockClient) EnableObject

func (c *MockClient) EnableObject(t LWM2MObjectType, e ObjectEnabler) error

func (*MockClient) GetEnabledObjects

func (c *MockClient) GetEnabledObjects() map[LWM2MObjectType]Object

func (*MockClient) GetObject

func (c *MockClient) GetObject(n LWM2MObjectType) Object

func (*MockClient) GetRegistry

func (c *MockClient) GetRegistry() Registry

func (*MockClient) OnDeregistered

func (c *MockClient) OnDeregistered(FnOnDeregistered)

func (*MockClient) OnError

func (c *MockClient) OnError(FnOnError)

func (*MockClient) OnExecute

func (c *MockClient) OnExecute(FnOnExecute)

func (*MockClient) OnRead

func (c *MockClient) OnRead(FnOnRead)

func (*MockClient) OnRegistered

func (c *MockClient) OnRegistered(FnOnRegistered)

func (*MockClient) OnStartup

func (c *MockClient) OnStartup(FnOnStartup)

func (*MockClient) OnWrite

func (c *MockClient) OnWrite(FnOnWrite)

func (*MockClient) Register

func (c *MockClient) Register(string) (string, error)

func (*MockClient) SetEnabler

func (c *MockClient) SetEnabler(LWM2MObjectType, ObjectEnabler)

func (*MockClient) Start

func (c *MockClient) Start()

func (*MockClient) Update

func (c *MockClient) Update()

func (*MockClient) UseRegistry

func (c *MockClient) UseRegistry(r Registry)

type MockObject

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

func (*MockObject) AddInstance

func (o *MockObject) AddInstance(int)

func (*MockObject) GetDefinition

func (o *MockObject) GetDefinition() ObjectDefinition

func (*MockObject) GetEnabler

func (o *MockObject) GetEnabler() ObjectEnabler

func (*MockObject) GetInstances

func (o *MockObject) GetInstances() []int

func (*MockObject) GetType

func (o *MockObject) GetType() LWM2MObjectType

func (*MockObject) RemoveInstance

func (o *MockObject) RemoveInstance(int)

func (*MockObject) SetEnabler

func (o *MockObject) SetEnabler(ObjectEnabler)

type MockRegistry

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

func (*MockRegistry) GetDefinition

func (r *MockRegistry) GetDefinition(t LWM2MObjectType) ObjectDefinition

func (*MockRegistry) GetDefinitions

func (m *MockRegistry) GetDefinitions() []ObjectDefinition

func (*MockRegistry) GetMandatory

func (r *MockRegistry) GetMandatory() []ObjectDefinition

func (*MockRegistry) Register

func (m *MockRegistry) Register(s ObjectSource)

type MockServer

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

func (*MockServer) GetClient

func (server *MockServer) GetClient(id string) RegisteredClient

func (*MockServer) GetClients

func (server *MockServer) GetClients() map[string]RegisteredClient

func (*MockServer) GetCoapServer

func (server *MockServer) GetCoapServer() canopus.CoapServer

func (*MockServer) GetStats

func (server *MockServer) GetStats() ServerStatistics

func (*MockServer) On

func (server *MockServer) On(e EventType, fn FnEvent)

func (*MockServer) Start

func (server *MockServer) Start()

func (*MockServer) UseRegistry

func (server *MockServer) UseRegistry(reg Registry)

type MockServerStatistics

type MockServerStatistics struct {
}

func (*MockServerStatistics) GetRequestsCount

func (s *MockServerStatistics) GetRequestsCount() int

func (*MockServerStatistics) IncrementCoapRequestsCount

func (s *MockServerStatistics) IncrementCoapRequestsCount()

type MultipleResourceValue

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

func (MultipleResourceValue) GetBytes

func (v MultipleResourceValue) GetBytes() []byte

func (MultipleResourceValue) GetContainedType

func (v MultipleResourceValue) GetContainedType() ValueTypeCode

func (MultipleResourceValue) GetStringValue

func (v MultipleResourceValue) GetStringValue() string

func (MultipleResourceValue) GetType

func (MultipleResourceValue) GetValue

func (v MultipleResourceValue) GetValue() interface{}

type MultipleValue

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

func (*MultipleValue) GetBytes

func (v *MultipleValue) GetBytes() []byte

func (*MultipleValue) GetContainedType

func (v *MultipleValue) GetContainedType() ValueTypeCode

func (*MultipleValue) GetStringValue

func (v *MultipleValue) GetStringValue() string

func (*MultipleValue) GetType

func (v *MultipleValue) GetType() ValueTypeCode

func (*MultipleValue) GetValue

func (v *MultipleValue) GetValue() interface{}

type NilRequest

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

func (*NilRequest) GetCoapRequest

func (r *NilRequest) GetCoapRequest() canopus.CoapRequest

func (*NilRequest) GetMessage

func (r *NilRequest) GetMessage() *canopus.Message

func (*NilRequest) GetOperationType

func (r *NilRequest) GetOperationType() OperationType

func (*NilRequest) GetPath

func (r *NilRequest) GetPath() string

type NotFoundResponse

type NotFoundResponse struct {
}

func (*NotFoundResponse) GetResponseCode

func (r *NotFoundResponse) GetResponseCode() canopus.CoapCode

func (*NotFoundResponse) GetResponseValue

func (r *NotFoundResponse) GetResponseValue() Value

type NullEnabler

type NullEnabler struct {
}

func (*NullEnabler) OnCreate

func (e *NullEnabler) OnCreate(int, int, Lwm2mRequest) Lwm2mResponse

func (*NullEnabler) OnDelete

func (e *NullEnabler) OnDelete(int, Lwm2mRequest) Lwm2mResponse

func (*NullEnabler) OnExecute

func (e *NullEnabler) OnExecute(int, int, Lwm2mRequest) Lwm2mResponse

func (*NullEnabler) OnRead

func (*NullEnabler) OnWrite

type Object

type Object interface {
	AddInstance(int)
	RemoveInstance(int)
	GetInstances() []int
	GetEnabler() ObjectEnabler
	GetType() LWM2MObjectType
	GetDefinition() ObjectDefinition
	SetEnabler(ObjectEnabler)
}

An Object interface represents an Object used on a client or Objects supported by a Registered Client on a server Not to be confused with ObjectDefinition, which represents the definition of an Object

func NewMockObject

func NewMockObject(t LWM2MObjectType, enabler ObjectEnabler, reg Registry) Object

func NewObject

func NewObject(t LWM2MObjectType, enabler ObjectEnabler, reg Registry) Object

DefaultObject

type ObjectDefinition

type ObjectDefinition interface {
	GetName() string
	GetType() LWM2MObjectType
	GetDescription() string
	SetResources([]ResourceDefinition)
	GetResources() []ResourceDefinition
	GetResource(n LWM2MResourceType) ResourceDefinition
	AllowMultiple() bool
	IsMandatory() bool
}

ObjectDefinition interface defines a LWM2M Object

func ParseObjectDefinitionsJson

func ParseObjectDefinitionsJson(data []byte) []ObjectDefinition

type ObjectEnabler

type ObjectEnabler interface {
	OnRead(int, int, Lwm2mRequest) Lwm2mResponse
	OnDelete(int, Lwm2mRequest) Lwm2mResponse
	OnWrite(int, int, Lwm2mRequest) Lwm2mResponse
	OnCreate(int, int, Lwm2mRequest) Lwm2mResponse
	OnExecute(int, int, Lwm2mRequest) Lwm2mResponse
}

ObjectEnabler interface to handler any incoming requests from a server for a given object

func NewNullEnabler

func NewNullEnabler() ObjectEnabler

A default enabler which does abosolutely..nothing. Its still trying to find its purpose in life. Best of luck to it.

type ObjectRegistry

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

ObjectRegistry is a registry containing known LWM2M objects registered to te OMA NA as well as custom objects It contains multiple ObjectSources which in turns each contains multiple Object definitions

func (*ObjectRegistry) GetDefinition

func (m *ObjectRegistry) GetDefinition(n LWM2MObjectType) ObjectDefinition

func (*ObjectRegistry) GetDefinitions

func (m *ObjectRegistry) GetDefinitions() []ObjectDefinition

func (*ObjectRegistry) GetMandatory

func (m *ObjectRegistry) GetMandatory() []ObjectDefinition

Get all object definitions which are mandatory to be registered by a client (such as Firmware, Device etc)

func (*ObjectRegistry) Register

func (m *ObjectRegistry) Register(s ObjectSource)

Registers a new ObjectSource to the tegistry

type ObjectSource

type ObjectSource interface {
	Initialize()
	GetObject(n LWM2MObjectType) ObjectDefinition
	GetObjects() map[LWM2MObjectType]ObjectDefinition
	AddObject(m ObjectDefinition, res []ResourceDefinition)
}

ObjectSource interface representing a source consumed by a Registry to resolve and retrieve LWM2M object definitions

type ObjectValue

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

type OneM2MObjects

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

type OperationCode

type OperationCode int

LWM2M Operation Types

const (
	OPERATION_NONE OperationCode = 0
	OPERATION_R    OperationCode = 1
	OPERATION_W    OperationCode = 2
	OPERATION_RW   OperationCode = 3
	OPERATION_E    OperationCode = 4
	OPERATION_RE   OperationCode = 5
	OPERATION_WE   OperationCode = 6
	OPERATION_RWE  OperationCode = 7
)

type OperationType

type OperationType byte
const (
	OPERATIONTYPE_REGISTER         OperationType = 0
	OPERATIONTYPE_UPDATE           OperationType = 1
	OPERATIONTYPE_DEREGISTER       OperationType = 2
	OPERATIONTYPE_READ             OperationType = 3
	OPERATIONTYPE_DISCOVER         OperationType = 4
	OPERATIONTYPE_WRITE            OperationType = 5
	OPERATIONTYPE_WRITE_ATTRIBUTES OperationType = 6
	OPERATIONTYPE_EXECUTE          OperationType = 7
	OPERATIONTYPE_CREATE           OperationType = 8
	OPERATIONTYPE_DELETE           OperationType = 9
	OPERATIONTYPE_OBSERVE          OperationType = 10
	OPERATIONTYPE_NOTIFY           OperationType = 11
	OPERATIONTYPE_CANCEL_OBSERVE   OperationType = 12
)

Operation Types

type RangeValidator

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

func (*RangeValidator) Valid

func (v *RangeValidator) Valid(val interface{}) bool

type RegisteredClient

type RegisteredClient interface {
	GetId() string
	GetName() string
	GetLifetime() int
	GetVersion() string
	GetBindingMode() BindingMode
	GetSmsNumber() string
	GetRegistrationDate() time.Time
	Update()
	LastUpdate() time.Time
	SetObjects(map[LWM2MObjectType]Object)
	GetObjects() map[LWM2MObjectType]Object
	GetObject(LWM2MObjectType) Object
	GetAddress() string

	ReadObject(uint16, uint16) (Value, error)
	ReadResource(object uint16, instance uint16, resource uint16) (Value, error)
	Delete(int, int)
	Execute(int, int, int)
}

RegisteredClient interface is an instance of a client registered on a server

func NewRegisteredClient

func NewRegisteredClient(ep string, id string, addr string, coapServer CoapServer) RegisteredClient

Returns a new instance of DefaultRegisteredClient implementing RegisteredClient

type Registry

type Registry interface {
	GetDefinition(LWM2MObjectType) ObjectDefinition
	Register(ObjectSource)
	GetMandatory() []ObjectDefinition
	GetDefinitions() []ObjectDefinition
}

Registry interface represents a source from which LWM2M object definitions can be looked up/resolved or stored

func NewDefaultObjectRegistry

func NewDefaultObjectRegistry() Registry

NewDefaultObjectRegistry instantiates a default rgistry containing the Starter Pack objects and IPSO smart objects

func NewMockRegistry

func NewMockRegistry(s ...ObjectSource) Registry

func NewObjectRegistry

func NewObjectRegistry(s ...ObjectSource) Registry

type ResourceDefinition

type ResourceDefinition interface {
	GetId() LWM2MResourceType
	GetName() string
	GetDescription() string
	GetUnits() string
	GetRangeOrEnums() string
	IsMandatory() bool
	MultipleValuesAllowed() bool
	GetResourceType() ValueTypeCode
	GetOperations() OperationCode
}

ResourceDefinition interface defines a LWM2M Resource

type ResourceValue

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

func (ResourceValue) GetBytes

func (v ResourceValue) GetBytes() []byte

func (ResourceValue) GetContainedType

func (v ResourceValue) GetContainedType() ValueTypeCode

func (ResourceValue) GetId

func (v ResourceValue) GetId() LWM2MResourceType

func (ResourceValue) GetStringValue

func (v ResourceValue) GetStringValue() string

func (ResourceValue) GetType

func (v ResourceValue) GetType() ValueTypeCode

func (ResourceValue) GetValue

func (v ResourceValue) GetValue() interface{}

type Server

type Server interface {
	UseRegistry(Registry)
	On(EventType, FnEvent)
	Start()
	GetClients() map[string]RegisteredClient
	GetClient(id string) RegisteredClient
	GetStats() ServerStatistics
	GetCoapServer() canopus.CoapServer
}

Server interface defines a LWM2M Server

func NewMockServer

func NewMockServer() Server

type ServerConfig

type ServerConfig map[string]string

type ServerStatistics

type ServerStatistics interface {
	IncrementCoapRequestsCount()
	GetRequestsCount() int
}

ServerStatistics Statistics recorded for the server

type Store

type Store interface {
	Init()
	Close()

	GetClient(string) RegisteredClient
	GetClients() map[string]RegisteredClient
	PutClient(id string, c RegisteredClient)
	DeleteClient(id string)
	UpdateTS(id string)
}

type StringValue

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

func (*StringValue) GetBytes

func (v *StringValue) GetBytes() []byte

func (*StringValue) GetContainedType

func (v *StringValue) GetContainedType() ValueTypeCode

func (*StringValue) GetStringValue

func (v *StringValue) GetStringValue() string

func (*StringValue) GetType

func (v *StringValue) GetType() ValueTypeCode

func (*StringValue) GetValue

func (v *StringValue) GetValue() interface{}

type TestDeviceObject

type TestDeviceObject struct {
	Model ObjectDefinition
	// contains filtered or unexported fields
}

func NewTestDeviceObject

func NewTestDeviceObject(def ObjectDefinition) *TestDeviceObject

func (*TestDeviceObject) FactoryReset

func (o *TestDeviceObject) FactoryReset() Value

func (*TestDeviceObject) OnCreate

func (o *TestDeviceObject) OnCreate(instanceId int, resourceId int, req Lwm2mRequest) Lwm2mResponse

func (*TestDeviceObject) OnDelete

func (o *TestDeviceObject) OnDelete(instanceId int, req Lwm2mRequest) Lwm2mResponse

func (*TestDeviceObject) OnExecute

func (o *TestDeviceObject) OnExecute(instanceId int, resourceId int, req Lwm2mRequest) Lwm2mResponse

func (*TestDeviceObject) OnRead

func (o *TestDeviceObject) OnRead(instanceId int, resourceId int, req Lwm2mRequest) Lwm2mResponse

func (*TestDeviceObject) OnWrite

func (o *TestDeviceObject) OnWrite(instanceId int, resourceId int, req Lwm2mRequest) Lwm2mResponse

func (*TestDeviceObject) Reboot

func (o *TestDeviceObject) Reboot() Value

func (*TestDeviceObject) ResetErrorCode

func (o *TestDeviceObject) ResetErrorCode() string

type TimeValue

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

func (*TimeValue) GetBytes

func (v *TimeValue) GetBytes() []byte

func (*TimeValue) GetContainedType

func (v *TimeValue) GetContainedType() ValueTypeCode

func (*TimeValue) GetStringValue

func (v *TimeValue) GetStringValue() string

func (*TimeValue) GetType

func (v *TimeValue) GetType() ValueTypeCode

func (*TimeValue) GetValue

func (v *TimeValue) GetValue() interface{}

type UnauthorizedResponse

type UnauthorizedResponse struct {
}

func (*UnauthorizedResponse) GetResponseCode

func (r *UnauthorizedResponse) GetResponseCode() canopus.CoapCode

func (*UnauthorizedResponse) GetResponseValue

func (r *UnauthorizedResponse) GetResponseValue() Value

type Validator

type Validator interface {
	Valid(val interface{}) bool
}

func NewLengthValidator

func NewLengthValidator(len uint64) Validator

func NewRangeValidator

func NewRangeValidator(from int64, to int64) Validator

type Value

type Value interface {
	GetBytes() []byte
	GetType() ValueTypeCode
	GetContainedType() ValueTypeCode
	GetValue() interface{}
	GetStringValue() string
}

ResponseValue interface represents response to a server request Typical response could be plain text, TLV Binary, TLV JSON

func Boolean

func Boolean(v ...bool) Value

func BytesToIntegerValue

func BytesToIntegerValue(b []byte) (conv Value)

func DecodeResourceValue

func DecodeResourceValue(resourceId LWM2MResourceType, b []byte, resourceDef ResourceDefinition) (Value, error)

DecodeResourceValue decodes the resource value

func Empty

func Empty() Value

func Float

func Float(v ...float32) Value

func Float64

func Float64(v ...float64) Value

func Integer

func Integer(v ...int) Value

func Multiple

func Multiple(ct ValueTypeCode, v ...Value) Value

func MultipleIntegers

func MultipleIntegers(v ...Value) Value

func NewMultipleResourceValue

func NewMultipleResourceValue(id LWM2MResourceType, value []*ResourceValue) Value

func NewResourceValue

func NewResourceValue(id LWM2MResourceType, value Value) Value

func String

func String(v ...string) Value

func Time

func Time(v ...time.Time) Value

func ValueByType

func ValueByType(t ValueTypeCode, val []byte) Value

func ValueFromBytes

func ValueFromBytes(b []byte, v ValueTypeCode) Value

Extract value from a LWM2M byte fragment

type ValueTypeCode

type ValueTypeCode byte
const (
	VALUETYPE_EMPTY         ValueTypeCode = 0
	VALUETYPE_MULTIPLE      ValueTypeCode = 1
	VALUETYPE_STRING        ValueTypeCode = 2
	VALUETYPE_BYTE          ValueTypeCode = 3
	VALUETYPE_INTEGER       ValueTypeCode = 4
	VALUETYPE_INTEGER32     ValueTypeCode = 5
	VALUETYPE_INTEGER64     ValueTypeCode = 6
	VALUETYPE_FLOAT         ValueTypeCode = 7
	VALUETYPE_FLOAT64       ValueTypeCode = 8
	VALUETYPE_BOOLEAN       ValueTypeCode = 9
	VALUETYPE_OPAQUE        ValueTypeCode = 10
	VALUETYPE_TIME          ValueTypeCode = 11
	VALUETYPE_OBJECTLINK    ValueTypeCode = 12
	VALUETYPE_OBJECT        ValueTypeCode = 13
	VALUETYPE_RESOURCE      ValueTypeCode = 14
	VALUETYPE_MULTIRESOURCE ValueTypeCode = 15
)

type YamlObjectDefinition

type YamlObjectDefinition struct {
	Id       int
	Name     string `json:"Name"`
	Multiple bool
}

Directories

Path Synopsis
app

Jump to

Keyboard shortcuts

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