@ -84,11 +84,18 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
/*! 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
@ -563,7 +570,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 ) ;
@ -922,19 +929,30 @@ 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 ;
/*
* NOTE : Because ser - > f is a non - standard FILE * , fread ( ) does not behave as
* documented .
*/
/* Stream is in exclusive mode so we get it all if possible. */
while ( total ! = length ) {
/*
* NOTE : Because ser - > f is a non - standard FILE * , fread ( ) does not behave as
* documented .
*/
/* Stay in fread until get all the expected data or timeout. */
res = fread ( buf , length , 1 , ser - > f ) ;
if ( res < 1 ) {
ast_log ( LOG_WARNING , " Short HTTP request %s (Wanted %d) \n " ,
what_getting , length ) ;
/* Stay in fread until get all the expected data or timeout. */
res = fread ( buf + total , length - total , 1 , ser - > f ) ;
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 ;
}