From 0425aadc78680e53000fd0108b540d6eca048516 Mon Sep 17 00:00:00 2001 From: gmcdonald Date: Sat, 13 Feb 2010 01:32:03 +0000 Subject: Moving axis svn, part of TLP move INFRA-2441 git-svn-id: http://svn.apache.org/repos/asf/axis/axis2/c/core/trunk@909681 13f79535-47bb-0310-9956-ffa450edef68 --- include/axis2_http_transport_utils.h | 487 +++++++++++++++++++++++++++++++++++ 1 file changed, 487 insertions(+) create mode 100644 include/axis2_http_transport_utils.h (limited to 'include/axis2_http_transport_utils.h') diff --git a/include/axis2_http_transport_utils.h b/include/axis2_http_transport_utils.h new file mode 100644 index 0000000..9cf7563 --- /dev/null +++ b/include/axis2_http_transport_utils.h @@ -0,0 +1,487 @@ +/* + * Licensedo to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + */ + +#ifndef AXIS2_HTTP_TRANSPORT_UTILS_H +#define AXIS2_HTTP_TRANSPORT_UTILS_H + +#define AXIS2_MTOM_OUTPUT_BUFFER_SIZE 1024 + +/** + * @ingroup axis2_core_transport_http + * @{ + */ + +/** + * @file axis2_http_transport_utils.h + * @brief axis2 HTTP Transport Utility functions + * This file includes functions that handles soap and rest request + * that comes to the engine via HTTP protocol. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + typedef enum axis2_http_method_types + { + AXIS2_HTTP_METHOD_GET = 0, + AXIS2_HTTP_METHOD_POST, + AXIS2_HTTP_METHOD_HEAD, + AXIS2_HTTP_METHOD_PUT, + AXIS2_HTTP_METHOD_DELETE + }axis2_http_method_types_t; + + + typedef struct axis2_http_transport_in + { + /** HTTP Content type */ + axis2_char_t *content_type; + /** HTTP Content length */ + int content_length; + /** Input message context */ + axis2_msg_ctx_t *msg_ctx; + + /** soap action */ + axis2_char_t *soap_action; + + /** complete request uri */ + axis2_char_t *request_uri; + + /** Input stream */ + axutil_stream_t *in_stream; + + /** remote request ip corresponds to CGI header REMOTE_ADDR */ + axis2_char_t *remote_ip; + + /** server port */ + axis2_char_t *svr_port; + + /** HTTP transfer encoding header value */ + axis2_char_t *transfer_encoding; + + /** HTTP Accept header */ + axis2_char_t *accept_header; + + /** HTTP Accept language header */ + axis2_char_t *accept_language_header; + + /** HTTP accept charset header */ + axis2_char_t *accept_charset_header; + /** H&TTP METHOD Should be one of AXIS2_HTTP_METHOD_GET | AXIS2_HTTP_METHOD_POST |" + AXIS2_HTTP_METHOD_HEAD | AXIS2_HTTP_METHOD_PUT | AXIS2_HTTP_METHOD_DELETE" */ + int request_method; + /** out transport */ + axis2_http_out_transport_info_t *out_transport_info; + /** this is for serving services html */ + axis2_char_t *request_url_prefix; + + }axis2_http_transport_in_t; + + typedef struct axis2_http_transport_out + { + /** HTTP Status code string */ + axis2_char_t *http_status_code_name; + /** HTTP Status code value */ + int http_status_code; + /** Out message context */ + axis2_msg_ctx_t *msg_ctx; + /** Response data */ + void *response_data; + /** HTTP content type */ + axis2_char_t *content_type; + /** Response data length */ + int response_data_length; + /** content language */ + axis2_char_t *content_language; + /** output headers list */ + axutil_array_list_t *output_headers; + + }axis2_http_transport_out_t; + + /** + * size of the key stored in the session file + */ + #define AXIS2_TRANSPORT_SESSION_KEY_SIZE 64 + /** + * size of the value stored in the session file + */ + #define AXIS2_TRANSPORT_SESSION_VALUE_SIZE 256 + typedef struct axis2_session_file_record + { + axis2_char_t key[AXIS2_TRANSPORT_SESSION_KEY_SIZE]; + axis2_char_t value[AXIS2_TRANSPORT_SESSION_VALUE_SIZE]; + } axis2_session_file_record_t; + + /** + * This will retrieve the session table, set by a service or a module and store it in a session + * file named with the unique session id, generated here in. Then it return the Set-Cookie http + * header with value containing session id and session expire time. + * @param env, environments + * @param msg_ctx + * @return cookie_header + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_session( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx); + + /** + * When the transport receive a Cookie header it calls this function. This will retrieve the + * stored session info from the file related to the id value of the cookie. It also check + * whether the session has timeout by comparing the session expire time contained in the cookie + * value with the expire time contained in the file. If session expired then it return nothing. + * If session is still valid it put the values in a hash table and set it into message context. + * @param env, environments + * @param id + * @param msg_ctx + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_transport_utils_set_session( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx, + axis2_char_t *session_str); + + /** + * After receiving Set-Cookie header in client side store it + * @param env, environments + * @param msg_ctx + * @param cookie + */ + AXIS2_EXTERN void AXIS2_CALL + axis2_http_transport_utils_store_cookie( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx, + axis2_char_t *cookie); + + /** + * Read from cookie store before sending from client side + * @param env, environments + * @param msg_ctx + * @return cookie string + */ + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_read_from_cookie_store( + const axutil_env_t *env, + axis2_msg_ctx_t *msg_ctx); + + /** + * Initialize the axis2_http_tranport_in_t. Before using this structure users should + * initialize it using this method. + * @param in a pointer to a axis2_http_tranport_in_t + * @param env, environments + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_transport_in_init(axis2_http_transport_in_t *in, + const axutil_env_t *env); + + /** + * Uninitialize the axis2_http_tranport_in_t. Before using this structure users should + * initialize it using this method. + * @param in a pointer to a axis2_http_tranport_in_t + * @param env, environments + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_transport_in_uninit(axis2_http_transport_in_t *request, + const axutil_env_t *env); + + /** + * Initialize the axis2_http_tranport_out_t. Before using this structure users should + * initialize it using this method. + * @param out a pointer to a axis2_http_tranport_out_t + * @param env, environments + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_transport_out_init(axis2_http_transport_out_t *out, + const axutil_env_t *env); + + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_transport_out_uninit(axis2_http_transport_out_t *response, + const axutil_env_t *env); + /** + * This methods provides the HTTP request handling functionality using axis2 for server side + * HTTP modules. + * @param env, environments + * @param conf_ctx, Instance of axis2_conf_ctx_t + * @param request, populated instance of axis2_http_transport_in_t struct + * @param response, an instance of axis2_http_transport_out_t struct + * @returns AXIS2_SUCCESS on success, AXIS2_FAILURE Otherwise + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_process_request( + const axutil_env_t *env, + axis2_conf_ctx_t *conf_ctx, + axis2_http_transport_in_t *request, + axis2_http_transport_out_t *response); + + + + /** + * This function handles the HTTP POST request that comes to the axis2 engine. + * The request can be either a SOAP request OR a REST request. + * @param env, axutil_env_t instance + * @param msg_ctx, Input message context. (an instance of axis2_msg_ctx_t struct.) + * @param in_stream, This is the input message content represented as an axutil_stream instance. + * A callback function will be used to read as required from the stream with in the engine. + * @param out_stream, This is the output stream. The outgoing message contents is represented as + * an instance of axutil_stream + * @param content_type, HTTP content type. This value should not be null. + * @param content_length, HTTP Content length value. + * @param soap_action_header, SOAPAction header value. This is only required in case of SOAP 1.1. + * For SOAP 1.2 , the action header will be within the ContentType header and + * this method is able to obtain the extract the action header value from content type. + * @param request_uri, This is the HTTP request uri. Should not be null. + * @returns AXIS2_SUCCESS on success, AXIS2_FAILURE Otherwise + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_process_http_post_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + const int content_length, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri); + + + /** + * This method handles the HTTP put request. Parameters are similar to that of post_request + * method. + * @param env, environment + * @param msg_ctx, in message context. + * @param in_stream, input stream + * @param out_stream, output stream. + * @param content_type, HTTP ContentType header value + * @param content_length, HTTP Content length value + * @param soap_action_header, SOAP Action header value + * @param request_uri, request uri + * @returns AXIS2_SUCCESS on success, AXIS2_FAILURE Otherwise + */ + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_process_http_put_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + const int content_length, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + axis2_http_transport_utils_process_http_get_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri, + axis2_conf_ctx_t * conf_ctx, + axutil_hash_t * request_params); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_http_transport_utils_process_http_head_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri, + axis2_conf_ctx_t * conf_ctx, + axutil_hash_t * request_params); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_http_transport_utils_process_http_delete_request( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axutil_stream_t * out_stream, + const axis2_char_t * content_type, + axutil_string_t * soap_action_header, + const axis2_char_t * request_uri, + axis2_conf_ctx_t * conf_ctx, + axutil_hash_t * request_params); + + AXIS2_EXTERN axiom_stax_builder_t *AXIS2_CALL + + axis2_http_transport_utils_select_builder_for_mime( + const axutil_env_t * env, + axis2_char_t * request_uri, + axis2_msg_ctx_t * msg_ctx, + axutil_stream_t * in_stream, + axis2_char_t * content_type); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL + + axis2_http_transport_utils_do_write_mtom( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx); + + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + + axis2_http_transport_utils_get_request_params( + const axutil_env_t * env, + axis2_char_t * request_uri); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_not_found( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_not_implemented( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_method_not_allowed( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_not_acceptable( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_bad_request( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_request_timeout( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_conflict( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_gone( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_precondition_failed( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_request_entity_too_large( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_service_unavailable( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_internal_server_error( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_http_transport_utils_get_services_html( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + + axis2_http_transport_utils_get_services_static_wsdl( + const axutil_env_t * env, + axis2_conf_ctx_t * conf_ctx, + axis2_char_t * request_url); + + AXIS2_EXTERN axutil_hash_t *AXIS2_CALL + + axis2_http_transport_utils_get_request_params( + const axutil_env_t * env, + axis2_char_t * request_uri); + + AXIS2_EXTERN axiom_soap_envelope_t *AXIS2_CALL + + axis2_http_transport_utils_create_soap_msg( + const axutil_env_t * env, + axis2_msg_ctx_t * msg_ctx, + const axis2_char_t * soap_ns_uri); + + AXIS2_EXTERN axutil_array_list_t* AXIS2_CALL + axis2_http_transport_utils_process_accept_headers( + const axutil_env_t *env, + axis2_char_t *accept_value); + + AXIS2_EXTERN axis2_status_t AXIS2_CALL + axis2_http_transport_utils_send_mtom_message( + axutil_http_chunked_stream_t * chunked_stream, + const axutil_env_t * env, + axutil_array_list_t *mime_parts, + axis2_char_t *sending_callback_name); + + AXIS2_EXTERN void AXIS2_CALL + axis2_http_transport_utils_destroy_mime_parts( + axutil_array_list_t *mime_parts, + const axutil_env_t *env); + + AXIS2_EXTERN void *AXIS2_CALL + axis2_http_transport_utils_initiate_callback( + const axutil_env_t *env, + axis2_char_t *callback_name, + void *user_param, + axiom_mtom_sending_callback_t **callback); + + AXIS2_EXTERN axis2_bool_t AXIS2_CALL axis2_http_transport_utils_is_callback_required( + const axutil_env_t *env, + axutil_array_list_t *mime_parts); + + AXIS2_EXTERN axis2_char_t *AXIS2_CALL + axis2_http_transport_utils_get_session_id_from_cookie( + const axutil_env_t *env, + axis2_char_t *cookie); + + + + /** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* AXIS2_HTTP_TRANSPORT_UTILS_H */ -- cgit v1.1-32-gdbae