summaryrefslogtreecommitdiff
path: root/sapi
diff options
context:
space:
mode:
authorThies C. Arntzen <thies@php.net>1999-12-28 15:23:24 +0000
committerThies C. Arntzen <thies@php.net>1999-12-28 15:23:24 +0000
commit3238c7ec2c24d124f72a736b36e9df58e4a20de9 (patch)
treee2b66d0db0097bf3960326e4066a1f8b313f5138 /sapi
parent155fd22de092399b6fb60f50385daf947d5004ab (diff)
downloadphp-git-3238c7ec2c24d124f72a736b36e9df58e4a20de9.tar.gz
*** empty log message ***
Diffstat (limited to 'sapi')
-rw-r--r--sapi/phttpd/phttpd.c165
1 files changed, 99 insertions, 66 deletions
diff --git a/sapi/phttpd/phttpd.c b/sapi/phttpd/phttpd.c
index 7471920892..b921738e67 100644
--- a/sapi/phttpd/phttpd.c
+++ b/sapi/phttpd/phttpd.c
@@ -13,6 +13,7 @@
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Thies C. Arntzen <thies@digicol.de> |
+ | Based on aolserver SAPI by Sascha Schumann <sascha@schumann.cx> |
+----------------------------------------------------------------------+
*/
@@ -21,6 +22,8 @@
#include "main.h"
#ifdef HAVE_PHTTPD
+
+#include "ext/standard/info.h"
#ifndef ZTS
#error PHTTPD module is only useable in thread-safe mode
@@ -30,6 +33,7 @@
typedef struct {
struct connectioninfo *cip;
+ struct stat sb;
} phttpd_globals_struct;
static int ph_globals_id;
@@ -65,19 +69,20 @@ php_phttpd_sapi_ub_write(const char *str, uint str_length)
sent_bytes = fd_write(PHG(cip)->fd,str,str_length);
- fprintf(stderr,"***php_phttpd_sapi_ub_write returned %d\n",sent_bytes);
-
+ if (sent_bytes == -1) perror("fd_write\n");
+
return sent_bytes;
}
static int
php_phttpd_sapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers SLS_DC)
{
-#if 0
char *header_name, *header_content;
char *p;
- NSLS_FETCH();
+ PHLS_FETCH();
+ http_sendheaders(PHG(cip)->fd,PHG(cip), SG(sapi_headers).http_response_code, NULL);
+
header_name = sapi_header->header;
header_content = p = strchr(header_name, ':');
@@ -86,19 +91,13 @@ php_phttpd_sapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_str
do {
header_content++;
} while (*header_content == ' ');
-
- if (!strcasecmp(header_name, "Content-type")) {
- Ns_ConnSetTypeHeader(NSG(conn), header_content);
- } else {
- Ns_ConnSetHeaders(NSG(conn), header_name, header_content);
- }
+
+ fd_printf(PHG(cip)->fd,"%s: %s\n",header_name,header_content);
*p = ':';
}
-
+
sapi_free_header(sapi_header);
-#endif
- fprintf(stderr,"***php_phttpd_sapi_header_handler\n");
return 0;
}
@@ -106,18 +105,14 @@ php_phttpd_sapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_str
static int
php_phttpd_sapi_send_headers(sapi_headers_struct *sapi_headers SLS_DC)
{
-/*
- NSLS_FETCH();
+ PHLS_FETCH();
- if(SG(sapi_headers).send_default_content_type) {
- Ns_ConnSetRequiredHeaders(NSG(conn), "text/html", 0);
+ if (SG(sapi_headers).send_default_content_type) {
+ fd_printf(PHG(cip)->fd,"Content-Type: text/html\n");
}
- Ns_ConnFlushHeaders(NSG(conn), SG(sapi_headers).http_response_code);
-*/
+ fd_putc('\n', PHG(cip)->fd);
- fprintf(stderr,"***php_phttpd_sapi_send_headers\n");
-
return SAPI_HEADER_SENT_SUCCESSFULLY;
}
@@ -186,86 +181,124 @@ static sapi_module_struct sapi_module = {
STANDARD_SAPI_MODULE_PROPERTIES
};
-
-int pm_init(const char **argv)
+static void
+php_phttpd_request_ctor(PHLS_D SLS_DC)
{
+ memset(&SG(request_info),0,sizeof(sapi_globals_struct)); /* pfusch! */
- fprintf(stderr,"***pm_init\n");
- tsrm_startup(1, 1, 0);
- fprintf(stderr,"***tsrm_startup\n");
- reentrancy_startup();
- fprintf(stderr,"***reentrancy_startup\n");
- sapi_startup(&sapi_module);
- fprintf(stderr,"***sapi_startup\n");
- sapi_module.startup(&sapi_module);
- fprintf(stderr,"***sapi_module.startup\n");
-
- ph_globals_id = ts_allocate_id(sizeof(phttpd_globals_struct), NULL, NULL);
+ SG(request_info).query_string = PHG(cip)->hip->request;
+ SG(request_info).request_method = PHG(cip)->hip->method;
+ SG(request_info).path_translated = malloc(MAXPATHLEN+1);
+ if (url_expand(PHG(cip)->hip->url, SG(request_info).path_translated, MAXPATHLEN, &PHG(sb), NULL, NULL) == NULL) {
+ /* handle error */
+ }
- return 0;
+#if 0
+ char *server;
+ Ns_DString ds;
+ char *root;
+ int index;
+ char *tmp;
+
+ server = Ns_ConnServer(NSG(conn));
+
+ Ns_DStringInit(&ds);
+ Ns_UrlToFile(&ds, server, NSG(conn->request->url));
+
+ /* path_translated is the absolute path to the file */
+ SG(request_info).path_translated = strdup(Ns_DStringValue(&ds));
+ Ns_DStringFree(&ds);
+ root = Ns_PageRoot(server);
+ SG(request_info).request_uri = SG(request_info).path_translated + strlen(root);
+ SG(request_info).content_length = Ns_ConnContentLength(NSG(conn));
+ index = Ns_SetIFind(NSG(conn)->headers, "content-type");
+ SG(request_info).content_type = index == -1 ? NULL :
+ Ns_SetValue(NSG(conn)->headers, index);
+
+ tmp = Ns_ConnAuthUser(NSG(conn));
+ if(tmp) {
+ tmp = estrdup(tmp);
+ }
+ SG(request_info).auth_user = tmp;
+
+ tmp = Ns_ConnAuthPasswd(NSG(conn));
+ if(tmp) {
+ tmp = estrdup(tmp);
+ }
+ SG(request_info).auth_password = tmp;
+
+ NSG(data_avail) = SG(request_info).content_length;
+#endif
}
-void pm_exit(void)
+static void
+php_phttpd_request_dtor(PHLS_D SLS_DC)
{
- fprintf(stderr,"***pm_exit\n");
+ free(SG(request_info).path_translated);
}
-int php_doit(struct connectioninfo *cip)
+
+int php_doit(PHLS_D SLS_DC)
{
- char path[MAXPATHLEN];
struct stat sb;
zend_file_handle file_handle;
- struct httpinfo *hip = cip->hip;
+ struct httpinfo *hip = PHG(cip)->hip;
CLS_FETCH();
ELS_FETCH();
PLS_FETCH();
- SLS_FETCH();
- PHLS_FETCH();
-
- if (debug > 1) {
- fprintf(stderr, "*** php/php_doit() called ***\n");
- }
-
- if (url_expand(hip->url, path, sizeof(path), &sb, NULL, NULL) == NULL) {
- return -1;
- }
-
- PHG(cip) = cip;
-
- if (debug > 1) {
- fprintf(stderr, "*** php/php_request_startup for %s ***\n",path);
- }
-
- memset(&SG(request_info),0,sizeof(sapi_globals_struct)); /* pfusch! */
if (php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC) == FAILURE) {
return -1;
}
- if (debug > 1) {
- fprintf(stderr, "*** php/php_doit/script %s ***\n",path);
- }
-
file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = path;
+ file_handle.filename = SG(request_info).path_translated;
file_handle.free_filename = 0;
+/*
+ php_phttpd_hash_environment(PHLS_C CLS_CC ELS_CC PLS_CC SLS_CC);
+*/
php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC);
-
php_request_shutdown(NULL);
- return -1;
+ return SG(sapi_headers).http_response_code;
+}
+
+int pm_init(const char **argv)
+{
+ tsrm_startup(1, 1, 0);
+ reentrancy_startup();
+ sapi_startup(&sapi_module);
+ sapi_module.startup(&sapi_module);
+
+ ph_globals_id = ts_allocate_id(sizeof(phttpd_globals_struct), NULL, NULL);
+
+ return 0;
+}
+
+void pm_exit(void)
+{
+ fprintf(stderr,"***pm_exit\n");
}
int pm_request(struct connectioninfo *cip)
{
struct httpinfo *hip = cip->hip;
+ int status;
+ PHLS_FETCH();
+ SLS_FETCH();
if (strcasecmp(hip->method, "GET") == 0 ||
strcasecmp(hip->method, "HEAD") == 0 ||
strcasecmp(hip->method, "POST") == 0) {
- return php_doit(cip);
+ PHG(cip) = cip;
+
+ php_phttpd_request_ctor(PHLS_C SLS_CC);
+ status = php_doit(PHLS_C SLS_CC);
+ php_phttpd_request_dtor(PHLS_C SLS_CC);
+
+ return status;
} else {
return -2;
}