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

config HTTP
	bool "HTTP support"
	default n
	help
	This option enables the HTTP library

config HTTP_SERVER
	bool "HTTP server support"
	default n
	select HTTP
	select HTTP_PARSER
	help
	Enables HTTP server routines

config HTTP_SERVER_CONNECTIONS
	int "Max number of HTTP server connections"
	default NET_MAX_CONTEXTS
	depends on HTTP_SERVER
	help
	This value determines how many simultaneous HTTP connections the
	HTTP server can serve.

config HTTP_SERVER_NUM_URLS
	int "Max number of URLs that the HTTP server will handle"
	default 8
	depends on HTTP_SERVER
	help
	This value determines how many URLs this HTTP server can handle.

config HTTP_HEADER_FIELD_ITEMS
	int "HTTP header field max number of items"
	depends on HTTP_SERVER
	default 8
	help
	Number of HTTP header field items that an HTTP server
	application will handle

config HTTP_CLIENT
	bool "HTTP client support"
	default n
	select HTTP_PARSER
	select HTTP
	help
	Enables HTTP client routines

config HTTP_CLIENT_NETWORK_TIMEOUT
	int "Default network activity timeout in seconds"
	default 20
	depends on HTTP_CLIENT
	help
	Default network activity timeout in seconds.  This setting is used
	for TCP connection timeout.

config HTTP_PARSER
	bool "HTTP Parser support"
	default n
	select HTTP
	select HTTP_PARSER_URL
	help
	This option enables the http_parser library from nodejs.
	This parser requires some string-related routines commonly
	provided by a libc implementation.

config HTTP_PARSER_URL
	bool "HTTP Parser for URL support"
	default n
	select HTTP
	help
	This option enables the URI parser library based on source from nodejs.
	This parser requires some string-related routines commonly
	provided by a libc implementation.

config HTTP_PARSER_STRICT
	bool "HTTP strict parsing"
	default n
	depends on (HTTP_PARSER || HTTP_PARSER_URL)
	help
	This option enables the strict parsing option

config HTTPS
	bool "HTTPS support"
	default n
	depends on HTTP
	depends on MBEDTLS
	help
	Enables HTTPS support.

config HTTPS_STACK_SIZE
	int "HTTPS thread stack size"
	default 8192
	depends on HTTPS
	help
	HTTPS thread stack size. The mbedtls routines will use this stack
	thus it is by default very large.

config  NET_DEBUG_HTTP
	bool "Debug HTTP"
	default n
	depends on HTTP && NET_LOG
	help
	Enables HTTP output debug messages

config  NET_DEBUG_HTTP_CONN
	bool "Debug HTTP connections"
	default n
	depends on HTTP && NET_LOG
	help
	Enables HTTP connection tracking.
