#ifndef HEADER_CURL_SETUP_OS400_H
#define HEADER_CURL_SETUP_OS400_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at http://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/


/* OS/400 netdb.h does not define NI_MAXHOST. */
#define NI_MAXHOST      1025

/* OS/400 netdb.h does not define NI_MAXSERV. */
#define NI_MAXSERV      32

/* No OS/400 header file defines u_int32_t. */
typedef unsigned long   u_int32_t;


/* System API wrapper prototypes & definitions to support ASCII parameters. */

#include <sys/socket.h>
#include <netdb.h>
#include <gskssl.h>
#include <qsoasync.h>
#include <gssapi.h>

extern int      Curl_getaddrinfo_a(const char * nodename,
                                   const char * servname,
                                   const struct addrinfo * hints,
                                   struct addrinfo * * res);
#define getaddrinfo             Curl_getaddrinfo_a


extern int      Curl_getnameinfo_a(const struct sockaddr * sa,
                                   curl_socklen_t salen,
                                   char * nodename, curl_socklen_t nodenamelen,
                                   char * servname, curl_socklen_t servnamelen,
                                   int flags);
#define getnameinfo             Curl_getnameinfo_a


/* GSKit wrappers. */

extern int      Curl_gsk_environment_open(gsk_handle * my_env_handle);
#define gsk_environment_open    Curl_gsk_environment_open

extern int      Curl_gsk_secure_soc_open(gsk_handle my_env_handle,
                                         gsk_handle * my_session_handle);
#define gsk_secure_soc_open     Curl_gsk_secure_soc_open

extern int      Curl_gsk_environment_close(gsk_handle * my_env_handle);
#define gsk_environment_close   Curl_gsk_environment_close

extern int      Curl_gsk_secure_soc_close(gsk_handle * my_session_handle);
#define gsk_secure_soc_close    Curl_gsk_secure_soc_close

extern int      Curl_gsk_environment_init(gsk_handle my_env_handle);
#define gsk_environment_init    Curl_gsk_environment_init

extern int      Curl_gsk_secure_soc_init(gsk_handle my_session_handle);
#define gsk_secure_soc_init     Curl_gsk_secure_soc_init

extern int      Curl_gsk_attribute_set_buffer_a(gsk_handle my_gsk_handle,
                                                GSK_BUF_ID bufID,
                                                const char * buffer,
                                                int bufSize);
#define gsk_attribute_set_buffer        Curl_gsk_attribute_set_buffer_a

extern int      Curl_gsk_attribute_set_enum(gsk_handle my_gsk_handle,
                                            GSK_ENUM_ID enumID,
                                            GSK_ENUM_VALUE enumValue);
#define gsk_attribute_set_enum  Curl_gsk_attribute_set_enum

extern int      Curl_gsk_attribute_set_numeric_value(gsk_handle my_gsk_handle,
                                                     GSK_NUM_ID numID,
                                                     int numValue);
#define gsk_attribute_set_numeric_value Curl_gsk_attribute_set_numeric_value

extern int      Curl_gsk_attribute_set_callback(gsk_handle my_gsk_handle,
                                                GSK_CALLBACK_ID callBackID,
                                                void * callBackAreaPtr);
#define gsk_attribute_set_callback      Curl_gsk_attribute_set_callback

extern int      Curl_gsk_attribute_get_buffer_a(gsk_handle my_gsk_handle,
                                                GSK_BUF_ID bufID,
                                                const char * * buffer,
                                                int * bufSize);
#define gsk_attribute_get_buffer        Curl_gsk_attribute_get_buffer_a

extern int      Curl_gsk_attribute_get_enum(gsk_handle my_gsk_handle,
                                            GSK_ENUM_ID enumID,
                                            GSK_ENUM_VALUE * enumValue);
#define gsk_attribute_get_enum  Curl_gsk_attribute_get_enum

extern int      Curl_gsk_attribute_get_numeric_value(gsk_handle my_gsk_handle,
                                                     GSK_NUM_ID numID,
                                                     int * numValue);
#define gsk_attribute_get_numeric_value Curl_gsk_attribute_get_numeric_value

extern int      Curl_gsk_attribute_get_cert_info(gsk_handle my_gsk_handle,
                                 GSK_CERT_ID certID,
                                 const gsk_cert_data_elem * * certDataElem,
                                 int * certDataElementCount);
#define gsk_attribute_get_cert_info     Curl_gsk_attribute_get_cert_info

