/*
 * 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_ERROR_H
#define AXIS2_ERROR_H

#include <axis2_defines.h>
#include <axis2_allocator.h>

#ifdef __cplusplus
extern "C"
{
#endif
  /** 
    * \brief Axis2 status codes
    *
    * Possible status values for Axis2
    */
    enum axis2_status_codes
    {
        /** Critical Failure state */
        AXIS2_CRTICAL_FAILURE = -1,
        /** Failure state */
        AXIS2_FAILURE,
        /** Success state */
        AXIS2_SUCCESS
    };
  /** 
    * \brief Axis2 error codes
    *
    * Set of error codes for Axis2
    */
    enum axis2_error_codes
    {
        /** No error. 
            This must be the first error all the time and the assigned value of 0 
            must not be changed as it is assumed in the error message array that 
            the error list starts with a value of 0.
            Further, none of the error codes in this enum should not be initialized 
            to an arbitrary value as it is assumed in the implementation when mapping 
            error codes to error messages that the error codes are contiguous and 
            the last error value is always AXIS2_ERROR_LAST.
          */
        AXIS2_ERROR_NONE = 0,
        /** Out of memory */
        AXIS2_ERROR_NO_MEMORY,
        /** NULL paramater was passed when a non NULL parameter was expected */
        AXIS2_ERROR_INVALID_NULL_PARAM,
        /** Iterator state invalid e.g. next called before calling first */
        AXIS2_ERROR_INVALID_ITERATOR_STATE,
        /** Node type is different from what is expected */
        AXIS2_ERROR_INVALID_NODE_TYPE,
        /** axis2_xml_reader returned NULL element */
        AXIS2_ERROR_XML_READER_ELEMENT_NULL,
        /** axis2_xml_reader returned NULL value */
        AXIS2_ERROR_XML_READER_VALUE_NULL,
        /** Builder done with pulling. Cannot pull any more */
        AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL,
        /** Bulder's last node is NULL when it is not supposed to be NULL */
        AXIS2_ERROR_INVALID_BUILDER_STATE_LAST_NODE_NULL,
        /** A document not associated with builder */
        AXIS2_ERROR_BUILDER_NOT_ASSOCIATED_WITH_DOCUMENT,
        /** Discard faile because the builder state is invalid */
        AXIS2_ERROR_INVALID_BUILDER_STATE_CANNOT_DISCARD,
        /** Document root is NULL, when it is not supposed to be NULL */
        AXIS2_ERROR_INVALID_DOCUMENT_STATE_ROOT_NULL,
        /** Undefined namespace used */
        AXIS2_ERROR_INVALID_DOCUMENT_STATE_UNDEFINED_NAMESPACE,
        /** Trying to release unallocated memory */
        AXIS2_ERROR_UNALLOCATED_MEMEORY_RELEASE_REQUESTED,
		/** Struct is not properly initialized */
		AXIS2_ERROR_STRUCT_NOT_INITIALIZED,
		/** Could not open the file */
		AXIS2_ERROR_COULD_NOT_OPEN_FILE,
		/** Environment passed is null */
		AXIS2_ERROR_ENVIRONMENT_IS_NULL,
        /** Parent requested, but parent is null */
        AXIS2_ERROR_INVALID_STATE_PARENT_NULL,
        /** Parameter locked, Cannot override */
        AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE,
        /** Parameter container not set */
        AXIS2_ERROR_INVALID_STATE_PARAM_CONTAINER,
        /** Parameter not set */
        AXIS2_ERROR_INVALID_STATE_PARAM,
        /** Operation accessed has invalid state */
        AXIS2_ERROR_INVALID_STATE_OP,
        /** Service accessed has invalid state */
        AXIS2_ERROR_INVALID_STATE_SVC,
        /** Wsdl Service accessed has invalid state */
        AXIS2_ERROR_INVALID_STATE_WSDL_SVC,
        /** Service group accessed has invalid state */
        AXIS2_ERROR_INVALID_STATE_SVC_GRP,
        /** Wsdl op accessed has invalid state */
        AXIS2_ERROR_INVALID_STATE_WSDL_OP,
        /** Module description accessed has invalid state */
        AXIS2_ERROR_INVALID_STATE_MODULE_DESC,
        /** Array list index out of bounds */
        AXIS2_ERROR_INDEX_OUT_OF_BOUNDS,
        /** Both before and after handlers cannot be the same */
        AXIS2_ERROR_BEFORE_AFTER_HANDLERS_SAME,
        /** First handler of phase already set */
        AXIS2_ERROR_PHASE_FIRST_HANDLER_ALREADY_SET,
        /** Invalid first handler for phase  */
        AXIS2_ERROR_INVALID_PHASE_FIRST_HANDLER,
        /** Last handler of phase already set */
        AXIS2_ERROR_PHASE_LAST_HANDLER_ALREADY_SET,
        /** Invalid last handler for phase  */
        AXIS2_ERROR_INVALID_PHASE_LAST_HANDLER,
        /** Only one handler allowed for phase, adding handler is not allowed  */
        AXIS2_ERROR_PHASE_ADD_HANDLER_INVALID,
        /** Invalid handler rules  */
        AXIS2_ERROR_INVALID_HANDLER_RULES,
        /** Invalid handler state */
        AXIS2_ERROR_INVALID_HANDLER_STATE,
        /** No such element */
        AXIS2_ERROR_NO_SUCH_ELEMENT,
        /** Could not Map the MEP URI to a axis MEP constant value */
        AXIS2_ERROR_COULD_NOT_MAP_MEP_URI_TO_MEP_CONSTANT,
        /** module has alredy engaged to the op op terminated !!! */
        AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_OP,
        /** module has alredy been engaged on the service.Operation terminated !!! */
        AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_SVC,
        /** module has alredy been engaged on the service. Group Operation terminated !!! */
        AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_SVC_GRP,
        /** Invalid message context state  */
        AXIS2_ERROR_INVALID_STATE_MSG_CTX,
        /** Invalid engine config state */
        AXIS2_ERROR_INVALID_STATE_CONF,
        /** Service not yet found */
        AXIS2_ERROR_SERVICE_NOT_YET_FOUND,
        /** error occured creating xml stream writer */
        AXIS2_ERROR_CREATING_XML_STREAM_WRITER,
        /** error occured creating xml stream writer */
        AXIS2_ERROR_CREATING_XML_STREAM_READER,
        
        AXIS2_ERROR_INVALID_MODULE_REF,
        
        AXIS2_ERROR_PHASE_IS_NOT_SPECIFED,
        
        AXIS2_ERROR_SERVICE_MODULE_CAN_NOT_REFER_GLOBAL_PHASE,
        
        AXIS2_ERROR_INVALID_PHASE,
        /** error occured in writing start element in xml writer */
        AXIS2_ERROR_WRITING_START_ELEMENT,
        /** error occured in writing start element in start document in xml writer */
        AXIS2_ERROR_WRITING_START_DOCUMENT,
        /** error occured in writing end element in xml writer */
        AXIS2_ERROR_WRITING_END_ELEMENT,
        /** error occured in writing end document in xml writer */
        AXIS2_ERROR_WRITING_END_DOCUMENT,
        /** error occured in writing start element with namespace in xml writer*/
        AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE,
        /** error occured in writing start element with namespace prefix */
        AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE_PREFIX,
        /** error occured in writing empty element */
        AXIS2_ERROR_WRITING_EMPTY_ELEMENT,
        /** error occured in writing empty element with namespace */
        AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE,
        /** error in writing empty element with namespace prefix */
        AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE_PREFIX,
        /** error in writing attribute */
        AXIS2_ERROR_WRITING_ATTRIBUTE,
        /** error in writing attribute with namespace */
        AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE,
        /** error in writing attribute with namespace prefix */
        AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE_PREFIX,
        /** error in writing comment */
        AXIS2_ERROR_WRITING_COMMENT,
        /** error in writing processing instruction */
        AXIS2_ERROR_WRITING_PROCESSING_INSTRUCTION,
        /** error in writing cdata section */
        AXIS2_ERROR_WTRING_CDATA,
        /** error in writing dtd */
        AXIS2_ERROR_WRITING_DTD,
        /** error in writing default namespace */
        AXIS2_ERROR_WRITING_DEFAULT_NAMESPACE,
        /**Two service can not have same name, a service with same name alredy 
          * exist in the system
          */
        AXIS2_ERROR_TWO_SVCS_CANNOT_HAVE_SAME_NAME,
        /** Message context processing a fault already */
        AXIS2_ERROR_INVALID_STATE_PROCESSING_FAULT_ALREADY,
        /** fault to field not specified in message context */
        AXIS2_ERROR_NOWHERE_TO_SEND_FAULT,
        /* Invalid status line or invalid request line */
        AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE,
        /* Cannot correlate message*/
        AXIS2_ERROR_CANNOT_CORRELATE_MSG,
        AXIS2_ERROR_INVALID_STATE_DESC_BUILDER,
        AXIS2_ERROR_CONF_NOT_FOUND,
        AXIS2_ERROR_MODULE_NOT_FOUND,
        AXIS2_ERROR_DLL_CREATE_FAILED,
        AXIS2_ERROR_DLL_LOADING_FAILED,
        AXIS2_ERROR_SVC_SKELETON_CREATION_FAILED,
        AXIS2_ERROR_HANDLER_CREATION_FAILED,
        AXIS2_ERROR_MSG_RECV_CREATION_FAILED,
        /* Operation cannot be NULL in MEP client */
        AXIS2_ERROR_OPERATION_CANNOT_BE_NULL_IN_MEP_CLIENT,
        /* MEP cannot be NULL in MEP client */
        AXIS2_ERROR_MEP_CANNOT_BE_NULL_IN_MEP_CLIENT,
        /* MEP Mismatch */
        AXIS2_ERROR_MEP_MISMATCH_IN_MEP_CLIENT,
        /* Cannot determine MEP */
        AXIS2_ERROR_MEP_CANNOT_DETERMINE_MEP,
        /** cannot infer transport from URL */
        AXIS2_ERROR_CANNOT_INFER_TRANSPORT,
        /** Invalid SOAP version */
        AXIS2_ERROR_INVALID_SOAP_VERSION,
        /* HTTP version cannot be null in the status/request line */ 
        AXIS2_ERROR_NULL_HTTP_VERSION,
        /* A valid conf_ctx is reqd for the http worker */
        AXIS2_ERROR_NULL_CONFIGURATION_CONTEXT,
        /* We need transport_info in msg_ctx*/
        AXIS2_ERROR_OUT_TRNSPORT_INFO_NULL,
        /** invalid type passed */
        AXIS2_ERROR_INVALID_BASE_TYPE,
        /** Response timed out */
        AXIS2_ERROR_RESPONSE_TIMED_OUT,
        /** Blocking invocation expects response */
        AXIS2_ERROR_BLOCKING_INVOCATION_EXPECTS_RESPONSE,
        /** Client side support only one configuration context */
        AXIS2_ERROR_CLIENT_SIDE_SUPPORT_ONLY_ONE_CONF_CTX,
        /** Unknown Transport */
        AXIS2_ERROR_UNKNOWN_TRANSPORT,
        /** Two way channel needs addressing module to be engaged */
        AXIS2_ERROR_TWO_WAY_CHANNEL_NEEDS_ADDRESSING,
        /** om element is expected */
        AXIS2_ERROR_OM_ELEMENT_EXPECTED,

        AXIS2_ERROR_INVALID_HTTP_INVALID_HEADER_START_LINE,
        /** SOAP envelope or SOAP body NULL */
        AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL,
        /* must understatnd attribute should have values of true or false */
        AXIS2_ERROR_MUST_UNDERSTAND_SHOULD_BE_1_0_TRUE_FALSE,
        
        AXIS2_ERROR_INVALID_VALUE_FOUND_IN_MUST_UNDERSTAND,
        /** only one SOAP fault allowed in SOAP body */
        AXIS2_ERROR_ONLY_ONE_SOAP_FAULT_ALLOWED_IN_BODY,
		/** Error in creating the stream for the socket */
		AXIS2_ERROR_SOCKET_STREAM_CREATION,
		/** Trying to do operation on closed/not opened socket */
		AXIS2_ERROR_INVALID_SOCKET,
		/** Trying to do operation on invalid file descriptor */
		AXIS2_ERROR_INVALID_FD,
		/** Error creating a socket. Most probably error returned by OS */
		AXIS2_ERROR_SOCKET_ERROR,
		/** Invalid IP or hostname */
		AXIS2_ERROR_INVALID_ADDRESS,
		/** Socket bind failed. Another process may be already using this port*/
		AXIS2_ERROR_SOCKET_BIND_FAILED,
		/** URL NULL in http client */
		AXIS2_ERROR_NULL_URL,
        /** A read attempt(HTTP) for the reply without sending the request */
        AXIS2_ERROR_HTTP_REQUEST_NOT_SENT,
        /** Invalid string passed as a http header */
        AXIS2_ERROR_INVALID_HEADER,
        /** No body present in the request or the response */
        AXIS2_ERROR_NULL_BODY,
        /** Invalid SOAP envelope state */
        AXIS2_ERROR_INVALID_SOAP_ENVELOPE_STATE,
        /** Service xml file is not found in the given path */
        AXIS2_ERROR_SERVICE_XML_NOT_FOUND,
        /** Module xml file is not found in the given path */
        AXIS2_ERROR_MODULE_XML_NOT_FOUND_FOR_THE_MODULE,
        
        AXIS2_ERROR_OPERATION_NAME_MISSING,
        
        AXIS2_ERROR_SVC_NAME_ERROR,
        
        AXIS2_ERROR_OP_NAME_MISSING,
        
        AXIS2_ERROR_OUTFLOW_NOT_ALLOWED_IN_TRS_IN,
        
        AXIS2_ERROR_INFLOW_NOT_ALLOWED_IN_TRS_OUT,
        
        AXIS2_ERROR_NO_DISPATCHER_FOUND,
        AXIS2_ERROR_TRANSPORT_SENDER_ERROR,
        AXIS2_ERROR_REPO_CAN_NOT_BE_NULL,
        AXIS2_ERROR_REPOSITORY_NOT_EXIST,
        AXIS2_ERROR_CONFIG_NOT_FOUND,
        AXIS2_PATH_TO_CONFIG_CAN_NOT_BE_NULL,
        AXIS2_ERROR_MODULE_VALIDATION_FAILED,
        AXI2_ERROR_INVALID_PHASE,
        AXIS2_ERROR_INVALID_MODUELE_REF,
        AXIS2_ERROR_INVALID_MODUELE_REF_BY_OP,
        AXIS2_ERROR_INVALID_SVC,
        AXIS2_ERROR_INVALID_MODULE,
        AXIS2_ERROR_MODULE_CREATION_FAILED,
        AXIS2_ERROR_SOAP_ENVELOPE_MUST_HAVE_BODY_ELEMENT,

        AXIS2_ERROR_INVALID_MODULE_CONF,
        
        AXIS2_ERROR_SOAP_MESSAGE_FIRST_ELEMENT_MUST_CONTAIN_LOCAL_NAME,
        /** soap builder encountered multiple headers */
        AXIS2_ERROR_SOAP_BUILDER_MULTIPLE_HEADERS_ENCOUNTERED,
        /** soap builder encounterd body element first and header next */
        AXIS2_ERROR_SOAP_BUILDER_HEADER_BODY_WRONG_ORDER,
        /** soap builder multiple body elements encounterd */
        AXIS2_ERROR_SOAP_BUILDER_MULTIPLE_BODY_ELEMENTS_ENCOUNTERED,
        /** soap builder found a child element other than header or body in envelope 
        element */
        AXIS2_ERROR_SOAP_BUILDER_ENVELOPE_CAN_HAVE_ONLY_HEADER_AND_BODY,

        /* Invalid messge addition , operation context completed */
        AXIS2_ERROR_INVALID_MESSAGE_ADDITION,
        /** invalid soap namespace uri found */
        AXIS2_ERROR_INVALID_SOAP_NAMESPACE_URI,
        /** soap message does not have an envelope element */
        AXIS2_ERROR_SOAP_MESSAGE_DOES_NOT_CONTAIN_AN_ENVELOPE,
       
        AXIS2_ERROR_TRANSPORT_LEVEL_INFORMATION_DOES_NOT_MATCH_WITH_SOAP,
        
        /* Error in writing the response in response writer */
        AXIS2_ERROR_WRITING_RESPONSE,
        
        AXIS2_ERROR_MULTIPLE_CODE_ELEMENTS_ENCOUNTERED,
        
        AXIS2_ERROR_MULTIPLE_REASON_ELEMENTS_ENCOUNTERED,
        
        AXIS2_ERROR_WRONG_ELEMENT_ORDER_ENCOUNTERED,
        
        AXIS2_ERROR_SOAP_FAULT_CODE_DOES_NOT_HAVE_A_VALUE,
        
        AXIS2_ERROR_SOAP_FAULT_SUB_CODE_DOES_NOT_HAVE_A_VALUE,
        
        AXIS2_ERROR_MULTIPLE_NODE_ELEMENTS_ENCOUNTERED,
        AXIS2_ERROR_SOAP_FAULT_REASON_ELEMENT_SHOULD_HAVE_A_TEXT,
        
        AXIS2_ERROR_MULTIPLE_ROLE_ELEMENTS_ENCOUNTERED,
        
        AXIS2_ERROR_SOAP_FAULT_ROLE_ELEMENT_SHOULD_HAVE_A_TEXT,
        
        AXIS2_ERROR_MULTIPLE_DETAIL_ELEMENTS_ENCOUNTERED,
        
        AXIS2_ERROR_UNSUPPORTED_ELEMENT_IN_SOAP_FAULT_ELEMENT,
        
        AXIS2_ERROR_MULTIPLE_SUB_CODE_VALUES_ENCOUNTERED,
        
        AXIS2_ERROR_MULTIPLE_VALUE_ENCOUNTERED_IN_CODE_ELEMENT,
        
        AXIS2_ERROR_SOAP_FAULT_VALUE_SHOULD_BE_PRESENT_BEFORE_SUB_CODE,
        
        AXIS2_ERROR_THIS_LOCALNAME_NOT_SUPPORTED_INSIDE_THE_CODE_ELEMENT,
        
        AXIS2_ERROR_THIS_LOCALNAME_IS_NOT_SUPPORTED_INSIDE_THE_REASON_ELEMENT,
        
        AXIS2_ERROR_THIS_LOCALNAME_IS_NOT_SUPPORTED_INSIDE_THE_SUB_CODE_ELEMENT,

        AXIS2_ERROR_ROLE_ELEMENT_SHOULD_HAVE_A_TEXT,
        
        AXIS2_ERROR_SOAP11_FAULT_ACTOR_SHOULD_NOT_HAVE_CHILD_ELEMENTS,
        /** next method has not been called so cannot remove
        an element before calling next valid for any om iterator */
        AXIS2_ERROR_ITERATOR_NEXT_METHOD_HAS_NOT_YET_BEEN_CALLED,
        /** remove method has alread been called once so cann't remove till 
         next method is called valid for any om children iterator*/
        AXIS2_ERROR_ITERATOR_REMOVE_HAS_ALREADY_BEING_CALLED,
        
        /* OM output is NULL */
        AXIS2_ERROR_NULL_OM_OUTPUT,
        /* We got a NULL strem in the response body */
        AXIS2_ERROR_NULL_STREAM_IN_RESPONSE_BODY,
        AXIS2_ERROR_OM_ELEMENT_MISMATCH,
        AXIS2_ERROR_OM_ELEMENT_INVALID_STATE,
        AXIS2_ERROR_RPC_NEED_MATCHING_CHILD,
        AXIS2_ERROR_UNKNOWN_STYLE,
        /* processing soap11 fault value element should have only
           text as its children */
        AXIS2_ERROR_ONLY_CHARACTERS_ARE_ALLOWED_HERE,

        AXIS2_ERROR_TRANSPORT_RECV_CREATION_FAILED,
        AXIS2_ERROR_TRANSPORT_SENDER_CREATION_FAILED,
        AXIS2_ERROR_NO_TRANSPORT_IN_CONFIGURED,
        AXIS2_ERROR_NO_TRANSPORT_OUT_CONFIGURED,
        /* Listen failed for the server socket */
        AXIS2_ERROR_SOCKET_LISTEN_FAILED,
        AXIS2_ERROR_FILE_NAME_NOT_SET,
        AXIS2_ERROR_REPOS_LISTENER_INIT_FAILED,
        AXIS2_ERROR_INVALID_STATE_DLL_DESC,
        AXIS2_ERROR_UNSUPPORTED_TYPE,
        /* Null soap envelope in msg_ctx */
        AXIS2_ERROR_NULL_SOAP_ENVELOPE_IN_MSG_CTX,
        /* Generation of platform dependent uuid failed */
        AXIS2_ERROR_UUID_GEN_FAILED,
        /** Invalid XML format in request */
        AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST,
        /** Input OM node NULL, Probably error in SOAP request */
        AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL,
        /** Invalid parameters for service operation in SOAP request */
        AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST,
        /* Input stream is NULL in msg_ctx */
        AXIS2_ERROR_NULL_IN_STREAM_IN_MSG_CTX,
        /* NULL stream in the http chunked stream */
        AXIS2_ERROR_NULL_STREAM_IN_CHUNKED_STREAM,
        /* Flow type of PhaseOrder element cannot be null */
        AXIS2_ERROR_FLOW_TYPE_CANNOT_BE_NULL,
        /* Data element of the OM Node is null */
        AXIS2_ERROR_DATA_ELEMENT_IS_NULL,
        /* Wsdl binding name cannot be NULL(Is required) */
        AXIS2_ERROR_WSDL_BINDING_NAME_IS_REQUIRED,
        /* PortType/Interface name cannot be null(Required) */
        AXIS2_ERROR_WSDL_INTERFACE_NAME_IS_REQUIRED,
        /* Wsdl svc name cannot be null(Required) */
        AXIS2_ERROR_WSDL_SVC_NAME_IS_REQUIRED,
        /*Content-Type header missing in HTTP response" */
        AXIS2_ERROR_RESPONSE_CONTENT_TYPE_MISSING,
        /* Wsdl parsing has resulted in an invalid state */
        AXIS2_ERROR_WSDL_PARSER_INVALID_STATE,
        /* Interface or Port Type not found for the binding */
        AXIS2_ERROR_INTERFACE_OR_PORT_TYPE_NOT_FOUND_FOR_THE_BINDING,
		/* Interfaces or Ports not found for the partially built WOM */
		AXIS2_ERROR_INTERFACES_OR_PORTS_NOT_FOUND_FOR_PARTIALLY_BUILT_WOM,
        /* Error occured in transport */
        AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR,
        /** The following has to be the last error value all the time.
            All other error codes should appear above this.
            AXIS2_ERROR_LAST is used to track the number of error codes present
            for the purpose of sizing the error message array.
          */
        AXIS2_ERROR_LAST
    };
        
    struct axis2_error;
    struct axis2_error_ops;
	typedef enum axis2_status_codes axis2_status_codes_t;
	typedef enum axis2_error_codes axis2_error_codes_t;

