diff options
| -rw-r--r-- | sapi/servlet/Makefile.in | 3 | ||||
| -rw-r--r-- | sapi/servlet/formatter.java | 34 | ||||
| -rw-r--r-- | sapi/servlet/servlet.c | 29 | ||||
| -rw-r--r-- | sapi/servlet/servlet.dsp | 8 | ||||
| -rw-r--r-- | sapi/servlet/servlet.dsw | 59 | ||||
| -rw-r--r-- | sapi/servlet/servlet.java | 17 | ||||
| -rw-r--r-- | sapi/servlet/web.xml | 17 |
7 files changed, 153 insertions, 14 deletions
diff --git a/sapi/servlet/Makefile.in b/sapi/servlet/Makefile.in index 2fb9bc785f..bcb895253e 100644 --- a/sapi/servlet/Makefile.in +++ b/sapi/servlet/Makefile.in @@ -26,8 +26,9 @@ phpsrvlt.jar : servlet.java ../../ext/java/reflect.java javac net/php/reflect.java @test ! -f reflect.class || mv reflect.class net/php # bug in KJC javac javac -classpath .:$(SERVLET_CLASSPATH):$(JAVA_CLASSPATH) net/php/servlet.java + javac net/php/formatter.java @test ! -f servlet.class || mv servlet.class net/php # bug in KJC javac $(JAVA_JAR) phpsrvlt.jar net/php/*.class net/php/*.properties - @rm net/php/servlet.* net/php/reflect.* + @rm net/php/servlet.* net/php/reflect.* net/php/formatter.* @rmdir net/php @rmdir net diff --git a/sapi/servlet/formatter.java b/sapi/servlet/formatter.java new file mode 100644 index 0000000000..7e4605f70c --- /dev/null +++ b/sapi/servlet/formatter.java @@ -0,0 +1,34 @@ +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.0 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_0.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Sam Ruby (rubys@us.ibm.com) | + +----------------------------------------------------------------------+ +*/ + +package net.php; + +import javax.servlet.*; +import javax.servlet.http.*; + +public class formatter extends servlet { + + public void service(HttpServletRequest request, + HttpServletResponse response) + throws ServletException + { + display_source_mode = true; + super.service(request, response); + } + +} diff --git a/sapi/servlet/servlet.c b/sapi/servlet/servlet.c index 800e503eb6..abded32554 100644 --- a/sapi/servlet/servlet.c +++ b/sapi/servlet/servlet.c @@ -108,13 +108,11 @@ static zend_module_entry *additional_php_extensions[] = { void ThrowIOException (JNIEnv *jenv, char *msg) { jclass iox = (*jenv)->FindClass (jenv, "java/io/IOException"); (*jenv)->ThrowNew (jenv, iox, (msg?msg:"null") ); - printf("IOException: %s\n", msg); } void ThrowServletException (JNIEnv *jenv, char *msg) { jclass sx = (*jenv)->FindClass (jenv, "javax/servlet/ServletException"); (*jenv)->ThrowNew (jenv, sx, msg); - printf("ServletException: %s\n", msg); } /***************************************************************************/ @@ -138,7 +136,12 @@ static int sapi_servlet_ub_write(const char *str, uint str_length) jclass servletClass = (*jenv)->GetObjectClass(jenv, servlet); jmethodID write = (*jenv)->GetMethodID(jenv, servletClass, "write", "(Ljava/lang/String;)V"); - jstring arg=(*jenv)->NewStringUTF(jenv, str); + char *copy = malloc(str_length+1); + jstring arg; + memcpy(copy, str, str_length); + copy[str_length] = 0; + arg=(*jenv)->NewStringUTF(jenv, copy); + free(copy); (*jenv)->CallVoidMethod(jenv, servlet, write, arg); (*jenv)->DeleteLocalRef(jenv, arg); return str_length; @@ -315,7 +318,8 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send (JNIEnv *jenv, jobject self, jstring requestMethod, jstring queryString, jstring pathInfo, jstring pathTranslated, - jstring contentType, jint contentLength, jstring authUser) + jstring contentType, jint contentLength, + jstring authUser, jboolean display_source_mode) { zend_file_handle file_handle; @@ -376,12 +380,23 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send * Execute the request */ Java_net_php_reflect_setEnv(jenv, 0); - php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); + + if (display_source_mode) { + zend_syntax_highlighter_ini syntax_highlighter_ini; + + if (open_file_for_scanning(&file_handle CLS_CC)==SUCCESS) { + php_get_highlight_struct(&syntax_highlighter_ini); + sapi_send_headers(); + zend_highlight(&syntax_highlighter_ini); + } + } else { + php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); + php_header(); /* Make sure headers have been sent */ + } /* * Clean up */ - php_header(); /* Make sure headers have been sent */ FREESTRING(SG(request_info).request_method); FREESTRING(SG(request_info).query_string); @@ -392,6 +407,6 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send efree(SG(server_context)); SG(server_context)=0; - php_request_shutdown((void *) 0); + if (!display_source_mode) php_request_shutdown((void *) 0); } diff --git a/sapi/servlet/servlet.dsp b/sapi/servlet/servlet.dsp index 4fcaa3fbb0..7a1a56d588 100644 --- a/sapi/servlet/servlet.dsp +++ b/sapi/servlet/servlet.dsp @@ -181,8 +181,10 @@ InputPath=.\servlet.java echo library=phpsrvlt>net/php/reflect.properties
echo library=phpsrvlt>net/php/servlet.properties
$(JAVA_HOME)\bin\javac net\php\servlet.java
+ $(JAVA_HOME)\bin\javac net\php\formatter.java
$(JAVA_HOME)\bin\jar c0f $(OutDir)\phpsrvlt.jar net\php\*.class net\php\*.properties
erase net\php\servlet.*
+ erase net\php\formatter.*
erase net\php\reflect.*
rmdir net\php
rmdir net
@@ -204,8 +206,10 @@ InputPath=.\servlet.java echo library=phpsrvlt>net/php/reflect.properties
echo library=phpsrvlt>net/php/servlet.properties
$(JAVA_HOME)\bin\javac -g net\php\servlet.java
+ $(JAVA_HOME)\bin\javac -g net\php\formatter.java
$(JAVA_HOME)\bin\jar c0f $(OutDir)\phpsrvlt.jar net\php\*.class net\php\*.properties
erase net\php\servlet.*
+ erase net\php\formatter.*
erase net\php\reflect.*
rmdir net\php
rmdir net
@@ -227,8 +231,10 @@ InputPath=.\servlet.java echo library=phpsrvlt>net/php/reflect.properties
echo library=phpsrvlt>net/php/servlet.properties
$(JAVA_HOME)\bin\javac -g net\php\servlet.java
+ $(JAVA_HOME)\bin\javac -g net\php\formatter.java
$(JAVA_HOME)\bin\jar c0f $(OutDir)\phpsrvlt.jar net\php\*.class net\php\*.properties
erase net\php\servlet.*
+ erase net\php\formatter.*
erase net\php\reflect.*
rmdir net\php
rmdir net
@@ -250,8 +256,10 @@ InputPath=.\servlet.java echo library=phpsrvlt>net/php/reflect.properties
echo library=phpsrvlt>net/php/servlet.properties
$(JAVA_HOME)\bin\javac net\php\servlet.java
+ $(JAVA_HOME)\bin\javac net\php\formatter.java
$(JAVA_HOME)\bin\jar c0f $(OutDir)\phpsrvlt.jar net\php\*.class net\php\*.properties
erase net\php\servlet.*
+ erase net\php\formatter.*
erase net\php\reflect.*
rmdir net\php
rmdir net
diff --git a/sapi/servlet/servlet.dsw b/sapi/servlet/servlet.dsw new file mode 100644 index 0000000000..7d4500b51b --- /dev/null +++ b/sapi/servlet/servlet.dsw @@ -0,0 +1,59 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "php4dllts"=..\..\php4dllts.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "php4ts"=..\..\php4ts.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "servlet"=.\servlet.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name php4ts
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name php4dllts
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/sapi/servlet/servlet.java b/sapi/servlet/servlet.java index 71071072e4..97a71af71d 100644 --- a/sapi/servlet/servlet.java +++ b/sapi/servlet/servlet.java @@ -29,6 +29,10 @@ public class servlet extends HttpServlet { HttpServletResponse response; ServletInputStream stream; + static int startup_count = 0; + + protected boolean display_source_mode = false; + /******************************************************************/ /* native methods */ /******************************************************************/ @@ -38,7 +42,8 @@ public class servlet extends HttpServlet { native long define(String name); native void send(String requestMethod, String queryString, String pathInfo, String pathTranslated, - String contentType, int contentLength, String authUser); + String contentType, int contentLength, String authUser, + boolean display_source_mode); native void shutdown(); /******************************************************************/ @@ -65,7 +70,7 @@ public class servlet extends HttpServlet { void header(String data) { try { - if (data.startsWith("Content-Type: ")) { + if (data.startsWith("Content-type: ")) { response.setContentType(data.substring(data.indexOf(" ")+1)); } else if (data.startsWith("Location: ")) { response.sendRedirect(data.substring(data.indexOf(" ")+1)); @@ -96,8 +101,8 @@ public class servlet extends HttpServlet { /******************************************************************/ public void init(ServletConfig config) throws ServletException { - super.init(config); - startup(); + super.init(config); + if (0 == startup_count++) startup(); } public void service(HttpServletRequest request, @@ -113,7 +118,7 @@ public class servlet extends HttpServlet { send(request.getMethod(), request.getQueryString(), request.getPathInfo(), contextPath, request.getContentType(), request.getContentLength(), - request.getRemoteUser()); + request.getRemoteUser(), display_source_mode); try { if (stream != null) stream.close(); @@ -123,7 +128,7 @@ public class servlet extends HttpServlet { } public void destroy() { - shutdown(); + if (0 == --startup_count) shutdown(); super.destroy(); } diff --git a/sapi/servlet/web.xml b/sapi/servlet/web.xml index b6113aa332..9efa2fd091 100644 --- a/sapi/servlet/web.xml +++ b/sapi/servlet/web.xml @@ -21,4 +21,21 @@ *.php </url-pattern> </servlet-mapping> + + <servlet> + <servlet-name> + php-formatter + </servlet-name> + <servlet-class> + net.php.formatter + </servlet-class> + </servlet> + <servlet-mapping> + <servlet-name> + php-formatter + </servlet-name> + <url-pattern> + *.phps + </url-pattern> + </servlet-mapping> </web-app> |
