summaryrefslogtreecommitdiffstats
path: root/util/include/platforms
diff options
context:
space:
mode:
authorGravatar nadiramra2010-05-30 20:43:13 +0000
committerGravatar nadiramra2010-05-30 20:43:13 +0000
commitcddcc5e6b3d63e42ded5bca4a3e5e7972cb2e216 (patch)
treed619453afb5f99ca02634b8305a0787af69d4de8 /util/include/platforms
parent4952078f0c24283ce57a6d316ef9470caf5a8fb2 (diff)
downloadaxis2c-cddcc5e6b3d63e42ded5bca4a3e5e7972cb2e216.tar.gz
axis2c-cddcc5e6b3d63e42ded5bca4a3e5e7972cb2e216.tar.bz2
AXIS2C-1478 Changes due to port to IBM i (aka OS/400).
git-svn-id: http://svn.apache.org/repos/asf/axis/axis2/c/core/trunk@949568 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'util/include/platforms')
-rw-r--r--util/include/platforms/axutil_platform_auto_sense.h2
-rw-r--r--util/include/platforms/os400/axutil_date_time_util_os400.h46
-rw-r--r--util/include/platforms/os400/axutil_os400.h277
-rw-r--r--util/include/platforms/os400/axutil_thread_os400.h59
-rw-r--r--util/include/platforms/os400/axutil_uuid_gen_os400.h94
5 files changed, 477 insertions, 1 deletions
diff --git a/util/include/platforms/axutil_platform_auto_sense.h b/util/include/platforms/axutil_platform_auto_sense.h
index feec323..2f36a53 100644
--- a/util/include/platforms/axutil_platform_auto_sense.h
+++ b/util/include/platforms/axutil_platform_auto_sense.h
@@ -44,7 +44,7 @@ extern "C"
#include "windows/axutil_date_time_util_windows.h"
#include "windows/axutil_thread_windows.h"
#elif defined ( __OS400__ )
-#include <os400/axis2_os400.h>
+#include "os400/axutil_os400.h"
#elif defined ( AIX )
#include <aix/aix.h>
#elif defined ( HPUX )
diff --git a/util/include/platforms/os400/axutil_date_time_util_os400.h b/util/include/platforms/os400/axutil_date_time_util_os400.h
new file mode 100644
index 0000000..9979395
--- /dev/null
+++ b/util/include/platforms/os400/axutil_date_time_util_os400.h
@@ -0,0 +1,46 @@
+
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain count 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 AXUTIL_DATE_TIME_UTIL_UNIX_H
+#define AXUTIL_DATE_TIME_UTIL_UNIX_H
+
+#include <axutil_utils.h>
+#include <axutil_utils_defines.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/timeb.h>
+#include <time.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ /**
+ * @defgroup axis2_milliseconds
+ * @ingroup axis2_milliseconds
+ * @{
+ */
+ AXIS2_EXTERN int AXIS2_CALL
+ axis2_platform_get_milliseconds(void
+ );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/util/include/platforms/os400/axutil_os400.h b/util/include/platforms/os400/axutil_os400.h
new file mode 100644
index 0000000..e9ca465
--- /dev/null
+++ b/util/include/platforms/os400/axutil_os400.h
@@ -0,0 +1,277 @@
+
+/*
+ * 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) 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 */
diff --git a/util/include/platforms/os400/axutil_thread_os400.h b/util/include/platforms/os400/axutil_thread_os400.h
new file mode 100644
index 0000000..5ee5992
--- /dev/null
+++ b/util/include/platforms/os400/axutil_thread_os400.h
@@ -0,0 +1,59 @@
+
+/*
+ * 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 AXUTIL_THREAD_UNIX_H
+#define AXUTIL_THREAD_UNIX_H
+
+#include <axutil_thread.h>
+#include <pthread.h>
+
+#define SHELL_PATH "/bin/sh"
+
+typedef pthread_t axis2_os_thread_t; /* Native thread */
+
+struct axutil_thread_t
+{
+ pthread_t *td;
+ void *data;
+ axutil_thread_start_t func;
+ axis2_bool_t try_exit;
+};
+
+struct axutil_threadattr_t
+{
+ pthread_attr_t attr;
+};
+
+struct axutil_threadkey_t
+{
+ pthread_key_t key;
+};
+
+struct axutil_thread_once_t
+{
+ pthread_once_t once;
+};
+
+/*************************Thread locking functions*****************************/
+struct axutil_thread_mutex_t
+{
+ axutil_allocator_t *allocator;
+ pthread_mutex_t mutex;
+};
+
+#endif /* AXIS2_THREAD_UNIX_H */
diff --git a/util/include/platforms/os400/axutil_uuid_gen_os400.h b/util/include/platforms/os400/axutil_uuid_gen_os400.h
new file mode 100644
index 0000000..d3b25ba
--- /dev/null
+++ b/util/include/platforms/os400/axutil_uuid_gen_os400.h
@@ -0,0 +1,94 @@
+
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain count 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 AXUTIL_UUID_GEN_UNIX_H
+#define AXUTIL_UUID_GEN_UNIX_H
+
+#include <axutil_utils.h>
+#include <axutil_utils_defines.h>
+
+#define UUIDS_PER_TICK 100
+#define UUID_TIMEOFFSET AXIS2_UNSIGNED_LONGLONGVALUE(0x01B21DD213814000)
+#define AXIS2_LOCAL_MAC_ADDR "000000"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ /**
+ * @defgroup axutil_uuid_gen UUID Generator
+ * @ingroup axis2_util
+ * @{
+ */
+
+ struct axutil_uuid
+ {
+ unsigned int time_low;
+ unsigned short int time_mid;
+ unsigned short int time_high_version;
+ short int clock_variant;
+ unsigned char mac_addr[6];
+ };
+
+ /* bits 0-59 time field
+ * bits 60-63 version
+ * bits 64-65 2 bit variant
+ * bits 66-79 clock sequence
+ * bits 80-107 node MAC address
+ */
+ struct axutil_uuid_st
+ {
+ unsigned char mac[6]; /* pre-determined MAC address */
+ struct timeval time_last; /* last retrieved timestamp */
+ unsigned long time_seq; /* last timestamp sequence counter */
+ short int clock; /* clock tick - incremented random number */
+ };
+
+ typedef struct axutil_uuid axutil_uuid_t;
+
+ /**
+ * Returns the mac address of the first ethernet intsrface
+ * @return MAC address as a <code>char[6]</code>
+ */
+ char *AXIS2_CALL
+ axutil_uuid_get_mac_addr(void
+ );
+
+ /**
+ * Generates a uuid in version1 format (node - timestamp based)
+ * @return generated uuid as a axutil_uuid_t
+ */
+ axutil_uuid_t *AXIS2_CALL
+ axutil_uuid_gen_v1(void
+ );
+
+ /**
+ * Generates a uuid
+ * @return generated uuid as a string
+ */
+ axis2_char_t *AXIS2_CALL
+ axutil_platform_uuid_gen(
+ char *s);
+
+ /** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* AXIS2_UUID_GEN_UNIX_H */