You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by an...@apache.org on 2003/11/13 18:11:36 UTC

cvs commit: jakarta-tomcat-connectors/jk/native2/server/dsapi/test test.dsp test.c printf_logger.c

andya       2003/11/13 09:11:36

  Added:       jk/native2/server/dsapi/test test.dsp test.c printf_logger.c
  Log:
  First release of JK2 Domino redirector. Barely tested.
  
  Revision  Changes    Path
  1.1                  jakarta-tomcat-connectors/jk/native2/server/dsapi/test/test.dsp
  
  Index: test.dsp
  ===================================================================
  # Microsoft Developer Studio Project File - Name="test" - Package Owner=<4>
  # Microsoft Developer Studio Generated Build File, Format Version 6.00
  # ** DO NOT EDIT **
  
  # TARGTYPE "Win32 (x86) Console Application" 0x0103
  
  CFG=test - Win32 Debug
  !MESSAGE This is not a valid makefile. To build this project using NMAKE,
  !MESSAGE use the Export Makefile command and run
  !MESSAGE 
  !MESSAGE NMAKE /f "test.mak".
  !MESSAGE 
  !MESSAGE You can specify a configuration when running NMAKE
  !MESSAGE by defining the macro CFG on the command line. For example:
  !MESSAGE 
  !MESSAGE NMAKE /f "test.mak" CFG="test - Win32 Debug"
  !MESSAGE 
  !MESSAGE Possible choices for configuration are:
  !MESSAGE 
  !MESSAGE "test - Win32 Release" (based on "Win32 (x86) Console Application")
  !MESSAGE "test - Win32 Debug" (based on "Win32 (x86) Console Application")
  !MESSAGE 
  
  # Begin Project
  # PROP AllowPerConfigDependencies 0
  # PROP Scc_ProjName ""
  # PROP Scc_LocalPath ""
  CPP=cl.exe
  RSC=rc.exe
  
  !IF  "$(CFG)" == "test - Win32 Release"
  
  # PROP BASE Use_MFC 0
  # PROP BASE Use_Debug_Libraries 0
  # PROP BASE Output_Dir "Release"
  # PROP BASE Intermediate_Dir "Release"
  # PROP BASE Target_Dir ""
  # PROP Use_MFC 0
  # PROP Use_Debug_Libraries 0
  # PROP Output_Dir "Release"
  # PROP Intermediate_Dir "Release"
  # PROP Ignore_Export_Lib 0
  # PROP Target_Dir ""
  # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
  # ADD CPP /nologo /W3 /GX /O2 /I ".." /I "..\..\..\include" /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /I "..\..\..\..\..\..\apr\include" /I "..\..\..\..\..\..\apr-util\include" /I "..\..\..\..\..\..\pcre\include" /I "$(NOTESAPI)\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_USRDLL" /D "HAVE_JNI" /D "HAS_APR" /D "HAS_PCRE" /D "NT" /D "TESTING" /U "NOUSER" /FD /c
  # SUBTRACT CPP /YX
  # ADD BASE RSC /l 0x809 /d "NDEBUG"
  # ADD RSC /l 0x809 /d "NDEBUG"
  BSC32=bscmake.exe
  # ADD BASE BSC32 /nologo
  # ADD BSC32 /nologo
  LINK32=link.exe
  # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
  # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libapr.lib libaprutil.lib ws2_32.lib wsock32.lib pcre.lib pcreposix.lib notes.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\..\..\apr\Release" /libpath:"..\..\..\..\..\..\pcre\lib" /libpath:"..\..\..\..\..\..\apr-util\Release" /libpath:"$(NOTESAPI)\lib\mswin32"
  
  !ELSEIF  "$(CFG)" == "test - Win32 Debug"
  
  # PROP BASE Use_MFC 0
  # PROP BASE Use_Debug_Libraries 1
  # PROP BASE Output_Dir "Debug"
  # PROP BASE Intermediate_Dir "Debug"
  # PROP BASE Target_Dir ""
  # PROP Use_MFC 0
  # PROP Use_Debug_Libraries 1
  # PROP Output_Dir "Debug"
  # PROP Intermediate_Dir "Debug"
  # PROP Ignore_Export_Lib 0
  # PROP Target_Dir ""
  # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
  # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I ".." /I "..\..\..\include" /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /I "..\..\..\..\..\..\apr\include" /I "..\..\..\..\..\..\apr-util\include" /I "..\..\..\..\..\..\pcre\include" /I "$(NOTESAPI)\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_USRDLL" /D "HAVE_JNI" /D "HAS_APR" /D "HAS_PCRE" /D "NT" /D "TESTING" /D "NO_CAPI" /U "NOUSER" /FR /FD /GZ /c
  # SUBTRACT CPP /YX
  # ADD BASE RSC /l 0x809 /d "_DEBUG"
  # ADD RSC /l 0x809 /d "_DEBUG"
  BSC32=bscmake.exe
  # ADD BASE BSC32 /nologo
  # ADD BSC32 /nologo
  LINK32=link.exe
  # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
  # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libapr.lib libaprutil.lib ws2_32.lib wsock32.lib pcre.lib pcreposix.lib notes.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\..\apr\Release" /libpath:"..\..\..\..\..\..\pcre\lib" /libpath:"..\..\..\..\..\..\apr-util\Release" /libpath:"$(NOTESAPI)\lib\mswin32"
  
  !ENDIF 
  
  # Begin Target
  
  # Name "test - Win32 Release"
  # Name "test - Win32 Debug"
  # Begin Group "Source Files"
  
  # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
  # Begin Group "JK2 Common Source"
  
  # PROP Default_Filter ""
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_channel.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_channel_apr_socket.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_channel_jni.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_channel_un.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_config.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_config_file.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_endpoint.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_env.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_handler_logon.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_handler_response.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\jni\jk_jni_aprImpl.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_logger_file.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_logger_win32.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_map.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_md5.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_msg_ajp.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_mutex.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_mutex_proc.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_mutex_thread.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_nwmain.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_objCache.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_pool_apr.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_registry.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_requtil.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_shm.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_signal.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_uriEnv.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_uriMap.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_user.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_vm_default.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_worker_ajp13.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_worker_jni.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_worker_lb.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_worker_run.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_worker_status.c
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_workerEnv.c
  # End Source File
  # End Group
  # Begin Group "DSAPI Source"
  
  # PROP Default_Filter ""
  # Begin Source File
  
  SOURCE=..\jk_dsapi_plugin.c
  # End Source File
  # End Group
  # Begin Source File
  
  SOURCE=.\printf_logger.c
  # End Source File
  # Begin Source File
  
  SOURCE=.\test.c
  # End Source File
  # End Group
  # Begin Group "Header Files"
  
  # PROP Default_Filter "h;hpp;hxx;hm;inl"
  # Begin Group "JK2 Common Headers"
  
  # PROP Default_Filter ""
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_channel.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_config.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_endpoint.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_env.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_global.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_handler.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_logger.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_logger_win32_message.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_map.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_md5.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_msg.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_objCache.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_pool.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_registry.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_requtil.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_service.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_shm.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_uriEnv.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_uriMap.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_vm.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_worker.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\include\jk_workerEnv.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\jni\org_apache_jk_apr_AprImpl.h
  # End Source File
  # End Group
  # Begin Group "DSAPI Headers"
  
  # PROP Default_Filter ""
  # Begin Source File
  
  SOURCE=..\config.h
  # End Source File
  # Begin Source File
  
  SOURCE=..\dsapifilter.h
  # End Source File
  # End Group
  # End Group
  # Begin Group "Resource Files"
  
  # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_logger_win32_message.mc
  # End Source File
  # Begin Source File
  
  SOURCE=..\..\..\common\jk_logger_win32_message.rc
  # End Source File
  # End Group
  # End Target
  # End Project
  
  
  
  1.1                  jakarta-tomcat-connectors/jk/native2/server/dsapi/test/test.c
  
  Index: test.c
  ===================================================================
  /* test.c */
  
  #include <stdio.h>
  #include <string.h>	
  #include <stdlib.h>
  
  #include "config.h"
  #include "dsapifilter.h"
  
  unsigned int FilterInit(FilterInitData *filterInitData);
  unsigned int TerminateFilter(unsigned int reserved);
  unsigned int HttpFilterProc(FilterContext *context, unsigned int eventType, void *eventData);
  void TestMain(void);
  
  #define SERVER		"localhost"
  #define PORT		"80"
  #define URI			"/examples/jsp/num/numguess.jsp"
  #define VERSION		"1.1"
  
  typedef struct _ServerContext {
  
  	char *rq;
  	char *hdrs;
  
  } ServerContext;
  
  /* FilterContext functions */
  static int fcGetRequest(struct _FilterContext *context, FilterRequest *fr,
  						unsigned int *errID) {
  	printf("fc.GetRequest(%p, %p, %p)\n", context, fr, errID);
  	
  	fr->method			= kRequestGET;
  	fr->URL				= URI;
  	fr->version			= VERSION;
  	fr->userName		= NULL;
  	fr->password		= NULL;
  	fr->clientCert		= NULL;
  	fr->clientCertLen	= 0;
  	fr->contentRead		= NULL;
  	fr->contentReadLen	= 0;
  
  	return 1;
  }
  
  static int fcGetRequestContents(struct _FilterContext *context, char **contents,
  								unsigned int *errID) {
  	ServerContext *sc = (ServerContext *) context->serverContext;
  
  	printf("fc.GetRequestContents(%p, %p, %p)\n", context, contents, errID);
  
  	*contents = sc->rq;
  	return strlen(sc->rq) + 1;
  }
  
  static int fcGetServerVariable(struct _FilterContext *context, char *name, void *buffer,
  								unsigned int bufferSize, unsigned int *errID) {
  	printf("fc.GetServerVariable(%p, \"%s\", %p, %u, %p)\n", context, name, buffer, bufferSize, errID);
  
  	if (strcmp(name, "SERVER_NAME") == 0) {
  		strcpy((char *) buffer, SERVER);
  	} else if (strcmp(name, "SERVER_PORT") == 0) {
  		strcpy((char *) buffer, PORT);
  	} else if (strcmp(name, "SERVER_PROTOCOL") == 0) {
  		strcpy((char *) buffer, "HTTP/" VERSION);
  	} else if (strcmp(name, "REMOTE_ADDR") == 0) {
  		strcpy((char *) buffer, "127.0.0.1");
  	} else if (strcmp(name, "SERVER_SOFTWARE") == 0) {
  		strcpy((char *) buffer, "TestHarness 1.0");
  	} else {
  		return 0;
  	}
  
  	return 1;
  }
  
  static int fcWriteClient(struct _FilterContext * context, char *buffer, unsigned int bufferLen,
  							unsigned int reserved, unsigned int *errID) {
  	/* printf("fc.WriteClient(%p, %p, %u, %u, %p)\n", context, buffer, bufferLen, reserved, errID); */
  
  	while (bufferLen > 0) {
  		fputc(*buffer++, stdout);
  		bufferLen--;
  	}
  	
  	return 1;
  }
  
  static void *fcAllocMem(struct _FilterContext *context, unsigned int size,
  						unsigned int reserved, unsigned int *errID) {
  	printf("fc.AllocMem(%p, %d, %d, %p)\n", context, size, reserved, errID);
  	return malloc(size);
  }
  
  static int fcServerSupport(struct _FilterContext *context, unsigned int funcType, void *data1,
  							void *data2, unsigned int other, unsigned int *errID) {
  	if (funcType == kWriteResponseHeaders) {
  		FilterResponseHeaders *frh = (FilterResponseHeaders *) data1;
  		printf("%d %s\n%s\n", frh->responseCode, frh->reasonText, frh->headerText);
  		return 1;
  	} else {
  		printf("fc.ServerSupport(%p, %u, %p, %p, %u, %p)\n", context, funcType, data1, data2, other, errID);
  		return 0;
  	}
  	
  }
  
  static int fprGetAllHeaders(FilterContext *context, char **headers, unsigned int *errID) {
  	ServerContext *sc = (ServerContext *) context->serverContext;
  	printf("fpr.GetAllHeaders(%p, %p, %p)\n", context, headers, errID);
  
  	*headers = sc->hdrs;
  	return strlen(sc->hdrs) + 1;
  }
  
  static int fprGetHeader(FilterContext *context, char *name, char *buffer,
  						unsigned int bufferSize, unsigned int *errID) {
  	printf("fpr.GetHeader(%p, \"%s\", %p, %u, %p)\n", context, name, buffer, bufferSize, errID);
  	return 0;
  }
  
  static void SendRequest(void) {
  	FilterContext		fc;
  	FilterParsedRequest fpr;
  	ServerContext		sc;
  	int					rc;
  
  	sc.rq =		"GET " URI " HTTP/" VERSION;
  	sc.hdrs =	"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\n"
  				"Accept-Language: en-us\n"
  				"User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)\n"
  				"Host: " SERVER "\n"
  				"Content-length: 0\n";
  				"Connection: Keep-Alive\n";
  
  	fc.contextSize			= sizeof(fc);
  	fc.revision				= 0;			/* or whatever */
  	fc.serverContext		= &sc;
  	fc.serverReserved		= 0;
  	fc.securePort			= 443;
  	fc.privateContext		= NULL;
  
  	fc.GetRequest			= fcGetRequest;
  	fc.GetRequestContents	= fcGetRequestContents;
  	fc.GetServerVariable	= fcGetServerVariable;
  	fc.WriteClient			= fcWriteClient;
  	fc.AllocMem				= fcAllocMem;
  	fc.ServerSupport		= fcServerSupport;
  
  	fpr.requestMethod		= kRequestGET;
  	fpr.GetAllHeaders		= fprGetAllHeaders;
  	fpr.GetHeader			= fprGetHeader;
  	fpr.reserved			= 0;
  
  	rc = HttpFilterProc(&fc, kFilterParsedRequest, &fpr);
  }
  
  int main(void) {
  	FilterInitData init;
  	int rc;
  
  	TestMain();
  
  	memset(&init, 0, sizeof(init));
  	rc = FilterInit(&init);
  
  	SendRequest();
  
  	rc = TerminateFilter(0);
  
  	return 0;
  }
  
  
  
  1.1                  jakarta-tomcat-connectors/jk/native2/server/dsapi/test/printf_logger.c
  
  Index: printf_logger.c
  ===================================================================
  /* ========================================================================= *
   *                                                                           *
   *                 The Apache Software License,  Version 1.1                 *
   *                                                                           *
   *          Copyright (c) 1999-2003 The Apache Software Foundation.          *
   *                           All rights reserved.                            *
   *                                                                           *
   * ========================================================================= *
   *                                                                           *
   * Redistribution and use in source and binary forms,  with or without modi- *
   * fication, are permitted provided that the following conditions are met:   *
   *                                                                           *
   * 1. Redistributions of source code  must retain the above copyright notice *
   *    notice, this list of conditions and the following disclaimer.          *
   *                                                                           *
   * 2. Redistributions  in binary  form  must  reproduce the  above copyright *
   *    notice,  this list of conditions  and the following  disclaimer in the *
   *    documentation and/or other materials provided with the distribution.   *
   *                                                                           *
   * 3. The end-user documentation  included with the redistribution,  if any, *
   *    must include the following acknowlegement:                             *
   *                                                                           *
   *       "This product includes  software developed  by the Apache  Software *
   *        Foundation <http://www.apache.org/>."                              *
   *                                                                           *
   *    Alternately, this acknowlegement may appear in the software itself, if *
   *    and wherever such third-party acknowlegements normally appear.         *
   *                                                                           *
   * 4. The names  "The  Jakarta  Project",  "Jk",  and  "Apache  Software     *
   *    Foundation"  must not be used  to endorse or promote  products derived *
   *    from this  software without  prior  written  permission.  For  written *
   *    permission, please contact <ap...@apache.org>.                        *
   *                                                                           *
   * 5. Products derived from this software may not be called "Apache" nor may *
   *    "Apache" appear in their names without prior written permission of the *
   *    Apache Software Foundation.                                            *
   *                                                                           *
   * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES *
   * INCLUDING, BUT NOT LIMITED TO,  THE IMPLIED WARRANTIES OF MERCHANTABILITY *
   * AND FITNESS FOR  A PARTICULAR PURPOSE  ARE DISCLAIMED.  IN NO EVENT SHALL *
   * THE APACHE  SOFTWARE  FOUNDATION OR  ITS CONTRIBUTORS  BE LIABLE  FOR ANY *
   * DIRECT,  INDIRECT,   INCIDENTAL,  SPECIAL,  EXEMPLARY,  OR  CONSEQUENTIAL *
   * DAMAGES (INCLUDING,  BUT NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE GOODS *
   * OR SERVICES;  LOSS OF USE,  DATA,  OR PROFITS;  OR BUSINESS INTERRUPTION) *
   * HOWEVER CAUSED AND  ON ANY  THEORY  OF  LIABILITY,  WHETHER IN  CONTRACT, *
   * STRICT LIABILITY, OR TORT  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN *
   * ANY  WAY  OUT OF  THE  USE OF  THIS  SOFTWARE,  EVEN  IF  ADVISED  OF THE *
   * POSSIBILITY OF SUCH DAMAGE.                                               *
   *                                                                           *
   * ========================================================================= *
   *                                                                           *
   * This software  consists of voluntary  contributions made  by many indivi- *
   * duals on behalf of the  Apache Software Foundation.  For more information *
   * on the Apache Software Foundation, please see <http://www.apache.org/>.   *
   *                                                                           *
   * ========================================================================= */
  
  /***************************************************************************
   * Description: Utility functions (mainly configuration)                   *
   * Author:      Gal Shachor <sh...@il.ibm.com>                           *
   * Author:      Henri Gomez <hg...@apache.org>                            *
   * Version:     $Revision: 1.1 $                                          *
   ***************************************************************************/
  
  
  #include "jk_env.h"
  #include "jk_map.h"
  #include "jk_logger.h"
  #include <stdio.h>
  #include <fcntl.h>
  
  #define LOG_FORMAT          ("log_format")
  
  #define HUGE_BUFFER_SIZE (8*1024)
  #define LOG_LINE_SIZE    (1024)
  
  
  /* 
   * define the log format, we're using by default the one from error.log 
   *
   * [Mon Mar 26 19:44:48 2001] [jk_uri_worker_map.c (155)]: Into jk_uri_worker_map_t::uri_worker_map_alloc
   * log format used by apache in error.log
   */
  #ifndef JK_TIME_FORMAT 
  #define JK_TIME_FORMAT "[%a %b %d %H:%M:%S %Y] "
  #endif
  
  static const char * jk2_logger_printf_logFmt = JK_TIME_FORMAT;
  
  static void jk2_logger_printf_setTimeStr(jk_env_t *env, char *str, int len)
  {
      apr_time_exp_t gmt;
      apr_size_t     l;
  
      apr_time_exp_gmt(&gmt, apr_time_now());
      apr_strftime(str, &l, len, jk2_logger_printf_logFmt, &gmt);
  }
  
  static int JK_METHOD jk2_logger_printf_log(jk_env_t *env, jk_logger_t *l,                                 
                                 int level,
                                 const char *what) {
  
      if (what != NULL) {
          fprintf(stderr, "%s", what);
  	}
  
      return JK_OK;
  }
  
  int jk2_logger_printf_parseLogLevel(jk_env_t *env, const char *level)
  {
      if (!level)
          return JK_LOG_INFO_LEVEL;
      
      if (!strcasecmp(level, JK_LOG_INFO_VERB))
          return JK_LOG_INFO_LEVEL;
  
      if (!strcasecmp(level, JK_LOG_ERROR_VERB))
          return JK_LOG_ERROR_LEVEL;
  
      if (!strcasecmp(level, JK_LOG_EMERG_VERB))
          return JK_LOG_EMERG_LEVEL;
  
      return JK_LOG_DEBUG_LEVEL;
  }
  
  static int JK_METHOD jk2_logger_printf_init(jk_env_t *env, jk_logger_t *_this )
  {
      return JK_OK;
  }
  
  static int jk2_logger_printf_close(jk_env_t *env,jk_logger_t *_this)
  {
  	fflush(stderr);
      return JK_OK;
  }
  
  static int JK_METHOD
  jk2_logger_printf_setProperty(jk_env_t *env, jk_bean_t *mbean, 
                              char *name,  void *valueP )
  {
  #if 0
      jk_logger_t *_this = mbean->object;
      char *value = valueP;
      if (!strcmp(name, "name"))
          _this->name = (char *)value;
      else if (!strcmp(name, "file")) {
          _this->name = (char *)value;
          /* Set the file imediately */
          jk2_logger_printf_init(env, (jk_logger_t *)mbean->object);
      } 
      else if (!strcmp(name, "timeFormat"))
          jk2_logger_printf_logFmt = value;
      else if (!strcmp(name, "level")) {
          _this->level = jk2_logger_printf_parseLogLevel(env, value);
          if( _this->level == 0) {
              _this->jkLog(env, _this, JK_LOG_INFO,
                           "Level %s %d \n", value, _this->level);
          }
      }
  #endif
      return JK_OK;
  }
  
  static int JK_METHOD jk2_logger_printf_jkVLog(jk_env_t *env, jk_logger_t *l,
                                    const char *file,
                                    int line,
                                    int level,
                                    const char *fmt,
                                    va_list args)
  {
      int rc = 0;
      char *buf;
      char *fmt1;
      apr_pool_t *aprPool = env->tmpPool->_private;
      char rfctime[APR_RFC822_DATE_LEN];
      apr_time_t time = apr_time_now();
      
      if (!file || !args)
          return -1;
  
      if (l->logger_private == NULL ||
          l->level <= level) {
          char *f = (char *)(file + strlen(file) - 1);
          char *slevel;
          switch (level){
              case JK_LOG_INFO_LEVEL:
                  slevel = JK_LOG_INFO_VERB;
                  break;
              case JK_LOG_ERROR_LEVEL:
                  slevel = JK_LOG_ERROR_VERB;
                  break;
              case JK_LOG_EMERG_LEVEL:
                  slevel = JK_LOG_EMERG_VERB;
                  break;
              case JK_LOG_DEBUG_LEVEL:
              default:
                  slevel = JK_LOG_DEBUG_VERB;
                  break;
          }
          while (f != file && *f != '\\' && *f != '/')
              f--;
          if (f != file)
              ++f;
          
          /* XXX rfc822_date or apr_ctime ? */
          apr_ctime(rfctime, time);
          fmt1 = apr_psprintf(aprPool, "[%s] (%5s ) [%s (%d)]  %s", rfctime, slevel, f, line, fmt);
          buf = apr_pvsprintf(aprPool, fmt1, args);
  
          l->log(env, l, level, buf);        
      }
      
      return rc;
  }
  
  
  static int jk2_logger_printf_jkLog(jk_env_t *env, jk_logger_t *l,
                                   const char *file,
                                   int line,
                                   int level,
                                   const char *fmt, ...)
  {
      va_list args;
      int rc;
      
      va_start(args, fmt);
      rc = jk2_logger_printf_jkVLog(env, l, file, line, level, fmt, args);
      va_end(args);
  
      return rc;
  }
  
  int JK_METHOD jk2_logger_printf_factory(jk_env_t *env, jk_pool_t *pool, 
                                        jk_bean_t *result,
                                        const char *type, const char *name)
  {
      jk_logger_t *log = (jk_logger_t *)pool->calloc(env, pool, sizeof(jk_logger_t));
  
      if (log == NULL) {
          fprintf(stderr, "loggerFile.factory(): OutOfMemoryException\n"); 
          return JK_ERR;
      }
  
      log->log = jk2_logger_printf_log;
      log->logger_private = NULL;
      log->init =jk2_logger_printf_init;
      log->jkLog = jk2_logger_printf_jkLog;
      log->jkVLog = jk2_logger_printf_jkVLog;
      log->level = JK_LOG_ERROR_LEVEL;
      jk2_logger_printf_logFmt = JK_TIME_FORMAT;
      
      result->object = log;
      log->mbean = result;
      
      result->setAttribute = jk2_logger_printf_setProperty;
  
      return JK_OK;
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org