/*
 * 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_CONST_H
#define AXIS2_CONST_H

/**
 * @file axis2.h
 * @brief Axis2c specific global declarations
 */

#include <axutil_env.h>
#include <axutil_utils.h>

#ifdef __cplusplus
extern "C"
{
#endif

    /** @defgroup axis2 Axis2/C project
      * @{
      * @}
      */

    /** \mainpage Axis2/C API Documentation
      *
      * \section intro_sec Introduction
      *
      * This is the API documetation of Axis2/C, a SOAP engine written in C.
      * This implementation is based on the popular Axis2 architecture.
      * <p>We welcome your feedback on this implementation and documentation.
      * Please send your feedback to <a href="mailto:axis-c-user@ws.apache.org">
      * axis-c-user@ws.apache.org</a> and please remember to prefix the subject
      * of the mail with [Axis2].
      *
      */

    /******************************************************************************/

    /********************Axis2 specific constants**********************************/

    /******************************************************************************/

    /**
     * Field SOAP_STYLE_RPC_ENCODED
     */
#define AXIOM_SOAP_STYLE_RPC_ENCODED 1000

    /**
     * Field SOAP_STYLE_RPC_LITERAL
     */

    /*#define AXIOM_SOAP_STYLE_RPC_LITERAL 1001 */

    /**
     * Field SOAP_STYLE_DOC_LITERAL_WRAPPED
     */
#define AXIOM_SOAP_STYLE_DOC_LITERAL_WRAPPED 1002

#define AXIS2_SCOPE "scope"

    /**
     * Field APPLICATION_SCOPE
     */
#define AXIS2_APPLICATION_SCOPE "application"

    /**
     * Field SESSION_SCOPE
     */
#define AXIS2_SESSION_SCOPE "session"

    /**
     * Field GLOBAL_SCOPE
     */
#define AXIS2_MESSAGE_SCOPE "message"

    /**
     * Field PHASE_SERVICE
     */
#define AXIS2_PHASE_SERVICE "service"

    /**
     * Field PHASE_TRANSPORT
     */
#define AXIS2_PHASE_TRANSPORT "transport"

    /**
     * Field PHASE_GLOBAL
     */
#define AXIS2_PHASE_GLOBAL "global"

    /**
     * Field SESSION_CONTEXT_PROPERTY
     */
#define AXIS2_SESSION_CONTEXT_PROPERTY "SessionContext"

    /**
     * TRANSPORT constants
     */
#define AXIS2_TRANSPORT_HTTP	"http"
#define AXIS2_TRANSPORT_SMTP	"smtp"
#define AXIS2_TRANSPORT_TCP		"tcp"
#define AXIS2_TRANSPORT_XMPP	"xmpp"
#define AXIS2_TRANSPORT_HTTPS	"https"
#define AXIS2_TRANSPORT_AMQP	"amqp"
#define AXIS2_TRANSPORT_UDP		"soap.udp"
    typedef enum
    {
        AXIS2_TRANSPORT_ENUM_HTTP = 0,
        AXIS2_TRANSPORT_ENUM_SMTP,
        AXIS2_TRANSPORT_ENUM_TCP,
        AXIS2_TRANSPORT_ENUM_XMPP,
        AXIS2_TRANSPORT_ENUM_HTTPS,
        AXIS2_TRANSPORT_ENUM_AMQP,
		AXIS2_TRANSPORT_ENUM_UDP,
        AXIS2_TRANSPORT_ENUM_MAX
    } AXIS2_TRANSPORT_ENUMS;

    /** Service URL prefix */
#ifndef AXIS2_REQUEST_URL_PREFIX
#define AXIS2_REQUEST_URL_PREFIX "/services"
#endif

#define AXIS2_LISTSERVICES "listServices"

#define AXIS2_LIST_SERVICE_FOR_MODULE_ENGAMNET "listop"

    /**
     * List service for admin page
     */
#define AXIS2_ADMIN_LISTSERVICES "listService"

#define AXIS2_LIST_MODULES "listModules"

#define AXIS2_LIST_GLOABLLY_ENGAGED_MODULES "globalModules"

#define AXIS2_LIST_PHASES "listPhases"

#define AXIS2_ENGAGE_GLOBAL_MODULE "engagingglobally"
#define AXIS2_ENGAGE_MODULE_TO_SERVICE "engageToService"

#define AXIS2_ENGAGE_MODULE_TO_SERVICE_GROUP "engageToServiceGroup"

#define AXIS2_ADMIN_LOGIN "adminlogin"

#define AXIS2_LIST_CONTEXTS "listContexts"
#define AXIS2_LOGOUT "logout"

#define AXIS2_VIEW_GLOBAL_HANDLERS "viewGlobalHandlers"
#define AXIS2_SELECT_SERVICE "selectService"
#define AXIS2_EDIR_SERVICE_PARA "editServicepara"
#define AXIS2_SELECT_SERVICE_FOR_PARA_EDIT "selectServiceParaEdit"
#define AXIS2_VIEW_SERVICE_HANDLERS "viewServiceHandlers"
#define AXIS2_LIST_SERVIC_GROUPS "listServciceGroups"

    /**
     * Field SERVICE_MAP
     */
#define AXIS2_SERVICE_MAP "servicemap"
#define AXIS2_SERVICE_GROUP_MAP "serviceGroupmap"

#define AXIS2_CONFIG_CONTEXT "config_context"
#define AXIS2_ACTION_MAPPING "actionMapping"
#define AXIS2_OUTPUT_ACTION_MAPPING "outputActionMapping"
#define AXI2_FAULT_ACTION_MAPPING "faultActionMapping"

#define AXIS2_SERVICE "service"

#define AXIS2_OPEARTION_MAP "opmap"

    /**
     * Field Available modules
     */
#define AXIS2_MODULE_MAP "modulemap"

#define AXIS2_SELECT_SERVICE_TYPE "SELECT_SERVICE_TYPE"

#define AXIS2_GLOBAL_HANDLERS "axisconfig"
#define AXIS2_SERVICE_HANDLERS "serviceHandlers"

#define AXIS2_PHASE_LIST "phaseList"

#define AXIS2_LIST_OPS_FOR_THE_SERVICE "listOperations"

#define AXIS2_REMOVE_SERVICE "removeService"

#define AXIS2_ENGAGE_STATUS "engagestatus"

    /**
     * Errorness servcie
     */
#define AXIS2_ERROR_SERVICE_MAP "errprservicemap"
#define AXIS2_ERROR_MODULE_MAP "errormodulesmap"

#define AXIS2_IS_FAULTY "Fault"

#define AXIS2_MODULE_ADDRESSING "addressing"

#define AXIS2_USE_SEPARATE_LISTENER "use_listener"

#define AXIS2_USER_NAME "userName"
#define AXIS2_PASSWORD "password"

    /**
     * Field SINGLE_SERVICE
     */
#define AXIS2_SINGLE_SERVICE "singleservice"
#define AXIS2_WSDL_CONTENT "wsdl"
#define AXIS2_REQUEST_WSDL "?wsdl"

#define AXIS2_STYLE_RPC  "rpc"
#define AXIS2_STYLE_DOC  "doc"
#define AXIS2_STYLE_MSG  "msg"

    typedef enum axis2_wsdl_msg_labels
    {
        AXIS2_WSDL_MESSAGE_LABEL_IN = 0,
        AXIS2_WSDL_MESSAGE_LABEL_OUT,
        AXIS2_WSDL_MESSAGE_LABEL_MAX
    } axis2_wsdl_msg_labels_t;

    /*********************Message Exchange Pattern Constants***********************/

    /**
     * Field MEP_URI_IN_ONLY
     */
#define AXIS2_MEP_URI_IN_ONLY "http://www.w3.org/2004/08/wsdl/in-only"

#define AXIS2_MEP_URI_IN_ONLY_WSDL2 "http://www.w3.org/ns/wsdl/in-only"

#define AXIS2_MEP_CONSTANT_IN_ONLY 10

    /**
     * Field MEP_URI_ROBUST_IN_ONLY
     */
#define AXIS2_MEP_URI_ROBUST_IN_ONLY "http://www.w3.org/2004/08/wsdl/robust-in-only"
#define AXIS2_MEP_URI_ROBUST_IN_ONLY_WSDL2 "http://www.w3.org/ns/wsdl/robust-in-only"


#define AXIS2_MEP_CONSTANT_ROBUST_IN_ONLY 11

    /**
     * Field MEP_URI_IN_OUT
     */
#define AXIS2_MEP_URI_IN_OUT "http://www.w3.org/2004/08/wsdl/in-out"

#define AXIS2_MEP_URI_IN_OUT_WSDL2 "http://www.w3.org/ns/wsdl/in-out"

#define AXIS2_MEP_CONSTANT_IN_OUT 12

    /**
     * Field MEP_URI_IN_OPTIONAL_OUT
     */
#define AXIS2_MEP_URI_IN_OPTIONAL_OUT "http://www.w3.org/2004/08/wsdl/in-opt-out"

#define AXIS2_MEP_URI_IN_OPTIONAL_OUT_WSDL2 "http://www.w3.org/ns/wsdl/in-opt-out"

#define AXIS2_MEP_CONSTANT_IN_OPTIONAL_OUT 13

    /**
     * Field MEP_URI_OUT_ONLY
     */
#define AXIS2_MEP_URI_OUT_ONLY "http://www.w3.org/2004/08/wsdl/out-only"

#define AXIS2_MEP_URI_OUT_ONLY_WSDL2 "http://www.w3.org/ns/wsdl/out-only"

#define AXIS2_MEP_CONSTANT_OUT_ONLY 14

    /**
     * Field MEP_URI_ROBUST_OUT_ONLY
     */
#define AXIS2_MEP_URI_ROBUST_OUT_ONLY "http://www.w3.org/2004/08/wsdl/robust-out-only"

#define AXIS2_MEP_URI_ROBUST_OUT_ONLY_WSDL2 "http://www.w3.org/ns/wsdl/robust-out-only"

#define AXIS2_MEP_CONSTANT_ROBUST_OUT_ONLY 15

    /**
     * Field MEP_URI_OUT_IN
     */
#define AXIS2_MEP_URI_OUT_IN "http://www.w3.org/2004/08/wsdl/out-in"

#define AXIS2_MEP_URI_OUT_IN_WSDL2 "http://www.w3.org/ns/wsdl/out-in"

#define AXIS2_MEP_CONSTANT_OUT_IN 16

    /**
     * Field MEP_URI_OUT_OPTIONL_IN
     */
#define AXIS2_MEP_URI_OUT_OPTIONAL_IN "http://www.w3.org/2004/08/wsdl/out-opt-in"

#define AXIS2_MEP_URI_OUT_OPTIONAL_IN_WSDL2 "http://www.w3.org/ns/wsdl/out-opt-in"

#define AXIS2_MEP_CONSTANT_OUT_OPTIONAL_IN 17

#define AXIS2_MEP_CONSTANT_INVALID -1

    /**
     * Field WSDL_MESSAGE_DIRECTION_IN
     */
#define AXIS2_WSDL_MESSAGE_DIRECTION_IN "in"

    /**
     * Field WSDL_MESSAGE_DIRECTION_OUT
     */
#define AXIS2_WSDL_MESSAGE_DIRECTION_OUT "out"

    /**
     * Field AXIS2_REST_HTTP_LOCATION
     */
#define AXIS2_REST_HTTP_LOCATION "RESTLocation"

    /**
     * Field AXIS2_REST_HTTP_METHOD
     */
#define AXIS2_REST_HTTP_METHOD "RESTMethod"

    /**
     * Field AXIS2_DEFAULT_REST_HTTP_METHOD
     */
#define AXIS2_DEFAULT_REST_HTTP_METHOD "defaultRESTMethod"

    /**
     * Field METHOD_NAME_ESCAPE_CHARACTOR
     */

    /* static const char METHOD_NAME_ESCAPE_CHARACTOR '?' */

#define AXIS2_LOGGED "Logged"

    /* static const char SERVICE_NAME_SPLIT_CHAR':' */

    /*********************Configuration *******************************************/

#define AXIS2_ENABLE_REST "enableREST"
#define AXIS2_ENABLE_REST_THROUGH_GET "restThroughGet"

#define AXIS2_FORCE_PROXY_AUTH "forceProxyAuth"
#define AXIS2_FORCE_HTTP_AUTH "forceHTTPAuth"

#define AXIS2_PROXY_AUTH_TYPE "proxyAuthType"
#define AXIS2_HTTP_AUTH_TYPE "HTTPAuthType"

    /**
     * Constant for Testing Proxy Authentication
     */
#define AXIS2_TEST_PROXY_AUTH "testProxyAuth"

    /**
     * Constant for Testing HTTP Authentication
     */
#define AXIS2_TEST_HTTP_AUTH "testHTTPAuth"

    /* add xml declaration */
#define AXIS2_XML_DECLARATION "xml-declaration"
#define AXIS2_ADD_XML_DECLARATION "insert"

    /* globally enable MTOM */
#define AXIS2_ENABLE_MTOM "enableMTOM"
#define AXIS2_ATTACHMENT_DIR "attachmentDIR"
#define AXIS2_MTOM_BUFFER_SIZE "MTOMBufferSize"
#define AXIS2_MTOM_MAX_BUFFERS "MTOMMaxBuffers"
#define AXIS2_MTOM_CACHING_CALLBACK "MTOMCachingCallback"
#define AXIS2_MTOM_SENDING_CALLBACK "MTOMSendingCallback"
#define AXIS2_ENABLE_MTOM_SERVICE_CALLBACK "EnableMTOMServiceCallback"

    /* op_ctx persistance */
#define AXIS2_PERSIST_OP_CTX "persistOperationContext"

#define AXIS2_EXPOSE_HEADERS "exposeHeaders"

    /******************************************************************************/

#define AXIS2_VALUE_TRUE "true"
#define AXIS2_VALUE_FALSE "false"
#define AXIS2_CONTAINER_MANAGED "ContainerManaged"
#define AXIS2_RESPONSE_WRITTEN "CONTENT_WRITTEN"

#define AXIS2_TESTING_PATH "target/test-resources/"

#define AXIS2_TESTING_REPOSITORY "target/test-resources/samples"

    /* Indicate whether the axis2 service should be loaded at start up */
#define AXIS2_LOAD_SVC_STARTUP "loadServiceAtStartup"

    /*************************** REST_WITH_GET ************************************/

#define AXIS2_GET_PARAMETER_OP "op"
#define AXIS2_GET_PARAMETER_URL "http://ws.apache.org/goGetWithREST"

    /******************************************************************************/

#define AXIS2_NAMESPACE_PREFIX "axis2"
#define AXIS2_NAMESPACE_URI "http://ws.apache.org/namespaces/axis2"

#define AXIS2_SVC_GRP_ID "ServiceGroupId"

#define AXIS2_RESPONSE_SOAP_ENVELOPE "Axis2ResponseEnvelope"
#define AXIS2_HANDLER_ALREADY_VISITED "handler_already_visited"
#define AXIS2_IS_SVR_SIDE "axis2_is_svr_side"

#define AXIS2_SERVICE_DIR "servicesDir"
#define AXIS2_MODULE_DIR "moduleDir"

#define AXIS2_MESSAGE_ID_PREFIX "urn:uuid:"

/** Name of anonymous service */
#define AXIS2_ANON_SERVICE  "__ANONYMOUS_SERVICE__"

/** out-only MEP operation name */
#define AXIS2_ANON_OUT_ONLY_OP "__OPERATION_OUT_ONLY__"

/** out-only robust MEP operation name */
#define AXIS2_ANON_ROBUST_OUT_ONLY_OP "__OPERATION_ROBUST_OUT_ONLY__"

/** out-in MEP operation name */
#define AXIS2_ANON_OUT_IN_OP "__OPERATION_OUT_IN__"

/** wsdl location in repo*/
#define AXIS2_WSDL_LOCATION_IN_REPO "woden"

#define AXIS2_SVC_CLIENT_CLOSED "closed"    

#define AXIS2_STATISTICS_COUNT_ARG "stat_count_arg"    

#ifdef __cplusplus
}
#endif

#endif                          /* AXIS2_CONST_H */