diff options
Diffstat (limited to 'main/SAPI.c')
| -rw-r--r-- | main/SAPI.c | 22 |
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: |
