/*
 * 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 count 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_HTTP_TRANSPORT_H
#define AXIS2_HTTP_TRANSPORT_H

#include <axis2_const.h>

#ifdef __cplusplus
extern "C"
{
#endif

/**
 * @defgroup axis2_core_transport_http Core HTTP Transport
 * @ingroup axis2_core_transport_http
 * @{
 */

    /** 
    * \brief HTTP protocol and message context constants.
    *
    */
    #define AXIS2_HTTP_OUT_TRANSPORT_INFO "HTTPOutTransportInfo" 
    /**
     * CARRIAGE RETURN AND LINE FEED
     */
    #define AXIS2_HTTP_CRLF "\r\n"
    /**
     * PROTOCOL_VERSION
     */
    #define AXIS2_HTTP_PROTOCOL_VERSION "PROTOCOL"
    
    /**
     * REQUEST_URI
     */
    #define AXIS2_HTTP_REQUEST_URI "REQUEST_URI"
    
    /**
     * RESPONSE_CODE
     */
    #define AXIS2_HTTP_RESPONSE_CODE "RESPONSE_CODE"
    
    /**
     * RESPONSE_WORD
     */
    #define AXIS2_HTTP_RESPONSE_WORD "RESPONSE_WORD"
    
    /**
     * RESPONSE_ACK_CODE_VAL
     */
    #define AXIS2_HTTP_RESPONSE_ACK_CODE_VAL 202

    /*
     * RESPONSE_OK_CODE_VAL
     */
    #define AXIS2_HTTP_RESPONSE_OK_CODE_VAL 200

    /*
     * RESPONSE_CONTINUE_CODE_VAL
     */
    #define AXIS2_HTTP_RESPONSE_CONTINUE_CODE_VAL 100
   
    /*
     * RESPONSE_INTERNAL_SERVER_ERROR_CODE_VAL
     */ 
    #define  AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_VAL 500

    /**
     * SOCKET
     */
    #define AXIS2_SOCKET "SOCKET"
    
    /**
     * HEADER_PROTOCOL_10
     */
    #define AXIS2_HTTP_HEADER_PROTOCOL_10 "HTTP/1.0"
    
    /**
     * HEADER_PROTOCOL_11
     */
    #define AXIS2_HTTP_HEADER_PROTOCOL_11 "HTTP/1.1"
    
    /**
     * CHAR_SET_ENCODING
     */
    #define AXIS2_HTTP_CHAR_SET_ENCODING "charset"
    
    /**
     * HEADER_POST
     */
    #define AXIS2_HTTP_HEADER_POST  "POST"
    
    /**
     * HEADER_GET
     */
    #define AXIS2_HTTP_HEADER_GET "GET"
    
    /**
     * HEADER_HOST
     */
    #define AXIS2_HTTP_HEADER_HOST "Host"
    
    /**
     * HEADER_CONTENT_DESCRIPTION
     */
    #define AXIS2_HTP_HEADER_CONTENT_DESCRIPTION "Content-Description"
    
    /**
     * HEADER_CONTENT_TYPE
     */
    #define AXIS2_HTTP_HEADER_CONTENT_TYPE "Content-Type"
    
    /**
     * HEADER_CONTENT_TYPE
     */
    #define AXIS2_HTTP_HEADER_CONTENT_TYPE_MIME_BOUNDARY "boundary"
    
    /**
     * HEADER_CONTENT_TRANSFER_ENCODING
     */
    #define AXIS2_HTTP_HEADER_CONTENT_TRANSFER_ENCODING \
                                    "Content-Transfer-Encoding"
    
    /**
     * HEADER_CONTENT_LENGTH
     */
    #define AXIS2_HTTP_HEADER_CONTENT_LENGTH "Content-Length"
    
    /**
     * HEADER_CONTENT_LOCATION
     */
    #define AXIS2_HTTP_HEADER_CONTENT_LOCATION "Content-Location"
    
    /**
     * HEADER_CONTENT_ID
     */
    #define AXIS2_HTTP_HEADER_CONTENT_ID "Content-Id"
    
    /**
     * HEADER_SOAP_ACTION
     */
    #define AXIS2_HTTP_HEADER_SOAP_ACTION "SOAPAction"
    
    /**
     * HEADER_AUTHORIZATION
     */
    #define AXIS2_HTTP_HEADER_AUTHORIZATION "Authorization"
    
    /**
     * HEADER_PROXY_AUTHORIZATION
     */
    #define AXIS2_HTTP_HEADER_PROXY_AUTHORIZATION "Proxy-Authorization"
    
    /**
     * HEADER_EXPECT
     */
    #define AXIS2_HTTP_HEADER_EXPECT "Expect"
    
    /**
     * HEADER_EXPECT_100_Continue
     */
    #define AXIS2_HTTP_HEADER_EXPECT_100_CONTINUE "100-continue"
    
    /**
     * HEADER_USER_AGENT
     */
    #define AXIS2_HTTP_HEADER_USER_AGENT "User-Agent"
    
    /**
     * HEADER_CACHE_CONTROL
     */
    #define AXIS2_HTTP_HEADER_CACHE_CONTROL "Cache-Control"
    
    /**
     * HEADER_CACHE_CONTROL_NOCACHE
     */
    #define AXIS2_HTTP_HEADER_CACHE_CONTROL_NOCACHE "no-cache"
    
    /**
     * HEADER_PRAGMA
     */
    #define AXIS2_HTTP_HEADER_PRAGMA "Pragma"
    
    /**
     * HEADER_LOCATION
     */
    #define AXIS2_HTTP_HEADER_LOCATION "Location"
    
    /**
     * REQUEST_HEADERS
     */
    #define AXIS2_HTTP_REQUEST_HEADERS "HTTP-Request-Headers"
    
    /**
     * RESPONSE_HEADERS
     */
    #define AXIS2_HTTP_RESPONSE_HEADERS "HTTP-Response-Headers"
    
    /* http 1.1 */
    
    /**
     * HEADER_TRANSFER_ENCODING
     */
    #define AXIS2_HTTP_HEADER_TRANSFER_ENCODING "Transfer-Encoding"
    
    /**
     * HEADER_TRANSFER_ENCODING_CHUNKED
     */
    #define AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED "chunked"
    
    /**
     * HEADER_CONNECTION
     */
    #define AXIS2_HTTP_HEADER_CONNECTION "Connection"
    
    /**
     * HEADER_CONNECTION_CLOSE
     */
    #define AXIS2_HTTP_HEADER_CONNECTION_CLOSE "close"
    
    /**
     * HEADER_CONNECTION_KEEPALIVE
     */
    #define AXIS2_HTTP_HEADER_CONNECTION_KEEPALIVE "Keep-Alive"
    
    /**
     * HEADER_ACCEPT
     */
    #define AXIS2_HTTP_HEADER_ACCEPT "Accept"
    
    /**
     * HEADER_ACCEPT_TEXT_ALL
     */
    #define AXIS2_HTTP_HEADER_ACCEPT_TEXT_ALL "text/*"
    
    /**
     * HEADER_ACCEPT_TEXT_ALL
     */
    #define AXIS2_HTTP_HEADER_ACCEPT_TEXT_PLAIN "text/plain"
    
    /**
     * HEADER_ACCEPT_TEXT_XML
     */
    #define AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML "text/xml"

    /**
     * HEADER_ACCEPT_APPL_SOAP
     */
    #define AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP "application/soap+xml"
    
    /**
     * HEADER_ACCEPT_MULTIPART_RELATED
     */
    #define AXIS2_HTTP_HEADER_ACCEPT_MULTIPART_RELATED "multipart/related"
    
    /**
     * HEADER_ACCEPT_APPLICATION_DIME
     */
    #define AXIS2_HTTP_HEADER_ACCEPT_APPLICATION_DIME "application/dime"
    
    /**
     * Cookie headers
    */
    #define AXIS2_HTTP_HEADER_COOKIE "Cookie"
    
    /**
    * HEADER_COOKIE2
    */
    #define AXIS2_HTTP_HEADER_COOKIE2 "Cookie2"
    
    /**
    * HEADER_SET_COOKIE
    */
    #define AXIS2_HTTP_HEADER_SET_COOKIE "Set-Cookie"
    
    /**
    * HEADER_SET_COOKIE2
     */
    #define AXIS2_HTTP_HEADER_SET_COOKIE2 "Set-Cookie2"
    
    /**
     * HTTP header field values
     */
    #define AXIS2_HTTP_HEADER_DEFAULT_CHAR_ENCODING "iso-8859-1"
    
    /**
     * REPONSE_HTTP_OK
     */
    #define AXIS2_HTTP_RESPONSE_OK "200 OK"
    
    /**
     * RESPONSE_HTTP_NOCONTENT
     */
    #define AXIS2_HTTP_RESPONSE_NOCONTENT "202 OK";
    
    /**
     * RESPONSE_HTTP_UNAUTHORIZED
     */
    #define AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED "401 Unauthorized"
    
    /**
     * RESPONSE_BAD_REQUEST
     */
    #define AXIS2_HTTP_RESPONSE_BAD_REQUEST "400 Bad Request"
    
    /**
     * RESPONSE_HTTP_INTERNAL_SERVER_ERROR
     */
    #define AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR "500 Internal server error"
    
    /**
     * HTTP_REQ_TYPE
     */
    #define AXIS2_HTTP_REQ_TYPE "HTTP_REQ_TYPE"
    
    /**
     * SO_TIMEOUT
     */
    #define AXIS2_HTTP_SO_TIMEOUT "SO_TIMEOUT"
    
    /**
     * CONNECTION_TIMEOUT
     */
    #define AXIS2_HTTP_CONNECTION_TIMEOUT "CONNECTION_TIMEOUT"
    
    /**
     * DEFAULT_SO_TIMEOUT
     */
    #define AXIS2_HTTP_DEFAULT_SO_TIMEOUT 30000
    
    /**
     * DEFAULT_CONNECTION_TIMEOUT
     */
    #define AXIS2_HTTP_DEFAULT_CONNECTION_TIMEOUT 60000
    
    #define AXIS2_HTTP_PROXY "PROXY"
    
    /**
     * ISO-8859-1 encoding
     */
    #define AXIS2_HTTP_ISO_8859_1 "ISO-8859-1"
    /** 
     * Default charset in content
     */
    #define AXIS2_HTTP_DEFAULT_CONTENT_CHARSET "ISO-8859-1"
	
	/**
     * Field TRANSPORT_HTTP
     */
    #define AXIS2_TRANSPORT_HTTP "http"
	
	/**
	 * Msg context response written key
	 */
	#define AXIS2_RESPONSE_WRITTEN "CONTENT_WRITTEN"
    
    /**
     * Content type for MTOM
     */
    #define MTOM_RECIVED_CONTENT_TYPE "MTOM_RECEIVED"
    
/** @} */
    
#ifdef __cplusplus
}
#endif  
#endif                          /* AXIS2_HTTP_TRANSPORT_H */
