You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by da...@apache.org on 2004/04/09 12:38:28 UTC
cvs commit: ws-axis/c/src/server/apache mod_axis.c
damitha 2004/04/09 03:38:28
Modified: c/src/server/apache mod_axis.c
Log:
replaced indent tabs with spaces; added apache 2 licence.
Revision Changes Path
1.26 +329 -275 ws-axis/c/src/server/apache/mod_axis.c
Index: mod_axis.c
===================================================================
RCS file: /home/cvs/ws-axis/c/src/server/apache/mod_axis.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- mod_axis.c 5 Apr 2004 10:56:48 -0000 1.25
+++ mod_axis.c 9 Apr 2004 10:38:28 -0000 1.26
@@ -1,3 +1,20 @@
+/* -*- C++ -*- */
+/*
+ * Copyright 2003-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
#include <apache1_3/httpd.h>
#include <apache1_3/http_config.h>
#include <apache1_3/http_core.h>
@@ -10,12 +27,12 @@
#define AXIS_URI_EXTENSION "/axis"
-/* Following is the character that should be used to separate the method name in the
- * SOAPAction header value. Ex: "http://localhost:80/axis/Calculator#Add"
+/* Following is the character that should be used to separate the method name in
+ * the SOAPAction header value. Ex: "http://localhost:80/axis/Calculator#Add"
*/
#define SOAPACTION_METHODNAME_SEPARATOR "#"
-/*#define CHUNCKED_DATA_SUPPORTED*/
+/* #define CHUNCKED_DATA_SUPPORTED */
#define xxx ap_log_rerror(APLOG_MARK,APLOG_ERR, globr,"logged here");
#define yyy ap_log_rerror(APLOG_MARK, APLOG_ERR, globr,"logged here");
@@ -23,340 +40,377 @@
/* file: mod_axis.c */
/* here's the content handler */
-extern int process_request(Ax_soapstream* str);
-/*extern int process(soapstream *);*/
+extern int process_request (Ax_soapstream* str);
+/* extern int process(soapstream *);*/
extern unsigned char chEBuf[1024];
//#define SIZEOFMODULEBUFFER 4096
#define SIZEOFMODULEBUFFER 32
-/**
- * This method adds the http header to the Ax_soapstream. These headers will be dispatched later
- * before sending the http body
+/*
+ * This method adds the http header to the Ax_soapstream. These headers will be
+ * dispatched later before sending the http body
*/
-static void AXISCALL set_transport_information(AXIS_TRANSPORT_INFORMATION_TYPE type, const char* value, Ax_soapstream* stream)
+static void AXISCALL set_transport_information
+ (AXIS_TRANSPORT_INFORMATION_TYPE type, const char*value,
+ Ax_soapstream* stream)
{
- const char* key = NULL;
- switch(type)
- {
- case SOAPACTION_HEADER: /* needed only in the client side ? */
- break;
- case SERVICE_URI: /* need to set ? */
- break;
- case OPERATION_NAME: /* need to set ? */
- break;
- case SOAP_MESSAGE_LENGTH:
- key = "Content-Length"; /*this is apache module and transport is http so the key*/
- break;
- default:;
- }
- if (key)
- {
- ap_table_set(((request_rec*)stream->str.op_stream)->headers_out, key, value);
- }
+ const char* key = NULL;
+ switch (type)
+ {
+ case SOAPACTION_HEADER: /* needed only in the client side ? */
+ break;
+ case SERVICE_URI: /* need to set ? */
+ break;
+ case OPERATION_NAME: /* need to set ? */
+ break;
+ case SOAP_MESSAGE_LENGTH:
+ key = "Content-Length"; /* This is apache module and transport is
+ * http so the key
+ */
+ break;
+ default:;
+ }
+ if (key)
+ {
+ ap_table_set (((request_rec*) stream->str.op_stream)->headers_out,
+ key, value);
+ }
#ifdef CHUNCKED_DATA_SUPPORTED
- ap_send_http_header((request_rec*)hdr->str.op_stream);
- /*should we remove the sent headers ? Sanjaya ?*/
+ ap_send_http_header ((request_rec*) hdr->str.op_stream);
+ /* Should we remove the sent headers ? Sanjaya ? */
#endif
}
-/*Call initialize_module() [of Packet.h] from within this method*/
-static void module_init(server_rec *svr_rec, pool* p)
+/* Call initialize_module() [of Packet.h] from within this method */
+static void module_init (server_rec* svr_rec, pool* p)
{
- initialize_module(1);
+ initialize_module (1);
}
-/**
- * If this module is not handling chunked data transfer, it accumulates all buffers
- * before sending them so that the http header "Content-Length" can be sent before
- * sending the http body
+/*
+ * If this module is not handling chunked data transfer, it accumulates all
+ * buffers before sending them so that the http header "Content-Length" can be
+ * sent before sending the http body
*/
-static AXIS_TRANSPORT_STATUS AXISCALL send_response_bytes(const char* buffer, const void* bufferid, const void* pStream)
+
+static AXIS_TRANSPORT_STATUS AXISCALL send_response_bytes (const char *buffer,
+ const void* bufferid, const void* pStream)
{
- const Ax_soapstream* stream = (Ax_soapstream*) pStream;
+ const Ax_soapstream* stream = (Ax_soapstream*) pStream;
#ifndef CHUNCKED_DATA_SUPPORTED
- int index;
- sendbuffers* pbuffers;
+ int index;
+ sendbuffers *pbuffers;
#endif
- if (!bufferid) /* temporary buffers should always sent immediately */
- {
- ap_rputs(buffer, (request_rec*)(stream->str.op_stream));
- return TRANSPORT_FINISHED;
- }
+ if (!bufferid) /* temporary buffers should always sent immediately */
+ {
+ ap_rputs (buffer, (request_rec*) (stream->str.op_stream));
+ return TRANSPORT_FINISHED;
+ }
#ifdef CHUNCKED_DATA_SUPPORTED
- //Do we need to send any headers and length of this chunk ? Sanjaya ?
- ap_rputs(buffer, (request_rec*)(stream->str.op_stream));
- //Do we need to send any indication to mark the end of this chunk ? Sanjaya ?
- return TRANSPORT_FINISHED;
+ // Do we need to send any headers and length of this chunk ? Sanjaya ?
+ ap_rputs (buffer, (request_rec *) (stream->str.op_stream));
+ /* Do we need to send any indication to mark the end of this
+ * chunk ? Sanjaya ?
+ */
+ return TRANSPORT_FINISHED;
#else
- pbuffers = (sendbuffers*)stream->reserved1;
- for (index=0;index < NO_OF_SERIALIZE_BUFFERS; index++)
- {
- if(!pbuffers[index].buffer)
- {
- pbuffers[index].buffer = buffer;
- pbuffers[index].bufferid = bufferid;
- break;
- }
- }
- return TRANSPORT_IN_PROGRESS;
+ pbuffers = (sendbuffers*) stream->reserved1;
+ for (index = 0; index < NO_OF_SERIALIZE_BUFFERS; index++)
+ {
+ if (!pbuffers[index].buffer)
+ {
+ pbuffers[index].buffer = buffer;
+ pbuffers[index].bufferid = bufferid;
+ break;
+ }
+ }
+ return TRANSPORT_IN_PROGRESS;
#endif
}
-/*Call initialize_process() [of Packet.h] from within this method*/
-static void axis_Init(server_rec *svr_rec, pool* p)
-{}
+/* Call initialize_process() [of Packet.h] from within this method */
+static void axis_Init (server_rec* svr_rec, pool* p)
+{
+}
+
/*Call finalize_process() [of Packet.h] from within this method*/
-static void axis_Fini(server_rec *svr_rec, pool* p)
-{}
+static void axis_Fini (server_rec* svr_rec, pool* p)
+{
+}
-/**
- * This function is called by the Axis Engine whenever it needs to get bytes from the
- * transport layer.
+/*
+ * This function is called by the Axis Engine whenever it needs to get bytes
+ * from the transport layer.
*/
-static AXIS_TRANSPORT_STATUS AXISCALL get_request_bytes(const char** req, int* retsize, const Ax_soapstream* stream)
+static AXIS_TRANSPORT_STATUS AXISCALL get_request_bytes (const char **req,
+ int* retsize, const Ax_soapstream* stream)
{
#ifdef USE_XERCES_PARSER
- int nBufSize = *retsize;
- int len_read;
- char* pBuffer = *req;
- if (!(*req)) return TRANSPORT_FAILED;
- ap_hard_timeout("util_read", (request_rec*)stream->str.ip_stream);
- len_read = ap_get_client_block((request_rec*)stream->str.ip_stream, *req, nBufSize);
- ap_reset_timeout((request_rec*)stream->str.ip_stream);
- *retsize = len_read;
- if (len_read < nBufSize)
- {
- pBuffer[len_read] = '\0';
- return TRANSPORT_FINISHED;
- }
- else
- return TRANSPORT_IN_PROGRESS;
+ int nBufSize = *retsize;
+ int len_read;
+ char* pBuffer = *req;
+ if (!(*req))
+ return TRANSPORT_FAILED;
+ ap_hard_timeout ("util_read", (request_rec*) stream->str.ip_stream);
+ len_read = ap_get_client_block ((request_rec*) stream->str.ip_stream, *req,
+ nBufSize);
+ ap_reset_timeout ((request_rec*) stream->str.ip_stream);
+ *retsize = len_read;
+ if (len_read < nBufSize)
+ {
+ pBuffer[len_read] = '\0';
+ return TRANSPORT_FINISHED;
+ }
+ else
+ return TRANSPORT_IN_PROGRESS;
#else
- /*How can I detect an error when reading stream ? Sanjaya ?
- In case of an error set buffer to null, size 0 and return TRANSPORT_FAILED*/
- int len_read;
- char* pBuffer = stream->reserved2;
- if (!pBuffer) return TRANSPORT_FAILED;
- ap_hard_timeout("util_read", (request_rec*)stream->str.ip_stream);
- len_read = ap_get_client_block((request_rec*)stream->str.ip_stream, pBuffer, SIZEOFMODULEBUFFER);
- ap_reset_timeout((request_rec*)stream->str.ip_stream);
- *req = pBuffer;
- *retsize = len_read;
- if (len_read < SIZEOFMODULEBUFFER)
- {
- pBuffer[len_read] = '\0';
- return TRANSPORT_FINISHED;
- }
- else
- return TRANSPORT_IN_PROGRESS;
+ /*How can I detect an error when reading stream ? Sanjaya ?
+ * In case of an error set buffer to null, size 0 and
+ * return TRANSPORT_FAILED */
+ int len_read;
+ char* pBuffer = stream->reserved2;
+ if (!pBuffer)
+ return TRANSPORT_FAILED;
+ ap_hard_timeout ("util_read", (request_rec*) stream->str.ip_stream);
+ len_read = ap_get_client_block ((request_rec*) stream->str.ip_stream,
+ pBuffer, SIZEOFMODULEBUFFER);
+ ap_reset_timeout ((request_rec*) stream->str.ip_stream);
+ *req = pBuffer;
+ *retsize = len_read;
+ if (len_read < SIZEOFMODULEBUFFER)
+ {
+ pBuffer[len_read] = '\0';
+ return TRANSPORT_FINISHED;
+ }
+ else
+ return TRANSPORT_IN_PROGRESS;
#endif
}
-static void AXISCALL release_receive_buffer(const char* buffer, const Ax_soapstream* stream)
+static void AXISCALL release_receive_buffer (const char* buffer,
+ const Ax_soapstream* stream)
{
-
+
}
-static const char* AXISCALL get_transport_information(AXIS_TRANSPORT_INFORMATION_TYPE type, Ax_soapstream* stream)
+static const char* AXISCALL get_transport_information
+ (AXIS_TRANSPORT_INFORMATION_TYPE type, Ax_soapstream* stream)
{
- const char* ptemp;
- switch(type)
- {
- case SOAPACTION_HEADER:
- return get_property(stream, "SOAPAction");
- case SERVICE_URI:
- if (strstr(stream->so.http->uri_path, AXIS_URI_EXTENSION))
- {
- return strstr(stream->so.http->uri_path, AXIS_URI_EXTENSION) +
- strlen(AXIS_URI_EXTENSION) + 1;
- }
- else
- {
- return stream->so.http->uri_path;
- }
- case OPERATION_NAME:
- ptemp = get_property(stream, "SOAPAction");
- if (ptemp)
- {
- if (strstr(ptemp, SOAPACTION_METHODNAME_SEPARATOR))
- {
- return strstr(ptemp, SOAPACTION_METHODNAME_SEPARATOR) +
- strlen(SOAPACTION_METHODNAME_SEPARATOR);
- }
- else
- {
- return ptemp;
- }
- }
- case SOAP_MESSAGE_LENGTH:
- return get_property(stream, "Content-Length"); /*this is apache module and transport is http so the key*/
- default:;
- }
- return NULL;
+ const char* ptemp;
+ switch (type)
+ {
+ case SOAPACTION_HEADER:
+ return get_property (stream, "SOAPAction");
+ case SERVICE_URI:
+ if (strstr (stream->so.http->uri_path, AXIS_URI_EXTENSION))
+ {
+ return strstr (stream->so.http->uri_path, AXIS_URI_EXTENSION) +
+ strlen (AXIS_URI_EXTENSION) + 1;
+ }
+ else
+ {
+ return stream->so.http->uri_path;
+ }
+ case OPERATION_NAME:
+ ptemp = get_property (stream, "SOAPAction");
+ if (ptemp)
+ {
+ if (strstr (ptemp, SOAPACTION_METHODNAME_SEPARATOR))
+ {
+ return strstr (ptemp, SOAPACTION_METHODNAME_SEPARATOR) +
+ strlen (SOAPACTION_METHODNAME_SEPARATOR);
+ }
+ else
+ {
+ return ptemp;
+ }
+ }
+ case SOAP_MESSAGE_LENGTH:
+ return get_property (stream, "Content-Length");
+ /* this is apache module and transport is http so the key */
+ default:;
+ }
+ return NULL;
}
-static int axis_handler(request_rec *req_rec)
+static int axis_handler (request_rec* req_rec)
{
- int rc;
- Ax_soapstream* sstr;
- array_header* arr;
+ int rc;
+ Ax_soapstream* sstr;
+ array_header* arr;
#ifndef CHUNCKED_DATA_SUPPORTED
- int contentLength=0;
- int index;
- sendbuffers* pbuffers;
- char strtonum[8];
-#endif
- sstr = malloc(sizeof(Ax_soapstream));
- /*populate Ax_soapstream struct with relevant transport function pointers*/
- sstr->transport.pSendFunct = send_response_bytes;
- sstr->transport.pGetFunct = get_request_bytes;
- sstr->transport.pSetTrtFunct = set_transport_information;
- sstr->transport.pGetTrtFunct = get_transport_information;
- sstr->transport.pRelBufFunct = release_receive_buffer;
- sstr->trtype = APTHTTP;
- sstr->so.http = malloc(sizeof(Ax_stream_http));
- /*req_rec is used as both input and output streams*/
- sstr->str.ip_stream = req_rec;
- sstr->str.op_stream = req_rec;
- /*just add some sessionid*/
- sstr->sessionid = "this is temporary session id";
+ int contentLength = 0;
+ int index;
+ sendbuffers* pbuffers;
+ char strtonum[8];
+#endif
+ sstr = malloc (sizeof (Ax_soapstream));
+ /*populate Ax_soapstream struct with relevant transport function pointers */
+ sstr->transport.pSendFunct = send_response_bytes;
+ sstr->transport.pGetFunct = get_request_bytes;
+ sstr->transport.pSetTrtFunct = set_transport_information;
+ sstr->transport.pGetTrtFunct = get_transport_information;
+ sstr->transport.pRelBufFunct = release_receive_buffer;
+ sstr->trtype = APTHTTP;
+ sstr->so.http = malloc (sizeof (Ax_stream_http));
+ /* req_rec is used as both input and output streams */
+ sstr->str.ip_stream = req_rec;
+ sstr->str.op_stream = req_rec;
+ /* just add some sessionid */
+ sstr->sessionid = "this is temporary session id";
#ifdef CHUNCKED_DATA_SUPPORTED
- /* TODO */
- sstr->reserved1 = NULL;
- sstr->reserved2 = NULL;
+ /* TODO */
+ sstr->reserved1 = NULL;
+ sstr->reserved2 = NULL;
#else
- sstr->reserved1 = calloc(NO_OF_SERIALIZE_BUFFERS, sizeof(sendbuffers));
+ sstr->reserved1 = calloc (NO_OF_SERIALIZE_BUFFERS, sizeof (sendbuffers));
#ifdef USE_XERCES_PARSER
#else
- sstr->reserved2 = malloc(SIZEOFMODULEBUFFER);
+ sstr->reserved2 = malloc (SIZEOFMODULEBUFFER);
#endif
#endif
- req_rec->content_type = "text/xml"; /*for SOAP 1.2 this this should be "application/soap+xml" but keep this for the moment*/
- /*set up the read policy from the client.*/
- if ((rc = ap_setup_client_block(req_rec, REQUEST_CHUNKED_ERROR)) != OK)
- {
- if (sstr->reserved1) free(sstr->reserved1);
+ req_rec->content_type = "text/xml";
+ /* for SOAP 1.2 this this should be "application/soap+xml" but keep this for
+ * the moment set up the read policy from the client.
+ */
+ if ((rc = ap_setup_client_block (req_rec, REQUEST_CHUNKED_ERROR)) != OK)
+ {
+ if (sstr->reserved1)
+ free (sstr->reserved1);
#ifdef USE_XERCES_PARSER
#else
- if (sstr->reserved2) free(sstr->reserved2);
+ if (sstr->reserved2)
+ free (sstr->reserved2);
#endif
- free(sstr->so.http);
- free(sstr);
- return rc;
- }
-
- /*the member, "path" of "parsed_uri" contains the uri of the */
- /*request (i.e "/abc/xyz" part of http://somehost/abc/xyz)*/
- sstr->so.http->uri_path = req_rec->parsed_uri.path;
-
- /*ap_table_elts returns an array_header struct. The nelts element of that struct contains the number of*/
- /*input header elements. Finally assigns that to the axis soap data structure. */
- sstr->so.http->ip_headercount = ap_table_elts(req_rec->headers_in)->nelts;
-
- /*casting req_rec->headers_in to axis header struct and assigning that to the axis soap structure. Hope this is ok*/
-
- /*obtain the array_header from the headers_in table and assign it to the axis soap structure*/
- arr = ap_table_elts(req_rec->headers_in);
- sstr->so.http->ip_headers = (Ax_header*)arr->elts;
-
- /*Determine the http method and assign it to the axis soap structure*/
- switch (req_rec->method_number)
- {
- case M_GET:
- sstr->so.http->ip_method = AXIS_HTTP_GET;
- break;
- case M_POST:
- sstr->so.http->ip_method = AXIS_HTTP_POST;
- break;
- default:
- sstr->so.http->ip_method = AXIS_HTTP_UNSUPPORTED;
- }
-
- /*tell the client that we are ready to receive content and check whether client will send content*/
- /*control will pass to this block only if there is body content in the request*/
- if (ap_should_client_block(req_rec));
-
- if(0 != process_request(sstr))
- {
- if (sstr->reserved1) free(sstr->reserved1);
+ free (sstr->so.http);
+ free (sstr);
+ return rc;
+ }
+
+ /* the member, "path" of "parsed_uri" contains the uri of the */
+ /* request (i.e "/abc/xyz" part of http://somehost/abc/xyz) */
+ sstr->so.http->uri_path = req_rec->parsed_uri.path;
+
+ /* ap_table_elts returns an array_header struct. The nelts element of that
+ * struct contains the number of input header elements. Finally assigns that
+ * to the axis soap data structure. */
+ sstr->so.http->ip_headercount = ap_table_elts (req_rec->headers_in)->nelts;
+
+ /* casting req_rec->headers_in to axis header struct and assigning that to
+ * the axis soap structure. Hope this is ok
+ */
+
+ /* obtain the array_header from the headers_in table and assign it to the
+ * axis soap structure
+ */
+ arr = ap_table_elts (req_rec->headers_in);
+ sstr->so.http->ip_headers = (Ax_header*) arr->elts;
+
+ /*Determine the http method and assign it to the axis soap structure */
+ switch (req_rec->method_number)
+ {
+ case M_GET:
+ sstr->so.http->ip_method = AXIS_HTTP_GET;
+ break;
+ case M_POST:
+ sstr->so.http->ip_method = AXIS_HTTP_POST;
+ break;
+ default:
+ sstr->so.http->ip_method = AXIS_HTTP_UNSUPPORTED;
+ }
+
+ /* Tell the client that we are ready to receive content and check whether
+ * client will send content control will pass to this block only if there is
+ * body content in the request
+ */
+ if (ap_should_client_block (req_rec));
+
+ if (0 != process_request (sstr))
+ {
+ if (sstr->reserved1)
+ free (sstr->reserved1);
#ifdef USE_XERCES_PARSER
#else
- if (sstr->reserved2) free(sstr->reserved2);
+ if (sstr->reserved2)
+ free (sstr->reserved2);
#endif
- free(sstr->so.http);
- free(sstr);
- return OK;
- }
+ free (sstr->so.http);
+ free (sstr);
+ return OK;
+ }
#ifdef CHUNCKED_DATA_SUPPORTED
- /*headers have already been sent. see set_transport_information
- http body too have been sent
- Do we need to send any indication to mark end of chuncked data ? Sanjaya ?*/
+ /* headers have already been sent. see set_transport_information
+ * http body too have been sent
+ * Do we need to send any indication to mark end of chuncked
+ * data ? Sanjaya ?
+ */
#else
- /*Calculate Content-Length and set header*/
- pbuffers = (sendbuffers*)sstr->reserved1;
- for (index=0;index < NO_OF_SERIALIZE_BUFFERS; index++)
- {
- if(!pbuffers[index].buffer) break;
- contentLength += strlen(pbuffers[index].buffer);
- }
- if (contentLength != 0) /* do only if the http body is not empty.*/
- {
- sprintf(strtonum, "%d", contentLength);
- set_transport_information(SOAP_MESSAGE_LENGTH, strtonum, sstr);
- ap_send_http_header(req_rec);
- /*Send all buffers*/
- pbuffers = (sendbuffers*)sstr->reserved1;
- for (index=0;index < NO_OF_SERIALIZE_BUFFERS; index++)
- {
- if(!pbuffers[index].buffer) break;
- ap_rputs(pbuffers[index].buffer, req_rec);
- /*Let Axis know that the buffer is no longer in use*/
- axis_buffer_release(pbuffers[index].buffer, pbuffers[index].bufferid , sstr);
- }
- }
- /*Free the array */
- if (sstr->reserved1) free(sstr->reserved1);
+ /* Calculate Content-Length and set header */
+ pbuffers = (sendbuffers*) sstr->reserved1;
+ for (index = 0; index < NO_OF_SERIALIZE_BUFFERS; index++)
+ {
+ if (!pbuffers[index].buffer)
+ break;
+ contentLength += strlen (pbuffers[index].buffer);
+ }
+ if (contentLength != 0) /* do only if the http body is not empty. */
+ {
+ sprintf (strtonum, "%d", contentLength);
+ set_transport_information (SOAP_MESSAGE_LENGTH, strtonum, sstr);
+ ap_send_http_header (req_rec);
+ /* Send all buffers */
+ pbuffers = (sendbuffers*) sstr->reserved1;
+ for (index = 0; index < NO_OF_SERIALIZE_BUFFERS; index++)
+ {
+ if (!pbuffers[index].buffer)
+ break;
+ ap_rputs (pbuffers[index].buffer, req_rec);
+ /* Let Axis know that the buffer is no longer in use */
+ axis_buffer_release (pbuffers[index].buffer,
+ pbuffers[index].bufferid, sstr);
+ }
+ }
+ /* Free the array */
+ if (sstr->reserved1)
+ free (sstr->reserved1);
#ifdef USE_XERCES_PARSER
#else
- if (sstr->reserved2) free(sstr->reserved2);
+ if (sstr->reserved2)
+ free (sstr->reserved2);
#endif
#endif
- free(sstr->so.http);
- free(sstr);
- /*free(arr);*/
- return OK;
+ free (sstr->so.http);
+ free (sstr);
+ /* free(arr); */
+ return OK;
}
+
/* Make the name of the content handler known to Apache */
-static handler_rec axis_handlers[] =
-{
- {"axis", axis_handler},
- {NULL}
-};
+static handler_rec axis_handlers[] = { {"axis", axis_handler}, {NULL} };
+
/* Tell Apache what phases of the transaction we handle */
-module MODULE_VAR_EXPORT axis_module =
-{
- STANDARD_MODULE_STUFF,
- module_init, /* module initializer */
- NULL, /* per-directory config creator */
- NULL, /* dir config merger */
- NULL, /* server config creator */
- NULL, /* server config merger */
- NULL, /* command table */
- axis_handlers, /* [9] content handlers */
- NULL, /* [2] URI-to-filename translation */
- NULL, /* [5] check/validate user_id */
- NULL, /* [6] check user_id is valid *here* */
- NULL, /* [4] check access by host address */
- NULL, /* [7] MIME type checker/setter */
- NULL, /* [8] fixups */
- NULL, /* [10] logger */
- NULL, /* [3] header parser */
- axis_Init, /* process initialization */
- axis_Fini, /* process exit/cleanup */
- NULL /* [1] post read_request handling */
+module MODULE_VAR_EXPORT axis_module = {
+ STANDARD_MODULE_STUFF,
+ module_init, /* module initializer */
+ NULL, /* per-directory config creator */
+ NULL, /* dir config merger */
+ NULL, /* server config creator */
+ NULL, /* server config merger */
+ NULL, /* command table */
+ axis_handlers, /* [9] content handlers */
+ NULL, /* [2] URI-to-filename translation */
+ NULL, /* [5] check/validate user_id */
+ NULL, /* [6] check user_id is valid *here* */
+ NULL, /* [4] check access by host address */
+ NULL, /* [7] MIME type checker/setter */
+ NULL, /* [8] fixups */
+ NULL, /* [10] logger */
+ NULL, /* [3] header parser */
+ axis_Init, /* process initialization */
+ axis_Fini, /* process exit/cleanup */
+ NULL /* [1] post read_request handling */
};
-