blob: 8c8f12c5c34c6a82435dfd468d47ea3c4f9580fd [file] [log] [blame]
/*
* 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 */