@ -451,9 +451,12 @@ void ast_http_send(struct ast_tcptls_session_instance *ser,
struct timeval now = ast_tvnow ( ) ;
struct timeval now = ast_tvnow ( ) ;
struct ast_tm tm ;
struct ast_tm tm ;
char timebuf [ 80 ] ;
char timebuf [ 80 ] ;
char buf [ 256 ] ;
int len ;
int content_length = 0 ;
int content_length = 0 ;
int close_connection ;
int close_connection ;
struct ast_str * server_header_field = ast_str_create ( MAX_SERVER_NAME_LENGTH ) ;
struct ast_str * server_header_field = ast_str_create ( MAX_SERVER_NAME_LENGTH ) ;
int send_content ;
if ( ! ser | | ! ser - > f | | ! server_header_field ) {
if ( ! ser | | ! ser - > f | | ! server_header_field ) {
/* The connection is not open. */
/* The connection is not open. */
@ -504,6 +507,8 @@ void ast_http_send(struct ast_tcptls_session_instance *ser,
lseek ( fd , 0 , SEEK_SET ) ;
lseek ( fd , 0 , SEEK_SET ) ;
}
}
send_content = method ! = AST_HTTP_HEAD | | status_code > = 400 ;
/* send http header */
/* send http header */
if ( fprintf ( ser - > f ,
if ( fprintf ( ser - > f ,
" HTTP/1.1 %d %s \r \n "
" HTTP/1.1 %d %s \r \n "
@ -513,36 +518,21 @@ void ast_http_send(struct ast_tcptls_session_instance *ser,
" %s "
" %s "
" %s "
" %s "
" Content-Length: %d \r \n "
" Content-Length: %d \r \n "
" \r \n " ,
" \r \n "
" %s " ,
status_code , status_title ? status_title : " OK " ,
status_code , status_title ? status_title : " OK " ,
ast_str_buffer ( server_header_field ) ,
ast_str_buffer ( server_header_field ) ,
timebuf ,
timebuf ,
close_connection ? " Connection: close \r \n " : " " ,
close_connection ? " Connection: close \r \n " : " " ,
static_content ? " " : " Cache-Control: no-cache, no-store \r \n " ,
static_content ? " " : " Cache-Control: no-cache, no-store \r \n " ,
http_header ? ast_str_buffer ( http_header ) : " " ,
http_header ? ast_str_buffer ( http_header ) : " " ,
content_length
content_length ,
send_content & & out & & ast_str_strlen ( out ) ? ast_str_buffer ( out ) : " "
) < = 0 ) {
) < = 0 ) {
ast_debug ( 1 , " fprintf() failed: %s \n " , strerror ( errno ) ) ;
ast_debug ( 1 , " fprintf() failed: %s \n " , strerror ( errno ) ) ;
close_connection = 1 ;
close_connection = 1 ;
}
} else if ( send_content & & fd ) {
/* send file content */
/* send content */
if ( ! close_connection & & ( method ! = AST_HTTP_HEAD | | status_code > = 400 ) ) {
if ( out & & ast_str_strlen ( out ) ) {
/*
* NOTE : Because ser - > f is a non - standard FILE * , fwrite ( ) will probably not
* behave exactly as documented .
*/
if ( fwrite ( ast_str_buffer ( out ) , ast_str_strlen ( out ) , 1 , ser - > f ) ! = 1 ) {
ast_debug ( 1 , " fwrite() failed: %s \n " , strerror ( errno ) ) ;
close_connection = 1 ;
}
}
if ( fd ) {
char buf [ 256 ] ;
int len ;
while ( ( len = read ( fd , buf , sizeof ( buf ) ) ) > 0 ) {
while ( ( len = read ( fd , buf , sizeof ( buf ) ) ) > 0 ) {
/*
/*
* NOTE : Because ser - > f is a non - standard FILE * , fwrite ( ) will probably not
* NOTE : Because ser - > f is a non - standard FILE * , fwrite ( ) will probably not
@ -555,7 +545,6 @@ void ast_http_send(struct ast_tcptls_session_instance *ser,
}
}
}
}
}
}
}
ast_free ( http_header ) ;
ast_free ( http_header ) ;
ast_free ( out ) ;
ast_free ( out ) ;