summaryrefslogtreecommitdiffstats
path: root/util/include/platforms/os400/axutil_os400.h
blob: 8c8f12c5c34c6a82435dfd468d47ea3c4f9580fd (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
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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_UNIX_H
#define AXIS2_UNIX_H

#include <axutil_config.h>

/**
  * @file axutil_unix.h
  * @brief axis2 unix platform specific interface
  */

#ifdef __cplusplus
extern "C"
{
#endif

    /** @defgroup axis2_unix Platform Specific
     * @ingroup axis2_platforms_unix
     * @{
     */

    /***************************************************************
     * Default paths to shared library/DLLs and files
     ***************************************************************
     */

#define AXIS2_PLATFORM_DEFAULT_DEPLOY_PATH ""

#define AXIS2_PLATFORM_XMLPARSER_PATH      "libaxis2_parser.so"
#define AXIS2_PLATFORM_TRANSPORTHTTP_PATH  "libhttp_transport.so"
#define AXIS2_PLATFORM_CHANNEL_PATH        "libhttp_channel.so"
#define AXIS2_PLATFORM_SSLCHANNEL_PATH     "Unknown"

#define AXIS2_PLATFORM_LOG_PATH            "/axis2/log/axutil_log"
#define AXIS2_PLATFORM_CLIENTLOG_PATH      "/axis2/log/axis2_client_log"
#define AXIS2_PLATFORM_CONFIG_PATH         "/etc/axiscpp.conf"
#define AXIS2_PLATFORM_SECUREINFO          ""

    /**
     * Resource that contains the configuration
     */
#define AXIS2_CONFIGURATION_RESOURCE "/axis2/axis2.xml"

    /*****************************************************************
     * Library loading and procedure resolution
     ****************************************************************/

#define AXIS2_DLHANDLER void*

#define AXIS2_PLATFORM_LOADLIBINIT()
#define AXIS2_PLATFORM_LOADLIB(_lib)     os400_dlopen(_lib)

#define AXIS2_PLATFORM_UNLOADLIB         os400_dlclose
#define AXIS2_PLATFORM_GETPROCADDR       os400_dlsym
#define AXIS2_PLATFORM_LOADLIBEXIT()
#define AXIS2_PLATFORM_LOADLIB_ERROR     os400_dlerror()

extern void	*os400_dlopen(const char *);
extern void	*os400_dlsym(void *, const char *);
extern int   os400_dlclose(void *);
extern char *os400_dlerror();


    /***************************************************************
     * National Language Support
     ****************************************************************/

// STRTOASC is to translate single byte 'native' character representation to ASCII
// ASCTOSTR is to translate single byte ascii representation to 'native' character (EBCDIC)
// CANNOT be used with constants.  
extern char*      strtoasc( char* );
extern char*      asctostr( char* );
#define AXIS2_PLATFORM_STRTOASC( x ) strtoasc( (char*)(x) )
#define AXIS2_PLATFORM_ASCTOSTR( x ) asctostr( (char*)(x) )

// reference to ebcdic to ascii conversion table 
extern const char EBCDICtoASCII[256];

// Turkish double quote in EBCDIC is not invariant (i.e. the hexadecimal
// value for double quote is different in turkish locale than when running
// in english locale).  This, when using double quotes we must reference the 
// following, which will be set to proper value on EBCDIC-based systems.

extern char AXIS2_PLATFORM_DOUBLE_QUOTE_S[];
extern char AXIS2_PLATFORM_DOUBLE_QUOTE_C;

extern char AXIS2_PLATFORM_XML_ENTITY_REFERENCE_CHARS_S[];

    /***************************************************************
     * Miscellaneous
    ****************************************************************/
#include <sys/time.h>

#include <errno.h>
#include <sys/param.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <sys/stat.h>
#include <sys/types.h>
#include "axutil_uuid_gen_os400.h"   /* uuid_gen unix implementation */
#include <netinet/tcp.h>        /* TCP_NODELAY */
#include <utime.h>

#include "axutil_date_time_util_os400.h"

    /* for file access handling */
#include <unistd.h>

    /* network handling */
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/ioctl.h>

#include <fcntl.h>

    /* dir handling */
#include <sys/types.h>
#include <dirent.h>

#define AXIS2_STRRCHR(x, y) (strrchr(x, y))

#define AXIS2_PLATFORM_SLEEP(x) sleep(0)

    /** sleep function abstraction */
#define AXIS2_SLEEP sleep
#define AXIS2_USLEEP usleep

    /**
     * Platform specific method to obtain current thread ID
     */
#include <pthread.h>
#define AXIS2_PLATFORM_GET_THREAD_ID() os400_getThreadID()

static long long os400_getThreadID()
{
	pthread_id_np_t tid = pthread_getthreadid_np();
	return *((long long *)&tid);
}

    /**
     * Platform specific method to obtain current time in milli seconds
     */
struct os400_timeb                                                               
{                                                                          
     long  time;                       
     long  millitm;                    
};  

static int os400_ftime(struct os400_timeb * tp)
{
    struct timeval t;
    gettimeofday(&t, NULL);
    tp->time    = t.tv_sec;
    tp->millitm = t.tv_usec/1000;
    return 0;
}
#define AXIS2_PLATFORM_GET_TIME_IN_MILLIS os400_ftime
#define AXIS2_PLATFORM_TIMEB os400_timeb

    /**
     * type to be used for 64bit integers
     */
#define AXIS2_LONGLONG long long
#define AXIS2_LONGLONGVALUE(value) value##LL
#define AXIS2_UNSIGNED_LONGLONGVALUE(value) value##ULL

    /**
     * Format string to be used in printf for 64bit integers
     */
#define AXIS2_PRINTF_LONGLONG_FORMAT_SPECIFIER "%lld"
#define AXIS2_PRINTF_LONGLONG_FORMAT_SPECIFIER_CHARS "lld"
#define AXIS2_PRINTF_UNSIGNED_LONGLONG_FORMAT_SPECIFIER "%llu"
#define AXIS2_PRINTF_UNSIGNED_LONGLONG_FORMAT_SPECIFIER_CHARS "llu"

    /**
     * Platform specific path separator char
     */

#define AXIS2_PATH_SEP_CHAR '/'
#define AXIS2_PATH_SEP_STR "/"
#define AXIS2_LIB_PREFIX "lib"
#define AXIS2_LIB_SUFFIX ".so"

    /**
     * Platform specific time
     */
#define AXIS2_TIME_T time_t

    /**
     * Platform specific file handling
     */
#define AXIS2_FOPEN fopen
#define AXIS2_FREAD fread
#define AXIS2_FWRITE fwrite
#define AXIS2_FCLOSE fclose
#define AXIS2_FTELL ftell
#define AXIS2_ACCESS(zpath,imode) access(zpath,imode)
#define AXIS2_R_OK R_OK         /* test for read permission */
#define AXIS2_W_OK W_OK         /* test for write permission */
#define AXIS2_X_OK X_OK         /* test for execute or search permission */
#define AXIS2_F_OK F_OK         /* test whether the directories leading to the file can be
    searched and the file exists */

    /**
     * Platform specific environment variable access method
     */
#define AXIS2_GETENV(_env_var_name) getenv(_env_var_name)

    /**
      * unix specific directory handling functions
      */
#define AXIS2_SCANDIR       os400_scandir
#define AXIS2_ALPHASORT     os400_alphasort
#define AXIS2_OPENDIR       opendir
#define AXIS2_CLOSEDIR      closedir
#define AXIS2_READDIR       readdir
#define AXIS2_READDIR_R     readdir_r
#define AXIS2_REWINDDIR     rewinddir
#define AXIS2_MKDIR			mkdir
#define AXIS2_GETCWD        getcwd
#define AXIS2_CHDIR         chdir

    /**
      * network specific functions and defs
      */
#define axis2_socket_t                      int
#define AXIS2_INVALID_SOCKET                -1
#define AXIS2_INADDR_NONE                   (in_addr_t)-1
#define axis2_unsigned_short_t              uint16_t
#define AXIS2_CLOSE_SOCKET(sock)            close(sock)
#define AXIS2_CLOSE_SOCKET_ON_EXIT(sock)    fcntl(sock,F_SETFD, FD_CLOEXEC)
#define axis2_socket_len_t                  socklen_t
#define AXIS2_SHUT_WR                       SHUT_WR

    /** getopt function */
#define AXIS2_GETOPT getopt

    /** minizip functions */
#define axis2_fill_win32_filefunc(ffunc)
#define AXIS2_UNZOPEN2(zipfilename, ffunc, uf) \
    { \
        uf = unzOpen2(zipfilename,NULL); \
        memset(&ffunc, 0, sizeof(ffunc)); \
    }

    /**
      * handling variable number of arguments (for log.c)
      */
#define AXIS2_VSNPRINTF vsnprintf

#define AXIS2_SNPRINTF snprintf

#define axis2_gmtime_r gmtime_r

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

#endif                          /* AXIS2_UNIX_H */