client

package
v2.6.0 Latest Latest
Warning

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

Go to latest
Published: Jul 29, 2022 License: Apache-2.0 Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const ExchangeLifetime = 247 * time.Second

https://datatracker.ietf.org/doc/html/rfc7252#section-4.8.2

Variables

View Source
var (
	ErrKeyAlreadyExists = errors.New("key already exists")

	ErrKeyNotExists = errors.New("key does not exist")
)

Functions

func NewDeleteRequest

func NewDeleteRequest(ctx context.Context, messagePool *pool.Pool, path string, opts ...message.Option) (*pool.Message, error)

NewDeleteRequest creates delete request.

Use ctx to set timeout.

func NewGetRequest

func NewGetRequest(ctx context.Context, messagePool *pool.Pool, path string, opts ...message.Option) (*pool.Message, error)

NewGetRequest creates get request.

Use ctx to set timeout.

func NewObserveRequest

func NewObserveRequest(ctx context.Context, messagePool *pool.Pool, path string, opts ...message.Option) (*pool.Message, error)

NewObserveRequest creates observe request.

Use ctx to set timeout.

func NewPostRequest

func NewPostRequest(ctx context.Context, messagePool *pool.Pool, path string, contentFormat message.MediaType, payload io.ReadSeeker, opts ...message.Option) (*pool.Message, error)

NewPostRequest creates post request.

Use ctx to set timeout.

An error is returned if by failure to speak COAP (such as a network connectivity problem). Any status code doesn't cause an error.

If payload is nil then content format is not used.

func NewPutRequest

func NewPutRequest(ctx context.Context, messagePool *pool.Pool, path string, contentFormat message.MediaType, payload io.ReadSeeker, opts ...message.Option) (*pool.Message, error)

NewPutRequest creates put request.

Use ctx to set timeout.

If payload is nil then content format is not used.

Types

type Client

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

func NewClient

func NewClient(cc *ClientConn) *Client

func (*Client) ClientConn

func (c *Client) ClientConn() interface{}

ClientConn get's underlaying client connection.

func (*Client) Close

func (c *Client) Close() error

func (*Client) Context

func (c *Client) Context() context.Context

func (*Client) Delete

func (c *Client) Delete(ctx context.Context, path string, opts ...message.Option) (*message.Message, error)

func (*Client) Do

func (c *Client) Do(req *message.Message) (*message.Message, error)

func (*Client) Done

func (c *Client) Done() <-chan struct{}

Done signalizes that connection is not more processed.

func (*Client) Get

func (c *Client) Get(ctx context.Context, path string, opts ...message.Option) (*message.Message, error)

func (*Client) Observe

func (c *Client) Observe(ctx context.Context, path string, observeFunc func(notification *message.Message), opts ...message.Option) (mux.Observation, error)

func (*Client) Ping

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

func (*Client) Post

func (c *Client) Post(ctx context.Context, path string, contentFormat message.MediaType, payload io.ReadSeeker, opts ...message.Option) (*message.Message, error)

func (*Client) Put

func (c *Client) Put(ctx context.Context, path string, contentFormat message.MediaType, payload io.ReadSeeker, opts ...message.Option) (*message.Message, error)

func (*Client) RemoteAddr

func (c *Client) RemoteAddr() net.Addr

func (*Client) Sequence

func (c *Client) Sequence() uint64

Sequence acquires sequence number.

func (*Client) SetContextValue

func (c *Client) SetContextValue(key interface{}, val interface{})

func (*Client) WriteMessage

func (c *Client) WriteMessage(req *message.Message) error

type ClientConn

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

ClientConn represents a virtual connection to a conceptual endpoint, to perform COAPs commands.

func NewClientConn

func NewClientConn(
	session Session,
	observationTokenHandler *HandlerContainer,
	observationRequests *RequestsMap,
	transmissionNStart time.Duration,
	transmissionAcknowledgeTimeout time.Duration,
	transmissionMaxRetransmit uint32,
	handler HandlerFunc,
	blockwiseSZX blockwise.SZX,
	blockWise *blockwise.BlockWise,
	goPool GoPoolFunc,
	errors ErrorFunc,
	getMID GetMIDFunc,
	inactivityMonitor inactivity.Monitor,
	responseMsgCache *cache.Cache,
	messagePool *pool.Pool,
) *ClientConn

NewClientConn creates connection over session and observation.

func (*ClientConn) AcquireMessage

func (cc *ClientConn) AcquireMessage(ctx context.Context) *pool.Message

func (*ClientConn) AddOnClose

func (cc *ClientConn) AddOnClose(f EventFunc)

AddOnClose calls function on close connection event.

