summaryrefslogtreecommitdiff
path: root/ext/dav
diff options
context:
space:
mode:
authorStig Bakken <ssb@php.net>1999-04-21 22:49:16 +0000
committerStig Bakken <ssb@php.net>1999-04-21 22:49:16 +0000
commitf67a9bdc52c39eed6837aef8a1eca195549b1469 (patch)
tree0a7be5c5b405910f4d616df0d9bed82196d3c966 /ext/dav
parent96660d9a8ce06f12f186d0e3bb5697ce747182a5 (diff)
downloadphp-git-f67a9bdc52c39eed6837aef8a1eca195549b1469.tar.gz
moved dav, msql and oracle to ext/
Diffstat (limited to 'ext/dav')
-rw-r--r--ext/dav/Makefile.am6
-rw-r--r--ext/dav/config.h.stub2
-rw-r--r--ext/dav/config.m429
-rw-r--r--ext/dav/dav.c300
-rw-r--r--ext/dav/php3_dav.h63
-rw-r--r--ext/dav/setup.stub2
6 files changed, 402 insertions, 0 deletions
diff --git a/ext/dav/Makefile.am b/ext/dav/Makefile.am
new file mode 100644
index 0000000000..58f9fe1009
--- /dev/null
+++ b/ext/dav/Makefile.am
@@ -0,0 +1,6 @@
+# $Id$
+
+INCLUDES=@INCLUDES@ -I@top_srcdir@ -I@top_srcdir@/libzend
+noinst_LIBRARIES=libphpext_dav.a
+libphpext_dav_a_SOURCES=dav.c
+
diff --git a/ext/dav/config.h.stub b/ext/dav/config.h.stub
new file mode 100644
index 0000000000..90a0bc1de4
--- /dev/null
+++ b/ext/dav/config.h.stub
@@ -0,0 +1,2 @@
+/* Define to compile with mod_dav support */
+#define HAVE_MOD_DAV 0
diff --git a/ext/dav/config.m4 b/ext/dav/config.m4
new file mode 100644
index 0000000000..c2b83adbc7
--- /dev/null
+++ b/ext/dav/config.m4
@@ -0,0 +1,29 @@
+dnl $Id$
+dnl config.m4 for extension dav
+dnl don't forget to call PHP_EXTENSION(dav)
+
+AC_MSG_CHECKING(whether to enable DAV support through mod_dav)
+AC_ARG_WITH(mod-dav,
+[ --with-mod-dav=DIR Include DAV support through Apache's mod_dav,
+ DIR is mod_dav's installation directory (Apache
+ module version only!)],
+[
+ if test "$withval" = "yes"; then
+ AC_MSG_ERROR(Must give parameter to --with-mod-dav!)
+ else
+ if test "$withval" != "no"; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MOD_DAV, 1)
+ CFLAGS="$CFLAGS -DHAVE_MOD_DAV -I$withval"
+ INCLUDES="$INCLUDES -I$withval"
+ PHP_EXTENSION(dav)
+ else
+ AC_MSG_RESULT(no)
+ AC_DEFINE(HAVE_MOD_DAV, 0)
+ fi
+ fi
+],[
+ AC_MSG_RESULT(no)
+ AC_DEFINE(HAVE_MOD_DAV, 0)
+])
+
diff --git a/ext/dav/dav.c b/ext/dav/dav.c
new file mode 100644
index 0000000000..967b1a6757
--- /dev/null
+++ b/ext/dav/dav.c
@@ -0,0 +1,300 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP HTML Embedded Scripting Language Version 3.0 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997,1998 PHP Development Team (See Credits file) |
+ +----------------------------------------------------------------------+
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of one of the following licenses: |
+ | |
+ | A) the GNU General Public License as published by the Free Software |
+ | Foundation; either version 2 of the License, or (at your option) |
+ | any later version. |
+ | |
+ | B) the PHP License as published by the PHP Development Team and |
+ | included in the distribution in the file: LICENSE |
+ | |
+ | This program is distributed in the hope that it will be useful, |
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ | GNU General Public License for more details. |
+ | |
+ | You should have received a copy of both licenses referred to here. |
+ | If you did not, or have any questions about PHP licensing, please |
+ | contact core@php.net. |
+ +----------------------------------------------------------------------+
+ | Authors: Stig Sæther Bakken <ssb@guardian.no> |
+ +----------------------------------------------------------------------+
+ */
+
+/* $Id$ */
+
+#define IS_EXT_MODULE
+#if COMPILE_DL
+# if PHP_31
+# include "../phpdl.h"
+# else
+# include "dl/phpdl.h"
+# endif
+#endif
+#include "php.h"
+#include "php3_dav.h"
+
+#if defined(THREAD_SAFE) && !PHP_31
+# undef THREAD_SAFE
+#endif
+
+#if HAVE_MOD_DAV
+
+# include "mod_dav.h"
+# include "phpdav.h"
+# include "variables.h"
+
+/* {{{ thread safety stuff */
+
+# ifdef THREAD_SAFE
+# define DAV_GLOBAL(a) phpdav_globals->a
+# define DAV_TLS_VARS phpdav_global_struct *phpdav_globals = TlsGetValue(PHPDAVTls);
+
+void *phpdav_mutex;
+DWORD PHPDAVTls;
+static int numthreads=0;
+
+typedef struct phpdav_global_struct {
+ phpdav_module php3_dav_module;
+} phpdav_global_struct;
+
+# else /* !defined(THREAD_SAFE) */
+# define DAV_GLOBAL(a) a
+# define DAV_TLS_VARS
+
+phpdav_module php3_dav_module;
+
+# endif /* defined(THREAD_SAFE) */
+
+# define DAV_HANDLER(a) DAV_GLOBAL(php3_dav_module).a##_handler
+# define DAV_SET_HANDLER(a,b) \
+ dav_set_handler(&DAV_GLOBAL(php3_dav_module).a##_handler,(b))
+
+
+/* }}} */
+/* {{{ dynamically loadable module stuff */
+
+# if COMPILE_DL
+DLEXPORT php3_module_entry *get_module() { return &phpdav_module_entry; };
+# endif /* COMPILE_DL */
+
+/* }}} */
+/* {{{ function prototypes */
+
+int php3_minit_phpdav(INIT_FUNC_ARGS);
+int php3_rinit_phpdav(INIT_FUNC_ARGS);
+int php3_mshutdown_phpdav(SHUTDOWN_FUNC_ARGS);
+int php3_rshutdown_phpdav(SHUTDOWN_FUNC_ARGS);
+void php3_info_phpdav(void);
+
+/* }}} */
+/* {{{ extension definition structures */
+
+function_entry phpdav_functions[] = {
+ PHP_FE(dav_set_mkcol_handlers, NULL)
+ {NULL, NULL, NULL}
+};
+
+php3_module_entry phpdav_module_entry = {
+ "DAV", /* extension name */
+ phpdav_functions, /* extension function list */
+ php3_minit_phpdav, /* extension-wide startup function */
+ php3_mshutdown_phpdav, /* extension-wide shutdown function */
+ php3_rinit_phpdav, /* per-request startup function */
+ php3_rshutdown_phpdav, /* per-request shutdown function */
+ php3_info_phpdav, /* information function */
+ STANDARD_MODULE_PROPERTIES
+};
+
+/* }}} */
+/* {{{ startup, shutdown and info functions */
+
+ /* {{{ php3_minit_phpdav */
+
+int php3_minit_phpdav(INIT_FUNC_ARGS)
+{
+#if defined(THREAD_SAFE)
+ phpdav_global_struct *phpdav_globals;
+ PHP3_MUTEX_ALLOC(phpdav_mutex);
+ PHP3_MUTEX_LOCK(phpdav_mutex);
+ numthreads++;
+ if (numthreads==1){
+ if (!PHP3_TLS_PROC_STARTUP(PHPDAVTls)){
+ PHP3_MUTEX_UNLOCK(phpdav_mutex);
+ PHP3_MUTEX_FREE(phpdav_mutex);
+ return FAILURE;
+ }
+ }
+ PHP3_MUTEX_UNLOCK(phdpav_mutex);
+ if(!PHP3_TLS_THREAD_INIT(PHPDAVTls,phpdav_globals,phpdav_global_struct)){
+ PHP3_MUTEX_FREE(phpdav_mutex);
+ return FAILURE;
+ }
+#endif
+ return SUCCESS;
+}
+
+/* }}} */
+ /* {{{ php3_rinit_phpdav */
+
+int php3_rinit_phpdav(INIT_FUNC_ARGS)
+{
+ return SUCCESS;
+}
+
+/* }}} */
+ /* {{{ php3_mshutdown_phpdav() */
+
+int php3_mshutdown_phpdav(SHUTDOWN_FUNC_ARGS)
+{
+ DAV_TLS_VARS;
+#ifdef THREAD_SAFE
+ PHP3_TLS_THREAD_FREE(phpdav_globals);
+ PHP3_MUTEX_LOCK(phpdav_mutex);
+ numthreads--;
+ if (numthreads < 1) {
+ PHP3_TLS_PROC_SHUTDOWN(PHPDAVTls);
+ PHP3_MUTEX_UNLOCK(phpdav_mutex);
+ PHP3_MUTEX_FREE(phpdav_mutex);
+ return SUCCESS;
+ }
+ PHP3_MUTEX_UNLOCK(phpdav_mutex);
+#endif
+ return SUCCESS;
+}
+
+/* }}} */
+ /* {{{ php3_rshutdown_phpdav() */
+
+int php3_rshutdown_phpdav(SHUTDOWN_FUNC_ARGS)
+{
+ if (DAV_HANDLER(mkcol_test)) {
+ efree(DAV_HANDLER(mkcol_test));
+ }
+ if (DAV_HANDLER(mkcol_create)) {
+ efree(DAV_HANDLER(mkcol_create));
+ }
+ return SUCCESS;
+}
+
+/* }}} */
+ /* {{{ php3_info_phpdav() */
+
+void php3_info_phpdav()
+{
+}
+
+/* }}} */
+
+/* }}} */
+/* {{{ extension-internal functions */
+
+ /* {{{ dav_set_handler() */
+
+static void
+dav_set_handler(char **nameBufp, pval *data)
+{
+ if (data->value.str.len > 0) {
+ if (*nameBufp != NULL) {
+ efree(*nameBufp);
+ }
+ *nameBufp = php3i_pval_strdup(data);
+ } else {
+ if (*nameBufp != NULL) {
+ efree(*nameBufp);
+ }
+ *nameBufp = NULL;
+ }
+}
+
+/* }}} */
+ /* {{{ dav_call_handler() */
+
+static int
+dav_call_handler(char *funcName, int argc, pval **argv)
+{
+ if (funcName) {
+ pval *retval, *func;
+ int i, ret;
+ HashTable *function_table;
+
+ func = php3i_string_pval(funcName);
+ retval = emalloc(sizeof(pval));
+ function_table = php3i_get_function_table();
+ if (call_user_function(function_table, NULL, func, retval, argc, argv) == FAILURE) {
+ php3tls_pval_destructor(retval);
+ efree(retval);
+ return HTTP_INTERNAL_SERVER_ERROR;
+ }
+ php3tls_pval_destructor(func);
+ efree(func);
+ for (i = 0; i < argc; i++) {
+ php3tls_pval_destructor(argv[i]);
+ efree(argv[i]);
+ }
+ convert_to_long(retval);
+ ret = retval->value.lval;
+ efree(retval);
+ return ret;
+ }
+ return DECLINED;
+}
+
+/* }}} */
+
+int phpdav_mkcol_test_handler(request_rec *r)
+{
+ pval *arg;
+
+ if (DAV_HANDLER(mkcol_test) == NULL) {
+ return DECLINED;
+ }
+ arg = php3i_string_pval(r->filename);
+ return dav_call_handler(DAV_HANDLER(mkcol_test), 1, &arg);
+}
+
+int phpdav_mkcol_create_handler(request_rec *r)
+{
+ pval *arg;
+
+ if (DAV_HANDLER(mkcol_create) == NULL) {
+ return DECLINED;
+ }
+ arg = php3i_string_pval(r->filename);
+ return dav_call_handler(DAV_HANDLER(mkcol_create), 1, &arg);
+}
+
+/* }}} */
+
+/************************* EXTENSION FUNCTIONS *************************/
+
+/* {{{ proto void dav_set_mkcol_handlers(string test, string create)
+ Sets the function to test whether a DAV collection exists for MKCOL */
+PHP_FUNCTION(dav_set_mkcol_handlers)
+{
+ pval *test, *create;
+ DAV_TLS_VARS;
+
+ if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &test, &create) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+ DAV_SET_HANDLER(mkcol_test, test);
+ DAV_SET_HANDLER(mkcol_create, create);
+ RETVAL_TRUE;
+}
+/* }}} */
+
+#endif
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/ext/dav/php3_dav.h b/ext/dav/php3_dav.h
new file mode 100644
index 0000000000..a66525331d
--- /dev/null
+++ b/ext/dav/php3_dav.h
@@ -0,0 +1,63 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP HTML Embedded Scripting Language Version 3.0 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997,1998 PHP Development Team (See Credits file) |
+ +----------------------------------------------------------------------+
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of one of the following licenses: |
+ | |
+ | A) the GNU General Public License as published by the Free Software |
+ | Foundation; either version 2 of the License, or (at your option) |
+ | any later version. |
+ | |
+ | B) the PHP License as published by the PHP Development Team and |
+ | included in the distribution in the file: LICENSE |
+ | |
+ | This program is distributed in the hope that it will be useful, |
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ | GNU General Public License for more details. |
+ | |
+ | You should have received a copy of both licenses referred to here. |
+ | If you did not, or have any questions about PHP licensing, please |
+ | contact core@php.net. |
+ +----------------------------------------------------------------------+
+ | Authors: Stig Sæther Bakken <ssb@guardian.no> |
+ +----------------------------------------------------------------------+
+ */
+
+/* $Id */
+
+#ifndef _PHP_DAV_H
+# define _PHP_DAV_H
+
+# if HAVE_MOD_DAV
+
+typedef struct {
+ int foo;
+ char *mkcol_test_handler;
+ char *mkcol_create_handler;
+} phpdav_module;
+
+extern php3_module_entry phpdav_module_entry;
+# define phpdav_module_ptr &phpdav_module_entry
+
+int phpdav_mkcol_test_handler(request_rec *);
+
+PHP_FUNCTION(dav_set_mkcol_handlers);
+
+# else /* !HAVE_MOD_DAV */
+
+# define phpdav_module_ptr NULL
+
+# endif /* HAVE_MOD_DAV */
+
+#endif /* _PHP_DAV_H */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/ext/dav/setup.stub b/ext/dav/setup.stub
new file mode 100644
index 0000000000..881144c1ca
--- /dev/null
+++ b/ext/dav/setup.stub
@@ -0,0 +1,2 @@
+# $Id$
+# This extension is still very much under construction.