/*
 * 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 AXIS2_SOAP_H
 #define AXIS2_SOAP_H
 
 /**
 * @file axis2_soap.h
 * @brief defines SOAP constants
 */
#ifdef __cplusplus
extern "C"
{
#endif

/**
 * @defgroup axis2 soap constants
 * @ingroup axis2_soap 
 * @{
 */
typedef enum soap_version
{
    AXIS2_SOAP_VERSION_NOT_SET = 0,
    
    AXIS2_SOAP11,
    
    AXIS2_SOAP12    
}axis2_soap_version;



/** soap 11 constants */

#define AXIS2_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI "http://schemas.xmlsoap.org/soap/envelope/"

#define AXIS2_SOAP11_ATTR_ACTOR "actor"

#define AXIS2_SOAP11_SOAP_FAULT_CODE_LOCAL_NAME "faultcode"

#define AXIS2_SOAP11_SOAP_FAULT_STRING_LOCAL_NAME "faultstring"

#define AXIS2_SOAP11_SOAP_FAULT_ACTOR_LOCAL_NAME "faultactor"

#define AXIS2_SOAP11_SOAP_FAULT_DETAIL_LOCAL_NAME "detail"

#define AXIS2_SOAP_11_CONTENT_TYPE "text/xml"

#define AXIS2_SOAP11_FAULT_CODE_SENDER "Client"

#define AXIS2_SOAP11_FAULT_CODE_RECEIVER "Server"

#define AXIS2_SOAP11_SOAP_ACTOR_NEXT "http://schemas.xmlsoap.org/soap/actor/next"


/** soap12 constants */

#define AXIS2_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI "http://www.w3.org/2003/05/soap-envelope"

#define AXIS2_SOAP12_SOAP_ROLE "role"

#define AXIS2_SOAP12_SOAP_RELAY "relay"

#define AXIS2_SOAP12_SOAP_FAULT_CODE_LOCAL_NAME "Code"

#define AXIS2_SOAP12_SOAP_FAULT_SUB_CODE_LOCAL_NAME "Subcode"

#define AXIS2_SOAP12_SOAP_FAULT_VALUE_LOCAL_NAME "Value"

#define AXIS2_SOAP12_SOAP_FAULT_VALUE_VERSION_MISMATCH "VersionMismatch"

#define AXIS2_SOAP12_SOAP_FAULT_VALUE_MUST_UNDERSTAND "MustUnderstant"

#define AXIS2_SOAP12_SOAP_FAULT_VALUE_DATA_ENCODING_UKNOWN "DataEncodingUnknown"

#define AXIS2_SOAP12_SOAP_FAULT_VALUE_SENDER "Sender"

#define AXIS2_SOAP12_SOAP_FAULT_VALUE_RECEIVER "Receiver"

/** SOAP Fault */

#define AXIS2_SOAP12_SOAP_FAULT_REASON_LOCAL_NAME "Reason"

#define AXIS2_SOAP12_SOAP_FAULT_TEXT_LOCAL_NAME "Text"

#define AXIS2_SOAP12_SOAP_FAULT_TEXT_LANG_ATTR_LOCAL_NAME "lang"

#define AXIS2_SOAP12_SOAP_FAULT_TEXT_LANG_ATTR_NS_URI "http://www.w3.org/XML/1998/namespace"

#define AXIS2_SOAP12_SOAP_FAULT_TEXT_LANG_ATTR_NS_PREFIX "xml"

#define AXIS2_SOAP12_SOAP_FAULT_NODE_LOCAL_NAME "Node"

#define AXIS2_SOAP12_SOAP_FAULT_DETAIL_LOCAL_NAME "Detail"

#define AXIS2_SOAP12_SOAP_FAULT_ROLE_LOCAL_NAME "Role"

#define AXIS2_SOAP_12_CONTENT_TYPE "application/soap+xml"

#define AXIS2_SOAP12_FAULT_CODE_SENDER "Sender"

#define AXIS2_SOAP12_FAULT_CODE_RECEIVER "Receiver"

#define AXIS2_SOAP12_SOAP_ROLE_NEXT "http://www.w3.org/2003/05/soap-envelope/role/next"

#define AXIS2_SOAP12_SOAP_ROLE_NONE "http://www.w3.org/2003/05/soap-envelope/role/none"

#define SOAP12_SOAP_ROLE_ULTIMATE_RECEIVER "http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver"

#define AXIS2_SOAP_DEFAULT_NAMESPACE_PREFIX "soapenv"

#define AXIS2_SOAP_ENVELOPE_LOCAL_NAME "Envelope"

#define AXIS2_SOAP_HEADER_LOCAL_NAME "Header"

#define AXIS2_SOAP_BODY_LOCAL_NAME "Body"

#define AXIS2_SOAP_BODY_NAMESPACE_PREFIX AXIS2_SOAP_DEFAULT_NAMESPACE_PREFIX

#define AXIS2_SOAP_BODY_FAULT_LOCAL_NAME "Fault"

/** attribute must understand */

#define AXIS2_SOAP_ATTR_MUST_UNDERSTAND "mustUnderstand"

#define AXIS2_SOAP_ATTR_MUST_UNDERSTAND_TRUE "true"

#define AXIS2_SOAP_ATTR_MUST_UNDERSTAND_FALSE "false"

#define AXIS2_SOAP_ATTR_MUST_UNDERSTAND_0 "0"

#define AXIS2_SOAP_ATTR_MUST_UNDERSTAND_1 "1"

#define AXIS2_SOAP_FAULT_LOCAL_NAME "Fault"

#define AXIS2_SOAP_FAULT_DETAIL_LOCAL_NAME "detail"

#define AXIS2_SOAP_FAULT_NAMESPACE_PREFIX AXIS2_SOAP_DEFAULT_NAMESPACE_PREFIX

#define AXIS2_SOAP_FAULT_DETAIL_EXCEPTION_ENTRY "Exception"

#define AXIS2_SOAP_FAULT_CODE_VERSION_MISMATCH "env:VersionMismatch"

#define AXIS2_SOAP_FAULT_CODE_MUST_UNDERSTAND "env:MustUnderstand"

#define AXIS2_SOAP_FAULT_CODE_DATA_ENCODING_UNKNOWN "env:DataEncodingUnknown"

#define AXIS2_SOAP_FAULT_CODE_SENDER ""

#define AXIS2_SOAP_FAULT_CODE_RECEIVER ""

/** @} */

#ifdef __cplusplus
}
#endif 

#endif /* AXIS2_SOAP_CONSTANTS_H */
