
/*
* 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_MSG_RECV_H
#define AXIS2_MSG_RECV_H

/**
 * @defgroup axis2_receivers receivers
 * @ingroup axis2
 * @{
 * @}
 */

/** @defgroup axis2_msg_recv message receiver
 * @ingroup axis2_receivers
 * Description.
 * @{
 */

/**
 * @file axis2_msg_recv.h
 * @brief Axis Message Receiver interface. Message Receiver struct.
 * This interface is extended by custom message receivers
 */

#ifdef __cplusplus
extern "C"
{
#endif

#include <axis2_defines.h>
#include <axis2_const.h>
#include <axis2_svc_skeleton.h>
#include <axis2_msg_ctx.h>
#include <axis2_op_ctx.h>
#include <axis2_svr_callback.h>
#include <axis2_svc.h>

    struct axis2_msg_ctx;

    /** Type name for struct axis2_msg_recv*/
    typedef struct axis2_msg_recv axis2_msg_recv_t;

    typedef axis2_status_t(
        AXIS2_CALL
        * AXIS2_MSG_RECV_INVOKE_BUSINESS_LOGIC) (
            axis2_msg_recv_t * msg_recv,
            const axutil_env_t * env,
            struct axis2_msg_ctx * in_msg_ctx,
            struct axis2_msg_ctx * out_msg_ctx);

    typedef axis2_status_t(
        AXIS2_CALL
        * AXIS2_MSG_RECV_RECEIVE) (
            axis2_msg_recv_t * msg_recv,
            const axutil_env_t * env,
            struct axis2_msg_ctx * in_msg_ctx,
            void *callback_recv_param);

	typedef axis2_status_t(
		AXIS2_CALL * AXIS2_MSG_RECV_LOAD_AND_INIT_SVC)(
			axis2_msg_recv_t *msg_recv,
			const axutil_env_t *env,
			struct axis2_svc *svc);

    /**
     * Deallocate memory
     * @param msg_recv pinter to message receiver
     * @param env pointer to environment struct
     * @return void
     */
    AXIS2_EXTERN void AXIS2_CALL
    axis2_msg_recv_free(
        axis2_msg_recv_t * msg_recv,
        const axutil_env_t * env);

    /**
     * This method is called from axis2_engine_receive method. This method's
     * actual implementation is decided from the create method of the 
     * extended message receiver object. There depending on the synchronous or
     * asynchronous type, receive method is assigned with the synchronous or
     * asynchronous implementation of receive.
     * @see raw_xml_in_out_msg_recv_create method where receive is assigned
     * to receive_sync
     * @param msg_recv pointer to message receiver
     * @param env pointer to environment struct
     * @param in_msg_ctx pointer to in message context
     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
     */
    AXIS2_EXTERN axis2_status_t AXIS2_CALL
    axis2_msg_recv_receive(
        axis2_msg_recv_t * msg_recv,
        const axutil_env_t * env,
        struct axis2_msg_ctx *in_msg_ctx,
        void *callback_recv_param);

    /**
     * This contain in out synchronous business invoke logic
     * @param msg_recv pointer to message receiver
     * @param env pointer to environment struct
     * @param in_msg_ctx pointer to in message context
     * @param out_msg_ctx pointer to out message context
     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
     */
    AXIS2_EXTERN axis2_status_t AXIS2_CALL

    axis2_msg_recv_invoke_business_logic(
        axis2_msg_recv_t * msg_recv,
        const axutil_env_t * env,
        struct axis2_msg_ctx *in_msg_ctx,
        struct axis2_msg_ctx *out_msg_ctx);

    /**
     * this will create a new service skeleton object
     * @param msg_recv pointer to message receiver
     * @param env pointer to environment struct
     * @param msg_ctx pointer to message context
     * @return service skeleton object
     */
    AXIS2_EXTERN axis2_svc_skeleton_t *AXIS2_CALL

    axis2_msg_recv_make_new_svc_obj(
        axis2_msg_recv_t * msg_recv,
        const axutil_env_t * env,
        struct axis2_msg_ctx *msg_ctx);

    /**
     * This will return the service skeleton object
     * @param msg_recv pointer to message receiver
     * @param env pointer to environment struct
     * @param msg_ctx pointer to message context
     * @return service skeleton object
     */
    /*AXIS2_EXTERN axis2_svc_skeleton_t *AXIS2_CALL

    axis2_msg_recv_get_impl_obj(
        axis2_msg_recv_t * msg_recv,
        const axutil_env_t * env,
        struct axis2_msg_ctx *msg_ctx);*/

    /**
     * Set the application scope
     * @param msg_recv pointer to message receiver
     * @param env pointer to environment struct
     * @param scope pointer to scope
     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
     */
    AXIS2_EXTERN axis2_status_t AXIS2_CALL
    axis2_msg_recv_set_scope(
        axis2_msg_recv_t * msg_recv,
        const axutil_env_t * env,
        const axis2_char_t * scope);

    /**
     * Get the application scope
     * @param msg_recv pointer to message receiver
     * @env pointer to environment struct
     * @return scope
     */
    AXIS2_EXTERN axis2_char_t *AXIS2_CALL
    axis2_msg_recv_get_scope(
        axis2_msg_recv_t * msg_recv,
        const axutil_env_t * env);

    /**
     * Delete the service skeleton object created by make_new_svc_obj
     * @param msg_recv pointer to message receiver
     * @env pointer to environment struct
     * @param msg_ctx pointer to message context
     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
     */
    AXIS2_EXTERN axis2_status_t AXIS2_CALL
    axis2_msg_recv_delete_svc_obj(
        axis2_msg_recv_t * msg_recv,
        const axutil_env_t * env,
        axis2_msg_ctx_t * msg_ctx);

    AXIS2_EXPORT axis2_status_t AXIS2_CALL

    axis2_msg_recv_set_invoke_business_logic(
        axis2_msg_recv_t * msg_recv,
        const axutil_env_t * env,
        AXIS2_MSG_RECV_INVOKE_BUSINESS_LOGIC func);

    AXIS2_EXPORT axis2_status_t AXIS2_CALL
    axis2_msg_recv_set_derived(
        axis2_msg_recv_t * msg_recv,
        const axutil_env_t * env,
        void *derived);

    AXIS2_EXPORT void *AXIS2_CALL
    axis2_msg_recv_get_derived(
        const axis2_msg_recv_t * msg_recv,
        const axutil_env_t * env);

    AXIS2_EXPORT axis2_status_t AXIS2_CALL
    axis2_msg_recv_set_receive(
        axis2_msg_recv_t * msg_recv,
        const axutil_env_t * env,
        AXIS2_MSG_RECV_RECEIVE func);

	AXIS2_EXPORT axis2_status_t AXIS2_CALL
	axis2_msg_recv_set_load_and_init_svc(
		axis2_msg_recv_t *msg_recv,
		const axutil_env_t *env,
		AXIS2_MSG_RECV_LOAD_AND_INIT_SVC func);

	AXIS2_EXPORT axis2_status_t AXIS2_CALL
	axis2_msg_recv_load_and_init_svc(
		axis2_msg_recv_t *msg_recv,
		const axutil_env_t *env,
		struct axis2_svc *svc);

    /**
     * Create new message receiver object. usually this will be called from the
     * extended message receiver object.
     * @see create method of raw_xml_in_out_msg_recv
     * @param env pointer to environment struct
     * @return newly created message receiver object
     **/
    AXIS2_EXTERN axis2_msg_recv_t *AXIS2_CALL
    axis2_msg_recv_create(
        const axutil_env_t * env);

	/**
	 * Configuration context is attached to the message receiver so that conf_ctx can be assccessed in load_and_init
	 * method at service load time.
	 * @param msg_recv axis2_msg_recv instance
	 * @param env axutil environment 
	 * @param axis2_conf_ctx Configuration context instance
	 */
	AXIS2_EXPORT void AXIS2_CALL
		axis2_msg_recv_set_conf_ctx(
		axis2_msg_recv_t *msg_recv,
		const axutil_env_t *env,
		struct axis2_conf_ctx *conf_ctx);

	/**
	 * Returns the Configuration context which is attached to the message receiver
	 * @param msg_recv axis2_msg_recv instance
	 * @param env axutil environment 
	 * @returns configuration context
	 */
	AXIS2_EXPORT struct axis2_conf_ctx* AXIS2_CALL
		axis2_msg_recv_get_conf_ctx(
		axis2_msg_recv_t *msg_recv,
		const axutil_env_t *env);
    /** @} */
#ifdef __cplusplus
}
#endif

#endif                          /* AXIS2_MSG_RECV_H */
