/*
 * Copyright 2004,2005 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.
 */
 
#ifndef SANDESHA2_APP_MSG_PROCESSOR_H
#define SANDESHA2_APP_MSG_PROCESSOR_H

/**
  * @file sandesha2_app_msg_processor.h
  * @brief 
  */

#include <axutil_utils_defines.h>
#include <axutil_env.h>
#include <sandesha2_msg_processor.h>

#ifdef __cplusplus
extern "C"
{
#endif

struct sandesha2_seq_property_mgr;
struct sandesha2_sender_mgr;
struct sandesha2_storage_mgr;

/** @defgroup sandesha2_app_msg_processor
 * @ingroup sandesha2_msgprocessors
 * @{
 */
    
AXIS2_EXTERN sandesha2_msg_processor_t* AXIS2_CALL
sandesha2_app_msg_processor_create(
    const axutil_env_t *env);
                        
long AXIS2_CALL                 
sandesha2_app_msg_processor_get_prev_msg_no(
    const axutil_env_t *env,
    axis2_char_t *internal_seq_id,
    struct sandesha2_seq_property_mgr *seq_prop_mgr);

axis2_status_t AXIS2_CALL 
sandesha2_app_msg_processor_send_ack_if_reqd(
    const axutil_env_t *env,
    sandesha2_msg_ctx_t *msg_ctx,
    axis2_char_t *msg_str,
    axis2_char_t *rmd_sequence_id,
    struct sandesha2_storage_mgr *storage_mgr,
    struct sandesha2_sender_mgr *sender_mgr,
    struct sandesha2_seq_property_mgr *seq_prop_mgr,
    int mep);

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

#endif                          /* SANDESHA2_APP_MSG_PROCESSOR_H */

