
/*
* Licensed 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_OUT_TRANSPORT_INFO_H
#define AXIS2_HTTP_OUT_TRANSPORT_INFO_H

/**
 * @defgroup axis2_http_out_transport_info http out transport info
 * @ingroup axis2_core_trans_http
 * Description
 * @{
 */

/**
 * @file axis2_http_out_transport_info.h
 * @brief axis2 HTTP Out Transport Info
 */

#include <axis2_const.h>
#include <axis2_defines.h>
#include <axutil_env.h>
#include <axis2_http_simple_response.h>
#include <axis2_out_transport_info.h>
#include <axis2_transport_receiver.h>

#ifdef __cplusplus
extern "C"
{
#endif

    /** Type name for struct axis2_http_out_transport_info */
    typedef struct axis2_http_out_transport_info
                axis2_http_out_transport_info_t;

    struct axis2_http_out_transport_info
    {
        axis2_out_transport_info_t out_transport;
        axis2_http_simple_response_t *response;
        axis2_transport_receiver_t *server;
        axis2_char_t *encoding;

        axis2_status_t(
            AXIS2_CALL
            * set_content_type)(
                axis2_http_out_transport_info_t * info,
                const axutil_env_t * env,
                const axis2_char_t * content_type);

        axis2_status_t(
            AXIS2_CALL
            * set_char_encoding)(
                axis2_http_out_transport_info_t * info,
                const axutil_env_t * env,
                const axis2_char_t * encoding);
        
        axis2_status_t(
            AXIS2_CALL
            * set_cookie_header)(
                axis2_http_out_transport_info_t * info,
                const axutil_env_t * env,
                const axis2_char_t * cookie_header);
        
        axis2_status_t(
            AXIS2_CALL
            * set_session)(
                axis2_http_out_transport_info_t * info,
                const axutil_env_t * env,
                const axis2_char_t * session_id,
                const axis2_char_t * session_value);

        void(
            AXIS2_CALL
            * free_function)(
                axis2_http_out_transport_info_t * info,
                const axutil_env_t * env);
    };

    /**
     * @param info pointer to info
     * @param env pointer to environment struct
     * @param content_type pointer to content type
     */
    AXIS2_EXTERN int AXIS2_CALL

    axis2_http_out_transport_info_set_content_type(
        axis2_http_out_transport_info_t * info,
        const axutil_env_t * env,
        const axis2_char_t * content_type);

    /**
     * @param info pointer to info
     * @param env pointer to environment struct
     * @param encoding pointer to encoding
     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
     */
    AXIS2_EXTERN axis2_status_t AXIS2_CALL

    axis2_http_out_transport_info_set_char_encoding(
        axis2_http_out_transport_info_t * info,
        const axutil_env_t * env,
        const axis2_char_t * encoding);

    /**
     * @param info pointer to info
     * @param env pointer to environment struct
     * @param cookie_header pointer to cookie_header
     */
    AXIS2_EXTERN axis2_status_t AXIS2_CALL

    axis2_http_out_transport_info_set_cookie_header(
        axis2_http_out_transport_info_t * info,
        const axutil_env_t * env,
        const axis2_char_t * cookie_header);
     
    /** @param info pointer to info
     * @param env pointer to environment struct
     * @param session_str pointer to session string
     */
    AXIS2_EXTERN axis2_status_t AXIS2_CALL

    axis2_http_out_transport_info_set_session(
        axis2_http_out_transport_info_t * info,
        const axutil_env_t * env,
        const axis2_char_t * session_id,
        const axis2_char_t * session_value);


    /**
     * @param out_transport_info pointer to out transport info
     * @param env pointer to environment struct
     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
     */
    AXIS2_EXTERN void AXIS2_CALL
    axis2_http_out_transport_info_free(
        axis2_http_out_transport_info_t * out_transport_info,
        const axutil_env_t * env);

    /**
     * @param env pointer to environment struct
     * @param response pointer to response
     */
    AXIS2_EXTERN axis2_http_out_transport_info_t *AXIS2_CALL

    axis2_http_out_transport_info_create(
        const axutil_env_t * env,
        axis2_http_simple_response_t * response);

    /**
     * Free http_out_transport_info passed as void pointer. This will be
     * cast into appropriate type and then pass the cast object
     * into the http_out_transport_info structure's free method
     * @param transport_info pointer to transport info
     * @param env pointer to environment struct
     */
    AXIS2_EXTERN void AXIS2_CALL
    axis2_http_out_transport_info_free_void_arg(
        void *transport_info,
        const axutil_env_t * env);

    AXIS2_EXTERN void AXIS2_CALL

    axis2_http_out_transport_info_set_char_encoding_func(
        axis2_http_out_transport_info_t * out_transport_info,
        const axutil_env_t * env,
        axis2_status_t(AXIS2_CALL
                * set_encoding)
        (axis2_http_out_transport_info_t *,
                const axutil_env_t *,
                const axis2_char_t *));

    AXIS2_EXTERN void AXIS2_CALL

    axis2_http_out_transport_info_set_content_type_func(
        axis2_http_out_transport_info_t * out_transport_info,
        const axutil_env_t * env,
        axis2_status_t(AXIS2_CALL
                *
                set_content_type)(axis2_http_out_transport_info_t *,
                        const axutil_env_t *,
                        const axis2_char_t *));
    
    AXIS2_EXTERN void AXIS2_CALL
    axis2_http_out_transport_info_set_cookie_header_func(
        axis2_http_out_transport_info_t * out_transport_info,
        const axutil_env_t * env,
        axis2_status_t(AXIS2_CALL
                *
                set_cookie_header)(axis2_http_out_transport_info_t *,
                        const axutil_env_t *,
                        const axis2_char_t *));
    
    AXIS2_EXTERN void AXIS2_CALL
    axis2_http_out_transport_info_set_session_func(
        axis2_http_out_transport_info_t * out_transport_info,
        const axutil_env_t * env,
        axis2_status_t(AXIS2_CALL
                *
                set_session)(axis2_http_out_transport_info_t *,
                        const axutil_env_t *,
                        const axis2_char_t *,
                        const axis2_char_t *));

    AXIS2_EXTERN void AXIS2_CALL
    axis2_http_out_transport_info_set_free_func(
        axis2_http_out_transport_info_t * out_transport_info,
        const axutil_env_t * env,
        void(AXIS2_CALL
                * free_function)(axis2_http_out_transport_info_t *,
                        const axutil_env_t *));

    /** Set content type. */
#define AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_CONTENT_TYPE(out_transport_info, \
               env, content_type) axis2_http_out_transport_info_set_content_type (out_transport_info, env, content_type)

    /** Set char encoding. */
#define AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_CHAR_ENCODING(out_transport_info,\
               env, encoding) axis2_http_out_transport_info_set_char_encoding(out_transport_info, env, encoding)
    
    /** Set cookie_header. */
#define AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_COOKIE_HEADER(out_transport_info, \
               env, cookie_header) axis2_http_out_transport_info_set_cookie_header (out_transport_info, env, cookie_header)
    
    /** Set session. */
#define AXIS2_HTTP_OUT_TRANSPORT_INFO_SET_SESSION(out_transport_info, \
               env, session_id, session_value) axis2_http_out_transport_info_set_session (out_transport_info, env, session_id, session_value)

    /** Free. */
#define AXIS2_HTTP_OUT_TRANSPORT_INFO_FREE(out_transport_info, env)\
                    axis2_http_out_transport_info_free(out_transport_info, env)

    /** @} */
#ifdef __cplusplus
}
#endif
#endif                          /* AXIS2_HTTP_OUT_TRANSPORT_INFO_H */
