costin      02/02/25 14:44:36

  Modified:    jk/native2/server/apache13 mod_jk2.c
  Added:       jk/native2/server/apache13 jk_service_apache13.c
  Log:
  Added the service impl. for apache1.3
  
  Few more fixes.
  
  It now compiles and load fine.
  
  Revision  Changes    Path
  1.2       +11 -44    jakarta-tomcat-connectors/jk/native2/server/apache13/mod_jk2.c
  
  Index: mod_jk2.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/apache13/mod_jk2.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- mod_jk2.c 23 Feb 2002 19:01:05 -0000      1.1
  +++ mod_jk2.c 25 Feb 2002 22:44:36 -0000      1.2
  @@ -59,7 +59,7 @@
    * Description: Apache 1.3 plugin for Jakarta/Tomcat                         *
    * Author:      Gal Shachor <[EMAIL PROTECTED]>                           *
    *                 Henri Gomez <[EMAIL PROTECTED]>                               *
  - * Version:     $Revision: 1.1 $                                           *
  + * Version:     $Revision: 1.2 $                                           *
    ***************************************************************************/
   
   /*
  @@ -231,17 +231,13 @@
           ap_get_module_config(s->module_config, &jk2_module);
       jk_workerEnv_t *workerEnv = serverEnv->workerEnv;
       
  -    jk_map_t *m=workerEnv->init_data;
  -    
       env=workerEnv->globalEnv;
   
  -    value = jk2_map_replaceProperties(env, m, m->pool, value);
  -
       if( cmd->info != NULL ) {
  -        m->add(env, m, (char *)cmd->info, (char *)value );
  +        workerEnv->setProperty( env, workerEnv, (char *)cmd->info, (char *)value );
       } else {
           /* ??? Maybe this is a single-option */
  -        m->add(env, m, value, "On" );
  +        workerEnv->setProperty( env, workerEnv, value, "On" );
       }
   
       return NULL;
  @@ -268,20 +264,11 @@
           ap_get_module_config(s->module_config, &jk2_module);
       jk_workerEnv_t *workerEnv = serverEnv->workerEnv;
       
  -    jk_map_t *initData=workerEnv->init_data;
  -    
       env=workerEnv->globalEnv;
   
  -    value = jk2_map_replaceProperties(env, initData, initData->pool, value);
  -
  -    if(value==NULL)
  -        return NULL;
  -
       if( type==NULL || type[0]=='\0') {
           /* Generic Jk2Set foo bar */
  -        initData->add(env, initData, ap_pstrdup( cmd->pool, name),
  -                      ap_pstrdup( cmd->pool, value));
  -        /* fprintf( stderr, "set2.init_data: %s %s\n", name, value ); */
  +        workerEnv->setProperty(env, workerEnv, name, value);
       } else if( strcmp(type, "env")==0) {
           workerEnv->envvars_in_use = JK_TRUE;
           workerEnv->envvars->put(env, workerEnv->envvars,
  @@ -291,10 +278,7 @@
           fprintf( stderr, "set2.env %s %s\n", name, value );
       } else if( strcmp(type, "mount")==0) {
           if (name[0] !='/') return "Context must start with /";
  -        initData->put(  env, initData,ap_pstrdup(cmd->pool,name),
  -                        ap_pstrdup(cmd->pool,value), NULL );
  -        
  -        fprintf( stderr, "set2.mount %s %s\n", name, value );
  +        workerEnv->setProperty(  env, workerEnv, name, value );
       } else {
           fprintf( stderr, "set2 error %s %s %s ", type, name, value );
       }
  @@ -368,7 +352,7 @@
   static void *jk2_create_dir_config(ap_pool *p, char *path)
   {
       jk_uriEnv_t *new =
  -        (jk_uriEnv_t *)apr_pcalloc(p, sizeof(jk_uriEnv_t));
  +        (jk_uriEnv_t *)ap_pcalloc(p, sizeof(jk_uriEnv_t));
   
       fprintf(stderr, "XXX Create dir config %s %p\n", path, new);
       new->uri = path;
  @@ -382,7 +366,7 @@
   {
       jk_uriEnv_t *base =(jk_uriEnv_t *)basev;
       jk_uriEnv_t *add = (jk_uriEnv_t *)addv; 
  -    jk_uriEnv_t *new = (jk_uriEnv_t *)apr_pcalloc(p,sizeof(jk_uriEnv_t));
  +    jk_uriEnv_t *new = (jk_uriEnv_t *)ap_pcalloc(p,sizeof(jk_uriEnv_t));
       
       if( add->webapp == NULL ) {
           add->webapp=base->webapp;
  @@ -449,7 +433,7 @@
           
       }
   
  -    newUri=(jk_uriEnv_t *)apr_pcalloc(p, sizeof(jk_uriEnv_t));
  +    newUri=(jk_uriEnv_t *)ap_pcalloc(p, sizeof(jk_uriEnv_t));
   
       newUri->workerEnv=workerEnv;
       
  @@ -526,6 +510,7 @@
       int rc;
       jk_env_t *env;
       
  +
       if(s->is_virtual) 
           return OK;
   
  @@ -537,7 +522,7 @@
           /* This is the first step */
           env->l->jkLog(env, env->l, JK_LOG_INFO,
                         "mod_jk.post_config() first invocation\n");
  -        apr_pool_userdata_set( "INITOK", "mod_jk_init", NULL, gPool );
  +        /*         ap_pool_userdata_set( "INITOK", "mod_jk_init", NULL, gPool ); */
           return OK;
       }
           
  @@ -636,7 +621,7 @@
           }
   
           /* XXX we should reuse the request itself !!! */
  -        jk2_service_apache2_factory( env, rPool, (void *)&s,
  +        jk2_service_apache13_factory( env, rPool, (void *)&s,
                                       "service", "apache2");
   
           s->pool = rPool;
  @@ -751,24 +736,6 @@
       return OK;
   }
   
  -/* XXX Can we use type checker step to set our stuff ? */
  -
  -/* bypass the directory_walk and file_walk for non-file requests */
  -static int jk2_map_to_storage(request_rec *r)
  -{
  -    jk_uriEnv_t *uriEnv=ap_get_module_config( r->request_config, &jk2_module );
  -    
  -    if( uriEnv != NULL ) {
  -        r->filename = (char *)apr_filename_of_pathname(r->uri);
  -        if( uriEnv->debug > 0 ) {
  -            /*   env->l->jkLog(env, env->l, JK_LOG_INFO,  */
  -            /*     "mod_jk.map_to_storage(): map %s %s\n", */
  -            /*                  r->uri, r->filename); */
  -        }
  -        return OK;
  -    }
  -    return DECLINED;
  -}
   
   static const handler_rec jk2_handlers[] =
   {
  @@ -777,7 +744,7 @@
       { NULL }
   };
   
  -module MODULE_VAR_EXPORT jk_module = {
  +module MODULE_VAR_EXPORT jk2_module = {
       STANDARD_MODULE_STUFF,
       jk_init,                    /* module initializer */
       NULL,                       /* per-directory config creator */
  
  
  
  1.1                  
jakarta-tomcat-connectors/jk/native2/server/apache13/jk_service_apache13.c
  
  Index: jk_service_apache13.c
  ===================================================================
  /* ========================================================================= *
   *                                                                           *
   *                 The Apache Software License,  Version 1.1                 *
   *                                                                           *
   *          Copyright (c) 1999-2001 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 <[EMAIL PROTECTED]>.                        *
   *                                                                           *
   * 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: Apache1.3 adapter 
   */
  
  #include "httpd.h"
  #include "http_config.h"
  #include "http_request.h"
  #include "http_core.h"
  #include "http_protocol.h"
  #include "http_main.h"
  #include "http_log.h"
  
  #include "util_script.h"
  /*
   * Jakarta (jk_) include files
   */
  #include "jk_global.h"
  #include "jk_map.h"
  #include "jk_pool.h"
  #include "jk_env.h"
  #include "jk_service.h"
  #include "jk_worker.h"
  #include "jk_workerEnv.h"
  #include "jk_uriMap.h"
  #include "jk_requtil.h"
  
  
  #define NULL_FOR_EMPTY(x)   ((x && !strlen(x)) ? NULL : x) 
  
  static int JK_METHOD jk2_service_apache13_head(jk_env_t *env, jk_ws_service_t *s )
  {
      int h;
      int numheaders;
      request_rec *r;
      jk_map_t *headers;
      
      if(s==NULL ||  s->ws_private==NULL )
          return JK_FALSE;
      
      r = (request_rec *)s->ws_private;  
          
      if(s->msg==NULL) {
          s->msg = "";
      }
      r->status = s->status;
      r->status_line = ap_psprintf(r->pool, "%d %s", s->status, s->msg);
  
      headers=s->headers_out;
      numheaders = headers->size(env, headers);
      /* XXX As soon as we switch to jk_map_apache13, this will not be needed ! */
      env->l->jkLog(env, env->l, JK_LOG_INFO, 
                    "service.head() %d %d\n", s->status,
                    numheaders);
      
      for(h = 0 ; h < numheaders; h++) {
          char *name=headers->nameAt( env, headers, h );
          char *val=headers->valueAt( env, headers, h );
  
          env->l->jkLog(env, env->l, JK_LOG_INFO, 
                        "service.head() %s: %s %d %d\n", name, val, h, headers->size( 
env, headers ));
  
          /* the cmp can also be avoided in we do this earlier and use
             the header id */
          if(!strcasecmp(name, "Content-type")) {
              /* XXX should be done in handler ! */
              char *tmp = ap_pstrdup(r->pool, val);
              ap_content_type_tolower(tmp); 
              r->content_type = tmp;
              ap_table_set(r->headers_out, name, val);
          } else if(!strcasecmp(name, "Location")) {
              /* XXX setn */
              ap_table_set(r->headers_out, name, val);
          } else if(!strcasecmp(name, "Content-Length")) {
              ap_table_set(r->headers_out, name, val );
          } else if(!strcasecmp(name, "Transfer-Encoding")) {
              ap_table_set(r->headers_out,name, val);
          } else if(!strcasecmp(name, "Last-Modified")) {
              /*
               * If the script gave us a Last-Modified header, we can't just
               * pass it on blindly because of restrictions on future values.
               */
              ap_update_mtime(r, ap_parseHTTPdate(val));
              ap_set_last_modified(r);
              ap_table_set(r->headers_out, name, val);
          } else {                
              /* ap_table_add(r->headers_out, name, val); */
                 ap_table_set(r->headers_out, name, val);
          }
      }
  
      /* this NOP function was removed in apache 2.0 alpha14 */
      /* ap_send_http_header(r); */
      s->response_started = JK_TRUE;
      
      return JK_TRUE;
  }
  
  /*
   * Read a chunk of the request body into a buffer.  Attempt to read len
   * bytes into the buffer.  Write the number of bytes actually read into
   * actually_read.
   *
   * Think of this function as a method of the apache1.3-specific subclass of
   * the jk_ws_service class.  Think of the *s param as a "this" or "self"
   * pointer.
   */
  static int JK_METHOD jk2_service_apache13_read(jk_env_t *env, jk_ws_service_t *s,
                                                void *b, unsigned len,
                                                unsigned *actually_read)
  {
      if(s && s->ws_private && b && actually_read) {
          if(!s->read_body_started) {
             if(ap_should_client_block(s->ws_private)) {
                  s->read_body_started = JK_TRUE;
              }
          }
  
          if(s->read_body_started) {
              long rv;
              if ((rv = ap_get_client_block(s->ws_private, b, len)) < 0) {
                  *actually_read = 0;
              } else {
                  *actually_read = (unsigned) rv;
              }
              return JK_TRUE;
          }
      }
      return JK_FALSE;
  }
  
  /*
   * Write a chunk of response data back to the browser.  If the headers
   * haven't yet been sent over, send over default header values (Status =
   * 200, basically).
   *
   * Write len bytes from buffer b.
   *
   * Think of this function as a method of the apache1.3-specific subclass of
   * the jk_ws_service class.  Think of the *s param as a "this" or "self"
   * pointer.
   */
  /* Works with 4096, fails with 8192 */
  #ifndef CHUNK_SIZE
  #define CHUNK_SIZE 4096
  #endif
  
  static int JK_METHOD jk2_service_apache13_write(jk_env_t *env, jk_ws_service_t *s,
                                                 const void *b, int len)
  {
      if(s && s->ws_private && b) {
          if(len) {
              /* BUFF *bf = p->r->connection->client; */
              /* size_t w = (size_t)l; */
              size_t r = 0;
              long ll=len;
              char *bb=(char *)b;
              request_rec *rr=s->ws_private;
              
              if(!s->response_started) {
                  env->l->jkLog(env, env->l, JK_LOG_INFO, 
                                "service.write() default head\n");
                  if(!s->head(env, s)) {
                      return JK_FALSE;
                  }
              }
  
              
              {
                  array_header *t = ap_table_elts(rr->headers_out);
                  if(t && t->nelts) {
                      int i;
                      
                      table_entry *elts = (table_entry *)t->elts;
  
                      for(i = 0 ; i < t->nelts ; i++) {
                          env->l->jkLog(env, env->l, JK_LOG_INFO, "OutHeaders %s: 
%s\n",
                                        elts[i].key, elts[i].val);
                      }
                  }
              }
              
              /* Debug - try to get around rwrite */
              while( ll > 0 ) {
                  unsigned long toSend=(ll>CHUNK_SIZE) ? CHUNK_SIZE : ll;
                  r = ap_rwrite((const char *)bb, toSend, s->ws_private );
                  env->l->jkLog(env, env->l, JK_LOG_INFO, 
                                "service.write()  %ld (%ld) out of %ld \n",toSend, r, 
ll );
                  ll-=CHUNK_SIZE;
                  bb+=CHUNK_SIZE;
                  
                  if(toSend != r) { 
                      return JK_FALSE; 
                  } 
                  
              }
  
              /*
               * To allow server push. After writing full buffers
               */
              ap_bflush(s->ws_private);
          }
          return JK_TRUE;
      }
      return JK_FALSE;
  }
  
  /* ========================================================================= */
  /* Utility functions                                                         */
  /* ========================================================================= */
  
  static int jk2_get_content_length(jk_env_t *env, request_rec *r)
  {
      if(r->clength > 0) {
          return r->clength;
      } else {
          char *lenp = (char *)ap_table_get(r->headers_in, "Content-Length");
  
          if(lenp) {
              int rc = atoi(lenp);
              if(rc > 0) {
                  return rc;
              }
          }
      }
  
      return 0;
  }
  
  static int jk2_init_ws_service(jk_env_t *env, jk_ws_service_t *s,
                                 jk_worker_t *worker, void *serverObj)
  {
      /*     ap_port_t port; */
      char *ssl_temp      = NULL;
      jk_workerEnv_t *workerEnv=worker->workerEnv;
      request_rec *r=serverObj;
      int need_content_length_header=JK_FALSE;
  
      /* Common initialization */
      /* XXX Probably not needed, we're duplicating */
      jk2_requtil_initRequest(env, s);
      
      s->ws_private = r;
      s->response_started = JK_FALSE;
      s->read_body_started = JK_FALSE;
      s->workerEnv=workerEnv;
  
      s->jvm_route        = NULL;    /* Used for sticky session routing */
  
      s->auth_type    = NULL_FOR_EMPTY(r->connection->ap_auth_type);
      s->remote_user  = NULL_FOR_EMPTY(r->connection->user);
  
      s->protocol     = r->protocol;
      s->remote_host  = (char *)ap_get_remote_host(r->connection,
                                                   r->per_dir_config, REMOTE_HOST);
      s->remote_host  = NULL_FOR_EMPTY(s->remote_host);
      s->remote_addr  = NULL_FOR_EMPTY(r->connection->remote_ip);
  
      /* get server name */
      s->server_name= (char *)(r->hostname ? r->hostname :
                   r->server->server_hostname);
  
      /* get the real port (otherwise redirect failed) */
      /*     apr_sockaddr_port_get(&port,r->connection->local_addr); */
      /*     s->server_port = port; */
  
      s->server_software = (char *)ap_get_server_version();
  
      s->method         = (char *)r->method;
      s->content_length = jk2_get_content_length(env, r);
      s->is_chunked     = r->read_chunked;
      s->no_more_chunks = 0;
      s->query_string   = r->args;
  
      /*
       * The 2.2 servlet spec errata says the uri from
       * HttpServletRequest.getRequestURI() should remain encoded.
       * [http://java.sun.com/products/servlet/errata_042700.html]
       *
       * We use JkOptions to determine which method to be used
       *
       * ap_escape_uri is the latest recommanded but require
       *               some java decoding (in TC 3.3 rc2)
       *
       * unparsed_uri is used for strict compliance with spec and
       *              old Tomcat (3.2.3 for example)
       *
       * uri is use for compatibilty with mod_rewrite with old Tomcats
       */
  
      switch (workerEnv->options & JK_OPT_FWDURIMASK) {
  
          case JK_OPT_FWDURICOMPATUNPARSED :
              s->req_uri      = r->unparsed_uri;
              if (s->req_uri != NULL) {
                  char *query_str = strchr(s->req_uri, '?');
                  if (query_str != NULL) {
                      *query_str = 0;
                  }
              }
  
          break;
  
          case JK_OPT_FWDURICOMPAT :
              s->req_uri = r->uri;
          break;
  
          case JK_OPT_FWDURIESCAPED :
              s->req_uri      = ap_escape_uri(r->pool, r->uri);
          break;
  
          default :
              return JK_FALSE;
      }
  
      s->is_ssl       = JK_FALSE;
      s->ssl_cert     = NULL;
      s->ssl_cert_len = 0;
      s->ssl_cipher   = NULL;        /* required by Servlet 2.3 Api, 
                                     allready in original ajp13 */
      s->ssl_session  = NULL;
      s->ssl_key_size = -1;        /* required by Servlet 2.3 Api, added in jtc */
  
      if(workerEnv->ssl_enable || workerEnv->envvars_in_use) {
          ap_add_common_vars(r);
  
          if(workerEnv->ssl_enable) {
              ssl_temp = 
                  (char *)ap_table_get(r->subprocess_env, 
                                        workerEnv->https_indicator);
              if(ssl_temp && !strcasecmp(ssl_temp, "on")) {
                  s->is_ssl       = JK_TRUE;
                  s->ssl_cert     = 
                      (char *)ap_table_get(r->subprocess_env, 
                                            workerEnv->certs_indicator);
                  if(s->ssl_cert) {
                      s->ssl_cert_len = strlen(s->ssl_cert);
                  }
                  /* Servlet 2.3 API */
                  s->ssl_cipher   = 
                      (char *)ap_table_get(r->subprocess_env, 
                                            workerEnv->cipher_indicator);
                   s->ssl_session  = 
                      (char *)ap_table_get(r->subprocess_env, 
                                            workerEnv->session_indicator);
  
                  if (workerEnv->options & JK_OPT_FWDKEYSIZE) {
                      /* Servlet 2.3 API */
                      ssl_temp = (char *)ap_table_get(r->subprocess_env, 
                                                   workerEnv->key_size_indicator);
                      if (ssl_temp)
                          s->ssl_key_size = atoi(ssl_temp);
                  }
              }
          }
  
          jk2_map_default_create(env, &s->attributes, s->pool );
          
          if(workerEnv->envvars_in_use) {
              int envCnt=workerEnv->envvars->size( env, workerEnv->envvars );
              int i;
  
              for( i=0; i< envCnt ; i++ ) {
                  char *name= workerEnv->envvars->nameAt( env, workerEnv->envvars, i );
                  char *val= (char *)ap_table_get(r->subprocess_env, name);
                  if(val==NULL) {
                      val=workerEnv->envvars->valueAt( env, workerEnv->envvars, i );
                  }
                  s->attributes->put( env, s->attributes, name, val, NULL );
              }
          }
      }
  
      jk2_map_default_create(env, &s->headers_in, s->pool );
  
      if(r->headers_in && ap_table_elts(r->headers_in)) {
          const array_header *t = ap_table_elts(r->headers_in);
          if(t && t->nelts) {
              int i;
  
              table_entry *elts = (table_entry *)t->elts;
  
              for(i = 0 ; i < t->nelts ; i++) {
                  s->headers_in->add( env, s->headers_in,
                                      elts[i].key, elts[i].val);
              }
          }
      }
  
      if(!s->is_chunked && s->content_length == 0) {
          /* XXX if r->contentLength == 0 I assume there's no header
             or a header with '0'. In the second case, put will override it 
           */
          s->headers_in->put( env, s->headers_in, "content-length", "0", NULL );
      }
  
      jk2_map_default_create(env, &s->headers_out, s->pool );
  
      return JK_TRUE;
  }
  
  /*
   * If the servlet engine didn't consume all of the
   * request data, consume and discard all further
   * characters left to read from client
   *
   *  XXX Is it the right thing to do ????? Why spend the
   *  bandwith, the servlet decided not to read the POST then
   *  jk shouldn't do it instead, and the user should get the
   *  error message !
   */
  static void jk2_service_apache13_afterRequest(jk_env_t *env, jk_ws_service_t *s )
  {
      
      if (s->content_read < s->content_length ||
          (s->is_chunked && ! s->no_more_chunks)) {
          
          request_rec *r=s->ws_private;
  
          char *buff = ap_palloc(r->pool, 2048);
          if (buff != NULL) {
              int rd;
              while ((rd = ap_get_client_block(r, buff, 2048)) > 0) {
                  s->content_read += rd;
              }
          }
      }
  }
  
  int jk2_service_apache13_factory(jk_env_t *env,
                                   jk_pool_t *pool,
                                   void **result,
                                   char *type,
                                   char *name)
  {
      jk_ws_service_t *s = *result;
      if( s==NULL ) {
          s=(jk_ws_service_t *)pool->calloc(env, pool, sizeof(jk_ws_service_t));
      }
  
      if(s==NULL ) {
          return JK_FALSE;
      }
  
      s->head   = jk2_service_apache13_head;
      s->read   = jk2_service_apache13_read;
      s->write  = jk2_service_apache13_write;
      s->init   = jk2_init_ws_service;
      s->afterRequest     = jk2_service_apache13_afterRequest;
      
      *result=(void *)s;
  
      return JK_TRUE;
  }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to