# 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

if HTTP

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

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

config HTTP_HEADERS
	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 HTTPS
	bool "HTTPS support"
	default n
	select NET_APP_TLS
	help
	  Enables HTTPS support.

config HTTP_SERVER_CONNECTIONS
	int "Max number of concurrent HTTP server connections"
	default NET_APP_SERVER_NUM_CONN
	depends on HTTP_SERVER
	help
	  This value determines how many simultaneous HTTP connections the
	  HTTP server can serve. Note that only 1 HTTPS connection can be
	  served at a time, so set CONFIG_NET_APP_SERVER_NUM_CONN and
	  CONFIG_NET_TCP_BACKLOG_SIZE to 1 in that case.

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_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  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.

endif # HTTP

config HTTP_PARSER
	bool "HTTP Parser support"
	default n
	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
	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
