You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by sh...@locus.apache.org on 2000/05/31 13:23:32 UTC

cvs commit: jakarta-tomcat/src/native/jni_connect jk_jnicb.c jni_connect.dsp

shachor     00/05/31 04:23:32

  Modified:    src/native/jni_connect jk_jnicb.c jni_connect.dsp
  Log:
  Improved JNI support patch as submitted by
  Vasile GABURICI gaburici@ss.pub.ro
  
  Make sure from now on to compile mod_jk/apache2 with
  -DAPACHE2_SIGHACK (modified the makefile accordingly)
  
  Revision  Changes    Path
  1.3       +293 -241  jakarta-tomcat/src/native/jni_connect/jk_jnicb.c
  
  Index: jk_jnicb.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/native/jni_connect/jk_jnicb.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- jk_jnicb.c	2000/05/18 19:41:49	1.2
  +++ jk_jnicb.c	2000/05/31 11:23:31	1.3
  @@ -56,7 +56,7 @@
   /***************************************************************************
    * Description: JNI callbacks implementation for the JNI in process adapter*
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
  - * Version:     $Revision: 1.2 $                                               *
  + * Version:     $Revision: 1.3 $                                           *
    ***************************************************************************/
   
   #include "jk_jnicb.h"
  @@ -73,16 +73,24 @@
   Java_org_apache_tomcat_service_connector_JNIConnectionHandler_getNumberOfHeaders
     (JNIEnv *env, jobject o, jlong s, jlong l)
   {
  -    jk_ws_service_t *ps = (jk_ws_service_t *)s;
  -    jk_logger_t *pl = (jk_logger_t *)l;
  -
  -    if(ps) {
  -        return (jint)ps->num_headers;
  +    /* [V] Convert indirectly from jlong -> int -> pointer to shut up gcc */
  +    /*     I hope it's okay on other compilers and/or machines...         */
  +    jk_ws_service_t *ps = (jk_ws_service_t *)(int)s;
  +    jk_logger_t *pl = (jk_logger_t *)(int)l;
  +
  +    jk_log(pl, JK_LOG_DEBUG, "Into JNIConnectionHandler::getNumberOfHeaders\n");
  +
  +    if(!ps) {
  +	jk_log(pl, JK_LOG_ERROR, 
  +               "In JNIConnectionHandler::getNumberOfHeaders, NULL ws service object\n");
  +	/* [V] JNIConnectionHandler doesn't handle this */
  +	return -1;
       }
   
  -    jk_log(pl, JK_LOG_ERROR, 
  -           "In JNIConnectionHandler::getNumberOfHeaders, NULL ws service object\n");
  -    return -1;
  +    jk_log(pl, JK_LOG_DEBUG,
  +	   "Done JNIConnectionHandler::getNumberOfHeaders, found %d headers\n",
  +	   ps->num_headers);
  +    return (jint)ps->num_headers;
   }
   
   /*
  @@ -94,30 +102,41 @@
   Java_org_apache_tomcat_service_connector_JNIConnectionHandler_read
     (JNIEnv *env, jobject o, jlong s, jlong l, jbyteArray buf, jint from, jint cnt)
   {
  -    jk_ws_service_t *ps = (jk_ws_service_t *)s;
  -    jk_logger_t *pl = (jk_logger_t *)l;
  +    jk_ws_service_t *ps = (jk_ws_service_t *)(int)s;
  +    jk_logger_t *pl = (jk_logger_t *)(int)l;
       jint rc = -1;
  +    jboolean iscommit;
  +    jbyte *nbuf;
  +    unsigned nfrom = (unsigned)from;
  +    unsigned ncnt = (unsigned)cnt;
  +    unsigned acc = 0;
   
  -    if(ps) {
  -        jboolean iscommit;
  -        jbyte *nbuf = (*env)->GetByteArrayElements(env, buf, &iscommit);
  -        unsigned nfrom = (unsigned)from;
  -        unsigned ncnt = (unsigned)cnt;
  -        unsigned acc = 0;
  -
  -        if(nbuf) {
  -            if(!ps->read(ps, nbuf + nfrom, ncnt, &acc)) {
  -                jk_log(pl, JK_LOG_ERROR, 
  -                       "In JNIConnectionHandler::read, failed to read from the web server\n");
  -            } else {
  -                rc = (jint)acc;
  -            }                
  -            (*env)->ReleaseByteArrayElements(env, buf, nbuf, 0);
  -        }
  -    } else {
  +    jk_log(pl, JK_LOG_DEBUG, "Into JNIConnectionHandler::read\n");
  +
  +    if(!ps) {
           jk_log(pl, JK_LOG_ERROR, 
                  "In JNIConnectionHandler::read, NULL ws service object\n");
  +	return -1;
       }
  +
  +    nbuf = (*env)->GetByteArrayElements(env, buf, &iscommit);
  +
  +    if(!nbuf) {
  +        jk_log(pl, JK_LOG_ERROR, 
  +               "In JNIConnectionHandler::read, GetByteArrayElements error\n");
  +	return -1;
  +    }
  +    
  +    if(!ps->read(ps, nbuf + nfrom, ncnt, &acc)) {
  +        jk_log(pl, JK_LOG_ERROR, 
  +               "In JNIConnectionHandler::read, failed to read from web server\n");
  +    } else {
  +        rc = (jint)acc;
  +    }
  +
  +    (*env)->ReleaseByteArrayElements(env, buf, nbuf, 0);
  +
  +    jk_log(pl, JK_LOG_DEBUG, "Done JNIConnectionHandler::read\n");
       return rc;
   }
   
  @@ -130,103 +149,115 @@
   Java_org_apache_tomcat_service_connector_JNIConnectionHandler_readEnvironment
     (JNIEnv *env, jobject o, jlong s, jlong l, jobjectArray envbuf)
   {
  -    jk_ws_service_t *ps = (jk_ws_service_t *)s;
  -    jk_logger_t *pl = (jk_logger_t *)l;
  +    jk_ws_service_t *ps = (jk_ws_service_t *)(int)s;
  +    jk_logger_t *pl = (jk_logger_t *)(int)l;
  +    char port[10];
   
  -    if(ps) {
  -        char port[10];
  +    jk_log(pl, JK_LOG_DEBUG, 
  +           "Into JNIConnectionHandler::readEnvironment. Environment follows --->\n");
   
  -        sprintf(port, "%d", ps->server_port);
  -        
  -        if(ps->method) {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          envbuf, 
  -                                          0, 
  -                                          (*env)->NewStringUTF(env, ps->method));
  -        }
  -        if(ps->req_uri) {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          envbuf, 
  -                                          1, 
  -                                          (*env)->NewStringUTF(env, ps->req_uri));
  -        }
  -        if(ps->query_string) {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          envbuf, 
  -                                          2, 
  -                                          (*env)->NewStringUTF(env, ps->query_string));
  -        }
  -
  -        if(ps->remote_addr) {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          envbuf, 
  -                                          3, 
  -                                          (*env)->NewStringUTF(env, ps->remote_addr));
  -        }
  -
  -        if(ps->remote_host) {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          envbuf, 
  -                                          4, 
  -                                          (*env)->NewStringUTF(env, ps->remote_host));
  -        }
  -
  -        if(ps->server_name) {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          envbuf, 
  -                                          5, 
  -                                          (*env)->NewStringUTF(env, ps->server_name));
  -        }
  +    if(!ps) {
  +        jk_log(pl, JK_LOG_ERROR, 
  +               "In JNIConnectionHandler::readEnvironment, NULL ws service object\n");
  +	return JK_FALSE;
  +    }
   
  +    sprintf(port, "%d", ps->server_port);
  +        
  +    if(ps->method) {
  +        (*env)->SetObjectArrayElement(env, 
  +                                      envbuf, 
  +                                      0, 
  +                                      (*env)->NewStringUTF(env, ps->method));
  +	jk_log(pl, JK_LOG_DEBUG, "---> method: %s\n", ps->method);
  +    }
  +    if(ps->req_uri) {
  +        (*env)->SetObjectArrayElement(env, 
  +                                      envbuf, 
  +                                      1, 
  +                                      (*env)->NewStringUTF(env, ps->req_uri));
  +	jk_log(pl, JK_LOG_DEBUG, "---> req_uri: %s\n", ps->req_uri);
  +    }
  +    if(ps->query_string) {
  +        (*env)->SetObjectArrayElement(env, 
  +                                      envbuf, 
  +                                      2, 
  +                                      (*env)->NewStringUTF(env, ps->query_string));
  +        jk_log(pl, JK_LOG_DEBUG, "---> query_string: %s\n", ps->query_string);
  +    }
  +    if(ps->remote_addr) {
           (*env)->SetObjectArrayElement(env, 
                                         envbuf, 
  -                                      6, 
  -                                      (*env)->NewStringUTF(env, port));
  +                                      3, 
  +                                      (*env)->NewStringUTF(env, ps->remote_addr));
  +	jk_log(pl, JK_LOG_DEBUG, "---> remote_addr: %s\n", ps->remote_addr);
  +    }
  +    if(ps->remote_host) {
  +        (*env)->SetObjectArrayElement(env, 
  +                                      envbuf, 
  +                                      4, 
  +                                      (*env)->NewStringUTF(env, ps->remote_host));
  +	jk_log(pl, JK_LOG_DEBUG, "---> remote_host: %s\n", ps->remote_host);
  +    }
  +    if(ps->server_name) {
  +        (*env)->SetObjectArrayElement(env, 
  +                                      envbuf, 
  +                                      5, 
  +                                      (*env)->NewStringUTF(env, ps->server_name));
  +	jk_log(pl, JK_LOG_DEBUG, "---> server_name: %s\n", ps->server_name);
  +    }
   
  -        if(ps->auth_type) {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          envbuf, 
  -                                          7, 
  -                                          (*env)->NewStringUTF(env, ps->auth_type));
  -        }
  -        if(ps->remote_user) {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          envbuf, 
  -                                          8, 
  -                                          (*env)->NewStringUTF(env, ps->remote_user));
  -        }
  -        if(ps->is_ssl) {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          envbuf, 
  -                                          9, 
  -                                          (*env)->NewStringUTF(env, "https"));
  -        } else {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          envbuf, 
  -                                          9, 
  -                                          (*env)->NewStringUTF(env, "http"));
  -        }
  +    (*env)->SetObjectArrayElement(env, 
  +                                  envbuf, 
  +                                  6, 
  +                                  (*env)->NewStringUTF(env, port));
  +    jk_log(pl, JK_LOG_DEBUG, "---> server_port: %s\n", port);
   
  -        if(ps->protocol) {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          envbuf, 
  -                                          10, 
  -                                          (*env)->NewStringUTF(env, ps->protocol));
  -        }
  -        if(ps->server_software) {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          envbuf, 
  -                                          11, 
  -                                          (*env)->NewStringUTF(env, ps->server_software));
  -        }
  -        
  -        return JK_TRUE;
  +    if(ps->auth_type) {
  +        (*env)->SetObjectArrayElement(env, 
  +                                      envbuf, 
  +                                      7, 
  +                                      (*env)->NewStringUTF(env, ps->auth_type));
  +	jk_log(pl, JK_LOG_DEBUG, "---> auth_type: %s\n", ps->auth_type);
  +    }
  +    if(ps->remote_user) {
  +        (*env)->SetObjectArrayElement(env, 
  +                                      envbuf, 
  +                                      8, 
  +                                      (*env)->NewStringUTF(env, ps->remote_user));
  +	jk_log(pl, JK_LOG_DEBUG, "---> remote_user: %s\n", ps->remote_user);
  +    }
  +    if(ps->is_ssl) {
  +        (*env)->SetObjectArrayElement(env, 
  +                                      envbuf, 
  +                                      9, 
  +                                      (*env)->NewStringUTF(env, "https"));
       } else {
  -        jk_log(pl, JK_LOG_ERROR, 
  -               "In JNIConnectionHandler::readEnvironment, NULL ws service object\n");
  +        (*env)->SetObjectArrayElement(env, 
  +                                      envbuf, 
  +                                      9, 
  +                                      (*env)->NewStringUTF(env, "http"));
       }
  +    jk_log(pl, JK_LOG_DEBUG, "---> is_ssl: %s\n", ps->is_ssl ? "yes" : "no");
   
  -    return JK_FALSE;
  +    if(ps->protocol) {
  +        (*env)->SetObjectArrayElement(env, 
  +                                      envbuf, 
  +                                      10, 
  +                                      (*env)->NewStringUTF(env, ps->protocol));
  +        jk_log(pl, JK_LOG_DEBUG, "---> protocol: %s\n", ps->protocol);
  +    }
  +    if(ps->server_software) {
  +        (*env)->SetObjectArrayElement(env, 
  +                                      envbuf, 
  +                                      11, 
  +                                      (*env)->NewStringUTF(env, ps->server_software));
  +        jk_log(pl, JK_LOG_DEBUG, "---> server_software: %s\n", ps->server_software);
  +    }
  +    jk_log(pl, JK_LOG_DEBUG, 
  +           "Done JNIConnectionHandler::readEnvironment\n");
  +
  +    return JK_TRUE;
   }
   
   /*
  @@ -238,30 +269,37 @@
   Java_org_apache_tomcat_service_connector_JNIConnectionHandler_readHeaders
     (JNIEnv *env, jobject o, jlong s, jlong l, jobjectArray hnames, jobjectArray hvalues)
   {
  -    jk_ws_service_t *ps = (jk_ws_service_t *)s;
  -    jk_logger_t *pl = (jk_logger_t *)l;
  +    jk_ws_service_t *ps = (jk_ws_service_t *)(int)s;
  +    jk_logger_t *pl = (jk_logger_t *)(int)l;
  +    unsigned i;
   
  -    if(ps) {
  -        unsigned i;
  -
  -        for(i = 0 ; i < ps->num_headers ; i++) {
  -            (*env)->SetObjectArrayElement(env, 
  -                                          hnames, 
  -                                          i, 
  -                                          (*env)->NewStringUTF(env, ps->headers_names[i]));
  -            (*env)->SetObjectArrayElement(env, 
  -                                          hvalues, 
  -                                          i, 
  -                                          (*env)->NewStringUTF(env, ps->headers_values[i]));
  -        }
  +    jk_log(pl, JK_LOG_DEBUG, "Into JNIConnectionHandler::readHeaders\n");
   
  -	return JK_TRUE;
  -    } else {
  +    if(!ps) {
           jk_log(pl, JK_LOG_ERROR, 
  -               "In JNIConnectionHandler::readHeaders, NULL ws service object\n");
  +           "In JNIConnectionHandler::readHeaders, NULL ws service object\n");
  +	   return JK_FALSE;
  +    }
  +
  +    jk_log(pl, JK_LOG_DEBUG, "In JNIConnectionHandler::readHeaders, %d headers follow --->\n",
  +	   ps->num_headers);
  +
  +    for(i = 0 ; i < ps->num_headers ; i++) {
  +        (*env)->SetObjectArrayElement(env, 
  +                                      hnames, 
  +                                      i, 
  +                                      (*env)->NewStringUTF(env, ps->headers_names[i]));
  +        (*env)->SetObjectArrayElement(env, 
  +                                      hvalues, 
  +                                      i, 
  +                                      (*env)->NewStringUTF(env, ps->headers_values[i]));
  +	jk_log(pl, JK_LOG_DEBUG, "---> %s = %s\n",
  +	       ps->headers_names[i], ps->headers_values[i]);
       }
  +    jk_log(pl, JK_LOG_DEBUG, 
  +	   "Done JNIConnectionHandler::readHeaders\n");
   
  -    return JK_FALSE;
  +    return JK_TRUE;
   }
   
   /*
  @@ -274,112 +312,119 @@
     (JNIEnv *env, jobject o, jlong s, jlong l, 
      jint sc, jstring msg, jobjectArray hnames, jobjectArray hvalues, jint hcnt)
   {
  -    jk_ws_service_t *ps = (jk_ws_service_t *)s;
  -    jk_logger_t *pl = (jk_logger_t *)l;
  -    
  -    if(ps) {
  -        const char *nmsg = NULL;
  -        char **nhnames = NULL;
  -        char **nhvalues = NULL;
  -        jstring *shnames = NULL;
  -        jstring *shvalues = NULL;
  -        int i = 0;
  -        int ok = JK_TRUE;
  +    jk_ws_service_t *ps = (jk_ws_service_t *)(int)s;
  +    jk_logger_t *pl = (jk_logger_t *)(int)l;
  +    const char *nmsg = NULL;
  +    char **nhnames = NULL;
  +    char **nhvalues = NULL;
  +    jstring *shnames = NULL;
  +    jstring *shvalues = NULL;
  +    int i = 0;
  +    int ok = JK_TRUE;
   
  -        if(hcnt) {
  -            ok = JK_FALSE;
  +    jk_log(pl, JK_LOG_DEBUG, "Into JNIConnectionHandler::startReasponse\n");
  +
  +    if(!ps) {
  +        jk_log(pl, JK_LOG_ERROR, 
  +	       "In JNIConnectionHandler::startReasponse, NULL ws service object\n");
  +	return JK_FALSE;
  +    }
   
  -            nhnames = (char **)jk_pool_alloc(ps->pool, hcnt * sizeof(char *));
  -            nhvalues = (char **)jk_pool_alloc(ps->pool, hcnt * sizeof(char *));            
  -            shnames = (jstring *)jk_pool_alloc(ps->pool, hcnt * sizeof(jstring));
  -            shvalues = (jstring *)jk_pool_alloc(ps->pool, hcnt * sizeof(jstring));
  -            
  -            if(nhvalues && nhnames && shnames && shnames) {
  -                for( ; i < hcnt ; i++) {
  -                    jboolean iscommit;
  -
  -                    shvalues[i] = shnames[i] = NULL;
  -                    nhnames[i] = nhvalues[i] = NULL;
  -
  -                    shnames[i] = (*env)->GetObjectArrayElement(env, hnames, i);
  -                    shvalues[i] = (*env)->GetObjectArrayElement(env, hvalues, i);
  -
  -                    if(!shvalues[i] || !shnames[i]) {
  -                        jk_log(pl, JK_LOG_ERROR, 
  -                               "In JNIConnectionHandler::startReasponse, GetObjectArrayElement error\n");
  -                        break;
  -                    }
  -
  -                    nhnames[i] = (char *)(*env)->GetStringUTFChars(env, shnames[i], &iscommit);
  -                    nhvalues[i] = (char *)(*env)->GetStringUTFChars(env, shvalues[i], &iscommit);
  -
  -                    if(!nhvalues[i] || !nhnames[i]) {
  -                        jk_log(pl, JK_LOG_ERROR, 
  -                               "In JNIConnectionHandler::startReasponse, GetStringUTFChars error\n");
  -                        break;
  -                    }
  +    jk_log(pl, JK_LOG_DEBUG, "In JNIConnectionHandler::startReasponse, %d headers follow --->\n",
  +	   hcnt);
  +
  +    if(hcnt) {
  +        ok = JK_FALSE;
  +
  +        nhnames = (char **)jk_pool_alloc(ps->pool, hcnt * sizeof(char *));
  +        nhvalues = (char **)jk_pool_alloc(ps->pool, hcnt * sizeof(char *));            
  +        shnames = (jstring *)jk_pool_alloc(ps->pool, hcnt * sizeof(jstring));
  +        shvalues = (jstring *)jk_pool_alloc(ps->pool, hcnt * sizeof(jstring));
  +
  +        if(nhvalues && nhnames && shnames && shnames) {	    
  +            for( ; i < hcnt ; i++) {
  +                jboolean iscommit;
  +
  +                shvalues[i] = shnames[i] = NULL;
  +                nhnames[i] = nhvalues[i] = NULL;
  +
  +                shnames[i] = (*env)->GetObjectArrayElement(env, hnames, i);
  +                shvalues[i] = (*env)->GetObjectArrayElement(env, hvalues, i);
  +
  +                if(!shvalues[i] || !shnames[i]) {
  +                    jk_log(pl, JK_LOG_ERROR, 
  +                           "In JNIConnectionHandler::startReasponse, GetObjectArrayElement error\n");
  +                    break;
                   }
  -                if(i == hcnt) {
  -                    ok = JK_TRUE;
  +
  +                nhnames[i] = (char *)(*env)->GetStringUTFChars(env, shnames[i], &iscommit);
  +                nhvalues[i] = (char *)(*env)->GetStringUTFChars(env, shvalues[i], &iscommit);
  +
  +                if(!nhvalues[i] || !nhnames[i]) {
  +                    jk_log(pl, JK_LOG_ERROR, 
  +                           "In JNIConnectionHandler::startReasponse, GetStringUTFChars error\n");
  +                    break;
                   }
  +		
  +		jk_log(pl, JK_LOG_DEBUG, "---> %s=%s\n", nhnames[i], nhvalues[i]);	
               }
  -        } else {
  -            jk_log(pl, JK_LOG_ERROR, 
  -                   "In JNIConnectionHandler::startReasponse, memory allocation error\n");
  -        }
  -        
  -        if(msg && ok) {
  -            jboolean iscommit;
  -            nmsg = (*env)->GetStringUTFChars(env, msg, &iscommit);
  -            if(!nmsg) {
  -                ok = JK_FALSE;
  +            if(i == hcnt) {
  +                ok = JK_TRUE;
  +		jk_log(pl, JK_LOG_DEBUG, 
  +                       "In JNIConnectionHandler::startReasponse. ----- End headers.\n", hcnt);
               }
  -        }
  +	} else {
  +	    jk_log(pl, JK_LOG_ERROR,
  +	           "In JNIConnectionHandler::startReasponse, memory allocation error\n");
  +	}
  +    }			        
   
  -        if(ok) {
  -            if(!ps->start_response(ps, sc, nmsg, nhnames, nhvalues, hcnt)) {
  -                ok = JK_FALSE;
  -            } else {
  -                jk_log(pl, JK_LOG_ERROR, 
  -                       "In JNIConnectionHandler::startReasponse, servers startReasponse failed\n");
  -            }
  +    if(msg && ok) {
  +        jboolean iscommit;
  +        nmsg = (*env)->GetStringUTFChars(env, msg, &iscommit);
  +        if(!nmsg) {
  +            ok = JK_FALSE;
           }
  +    }
   
  -        if(nmsg) {
  -            (*env)->ReleaseStringUTFChars(env, msg, nmsg);
  +    if(ok) {
  +        if(!ps->start_response(ps, sc, nmsg, (const char**)nhnames, (const char**)nhvalues, hcnt)) {
  +            ok = JK_FALSE;
  +            jk_log(pl, JK_LOG_ERROR, 
  +                   "In JNIConnectionHandler::startReasponse, servers startReasponse failed\n");
           }
  +    }
  +
  +    if(nmsg) {
  +        (*env)->ReleaseStringUTFChars(env, msg, nmsg);
  +    }
           
  -        if(i < hcnt) {
  -            i++;
  -        }
  +    if(i < hcnt) {
  +        i++;
  +    }
   
  -        if(nhvalues) {
  -            int j;
  +    if(nhvalues) {
  +        int j;
   
  -            for(j = 0 ; j < i ; j++) {
  -                if(nhvalues[j]) {
  -                    (*env)->ReleaseStringUTFChars(env, shvalues[j], nhvalues[j]);
  -                }
  +        for(j = 0 ; j < i ; j++) {
  +            if(nhvalues[j]) {
  +                (*env)->ReleaseStringUTFChars(env, shvalues[j], nhvalues[j]);
               }
           }
  +    }
   
  -        if(nhnames) {
  -            int j;
  +    if(nhnames) {
  +        int j;
   
  -            for(j = 0 ; j < i ; j++) {
  -                if(nhnames[j]) {
  -                    (*env)->ReleaseStringUTFChars(env, shnames[j], nhnames[j]);
  -                }
  +        for(j = 0 ; j < i ; j++) {
  +            if(nhnames[j]) {
  +                (*env)->ReleaseStringUTFChars(env, shnames[j], nhnames[j]);
               }
           }
  -
  -        return ok;
  -    } else {
  -        jk_log(pl, JK_LOG_ERROR, 
  -               "In JNIConnectionHandler::startReasponse, NULL ws service object\n");
       }
  +    jk_log(pl, JK_LOG_DEBUG, "Done JNIConnectionHandler::startReasponse.\n");
   
  -    return JK_FALSE;
  +    return ok;
   }
   
   /*
  @@ -391,32 +436,39 @@
   Java_org_apache_tomcat_service_connector_JNIConnectionHandler_write
     (JNIEnv *env, jobject o, jlong s, jlong l, jbyteArray buf, jint from, jint cnt)
   {
  -    jk_ws_service_t *ps = (jk_ws_service_t *)s;
  -    jk_logger_t *pl = (jk_logger_t *)l;
  +    jk_ws_service_t *ps = (jk_ws_service_t *)(int)s;
  +    jk_logger_t *pl = (jk_logger_t *)(int)l;
       jint rc = JK_FALSE;   
  +    jboolean iscommit;
  +    jbyte *nbuf;
  +    unsigned nfrom = (unsigned)from;
  +    unsigned ncnt = (unsigned)cnt;
  +
  +    jk_log(pl, JK_LOG_DEBUG, 
  +           "In JNIConnectionHandler::write\n");
  +
  +    if(!ps) {
  +    	jk_log(pl, JK_LOG_ERROR, 
  +	    "In JNIConnectionHandler::write, NULL ws service object\n");
  +	return JK_FALSE;
  +    }
  +    
  +    nbuf = (*env)->GetByteArrayElements(env, buf, &iscommit);
   
  -    if(ps) {
  -        jboolean iscommit;
  -        jbyte *nbuf = (*env)->GetByteArrayElements(env, buf, &iscommit);
  -        unsigned nfrom = (unsigned)from;
  -        unsigned ncnt = (unsigned)cnt;
  -
  -        if(nbuf) {
  -            if(!ps->write(ps, nbuf + nfrom, ncnt)) {
  -                jk_log(pl, JK_LOG_ERROR, 
  -                       "In JNIConnectionHandler::write, failed to write to the web server\n");
  -            } else {
  -                rc = (jint)JK_TRUE;
  -            }                
  -            (*env)->ReleaseByteArrayElements(env, buf, nbuf, JNI_ABORT);
  -        } else {
  -            jk_log(pl, JK_LOG_ERROR, 
  -                   "In JNIConnectionHandler::write, GetByteArrayElements error\n");
  -        }
  -    } else {
  +    if(!nbuf) {
           jk_log(pl, JK_LOG_ERROR, 
  -               "In JNIConnectionHandler::write, NULL ws service object\n");
  +               "In JNIConnectionHandler::write, GetByteArrayElements error\n");
  +	return JK_FALSE;
       }
  +
  +    if(!ps->write(ps, nbuf + nfrom, ncnt)) {
  +        jk_log(pl, JK_LOG_ERROR, 
  +                   "In JNIConnectionHandler::write, failed to write to the web server\n");
  +    } else {
  +        rc = (jint)JK_TRUE;
  +    }
  +
  +    (*env)->ReleaseByteArrayElements(env, buf, nbuf, JNI_ABORT);
   
       return rc; 
   }
  
  
  
  1.2       +5 -5      jakarta-tomcat/src/native/jni_connect/jni_connect.dsp
  
  Index: jni_connect.dsp
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/native/jni_connect/jni_connect.dsp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- jni_connect.dsp	2000/02/09 12:00:52	1.1
  +++ jni_connect.dsp	2000/05/31 11:23:31	1.2
  @@ -43,7 +43,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JNI_CONNECT_EXPORTS" /YX /FD /c
  -# ADD CPP /nologo /MT /W3 /GX /O2 /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /I "..\iis_netscape" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JNI_CONNECT_EXPORTS" /YX /FD /c
  +# ADD CPP /nologo /MT /W3 /GX /O2 /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /I "..\jk" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JNI_CONNECT_EXPORTS" /YX /FD /c
   # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
   # ADD BASE RSC /l 0x409 /d "NDEBUG"
  @@ -69,7 +69,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JNI_CONNECT_EXPORTS" /YX /FD /GZ /c
  -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /I "..\iis_netscape" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JNI_CONNECT_EXPORTS" /YX /FD /GZ /c
  +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /I "..\jk" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JNI_CONNECT_EXPORTS" /YX /FD /GZ /c
   # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
   # ADD BASE RSC /l 0x409 /d "_DEBUG"
  @@ -96,15 +96,15 @@
   # End Source File
   # Begin Source File
   
  -SOURCE=..\iis_netscape\jk_map.c
  +SOURCE=..\jk\jk_map.c
   # End Source File
   # Begin Source File
   
  -SOURCE=..\iis_netscape\jk_pool.c
  +SOURCE=..\jk\jk_pool.c
   # End Source File
   # Begin Source File
   
  -SOURCE=..\iis_netscape\jk_util.c
  +SOURCE=..\jk\jk_util.c
   # End Source File
   # End Group
   # Begin Group "Header Files"