summaryrefslogtreecommitdiffstats
path: root/util/include/platforms/unix/axutil_unix.h
blob: a0b00dcfc35ba400886516bd2fd9eee0205ac1b4 (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
282
283
284
285
286
/*
 * 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            "/usr/local/axis2/log/axutil_log"
#define AXIS2_PLATFORM_CLIENTLOG_PATH      "/usr/local/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 "/usr/local/axis2/axis2.xml"

    /*****************************************************************
     * Library loading and procedure resolution
     ****************************************************************/
#ifdef USE_LTDL
#include <ltdl.h>
#define AXIS2_DLHANDLER lt_dlhandle

#define AXIS2_PLATFORM_LOADLIBINIT       lt_dlinit
#define AXIS2_PLATFORM_LOADLIB(_lib)     lt_dlopen(_lib)
#define AXIS2_PLATFORM_UNLOADLIB         lt_dlclose
#define AXIS2_PLATFORM_GETPROCADDR       lt_dlsym
#define AXIS2_PLATFORM_LOADLIBEXIT       lt_dlexit
#define AXIS2_PLATFORM_LOADLIB_ERROR     lt_dlerror()
#else
#include <dlfcn.h>
#define AXIS2_DLHANDLER void*

#define AXIS2_PLATFORM_LOADLIBINIT()
#define AXIS2_PLATFORM_LOADLIB(_lib)     dlopen(_lib, RTLD_LAZY)
    /*#define AXIS2_PLATFORM_LOADLIB(_lib)     dlopen(_lib, RTLD_NOW) */

#define AXIS2_PLATFORM_UNLOADLIB         dlclose
#define AXIS2_PLATFORM_GETPROCADDR       dlsym
#define AXIS2_PLATFORM_LOADLIBEXIT()
#define AXIS2_PLATFORM_LOADLIB_ERROR     dlerror()

#endif

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

    /* CANNOT be used with constants */
#define AXIS2_PLATFORM_STRTOASC( x ) ( x )
#define AXIS2_PLATFORM_ASCTOSTR( x ) ( x )

    /***************************************************************
     * Miscellaneous
    ****************************************************************/
#include <sys/time.h>
#include <sys/timeb.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_unix.h"   /* uuid_gen unix implementation */
#include <netinet/tcp.h>        /* TCP_NODELAY */
#include <utime.h>
#ifdef HAVE_GETOPT_H
#include <getopt.h>
#endif /*HAVE_GETOPT_H*/
#include "axutil_date_time_util_unix.h"

    /* for file access handling */
#ifdef HAVE_UNISTD_H 
#ifndef __APPLE__
#include <unistd.h>
#endif /* ifndef __APPLE__ */
#endif /* HAVE_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

    /**
     * Get the last error code from the system.
     * Please ensure that this is a thread safe implementation
     * and that it returns a long
     * @return long the last error message for this thread
     */

    /*#define AXIS2_GETLASTERROR errno; */

    /**
     * From the last error number get a sensible std::string representing it
     * @param errorNumber the error Number you are trying to get a message for
     * @return the error message. NOTE: The caller is responsible for deleting the returned string
     */

    /*#define AXIS2_PLATFORM_GET_ERROR_MESSAGE(errorNumber) new string(strerror(errorNumber)); */

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

    /**
     * Platform specific method to obtain current time in milli seconds
     */
#define AXIS2_PLATFORM_GET_TIME_IN_MILLIS ftime
#define AXIS2_PLATFORM_TIMEB 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
     */
#ifdef IS_MACOSX
#define AXIS2_PATH_SEP_CHAR '/'
#define AXIS2_PATH_SEP_STR "/"
#define AXIS2_LIB_PREFIX "lib"
#define AXIS2_LIB_SUFFIX ".dylib"
#else
#define AXIS2_PATH_SEP_CHAR '/'
#define AXIS2_PATH_SEP_STR "/"
#define AXIS2_LIB_PREFIX "lib"
#define AXIS2_LIB_SUFFIX ".so"
#endif

    /**
     * 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       scandir
#define AXIS2_ALPHASORT     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 */