# CoAP implementation for Zephyr

# Copyright (c) 2017 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

config COAP
	bool "CoAP Support"
	help
	  This option enables the CoAP implementation.


if COAP

# This setting is only used by unit test. Do not enable it in applications
config COAP_TEST_API_ENABLE
	bool "Enable test API for CoAP unit tests"
	help
	  Do not enable this for normal use.

config COAP_WELL_KNOWN_BLOCK_WISE
	bool "CoAP ./well-known/core services block wise support"
	help
	  This option enables the block wise support of CoAP response
	  to ./well-known/core request. Without this option all resource's
	  information will be sent in a single IP packet (can be multiple
	  fragments depends on MTU size). This will be useful in mesh kind
	  of networks.

config COAP_WELL_KNOWN_BLOCK_WISE_SIZE
	int "CoAP ./well-known/core services block wise support"
	default 32
	depends on COAP_WELL_KNOWN_BLOCK_WISE
	help
	  Maximum size of CoAP block. Valid values are 16, 32, 64, 128,
	  256, 512 and 1024.

config COAP_EXTENDED_OPTIONS_LEN
	bool "Support for CoAP extended options"
	help
	  This option enables the parsing of extended CoAP options length.
	  CoAP extended options length can be 2 byte value, which
	  requires more memory. User can save memory by disabling this.
	  That means only length of maximum 12 bytes are supported by default.
	  Enable this if length field going to bigger that 12.

config COAP_EXTENDED_OPTIONS_LEN_VALUE
	int "CoAP extended options length value"
	default 13
	depends on COAP_EXTENDED_OPTIONS_LEN
	help
	  This option specifies the maximum value of length field when
	  COAP_EXTENDED_OPTIONS_LEN is enabled. Define the value according to
	  user requirement.

config COAP_INIT_ACK_TIMEOUT_MS
	int "base length of the random generated initial ACK timeout in ms"
	default 2000
	range 1000 100000
	help
	  This value is used as a base value to retry pending CoAP packets.

config COAP_RANDOMIZE_ACK_TIMEOUT
	bool "Randomize initial ACK timeout, as specified in RFC 7252"
	default y
	help
	  If enabled, the initial ACK timeout will be randomized, as specified
	  in RFC 7252, i.e. will be a random number between ACK_TIMEOUT and
	  ACK_TIMEOUT * ACK_RANDOM_FACTOR (where ACK_TIMEOUT is specified by
	  COAP_INIT_ACK_TIMEOUT_MS option). Otherwise, the initial ACK timeout
	  will be fixed to the value of COAP_INIT_ACK_TIMEOUT_MS option.

config COAP_URI_WILDCARD
	bool "Enable wildcards in CoAP resource path"
	default y
	help
	  This option enables MQTT-style wildcards in path. Disable it if
	  resource path may contain plus or hash symbol.

config COAP_KEEP_USER_DATA
	bool "Enable keeping user data in the CoAP packet"
	help
	  This option enables keeping application-specific user data

module = COAP
module-dep = NET_LOG
module-str = Log level for CoAP
module-help = Enables CoAP debug messages.
source "subsys/net/Kconfig.template.log_config.net"

endif # COAP
