@@ -88,14 +88,42 @@ constant char NAV_HTTP_SCHEMES[][20] = {
8888/* *
8989 * @constant NAV_HTTP_MAX_REQUEST_LENGTH
9090 * @description Maximum allowed length for HTTP request
91+ * Can be overridden by defining before including this header.
92+ * Default: 4096 bytes
9193 */
94+ #IF_NOT_DEFINED NAV_HTTP_MAX_REQUEST_LENGTH
9295constant integer NAV_HTTP_MAX_REQUEST_LENGTH = 4096
96+ #END_IF
9397
9498/* *
9599 * @constant NAV_HTTP_MAX_RESPONSE_LENGTH
96100 * @description Maximum allowed length for HTTP response
101+ * Can be overridden by defining before including this header.
102+ * Default: 16384 bytes
97103 */
104+ #IF_NOT_DEFINED NAV_HTTP_MAX_RESPONSE_LENGTH
98105constant integer NAV_HTTP_MAX_RESPONSE_LENGTH = 16384
106+ #END_IF
107+
108+ /* *
109+ * @constant NAV_HTTP_MAX_REQUEST_BODY
110+ * @description Maximum size for HTTP request body in bytes.
111+ * Can be overridden by defining before including this header.
112+ * Default: 8192 bytes
113+ */
114+ #IF_NOT_DEFINED NAV_HTTP_MAX_REQUEST_BODY
115+ constant long NAV_HTTP_MAX_REQUEST_BODY = 8192
116+ #END_IF
117+
118+ /* *
119+ * @constant NAV_HTTP_MAX_RESPONSE_BODY
120+ * @description Maximum size for HTTP response body in bytes.
121+ * Can be overridden by defining before including this header.
122+ * Default: 65535 bytes
123+ */
124+ #IF_NOT_DEFINED NAV_HTTP_MAX_RESPONSE_BODY
125+ constant long NAV_HTTP_MAX_RESPONSE_BODY = 65535
126+ #END_IF
99127
100128/* *
101129 * @constant NAV_HTTP_METHOD_*
@@ -166,7 +194,7 @@ constant integer NAV_HTTP_STATUS_CODE_SUCCESS_RESET_CONTENT = 205
166194constant integer NAV_HTTP_STATUS_CODE_SUCCESS_PARTIAL_CONTENT = 206
167195constant integer NAV_HTTP_STATUS_CODE_SUCCESS_MULTI_STATUS = 207
168196constant integer NAV_HTTP_STATUS_CODE_SUCCESS_ALREADY_REPORTED = 208
169- constant integer NAV_HTTP_STATUS_CODE_SUCCESS_IM_USED = 209
197+ constant integer NAV_HTTP_STATUS_CODE_SUCCESS_IM_USED = 226
170198
171199constant char NAV_HTTP_STATUS_MESSAGE_SUCCESS_OK [] = ' OK'
172200constant char NAV_HTTP_STATUS_MESSAGE_SUCCESS_CREATED [] = ' Created'
@@ -274,19 +302,19 @@ constant integer NAV_HTTP_STATUS_CODE_SERVER_ERROR_LOOP_DETECTED
274302constant integer NAV_HTTP_STATUS_CODE_SERVER_ERROR_NOT_EXTENDED = 510
275303// constant integer NAV_HTTP_STATUS_CODE_SERVER_ERROR_NETWORK_AUTHENTICATION_REQUIRED = 511
276304
277- constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_SERVER_ERROR [] = ' Server Error'
305+ constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_SERVER_ERROR [] = ' Internal Server Error'
278306constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_NOT_IMPLEMENTED [] = ' Not Implemented'
279307constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_BAD_GATEWAY [] = ' Bad Gateway'
280308constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_SERVICE_UNAVAILABLE [] = ' Service Unavailable'
281- constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_SERVER_TIMEOUT [] = ' Server Timeout'
282- constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_VERSION_NOT_SUPPORTED [] = ' Version Not Supported'
309+ constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_SERVER_TIMEOUT [] = ' Gateway Timeout'
310+ constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_VERSION_NOT_SUPPORTED [] = ' HTTP Version Not Supported'
283311constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_VARIANT_ALSO_NEGOTIATES [] = ' Variant Also Negotiates'
284312constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_INSUFFICIENT_STORAGE [] = ' Insufficient Storage'
285313constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_LOOP_DETECTED [] = ' Loop Detected'
286314constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_NOT_EXTENDED [] = ' Not Extended'
287315// constant char NAV_HTTP_STATUS_MESSAGE_SERVER_ERROR_NETWORK_AUTHENTICATION_REQUIRED[] = 'Network Authentication Required'
288316
289- constant char NAV_HTTP_STATUS_MESSAGE_UNKNOWN [] = ' Unknown Error '
317+ constant char NAV_HTTP_STATUS_MESSAGE_UNKNOWN [] = ' Unknown'
290318
291319
292320constant char NAV_HTTP_CONTENT_TYPE_APPLICATION_1D_INTERLEAVED_PARTYFEC [] = ' application/1d-interleaved-parityfec'
@@ -772,8 +800,14 @@ constant char NAV_HTTP_CONNECTION_CLOSE[] = 'close'
772800constant char NAV_HTTP_CONNECTION_KEEP_ALIVE [] = ' keep-alive'
773801constant char NAV_HTTP_CONNECTION_UPGRADE [] = ' upgrade'
774802
803+ // HTTP Response Buffer States
804+ constant integer NAV_HTTP_STATE_IDLE = 0
805+ constant integer NAV_HTTP_STATE_PARSING_HEADERS = 1
806+ constant integer NAV_HTTP_STATE_PARSING_BODY = 2
807+
775808// Common Character Constants
776- constant char NAV_HTTP_CRLF [] = ' $0D,$0A'
809+ constant char NAV_HTTP_CRLF [] = {$0D ,$0A }
810+ constant char NAV_HTTP_HEADER_DELIMITER [] = {$0D ,$0A ,$0D ,$0A }
777811constant char NAV_HTTP_HEADER_SEPARATOR [] = ' : '
778812constant char NAV_HTTP_QUERY_SEPARATOR [] = ' ?'
779813constant char NAV_HTTP_FRAGMENT_SEPARATOR [] = ' #'
@@ -806,25 +840,90 @@ constant integer NAV_HTTP_TIMEOUT_QUICK = 5
806840constant integer NAV_HTTP_TIMEOUT_LONG = 120
807841
808842// Maximum Sizes
809- constant integer NAV_HTTP_MAX_HEADER_SIZE = 8192
810- constant integer NAV_HTTP_MAX_URL_LENGTH = 2048
811- constant integer NAV_HTTP_MAX_PATH_LENGTH = 1024
812- constant integer NAV_HTTP_MAX_QUERY_LENGTH = 1024
813- constant integer NAV_HTTP_MAX_HEADERS = 20
814- constant integer NAV_HTTP_MAX_COOKIES = 20
843+ /* *
844+ * @constant NAV_HTTP_MAX_HEADER_SIZE
845+ * @description Maximum size for a single HTTP header line.
846+ * Can be overridden by defining before including this header.
847+ * Default: 8192 bytes
848+ */
849+ #IF_NOT_DEFINED NAV_HTTP_MAX_HEADER_SIZE
850+ constant integer NAV_HTTP_MAX_HEADER_SIZE = 8192
851+ #END_IF
815852
816- // Websocket Related
817- constant char NAV_HTTP_WEBSOCKET_VERSION [] = ' 13'
818- constant char NAV_HTTP_WEBSOCKET_PROTOCOL [] = ' websocket'
853+ /* *
854+ * @constant NAV_HTTP_MAX_URL_LENGTH
855+ * @description Maximum length for complete URLs.
856+ * Can be overridden by defining before including this header.
857+ * Default: 2048 bytes
858+ */
859+ #IF_NOT_DEFINED NAV_HTTP_MAX_URL_LENGTH
860+ constant integer NAV_HTTP_MAX_URL_LENGTH = 2048
861+ #END_IF
862+
863+ /* *
864+ * @constant NAV_HTTP_MAX_PATH_LENGTH
865+ * @description Maximum length for HTTP request paths (including query string).
866+ * Can be overridden by defining before including this header.
867+ * Default: 2048 bytes
868+ */
869+ #IF_NOT_DEFINED NAV_HTTP_MAX_PATH_LENGTH
870+ constant integer NAV_HTTP_MAX_PATH_LENGTH = 2048
871+ #END_IF
872+
873+ /* *
874+ * @constant NAV_HTTP_MAX_QUERY_LENGTH
875+ * @description Maximum length for URL query strings.
876+ * Can be overridden by defining before including this header.
877+ * Default: 1024 bytes
878+ */
879+ #IF_NOT_DEFINED NAV_HTTP_MAX_QUERY_LENGTH
880+ constant integer NAV_HTTP_MAX_QUERY_LENGTH = 1024
881+ #END_IF
882+
883+ /* *
884+ * @constant NAV_HTTP_MAX_HEADER_KEY
885+ * @description Maximum length for HTTP header keys/names.
886+ * Can be overridden by defining before including this header.
887+ * Default: 256 bytes
888+ */
889+ #IF_NOT_DEFINED NAV_HTTP_MAX_HEADER_KEY
890+ constant integer NAV_HTTP_MAX_HEADER_KEY = 256
891+ #END_IF
892+
893+ /* *
894+ * @constant NAV_HTTP_MAX_HEADER_VALUE
895+ * @description Maximum length for HTTP header values.
896+ * Can be overridden by defining before including this header.
897+ * Default: 2048 bytes (sufficient for JWT tokens, long cookies, etc.)
898+ */
899+ #IF_NOT_DEFINED NAV_HTTP_MAX_HEADER_VALUE
900+ constant integer NAV_HTTP_MAX_HEADER_VALUE = 2048
901+ #END_IF
819902
820903/* *
821- * Maximum number of HTTP headers allowed in a request or response.
822- * Can be overridden before including this file if a different limit is needed.
904+ * @constant NAV_HTTP_MAX_HEADERS
905+ * @description Maximum number of HTTP headers allowed in a request or response.
906+ * Can be overridden by defining before including this header.
907+ * Default: 20
823908 */
824909#IF_NOT_DEFINED NAV_HTTP_MAX_HEADERS
825910constant integer NAV_HTTP_MAX_HEADERS = 20
826911#END_IF
827912
913+ /* *
914+ * @constant NAV_HTTP_MAX_COOKIES
915+ * @description Maximum number of cookies that can be stored.
916+ * Can be overridden by defining before including this header.
917+ * Default: 20
918+ */
919+ #IF_NOT_DEFINED NAV_HTTP_MAX_COOKIES
920+ constant integer NAV_HTTP_MAX_COOKIES = 20
921+ #END_IF
922+
923+ // Websocket Related
924+ constant char NAV_HTTP_WEBSOCKET_VERSION [] = ' 13'
925+ constant char NAV_HTTP_WEBSOCKET_PROTOCOL [] = ' websocket'
926+
828927
829928DEFINE_TYPE
830929
@@ -847,14 +946,14 @@ struct _NAVHttpStatus {
847946 * @struct _NAVHttpHeader
848947 * @description Structure for storing a key-value pair of strings.
849948 *
850- * @property {char[256 ]} Key - The key string
851- * @property {char[1024 ]} Value - The value string
949+ * @property {char[NAV_HTTP_MAX_HEADER_KEY ]} Key - The key string
950+ * @property {char[NAV_HTTP_MAX_HEADER_VALUE ]} Value - The value string
852951 *
853952 * @see NAVHttpHeaderAdd
854953 */
855954struct _NAVHttpHeader {
856- char Key [256 ];
857- char Value [1024 ];
955+ char Key [NAV_HTTP_MAX_HEADER_KEY ];
956+ char Value [NAV_HTTP_MAX_HEADER_VALUE ];
858957}
859958
860959/* *
@@ -877,22 +976,22 @@ struct _NAVHttpHeaderCollection {
877976 * @description Structure representing an HTTP request.
878977 *
879978 * @property {char[7]} Method - HTTP method (GET, POST, PUT, etc.)
880- * @property {char[256 ]} Path - Request path including query string
979+ * @property {char[NAV_HTTP_MAX_PATH_LENGTH ]} Path - Request path including query string
881980 * @property {char[8]} Version - HTTP version
882981 * @property {char[256]} Host - Target host
883982 * @property {integer} Port - Target port
884- * @property {char[2048 ]} Body - Request body content
983+ * @property {char[NAV_HTTP_MAX_REQUEST_BODY ]} Body - Request body content
885984 * @property {_NAVHttpHeader} Headers - Request headers
886985 *
887986 * @see NAVHttpRequestInit
888987 */
889988struct _NAVHttpRequest {
890989 char Method [7 ];
891- char Path [256 ];
990+ char Path [NAV_HTTP_MAX_PATH_LENGTH ];
892991 char Version [8 ];
893992 char Host [256 ];
894993 integer Port ;
895- char Body [2048 ];
994+ char Body [NAV_HTTP_MAX_REQUEST_BODY ];
896995
897996 _NAVHttpHeaderCollection Headers ;
898997}
@@ -903,7 +1002,7 @@ struct _NAVHttpRequest {
9031002 *
9041003 * @property {_NAVHttpStatus} Status - Response status code and message
9051004 * @property {_NAVHttpHeader} Headers - Response headers
906- * @property {char[16384 ]} Body - Response body content
1005+ * @property {char[NAV_HTTP_MAX_RESPONSE_BODY ]} Body - Response body content
9071006 * @property {char[256]} ContentType - Content-Type of the response
9081007 * @property {long} ContentLength - Length of response body in bytes
9091008 *
@@ -912,9 +1011,70 @@ struct _NAVHttpRequest {
9121011struct _NAVHttpResponse {
9131012 _NAVHttpStatus Status ;
9141013 _NAVHttpHeaderCollection Headers ;
915- char Body [16384 ];
1014+ char Body [NAV_HTTP_MAX_RESPONSE_BODY ];
9161015 char ContentType [256 ];
9171016 long ContentLength ;
9181017}
9191018
1019+ /* *
1020+ * @struct _NAVHttpResponseBuffer
1021+ * @description Buffer structure for processing HTTP responses with state management.
1022+ *
1023+ * Used with NAVHttpProcessResponseBuffer for incremental response processing.
1024+ * Connect the Data field to a device buffer using create_buffer, then call
1025+ * NAVHttpProcessResponseBuffer from your data_event string handler.
1026+ *
1027+ * @property {char[]} Data - Buffer containing received HTTP data
1028+ * @property {char} Semaphore - Prevents concurrent access to buffer
1029+ * @property {integer} State - Current parsing state (IDLE, PARSING_HEADERS, PARSING_BODY)
1030+ * @property {long} ContentLength - Expected body length (set by user after parsing headers)
1031+ *
1032+ * @see NAVHttpProcessResponseBuffer
1033+ * @see NAVHttpResponseBufferInit
1034+ */
1035+ struct _NAVHttpResponseBuffer {
1036+ char Data [NAV_HTTP_MAX_RESPONSE_BODY ];
1037+ char Semaphore ;
1038+ integer State ;
1039+ long ContentLength ;
1040+ }
1041+
1042+ /* *
1043+ * @struct _NAVHttpResponseHeadersResult
1044+ * @description Result structure passed to headers callback.
1045+ *
1046+ * @property {char[]} Data - Raw header data extracted from buffer
1047+ *
1048+ * @see NAVHttpResponseHeadersCallback
1049+ * @see NAVHttpParseResponseHeaders
1050+ */
1051+ struct _NAVHttpResponseHeadersResult {
1052+ char Data [NAV_HTTP_MAX_RESPONSE_BODY ];
1053+ }
1054+
1055+ /* *
1056+ * @struct _NAVHttpResponseBodyResult
1057+ * @description Result structure passed to body callback.
1058+ *
1059+ * @property {char[]} Data - Raw body data extracted from buffer
1060+ *
1061+ * @see NAVHttpResponseBodyCallback
1062+ * @see NAVHttpParseResponseBody
1063+ */
1064+ struct _NAVHttpResponseBodyResult {
1065+ char Data [NAV_HTTP_MAX_RESPONSE_BODY ];
1066+ }
1067+
1068+ /* *
1069+ * @struct _NAVHttpResponseCompleteResult
1070+ * @description Result structure passed to complete callback.
1071+ *
1072+ * @property {integer} State - The state that completed (PARSING_HEADERS or PARSING_BODY)
1073+ *
1074+ * @see NAVHttpResponseCompleteCallback
1075+ */
1076+ struct _NAVHttpResponseCompleteResult {
1077+ integer State ;
1078+ }
1079+
9201080#END_IF // __NAV_FOUNDATION_HTTPUTILS_H__
0 commit comments