You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2001/12/15 18:23:28 UTC
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_handler_response.c
costin 01/12/15 09:23:28
Modified: jk/native2/common jk_handler_response.c
Log:
Change the storage of headers and attributes. The start_response methods was
changed - it didn't actually started the response, but set the
fields in request_rec. ( probably in a jk3 we should change jk_service
to use virtual methods, and use directly the 'original' server structure
and methods )
Revision Changes Path
1.9 +55 -56 jakarta-tomcat-connectors/jk/native2/common/jk_handler_response.c
Index: jk_handler_response.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_handler_response.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- jk_handler_response.c 2001/12/14 07:12:42 1.8
+++ jk_handler_response.c 2001/12/15 17:23:28 1.9
@@ -116,81 +116,80 @@
jk_endpoint_t *ae,
jk_logger_t *l)
{
- int err;
- unsigned i;
+ int err=JK_FALSE;
+ int i;
jk_pool_t * pool = s->pool;
+ int headerCount;
s->status = msg->getInt(msg);
s->msg = (char *)msg->getString(msg);
if (s->msg) {
jk_xlate_from_ascii(s->msg, strlen(s->msg));
+ /* Do we want this ? Probably not needed, but safer ! */
+ s->msg = ae->cPool->pstrdup( ae->cPool, s->msg );
}
- s->out_headers = msg->getInt(msg);
- s->out_header_names = NULL;
- s->out_header_values = NULL;
-
- if (s->out_headers > 0 ) {
- s->out_header_names = pool->alloc(pool, sizeof(char *) * s->out_headers);
- s->out_header_values = pool->alloc(pool, sizeof(char *) * s->out_headers);
-
- if (s->out_header_names==NULL ||
- s->out_header_values==NULL) {
- l->jkLog(l, JK_LOG_ERROR,
- "handler.startResponse() OutOfMemoryError %d headers\n",
- s->out_headers);
- return JK_HANDLER_FATAL;
- }
- for(i = 0 ; i < s->out_headers ; i++) {
- unsigned short name = msg->peekInt(msg) ;
+ headerCount = msg->getInt(msg);
+
+ /* XXX assert msg->headers_out is set - the server adapter should know what
+ kind of map to use ! */
- if ((name & 0XFF00) == 0XA000) {
- msg->getInt(msg);
- name = name & 0X00FF;
- if (name <= SC_RES_HEADERS_NUM) {
- s->out_header_names[i] =
- (char *)jk_requtil_getHeaderById(name);
- } else {
- l->jkLog(l, JK_LOG_ERROR,
- "handler.response() Invalid header id (%d)\n",
- name);
- return JK_HANDLER_FATAL;
- }
+ for(i = 0 ; i < headerCount ; i++) {
+ char *nameS;
+ char *valueS;
+ unsigned short name = msg->peekInt(msg) ;
+
+ if ((name & 0XFF00) == 0XA000) {
+ msg->getInt(msg);
+ name = name & 0X00FF;
+ if (name <= SC_RES_HEADERS_NUM) {
+ nameS =
+ (char *)jk_requtil_getHeaderById(name);
} else {
- s->out_header_names[i] = (char *)msg->getString(msg);
- if (!s->out_header_names[i]) {
- l->jkLog(l, JK_LOG_ERROR,
- "handler.response() Null header name \n");
- return JK_HANDLER_FATAL;
- }
- jk_xlate_from_ascii(s->out_header_names[i],
- strlen(s->out_header_names[i]));
+ l->jkLog(l, JK_LOG_ERROR,
+ "handler.response() Invalid header id (%d)\n",
+ name);
+ return JK_HANDLER_FATAL;
}
- s->out_header_values[i] = (char *)msg->getString(msg);
- if (!s->out_header_values[i]) {
+ } else {
+ nameS = (char *)msg->getString(msg);
+ if (nameS==NULL) {
l->jkLog(l, JK_LOG_ERROR,
- "Error ajp_unmarshal_response - Null header value\n");
+ "handler.response() Null header name \n");
return JK_HANDLER_FATAL;
}
-
- jk_xlate_from_ascii(s->out_header_values[i],
- strlen(s->out_header_values[i]));
-
- l->jkLog(l, JK_LOG_DEBUG,
- "ajp_unmarshal_response: Header[%d] [%s] = [%s]\n",
- i,
- s->out_header_names[i],
- s->out_header_values[i]);
+ jk_xlate_from_ascii(nameS, strlen(nameS));
}
+
+ valueS = (char *)msg->getString(msg);
+ if (valueS==NULL ) {
+ l->jkLog(l, JK_LOG_ERROR,
+ "Error ajp_unmarshal_response - Null header value\n");
+ return JK_HANDLER_FATAL;
+ }
+
+ jk_xlate_from_ascii(valueS,
+ strlen(valueS));
+
+ l->jkLog(l, JK_LOG_DEBUG,
+ "ajp_unmarshal_response: Header[%d] [%s] = [%s]\n",
+ i, nameS, valueS);
+
+ /* Do we want this ? Preserve the headers, maybe someone will
+ need them. Alternative is to use a different buffer every time,
+ which may be more efficient. */
+ /* We probably don't need that, we'll send them in the next call */
+/*Apache does it - will change if we add jk_map_apache
+ nameS=ae->cPool->pstrdup( ae->cPool, nameS ); */
+/* valueS=ae->cPool->pstrdup( ae->cPool, valueS ); */
+
+ s->headers_out->add( NULL, s->headers_out, nameS, valueS );
}
l->jkLog(l, JK_LOG_INFO,
"handler.response(): status=%d headers=%d\n",
- s->status, s->out_headers);
+ s->status, headerCount);
- err=s->start_response(s, s->status, s->msg,
- (const char * const *)s->out_header_names,
- (const char * const *)s->out_header_values,
- s->out_headers);
+ err=s->head(s);
if( err!=JK_TRUE ) {
l->jkLog(l, JK_LOG_ERROR,
"handler.response() Error sending response");
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>