# 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_APP
	bool "Use new HTTP API built on top of net-app API"
	default y

if HTTP_APP

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.

endif # HTTP_APP

if !HTTP_APP

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

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

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 HTTPS
	bool "HTTPS support"
	default n
	select 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 HTTP_SERVER_CONNECTIONS
	int "Max number of concurrent 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. Note that only 1 HTTPS connection can be
	  served at a time.

endif # !HTTP_APP

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
