/*
* Copyright (c) 1999 - 2001 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/


#ifndef NW_LOADREQ_H
#define NW_LOADREQ_H

/*
** Includes
*/
#include "nwx_defs.h"

#include "nw_nvpair.h"
#include "nwx_buffer.h"
#include "nwx_http_header.h"
#include "urlloader_urlresponse.h"
#include "nw_hed_appservices.h"
#include "BrsrStatusCodes.h"
/*
** Type Declarations
*/

/*
** Preprocessor Macro Definitions
*/


#ifdef __cplusplus
extern "C" {
#endif

/*
** Global Function Declarations
*/

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

  Name: NW_LoadReq_Create

  Description:  
    Create loader data structures for an Http load request.
    Helper routine to create request for the loaders. 

  Parameters:   
    url             - in: url to load.
    postMethodFlag  - in: flag indicating HTTP POST method or not.
    referer         - in: referer to the url.
    acceptCharset   - in: character set gateway will accept.
    postfields      - in: postdata name/value pairs.
                      Note: Not const because have to change to iterate over.
    enctype         - in: urlencoded or multipart/form-data.
    docCharset      - in: charset encoding for document.
    header          - in/out: if empty (NULL) a new header is created.
                              if not empty, a copy is made and added to.
    resultUrl       - out: url created for request
    method          - out: post or get.
    body            - out: body for load request.
    appServices ?
    appCtx ?

  Return Value: KBrsrSuccess
                KBrsrFailure
                KBrsrUnsupportedFormCharset
                KBrsrOutOfMemory

  Notes:
     cacheMode not needed for this helper function.

******************************************************************/
TBrowserStatusCode NW_LoadReq_Create ( const NW_Ucs2 *url,
                                const NW_Bool postMethodFlag, 
                                const NW_Ucs2 *referer, 
                                const NW_Ucs2 *acceptCharset,
                                NW_NVPair_t   *postfields,  /* Can't be const. */
                                const NW_Ucs2 *enctype,
                                const NW_Http_CharSet_t docCharset,
                                NW_Http_Header_t **header,  /* Start output params */
                                NW_Ucs2       **resultUrl,
                                NW_Uint8      *method,
                                NW_Buffer_t   **body,
                                NW_HED_AppServices_t * appServices,
                                void * appCtx);


/************************************************************************
 
  Function: NW_LoadReq_BuildQuery

  Description:  Construct a query from the url and escaped_postdata, 
                and places the result in *query.  It is the caller's 
                responsibility to delete the resulting string.
 
                If the number of postfields is 0, the query is just a 
                new copy the original url. This prevents us from 
                appending a lone '?' at the end of a 'canned' query 
                url like 
 
                "http://waplabdc/foo.wml?name=bar;value=foo"
 
  Parameters:   url        - in: pointer to the URL
                postfields - in: pointer to the postfield data
                resultUrl - out: constructed result URL.
                appServices ?
                appCtx ?
    
  Return Value: KBrsrSuccess
                KBrsrFailure
                KBrsrOutOfMemory
                  
**************************************************************************/
TBrowserStatusCode NW_LoadReq_BuildQuery(const NW_Ucs2 *url,
                                  NW_NVPair_t *postfields, 
                                  NW_Ucs2 **resultUrl,
                                  NW_HED_AppServices_t * appServices,
                                  void * appCtx);

/**
* Checks the encoding type to see if it is for a multipart request.
* @since 2.5
* @param aEncodingType Ptr to encoding type string to be checked.
* @return   NW_TRUE if multipart.
*           NW_FALSE if not multipart.
*/
NW_Bool NW_LoadReq_IsMultipart( const NW_Ucs2* aEncodingType );

/**
* Determines whether or not the current part of the multipart post is for a
* file to be uploaded or not.
* @param aValue Ptr to value of the variable.
* @return   NW_TRUE if the part is for file to be uploaded.
*           NW_FALSE if not a file.
*/
NW_Bool NW_LoadReq_IsUploadFile( const NW_Ucs2 *aValue );


#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* NW_NVPAIR_H */


