coap
Version:
A CoAP library for node modelled after 'http'
199 lines • 5.88 kB
JavaScript
"use strict";
/*
* Copyright (c) 2013-2021 node-coap contributors.
*
* node-coap is licensed under an MIT +no-false-attribs license.
* All rights not explicitly granted in the MIT license are reserved.
* See the included LICENSE file for more details.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.parameters = void 0;
exports.refreshTiming = refreshTiming;
exports.defaultTiming = defaultTiming;
/**
* Timeout in seconds for a response to a confirmable request.
*/
const ACK_TIMEOUT = 2;
/**
* Used to calculate upper bound for timeout.
*/
const ACK_RANDOM_FACTOR = 1.5;
/**
* Maximum number of retransmissions for a confirmable request.
* Defaults to 4.
*/
const MAX_RETRANSMIT = 4;
/**
* Allowed number of simultaneous outstanding interactions.
* Defaults to 1.
*
*/
const NSTART = 1;
/**
* Maximum timespan (in seconds) that is waited by default before
* responding to a multicast request. Defaults to 5 seconds.
*
* The exact point of time for responding is chosen randomly.
*/
const DEFAULT_LEISURE = 5;
/**
* Indicates the average data rate (in bytes) that must not be exceeded
* by a CoAP endpoint in sending to a peer endpoint that does not respond.
*
* Defaults to 1 byte / second.
*/
const PROBING_RATE = 1;
/**
* Maximum time from the first transmission of a Confirmable message
* to its last retransmission.
*
* It is calculated as follows:
*
* ```
* ACK_TIMEOUT * ((2 ** MAX_RETRANSMIT) - 1) * ACK_RANDOM_FACTOR
* ```
*/
const MAX_TRANSMIT_SPAN = 45;
/**
* MAX_TRANSMIT_WAIT is the maximum time (in seconds) from the first
* transmission of a Confirmable message to the time when the sender
* gives up on receiving an acknowledgement or reset.
*
* It is calculated as follows:
*
* ```
* ACK_TIMEOUT * ((2 ** (MAX_RETRANSMIT + 1)) - 1) * ACK_RANDOM_FACTOR
* ```
*/
const MAX_TRANSMIT_WAIT = 93;
/**
* Maximum time (in seconds) a datagram is expected to
* take from the start of its transmission to the
* completion of its reception.
*
* Arbitrarily set to 100 seconds as the default value.
*/
const MAX_LATENCY = 100;
/**
* The time a node takes to turn around a Confirmable message
* into an acknowledgement. Uses `ACK_TIMEOUT` (two seconds) as
* the default value.
*/
const PROCESSING_DELAY = 2;
/**
* Maximum round-trip time. Defaults to 202 seconds.
*
* It is calculated as follows:
*
* ```
* (2 * MAX_LATENCY) + PROCESSING_DELAY
* ```
*/
const MAX_RTT = 202;
/**
* Time from starting to send a confirmable message to the time when an
* acknowledgement is no longer expected, i.e. message layer information
* about the message exchange can be purged. Defaults to 247 seconds.
*
* It is calculated as follows:
*
* ```
* MAX_TRANSMIT_SPAN + (2 * MAX_LATENCY) + PROCESSING_DELAY
* ```
*/
const EXCHANGE_LIFETIME = 247;
/**
* Time from sending a Non-confirmable message to
* the time its Message ID can be safely reused.
* Defaults to 145 seconds.
*
* It is calculated as follows:
*
* ```
* MAX_TRANSMIT_SPAN + MAX_LATENCY
* ```
*/
const NON_LIFETIME = 145;
/**
* Default UDP port used by CoAP.
*/
const COAP_PORT = 5683;
/**
* Maximum total size of the CoAP application layer message, as
* recommended by the CoAP specification
*/
const MAX_MESSAGE_SIZE = 1152;
/**
* Default max payload size recommended in the CoAP specification
* For more info see RFC 7252 Section 4.6
*/
const MAX_PAYLOAD_SIZE = 1024;
/* Custom default parameters */
/**
* Indicates if ACK messages should be sent for non-confirmable packages.
*
* `true`: always send CoAP ACK messages, even for non confirmabe packets.
* `false`: only send CoAP ACK messages for confirmabe packets.
*/
const sendAcksForNonConfirmablePackets = true;
/**
* Number of milliseconds to wait for a piggyback response.
*/
const piggybackReplyMs = 50;
/**
* LRU prune timer period.
*
* In order to reduce unnecessary heap usage on low-traffic servers the
* LRU cache is periodically pruned to remove old, expired packets. This
* is a fairly low-intensity task, but the period can be altered here
* or the timer disabled by setting the value to zero.
* By default the value is set to `0.5 * EXCHANGE_LIFETIME` (~120s).
*/
const pruneTimerPeriod = 0.5 * EXCHANGE_LIFETIME;
const p = {
ackTimeout: ACK_TIMEOUT,
ackRandomFactor: ACK_RANDOM_FACTOR,
maxRetransmit: MAX_RETRANSMIT,
nstart: NSTART,
defaultLeisure: DEFAULT_LEISURE,
probingRate: PROBING_RATE,
exchangeLifetime: EXCHANGE_LIFETIME,
maxRTT: MAX_RTT,
maxTransmitSpan: MAX_TRANSMIT_SPAN,
maxTransmitWait: MAX_TRANSMIT_WAIT,
processingDelay: PROCESSING_DELAY,
maxLatency: MAX_LATENCY,
nonLifetime: NON_LIFETIME,
coapPort: COAP_PORT,
maxPayloadSize: MAX_PAYLOAD_SIZE,
maxMessageSize: MAX_MESSAGE_SIZE,
sendAcksForNonConfirmablePackets,
piggybackReplyMs,
pruneTimerPeriod
};
exports.parameters = p;
const defaultParameters = JSON.parse(JSON.stringify(p));
function refreshTiming(values) {
for (const key in values) {
if (p[key] != null) {
p[key] = values[key];
}
}
p.maxTransmitSpan = p.ackTimeout * ((Math.pow(2, p.maxRetransmit)) - 1) * p.ackRandomFactor;
p.maxTransmitWait = p.ackTimeout * (Math.pow(2, p.maxRetransmit + 1) - 1) * p.ackRandomFactor;
p.processingDelay = p.ackTimeout;
p.maxRTT = 2 * p.maxLatency + p.processingDelay;
p.exchangeLifetime = p.maxTransmitSpan + p.maxRTT;
if (values != null && typeof values.pruneTimerPeriod === 'number') {
p.pruneTimerPeriod = values.pruneTimerPeriod;
}
else {
p.pruneTimerPeriod = (0.5 * p.exchangeLifetime);
}
}
function defaultTiming() {
refreshTiming(defaultParameters);
}
p.defaultTiming = defaultTiming;
p.refreshTiming = refreshTiming;
//# sourceMappingURL=parameters.js.map