summaryrefslogtreecommitdiff
path: root/main/SAPI.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/SAPI.c')
-rw-r--r--main/SAPI.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/main/SAPI.c b/main/SAPI.c
index c107365366..12499aee3b 100644
--- a/main/SAPI.c
+++ b/main/SAPI.c
@@ -41,6 +41,7 @@ SAPI_API void sapi_activate(SLS_D)
zend_llist_init(&SG(sapi_headers).headers, sizeof(sapi_header_struct), (void (*)(void *)) sapi_free_header, 0);
SG(sapi_headers).content_type.header = NULL;
SG(sapi_headers).http_response_code = 200;
+ SG(headers_sent) = 0;
}
@@ -62,7 +63,11 @@ SAPI_API int sapi_add_header(const char *header_line, uint header_line_len)
sapi_header.header = (char *) header_line;
sapi_header.header_len = header_line_len;
- retval = sapi_module.header_handler(&sapi_header, &SG(sapi_headers));
+ if (sapi_module.header_handler) {
+ retval = sapi_module.header_handler(&sapi_header, &SG(sapi_headers));
+ } else {
+ retval = SAPI_HEADER_ADD;
+ }
if (retval & SAPI_HEADER_DELETE_ALL) {
zend_llist_clean(&SG(sapi_headers).headers);
@@ -91,14 +96,27 @@ SAPI_API int sapi_add_header(const char *header_line, uint header_line_len)
SAPI_API int sapi_send_headers()
{
+ int retval;
SLS_FETCH();
- switch (sapi_module.send_headers(&SG(sapi_headers) SLS_CC)) {
+ if (SG(headers_sent)) {
+ return SUCCESS;
+ }
+
+ if (sapi_module.send_headers) {
+ retval = sapi_module.send_headers(&SG(sapi_headers) SLS_CC);
+ } else {
+ retval = SAPI_HEADER_DO_SEND;
+ }
+
+ switch (retval) {
case SAPI_HEADER_SENT_SUCCESSFULLY:
+ SG(headers_sent) = 1;
return SUCCESS;
break;
case SAPI_HEADER_DO_SEND:
zend_llist_apply_with_argument(&SG(sapi_headers).headers, (void (*)(void *, void *)) sapi_module.send_header, SG(server_context));
+ SG(headers_sent) = 1;
return SUCCESS;
break;
case SAPI_HEADER_SEND_FAILED: