summaryrefslogtreecommitdiffstats
path: root/Utilities/cmcurl/lib/setup-os400.h
blob: 6023ca20ded165bf7302f2939d241d103ab8725a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
#ifndef HEADER_CURL_SETUP_OS400_H
#define HEADER_CURL_SETUP_OS400_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2022, 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 https://curl.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.
 *
 * SPDX-License-Identifier: curl
 *
 ***************************************************************************/


/* 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);
extern int Curl_os400_getpeername(int sd, struct sockaddr *addr, int *addrlen);
extern int Curl_os400_getsockname(int sd, struct sockaddr *addr, int *addrlen);

#define connect                 Curl_os400_connect
#define bind                    Curl_os400_bind
#define sendto                  Curl_os400_sendto
#define recvfrom                Curl_os400_recvfrom
#define getpeername             Curl_os400_getpeername
#define getsockname             Curl_os400_getsockname

#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 */