func (*ClientConn) AsyncPing

func (cc *ClientConn) AsyncPing(receivedPong func()) (func(), error)

AsyncPing sends ping and receivedPong will be called when pong arrives. It returns cancellation of ping operation.

func (*ClientConn) CheckExpirations

func (cc *ClientConn) CheckExpirations(now time.Time)

CheckExpirations checks and remove expired items from caches.

func (*ClientConn) CheckMyMessageID

func (cc *ClientConn) CheckMyMessageID(req *pool.Message)

CheckMyMessageID compare client msgID against peer messageID and if it is near < 0xffff/4 then incrase msgID. When msgIDs met it can cause issue because cache can send message to which doesn't bellows to request.

func (*ClientConn) Client

func (cc *ClientConn) Client() *Client

func (*ClientConn) Close

func (cc *ClientConn) Close() error

Close closes connection without waiting for the end of the Run function.

func (*ClientConn) Context

func (cc *ClientConn) Context() context.Context

Context returns the client's context.

If connections was closed context is cancelled.

func (*ClientConn) Delete

func (cc *ClientConn) Delete(ctx context.Context, path string, opts ...message.Option) (*pool.Message, error)

Delete deletes the resource identified by the request path.

Use ctx to set timeout.

func (*ClientConn) Do

func (cc *ClientConn) Do(req *pool.Message) (*pool.Message, error)

Do sends an coap message and returns an coap response.

An error is returned if by failure to speak COAP (such as a network connectivity problem). Any status code doesn't cause an error.

Caller is responsible to release request and response.

func (*ClientConn) Done

func (cc *ClientConn) Done() <-chan struct{}

Done signalizes that connection is not more processed.

func (*ClientConn) Get

func (cc *ClientConn) Get(ctx context.Context, path string, opts ...message.Option) (*pool.Message, error)

Get issues a GET to the specified path.

Use ctx to set timeout.

An error is returned if by failure to speak COAP (such as a network connectivity problem). Any status code doesn't cause an error.

func (*ClientConn) InactivityMonitor

func (cc *ClientConn) InactivityMonitor() inactivity.Monitor

func (*ClientConn) LocalAddr

func (cc *ClientConn) LocalAddr() net.Addr

func (*ClientConn) Observe

func (cc *ClientConn) Observe(ctx context.Context, path string, observeFunc func(msg *pool.Message), opts ...message.Option) (*Observation, error)

Observe subscribes for every change of resource on path. It can return canceled observation and it happens when resource doesn't support observation. This is detected when the first notification doesn't contains observe option.

func (*ClientConn) ObserveRequest

func (cc *ClientConn) ObserveRequest(req *pool.Message, observeFunc func(req *pool.Message)) (*Observation, error)

ObserveRequest subscribes for every change of resource on path. It can return canceled observation and it happens when resource doesn't support observation. This is detected when the first notification doesn't contains observe option.

func (*ClientConn) Ping

func (cc *ClientConn) Ping(ctx context.Context) error

Ping issues a PING to the client and waits for PONG response.

Use ctx to set timeout.

func (*ClientConn) Post

func (cc *ClientConn) Post(ctx context.Context, path string, contentFormat message.MediaType, payload io.ReadSeeker, opts ...message.Option) (*pool.Message, error)

Post issues a POST to the specified path.

Use ctx to set timeout.

An error is returned if by failure to speak COAP (such as a network connectivity problem). Any status code doesn't cause an error.

If payload is nil then content format is not used.

func (*ClientConn) Process

func (cc *ClientConn) Process(datagram []byte) error

func (*ClientConn) Put

func (cc *ClientConn) Put(ctx context.Context, path string, contentFormat message.MediaType, payload io.ReadSeeker, opts ...message.Option) (*pool.Message, error)

Put issues a PUT to the specified path.

Use ctx to set timeout.

An error is returned if by failure to speak COAP (such as a network connectivity problem). Any status code doesn't cause an error.

If payload is nil then content format is not used.

func (*ClientConn) ReleaseMessage

func (cc *ClientConn) ReleaseMessage(m *pool.Message)

func (*ClientConn) RemoteAddr

func (cc *ClientConn) RemoteAddr() net.Addr

func (*ClientConn) Run

func (cc *ClientConn) Run() error

Run reads and process requests from a connection, until the connection is closed.

func (*ClientConn) Sequence

func (cc *ClientConn) Sequence() uint64

Sequence acquires sequence number.

func (*ClientConn) Session

func (cc *ClientConn) Session() Session

func (*ClientConn) SetContextValue

func (cc *ClientConn) SetContextValue(key interface{}, val interface{})

