summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sapi/servlet/Makefile.in3
-rw-r--r--sapi/servlet/formatter.java34
-rw-r--r--sapi/servlet/servlet.c29
-rw-r--r--sapi/servlet/servlet.dsp8
-rw-r--r--sapi/servlet/servlet.dsw59
-rw-r--r--sapi/servlet/servlet.java17
-rw-r--r--sapi/servlet/web.xml17
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>