extern int      Curl_gsk_secure_soc_misc(gsk_handle my_session_handle,
                                         GSK_MISC_ID miscID);
#define gsk_secure_soc_misc     Curl_gsk_secure_soc_misc

extern int      Curl_gsk_secure_soc_read(gsk_handle my_session_handle,
                                         char * readBuffer,
                                         int readBufSize, int * amtRead);
#define gsk_secure_soc_read     Curl_gsk_secure_soc_read

extern int      Curl_gsk_secure_soc_write(gsk_handle my_session_handle,
                                          char * writeBuffer,
                                          int writeBufSize, int * amtWritten);
#define gsk_secure_soc_write    Curl_gsk_secure_soc_write

extern const char *     Curl_gsk_strerror_a(int gsk_return_value);
#define gsk_strerror    Curl_gsk_strerror_a

extern int      Curl_gsk_secure_soc_startInit(gsk_handle my_session_handle,
                                      int IOCompletionPort,
                                      Qso_OverlappedIO_t * communicationsArea);
#define gsk_secure_soc_startInit        Curl_gsk_secure_soc_startInit


/* GSSAPI wrappers. */

extern OM_uint32 Curl_gss_import_name_a(OM_uint32 * minor_status,
                                        gss_buffer_t in_name,
                                        gss_OID in_name_type,
                                        gss_name_t * out_name);
#define gss_import_name         Curl_gss_import_name_a


extern OM_uint32 Curl_gss_display_status_a(OM_uint32 * minor_status,
                                           OM_uint32 status_value,
                                           int status_type, gss_OID mech_type,
                                           gss_msg_ctx_t * message_context,
                                           gss_buffer_t status_string);
#define gss_display_status      Curl_gss_display_status_a


extern OM_uint32 Curl_gss_init_sec_context_a(OM_uint32 * minor_status,
                                             gss_cred_id_t cred_handle,
                                             gss_ctx_id_t * context_handle,
                                             gss_name_t target_name,
                                             gss_OID mech_type,
                                             gss_flags_t req_flags,
                                             OM_uint32 time_req,
                                             gss_channel_bindings_t
                                             input_chan_bindings,
                                             gss_buffer_t input_token,
                                             gss_OID * actual_mech_type,
                                             gss_buffer_t output_token,
                                             gss_flags_t * ret_flags,
                                             OM_uint32 * time_rec);
#define gss_init_sec_context    Curl_gss_init_sec_context_a


extern OM_uint32 Curl_gss_delete_sec_context_a(OM_uint32 * minor_status,
                                               gss_ctx_id_t * context_handle,
                                               gss_buffer_t output_token);
#define gss_delete_sec_context  Curl_gss_delete_sec_context_a


/* LDAP wrappers. */

#define BerValue                struct berval

#define ldap_url_parse          ldap_url_parse_utf8
#define ldap_init               Curl_ldap_init_a
#define ldap_simple_bind_s      Curl_ldap_simple_bind_s_a
#define ldap_search_s           Curl_ldap_search_s_a
#define ldap_get_values_len     Curl_ldap_get_values_len_a
#define ldap_err2string         Curl_ldap_err2string_a
#define ldap_get_dn             Curl_ldap_get_dn_a
#define ldap_first_attribute    Curl_ldap_first_attribute_a
#define ldap_next_attribute     Curl_ldap_next_attribute_a

/* Some socket functions must be wrapped to process textual addresses
   like AF_UNIX. */

extern int Curl_os400_connect(int sd, struct sockaddr * destaddr, int addrlen);
extern int Curl_os400_bind(int sd, struct sockaddr * localaddr, int addrlen);
extern int Curl_os400_sendto(int sd, char * buffer, int buflen, int flags,
            struct sockaddr * dstaddr, int addrlen);
extern int Curl_os400_recvfrom(int sd, char * buffer, int buflen, int flags,
                                struct sockaddr * fromaddr, int * addrlen);

#define connect                 Curl_os400_connect
#define bind                    Curl_os400_bind
#define sendto                  Curl_os400_sendto
#define recvfrom                Curl_os400_recvfrom

#ifdef HAVE_LIBZ
#define zlibVersion             Curl_os400_zlibVersion
#define inflateInit_            Curl_os400_inflateInit_
#define inflateInit2_           Curl_os400_inflateInit2_
#define inflate                 Curl_os400_inflate
#define inflateEnd              Curl_os400_inflateEnd
#endif

#endif /* HEADER_CURL_SETUP_OS400_H */