SetContextValue stores the value associated with key to context of connection.

func (*ClientConn) Transmission

func (cc *ClientConn) Transmission() *Transmission

func (*ClientConn) WriteMessage

func (cc *ClientConn) WriteMessage(req *pool.Message) error

WriteMessage sends an coap message.

func (*ClientConn) WriteMulticastMessage

func (cc *ClientConn) WriteMulticastMessage(req *pool.Message, address *net.UDPAddr, options ...coapNet.MulticastOption) error

WriteMulticastMessage sends multicast to the remote multicast address. By default it is sent over all network interfaces and all compatible source IP addresses with hop limit 1. Via opts you can specify the network interface, source IP address, and hop limit.

type ErrorFunc

type ErrorFunc = func(error)

type EventFunc

type EventFunc = func()

type GetMIDFunc

type GetMIDFunc = func() uint16

type GoPoolFunc

type GoPoolFunc = func(func()) error

type HandlerContainer

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

HandlerContainer for regirstration handlers by key

func NewHandlerContainer

func NewHandlerContainer() *HandlerContainer

NewHandlerContainer factory

func (*HandlerContainer) Get

func (s *HandlerContainer) Get(key interface{}) (HandlerFunc, error)

Get returns handler for key

func (*HandlerContainer) Insert

func (s *HandlerContainer) Insert(key interface{}, handler HandlerFunc) error

Insert handler for key.

func (*HandlerContainer) Pop

func (s *HandlerContainer) Pop(key interface{}) (HandlerFunc, error)

Pop pops handler for key

type HandlerFunc

type HandlerFunc = func(*ResponseWriter, *pool.Message)

func HandlerFuncToMux

func HandlerFuncToMux(m mux.Handler) HandlerFunc

func NewObservationHandler

func NewObservationHandler(obsertionTokenHandler *HandlerContainer, next HandlerFunc) HandlerFunc

type MutexMap

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

MutexMap wraps a map of mutexes. Each key locks separately.

func NewMutexMap

func NewMutexMap() *MutexMap

NewMutexMap returns an initialized MutexMap.

func (*MutexMap) Lock

func (m *MutexMap) Lock(key interface{}) Unlocker

Lock acquires a lock corresponding to this key. This method will never return nil and Unlock() must be called to release the lock when done.

type Observation

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

Observation represents subscription to resource on the server

func (*Observation) Cancel

func (o *Observation) Cancel(ctx context.Context) error

Cancel remove observation from server. For recreate observation use Observe.

func (*Observation) Canceled

func (o *Observation) Canceled() bool

type RequestsMap

type RequestsMap = sync.Map[uint64, *pool.Message]

type ResponseWriter

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

A ResponseWriter interface is used by an COAP handler to construct an COAP response.

func NewResponseWriter

func NewResponseWriter(response *pool.Message, cc *ClientConn, requestOptions message.Options) *ResponseWriter

func (*ResponseWriter) ClientConn

func (r *ResponseWriter) ClientConn() *ClientConn

func (*ResponseWriter) SendReset

func (r *ResponseWriter) SendReset()

func (*ResponseWriter) SetResponse

func (r *ResponseWriter) SetResponse(code codes.Code, contentFormat message.MediaType, d io.ReadSeeker, opts ...message.Option) error

type Session

type Session interface {
	Context() context.Context
	Close() error
	MaxMessageSize() uint32
	RemoteAddr() net.Addr
	LocalAddr() net.Addr
	WriteMessage(req *pool.Message) error
	// WriteMulticast sends multicast to the remote multicast address.
	// By default it is sent over all network interfaces and all compatible source IP addresses with hop limit 1.
	// Via opts you can specify the network interface, source IP address, and hop limit.
	WriteMulticastMessage(req *pool.Message, address *net.UDPAddr, opts ...coapNet.MulticastOption) error
	Run(cc *ClientConn) error
	AddOnClose(f EventFunc)
	SetContextValue(key interface{}, val interface{})
	Done() <-chan struct{}
}

type Transmission

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

Transmission is a threadsafe container for transmission related parameters

func (*Transmission) SetTransmissionAcknowledgeTimeout

func (t *Transmission) SetTransmissionAcknowledgeTimeout(d time.Duration)

func (*Transmission) SetTransmissionMaxRetransmit

func (t *Transmission) SetTransmissionMaxRetransmit(d int32)

func (*Transmission) SetTransmissionNStart

func (t *Transmission) SetTransmissionNStart(d time.Duration)

type Unlocker

type Unlocker interface {
	Unlock()
}

Unlocker provides an Unlock method to release the lock.

Jump to

Keyboard shortcuts

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