/**
 * @defgroup axis2_error Error
 * @ingroup axis2_util 
 * @{
 */

  /** 
    * \brief Axis2 error ops struct
    *
    * Encapsulator struct for ops of axis2_error
    */
   AXIS2_DECLARE_DATA typedef struct axis2_error_ops
    {

      /**
        * deallocate memory of a error struct
        * @return axis2_status_t status code
        */

        axis2_status_t (AXIS2_CALL *free)(struct axis2_error *error);
        
      /**
        * get error message for the last error
        * @return error message for the last error. NULL on error.
        */
         axis2_char_t * (AXIS2_CALL *get_message) (struct axis2_error *error);
		
		 axis2_status_t  (AXIS2_CALL *set_error_number) (struct axis2_error *error
				,  axis2_error_codes_t error_number);
		
         axis2_status_t  (AXIS2_CALL *set_status_code) (struct axis2_error *error
				, axis2_status_codes_t status_code);
		
         axis2_status_t  (AXIS2_CALL *get_status_code) (struct axis2_error *error);
			 
    } axis2_error_ops_t;

  /** 
    * \brief Axis2 Error struct
    *
    * Error holds the last errorno
    */
    typedef struct axis2_error
    {
        /** error related ops */
        struct axis2_error_ops *ops;
        /** last error number */
        int error_number;

        int status_code;
    } axis2_error_t;

AXIS2_DECLARE(axis2_status_t) axis2_error_init();

#define AXIS2_ERROR_FREE(error) ((error->ops)->free(error))

#define AXIS2_ERROR_GET_MESSAGE(error) \
    ((error)->ops->get_message(error))

#define AXIS2_ERROR_SET_ERROR_NUMBER(error, error_number) \
        ((error)->ops->set_error_number(error, error_number))
	
#define AXIS2_ERROR_SET_STATUS_CODE(error, status_code) \
        ((error)->ops->set_status_code(error, status_code))
        
#define AXIS2_ERROR_GET_STATUS_CODE(error) ((error)->ops->get_status_code(error))



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


#endif                          /* AXIS2_ERROR_H */
