@ -82,11 +82,18 @@
/*! Maximum application/json or application/x-www-form-urlencoded body content length. */
# if !defined(LOW_MEMORY)
# define MAX_CONTENT_LENGTH 4096
# define MAX_CONTENT_LENGTH 4096 0
# else
# define MAX_CONTENT_LENGTH 1024
# endif /* !defined(LOW_MEMORY) */
/*! Initial response body length. */
# if !defined(LOW_MEMORY)
# define INITIAL_RESPONSE_BODY_BUFFER 1024
# else
# define INITIAL_RESPONSE_BODY_BUFFER 512
# endif /* !defined(LOW_MEMORY) */
/*! Maximum line length for HTTP requests. */
# if !defined(LOW_MEMORY)
# define MAX_HTTP_LINE_LENGTH 4096
@ -557,7 +564,7 @@ void ast_http_create_response(struct ast_tcptls_session_instance *ser, int statu
{
char server_name [ MAX_SERVER_NAME_LENGTH ] ;
struct ast_str * server_address = ast_str_create ( MAX_SERVER_NAME_LENGTH ) ;
struct ast_str * out = ast_str_create ( MAX_CONTENT_LENGTH ) ;
struct ast_str * out = ast_str_create ( INITIAL_RESPONSE_BODY_BUFFER ) ;
if ( ! http_header_data | | ! server_address | | ! out ) {
ast_free ( http_header_data ) ;
@ -916,14 +923,24 @@ void ast_http_body_read_status(struct ast_tcptls_session_instance *ser, int read
static int http_body_read_contents ( struct ast_tcptls_session_instance * ser , char * buf , int length , const char * what_getting )
{
int res ;
int total = 0 ;
/* Stream is in exclusive mode so we get it all if possible. */
res = ast_iostream_read ( ser - > stream , buf , length ) ;
if ( res < length ) {
ast_log ( LOG_WARNING , " Short HTTP request %s (Wanted %d) \n " ,
what_getting , length ) ;
while ( total ! = length ) {
res = ast_iostream_read ( ser - > stream , buf + total , length - total ) ;
if ( res < = 0 ) {
break ;
}
total + = res ;
}
if ( total ! = length ) {
ast_log ( LOG_WARNING , " Wrong HTTP content read. Request %s (Wanted %d, Read %d) \n " ,
what_getting , length , res ) ;
return - 1 ;
}
return 0 ;
}