axis-c-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dami...@apache.org
Subject svn commit: r958884 [8/9] - in /axis/axis2/c/core/trunk: axiom/src/om/ axiom/src/soap/ samples/client/amqp/echo/ samples/client/amqp/mtom/ samples/client/amqp/notify/ src/core/deployment/ src/core/transport/amqp/receiver/ src/core/transport/amqp/receiv...
Date Tue, 29 Jun 2010 08:57:06 GMT
Modified: axis/axis2/c/core/trunk/util/include/axutil_network_handler.h
URL: http://svn.apache.org/viewvc/axis/axis2/c/core/trunk/util/include/axutil_network_handler.h?rev=958884&r1=958883&r2=958884&view=diff
==============================================================================
--- axis/axis2/c/core/trunk/util/include/axutil_network_handler.h (original)
+++ axis/axis2/c/core/trunk/util/include/axutil_network_handler.h Tue Jun 29 08:57:05 2010
@@ -1,194 +1,194 @@
-
-/*
- * 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_NETWORK_HANDLER_H
-#define AXUTIL_NETWORK_HANDLER_H
-
-#include <axutil_utils.h>
-#include <axutil_utils_defines.h>
-#include <axutil_env.h>
-#include <sys/types.h>
-#include <platforms/axutil_platform_auto_sense.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-    /**
-     * @defgroup axutil_network_handler network handler
-     * @ingroup axis2_util
-     * @{
-     */
-
-    /**
-     * open a socket for a given server
-     * @param server ip address or the fqn of the server
-     * @param port port of the service
-     * @return opened socket
-     */
-    AXIS2_EXTERN axis2_socket_t AXIS2_CALL
-
-    axutil_network_handler_open_socket(
-        const axutil_env_t * env,
-        char *server,
-        int port);
-
-    /**
-     * creates a server socket for a given port
-     * @param port port of the socket to be bound
-     * @return creates server socket
-     */
-    AXIS2_EXTERN axis2_socket_t AXIS2_CALL
-
-    axutil_network_handler_create_server_socket(
-        const axutil_env_t * env,
-        int port);
-
-    /**
-     * closes a socket
-     * @param opened socket that need to be closed
-     * @return status code
-     */
-    AXIS2_EXTERN axis2_status_t AXIS2_CALL
-
-    axutil_network_handler_close_socket(
-        const axutil_env_t * env,
-        axis2_socket_t socket);
-
-    /**
-     * used to set up socket options such as timeouts, non-blocking ..etc
-     * @param socket valid socket (obtained by socket() or similar call)
-     * @param option the name of the option
-     * @param value Value to be set
-     * @return status of the operations as axis2_status_t
-     */
-    AXIS2_EXTERN axis2_status_t AXIS2_CALL
-
-    axutil_network_handler_set_sock_option(
-        const axutil_env_t * env,
-        axis2_socket_t socket,
-        int option,
-        int value);
-
-    /**
-     * Accepts remote connections for a server socket
-     * @param socket valid server socket (obtained by socket() or similar call)
-     * @return created socket to handle the incoming client connection
-     */
-    AXIS2_EXTERN axis2_socket_t AXIS2_CALL
-
-    axutil_network_handler_svr_socket_accept(
-        const axutil_env_t * env,
-        axis2_socket_t socket);
-
-    /**
-     * Returns the ip address of the server associated with the socket
-     * @param socket valid socket (obtained by accept() or similar call)
-     * @return ip address asoociated with the socket or NULL
-     */
-    AXIS2_EXTERN axis2_char_t *AXIS2_CALL
-    axutil_network_handler_get_svr_ip(
-        const axutil_env_t * env,
-        axis2_socket_t socket);
-
-    AXIS2_EXTERN axis2_char_t *AXIS2_CALL
-    axutil_network_handler_get_peer_ip(
-        const axutil_env_t * env,
-        axis2_socket_t socket);
-
-	/* 
-	 * Create a datagram socket. 
-	 * @param env pointer to env
-	 * @return a datagram socket
-	 */
-	AXIS2_EXTERN axis2_socket_t AXIS2_CALL
-	axutil_network_handler_open_dgram_socket(const axutil_env_t *env);
-
-	/*
-	 * Send a UDP packet to the given source and port address.
-	 * Read a incoming UDP packet from the port and server address.
-	 * @param env pointer to the env structure
-	 * @param socket a datagram socket
-	 * @param buffer a buffer containing the data to be sent
-	 * @param buf_len length of the buffer
-	 * @param addr address of the source field
-	 * @param port udp port number
-	 * @return success if everything goes well
-	 */
-	AXIS2_EXTERN axis2_status_t AXIS2_CALL 
-	axutil_network_handler_send_dgram(const axutil_env_t *env, axis2_socket_t socket, 
-								 axis2_char_t *buff, int *buf_len, 
-								 axis2_char_t *addr, int dest_port, int *source_port);
-
-	/* 
-	 * Read a incoming UDP packet from the port and server address.
-	 * @param env pointer to the env structure
-	 * @param socket a datagram socket
-	 * @param buffer a buffer allocated and passed to be filled
-	 * @param buf_len length of the buffer allocated. In return buffer len 
-	                  contains the length of the data read
-	 * @param addr address of the sender. This is a return value.
-	 * @param port senders port address. Return value
-	 * @return if everything goes well return success 
-	 */
-	AXIS2_EXTERN axis2_status_t AXIS2_CALL
-	axutil_network_handler_read_dgram(const axutil_env_t *env, axis2_socket_t socket, 
-									 axis2_char_t *buffer, int *buf_len,
-									 axis2_char_t **addr, int *port);
-
-	/* 
-	 * Create a datagram socket to receive incoming UDP packets.
-	 * @param env a pointer to the env structure
-	 * @param port udp port to listen
-	 * @return AXIS2_SUCCESS if everything goes well
-	 */
-	AXIS2_EXTERN axis2_socket_t AXIS2_CALL
-	axutil_network_handler_create_dgram_svr_socket(
-									const axutil_env_t *env, 
-									int port);
-
-	/* 
-	 * Bind a socket to the specified address
-	 * @param env a pointer to the env structure
-	 * @param sock socket
-	 * @param port port number to bind to
-	 * @return AXIS2_SUCCESS if binding is performed
-	 */
-	AXIS2_EXTERN axis2_status_t AXIS2_CALL
-	axutil_network_handler_bind_socket(const axutil_env_t *env, 
-									axis2_socket_t sock, int port);
-
-	/* 
-	 * Create a multicast socket for listening on the given port. 
-	 * @param env a pointer to the env structure
-	 * @param port udp port to listen
-	 * @param mul_addr multicast address to join. The address should be valid and in dotted format.
-	 * @param ttl TTL value. 
-	 * @return AXIS2_SUCCESS if everything goes well.s
-	 */
-	AXIS2_EXTERN axis2_socket_t AXIS2_CALL
-	axutil_network_hadler_create_multicast_svr_socket(const axutil_env_t *env, 
-									int port, axis2_char_t *mul_addr);
-
-    /** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif                          /* AXIS2_NETWORK_HANDLER_H */
+
+/*
+ * 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_NETWORK_HANDLER_H
+#define AXUTIL_NETWORK_HANDLER_H
+
+#include <axutil_utils.h>
+#include <axutil_utils_defines.h>
+#include <axutil_env.h>
+#include <sys/types.h>
+#include <platforms/axutil_platform_auto_sense.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    /**
+     * @defgroup axutil_network_handler network handler
+     * @ingroup axis2_util
+     * @{
+     */
+
+    /**
+     * open a socket for a given server
+     * @param server ip address or the fqn of the server
+     * @param port port of the service
+     * @return opened socket
+     */
+    AXIS2_EXTERN axis2_socket_t AXIS2_CALL
+
+    axutil_network_handler_open_socket(
+        const axutil_env_t * env,
+        char *server,
+        int port);
+
+    /**
+     * creates a server socket for a given port
+     * @param port port of the socket to be bound
+     * @return creates server socket
+     */
+    AXIS2_EXTERN axis2_socket_t AXIS2_CALL
+
+    axutil_network_handler_create_server_socket(
+        const axutil_env_t * env,
+        int port);
+
+    /**
+     * closes a socket
+     * @param opened socket that need to be closed
+     * @return status code
+     */
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+
+    axutil_network_handler_close_socket(
+        const axutil_env_t * env,
+        axis2_socket_t socket);
+
+    /**
+     * used to set up socket options such as timeouts, non-blocking ..etc
+     * @param socket valid socket (obtained by socket() or similar call)
+     * @param option the name of the option
+     * @param value Value to be set
+     * @return status of the operations as axis2_status_t
+     */
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+
+    axutil_network_handler_set_sock_option(
+        const axutil_env_t * env,
+        axis2_socket_t socket,
+        int option,
+        int value);
+
+    /**
+     * Accepts remote connections for a server socket
+     * @param socket valid server socket (obtained by socket() or similar call)
+     * @return created socket to handle the incoming client connection
+     */
+    AXIS2_EXTERN axis2_socket_t AXIS2_CALL
+
+    axutil_network_handler_svr_socket_accept(
+        const axutil_env_t * env,
+        axis2_socket_t socket);
+
+    /**
+     * Returns the ip address of the server associated with the socket
+     * @param socket valid socket (obtained by accept() or similar call)
+     * @return ip address asoociated with the socket or NULL
+     */
+    AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+    axutil_network_handler_get_svr_ip(
+        const axutil_env_t * env,
+        axis2_socket_t socket);
+
+    AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+    axutil_network_handler_get_peer_ip(
+        const axutil_env_t * env,
+        axis2_socket_t socket);
+
+	/* 
+	 * Create a datagram socket. 
+	 * @param env pointer to env
+	 * @return a datagram socket
+	 */
+	AXIS2_EXTERN axis2_socket_t AXIS2_CALL
+	axutil_network_handler_open_dgram_socket(const axutil_env_t *env);
+
+	/*
+	 * Send a UDP packet to the given source and port address.
+	 * Read a incoming UDP packet from the port and server address.
+	 * @param env pointer to the env structure
+	 * @param socket a datagram socket
+	 * @param buffer a buffer containing the data to be sent
+	 * @param buf_len length of the buffer
+	 * @param addr address of the source field
+	 * @param port udp port number
+	 * @return success if everything goes well
+	 */
+	AXIS2_EXTERN axis2_status_t AXIS2_CALL 
+	axutil_network_handler_send_dgram(const axutil_env_t *env, axis2_socket_t socket, 
+								 axis2_char_t *buff, int *buf_len, 
+								 axis2_char_t *addr, int dest_port, int *source_port);
+
+	/* 
+	 * Read a incoming UDP packet from the port and server address.
+	 * @param env pointer to the env structure
+	 * @param socket a datagram socket
+	 * @param buffer a buffer allocated and passed to be filled
+	 * @param buf_len length of the buffer allocated. In return buffer len 
+	                  contains the length of the data read
+	 * @param addr address of the sender. This is a return value.
+	 * @param port senders port address. Return value
+	 * @return if everything goes well return success 
+	 */
+	AXIS2_EXTERN axis2_status_t AXIS2_CALL
+	axutil_network_handler_read_dgram(const axutil_env_t *env, axis2_socket_t socket, 
+									 axis2_char_t *buffer, int *buf_len,
+									 axis2_char_t **addr, int *port);
+
+	/* 
+	 * Create a datagram socket to receive incoming UDP packets.
+	 * @param env a pointer to the env structure
+	 * @param port udp port to listen
+	 * @return AXIS2_SUCCESS if everything goes well
+	 */
+	AXIS2_EXTERN axis2_socket_t AXIS2_CALL
+	axutil_network_handler_create_dgram_svr_socket(
+									const axutil_env_t *env, 
+									int port);
+
+	/* 
+	 * Bind a socket to the specified address
+	 * @param env a pointer to the env structure
+	 * @param sock socket
+	 * @param port port number to bind to
+	 * @return AXIS2_SUCCESS if binding is performed
+	 */
+	AXIS2_EXTERN axis2_status_t AXIS2_CALL
+	axutil_network_handler_bind_socket(const axutil_env_t *env, 
+									axis2_socket_t sock, int port);
+
+	/* 
+	 * Create a multicast socket for listening on the given port. 
+	 * @param env a pointer to the env structure
+	 * @param port udp port to listen
+	 * @param mul_addr multicast address to join. The address should be valid and in dotted format.
+	 * @param ttl TTL value. 
+	 * @return AXIS2_SUCCESS if everything goes well.s
+	 */
+	AXIS2_EXTERN axis2_socket_t AXIS2_CALL
+	axutil_network_hadler_create_multicast_svr_socket(const axutil_env_t *env, 
+									int port, axis2_char_t *mul_addr);
+
+    /** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif                          /* AXIS2_NETWORK_HANDLER_H */

Modified: axis/axis2/c/core/trunk/util/include/axutil_utils_defines.h
URL: http://svn.apache.org/viewvc/axis/axis2/c/core/trunk/util/include/axutil_utils_defines.h?rev=958884&r1=958883&r2=958884&view=diff
==============================================================================
--- axis/axis2/c/core/trunk/util/include/axutil_utils_defines.h (original)
+++ axis/axis2/c/core/trunk/util/include/axutil_utils_defines.h Tue Jun 29 08:57:05 2010
@@ -62,12 +62,12 @@ extern "C"
 #define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%lld"
 #define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%llu"
 #endif
-# if defined(_MSC_VER) && _MSC_VER >= 1300
-#  define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%I32d"
-#  define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%I32u"
-# else
-#  define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%d"
-#  define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%u"
+# if defined(_MSC_VER) && _MSC_VER >= 1300
+#  define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%I32d"
+#  define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%I32u"
+# else
+#  define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%d"
+#  define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%u"
 # endif
 /**#define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%d"
 #define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%u" */

Modified: axis/axis2/c/core/trunk/util/include/platforms/os400/axutil_os400.h
URL: http://svn.apache.org/viewvc/axis/axis2/c/core/trunk/util/include/platforms/os400/axutil_os400.h?rev=958884&r1=958883&r2=958884&view=diff
==============================================================================
--- axis/axis2/c/core/trunk/util/include/platforms/os400/axutil_os400.h (original)
+++ axis/axis2/c/core/trunk/util/include/platforms/os400/axutil_os400.h Tue Jun 29 08:57:05 2010
@@ -1,277 +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) do { unzOpen2(zipfilename,NULL); memset(&ffunc, 0, sizeof(ffunc)); } while (0)
-
-    /**
-      * 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 */
+
+/*
+ * 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) do { unzOpen2(zipfilename,NULL); memset(&ffunc, 0, sizeof(ffunc)); } while (0)
+
+    /**
+      * 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 */

Modified: axis/axis2/c/core/trunk/util/include/platforms/windows/axutil_uuid_gen_windows.h
URL: http://svn.apache.org/viewvc/axis/axis2/c/core/trunk/util/include/platforms/windows/axutil_uuid_gen_windows.h?rev=958884&r1=958883&r2=958884&view=diff
==============================================================================
--- axis/axis2/c/core/trunk/util/include/platforms/windows/axutil_uuid_gen_windows.h (original)
+++ axis/axis2/c/core/trunk/util/include/platforms/windows/axutil_uuid_gen_windows.h Tue Jun 29 08:57:05 2010
@@ -1,46 +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 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_UDDI_GEN_WINDOWS_H
-#define AXIS2_UDDI_GEN_WINDOWS_H
-
-#include <axutil_utils_defines.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-
-#endif  /* 
 */
-    
-    /* Function prototypes */
-    
-
-    /**
-      * Generate universally unique id
-      * @return a char pointer to uuid
-      */
-    AXIS2_EXTERN axis2_char_t * AXIS2_CALL
-    
 axutil_platform_uuid_gen(
-        
char *s);
-    


-
-    /** @} */
-#ifdef __cplusplus
-}
-#endif  /* 
 */
-
-#endif  /* AXIS2_UDDI_GEN_WINDOWS_H */
+/*
+ * 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 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_UDDI_GEN_WINDOWS_H
+#define AXIS2_UDDI_GEN_WINDOWS_H
+
+#include <axutil_utils_defines.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+
+#endif  /* 
 */
+    
+    /* Function prototypes */
+    
+
+    /**
+      * Generate universally unique id
+      * @return a char pointer to uuid
+      */
+    AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+    
 axutil_platform_uuid_gen(
+        
char *s);
+    

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

Modified: axis/axis2/c/core/trunk/util/src/network_handler.c
URL: http://svn.apache.org/viewvc/axis/axis2/c/core/trunk/util/src/network_handler.c?rev=958884&r1=958883&r2=958884&view=diff
==============================================================================
--- axis/axis2/c/core/trunk/util/src/network_handler.c (original)
+++ axis/axis2/c/core/trunk/util/src/network_handler.c Tue Jun 29 08:57:05 2010
@@ -1,646 +1,646 @@
-/*
- * 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.
- */
-
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <axutil_network_handler.h>
-#include <fcntl.h>
-
-
-#if defined(WIN32)
-/* fix for an older version of winsock2.h */
-#if !defined(SO_EXCLUSIVEADDRUSE)
-#define SO_EXCLUSIVEADDRUSE ((int)(~SO_REUSEADDR))
-#endif
-#endif
-
-#if defined(WIN32)
-static int is_init_socket = 0;
-axis2_bool_t axis2_init_socket(
-);
-#endif
-
-AXIS2_EXTERN axis2_socket_t AXIS2_CALL
-axutil_network_handler_open_socket(
-    const axutil_env_t *env,
-    char *server,
-    int port)
-{
-    axis2_socket_t sock = AXIS2_INVALID_SOCKET;
-    struct sockaddr_in sock_addr;
-    struct linger ll;
-    int nodelay = 1;
-
-#if defined(WIN32)
-    if (is_init_socket == 0)
-    {
-        axis2_init_socket();
-        is_init_socket = 1;
-    }
-#endif
-
-    AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
-    AXIS2_PARAM_CHECK(env->error, server, AXIS2_INVALID_SOCKET);
-
-#ifndef WIN32
-    if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
-    /*AF_INET is not defined in sys/socket.h but PF_INET */
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-#else
-    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
-    /* In Win 32 if the socket creation failed it return 0 not a negative value */
-    {
-        char buf[AXUTIL_WIN32_ERROR_BUFSIZE];
-        /* Get the detailed error message */
-        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-#endif 
-
-    memset(&sock_addr, 0, sizeof(sock_addr));
-    sock_addr.sin_family = AF_INET;
-    sock_addr.sin_addr.s_addr = inet_addr(server); /*arpa/inet.d */
-
-    if(sock_addr.sin_addr.s_addr == AXIS2_INADDR_NONE) /*netinet/in.h */
-    {
-        /*
-         * server may be a host name
-         */
-        struct hostent *lphost = NULL;
-        lphost = gethostbyname(server);
-
-        if(lphost)
-        {
-            sock_addr.sin_addr.s_addr = ((struct in_addr *)lphost->h_addr)->s_addr;
-        }
-        else
-        {
-            AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_ADDRESS, AXIS2_FAILURE);
-            return AXIS2_INVALID_SOCKET;
-        }
-    }
-
-    sock_addr.sin_port = htons((axis2_unsigned_short_t)port);
-
-    /* Connect to server */
-    if(connect(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0)
-    {
-        AXIS2_CLOSE_SOCKET(sock);
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-    setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&nodelay, sizeof(nodelay));
-    ll.l_onoff = 1;
-    ll.l_linger = 5;
-    setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char *)&ll, sizeof(struct linger));
-    return sock;
-}
-
-AXIS2_EXTERN axis2_socket_t AXIS2_CALL
-axutil_network_handler_create_server_socket(
-    const axutil_env_t *env,
-    int port)
-{
-    axis2_socket_t sock = AXIS2_INVALID_SOCKET;
-    axis2_socket_t i = 0;
-    struct sockaddr_in sock_addr;
-
-    AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
-#if defined(WIN32)
-    if (is_init_socket == 0)
-    {
-        axis2_init_socket();
-        is_init_socket = 1;
-    }
-#endif
-    sock = socket(AF_INET, SOCK_STREAM, 0);
-
-#ifndef WIN32
-    if(sock < 0)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-#else
-    if (sock == INVALID_SOCKET)
-    {
-        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
-        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
-        return AXIS2_INVALID_SOCKET;
-    }
-#endif
-    /* Address re-use */
-    i = 1;
-#if defined(WIN32)
-    setsockopt(sock, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (char *) &i, sizeof(axis2_socket_t)); /*casted 4th param to char* */
-#else
-    setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&i, sizeof(axis2_socket_t)); /*casted 4th param to char* */
-#endif
-
-    /* Exec behaviour */
-    AXIS2_CLOSE_SOCKET_ON_EXIT(sock);
-    memset(&sock_addr, 0, sizeof(sock_addr));
-
-    sock_addr.sin_family = AF_INET;
-    sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
-    sock_addr.sin_port = htons((axis2_unsigned_short_t)port);
-
-    /* Bind the socket to our port number */
-    if(bind(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_BIND_FAILED, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-    if(listen(sock, 50) < 0)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_LISTEN_FAILED, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-    return sock;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axutil_network_handler_close_socket(
-    const axutil_env_t *env,
-    axis2_socket_t socket)
-{
-    int i = 0;
-    char buf[32];
-    if(socket < 0)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_SOCKET, AXIS2_FAILURE);
-        return AXIS2_FAILURE;
-    }
-    shutdown(socket, AXIS2_SHUT_WR);
-    axutil_network_handler_set_sock_option(env, socket, SO_RCVTIMEO, 1);
-    i = recv(socket, buf, 32, 0);
-    AXIS2_CLOSE_SOCKET(socket);
-    return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axutil_network_handler_set_sock_option(
-    const axutil_env_t *env,
-    axis2_socket_t socket,
-    int option,
-    int value)
-{
-    if(option == SO_RCVTIMEO || option == SO_SNDTIMEO)
-    {
-#if defined(WIN32)
-        DWORD tv = value; /* windows expects milliseconds in a DWORD */
-#else
-        struct timeval tv;
-        /* we deal with milliseconds */
-        tv.tv_sec = value / 1000;
-        tv.tv_usec = (value % 1000) * 1000;
-#endif
-        setsockopt(socket, SOL_SOCKET, option, (char *)&tv, sizeof(tv));
-        return AXIS2_SUCCESS;
-    }
-    else if(option == SO_REUSEADDR)
-    {
-        if((setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, (char *)&value, sizeof(value))) < 0)
-        {
-            return AXIS2_FAILURE;
-        }
-        return AXIS2_SUCCESS;
-    }
-    return AXIS2_FAILURE;
-}
-
-AXIS2_EXTERN axis2_socket_t AXIS2_CALL
-axutil_network_handler_svr_socket_accept(
-    const axutil_env_t *env,
-    axis2_socket_t svr_socket)
-{
-    struct sockaddr cli_addr;
-    struct linger ll;
-    int nodelay = 1;
-    axis2_socket_len_t cli_len = 0;
-    axis2_socket_t cli_socket = AXIS2_INVALID_SOCKET;
-    AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
-
-    cli_len = sizeof(cli_addr);
-    cli_socket = accept(svr_socket, (struct sockaddr *)&cli_addr, &cli_len);
-#ifndef WIN32
-    if(cli_socket < 0)
-    {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-            "[Axis2][network_handler] Socket accept \
-                failed");
-    }
-#else
-    if (cli_socket == INVALID_SOCKET)
-    {
-        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
-        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
-    }
-#endif 
-
-    setsockopt(svr_socket, IPPROTO_TCP, TCP_NODELAY, (const char *)&nodelay, (int)sizeof(nodelay));
-    /* We are sure that the difference lies within the int range */
-    ll.l_onoff = 1;
-    ll.l_linger = 5;
-    setsockopt(cli_socket, SOL_SOCKET, SO_LINGER, (const char *)&ll, (int)sizeof(struct linger));
-    /* We are sure that the difference lies within the int range */
-    return cli_socket;
-}
-
-#if defined (WIN32)
-axis2_bool_t
-axis2_init_socket(
-)
-{
-    WORD wVersionRequested;
-    WSADATA wsaData;
-    int err;
-    wVersionRequested = MAKEWORD(2, 2);
-
-    err = WSAStartup(wVersionRequested, &wsaData);
-
-    if (err != 0)
-    return 0; /* WinSock 2.2 not found */
-
-    /* Confirm that the WinSock DLL supports 2.2. 
-     * Note that if the DLL supports versions greater 
-     * than 2.2 in addition to 2.2, it will still return 
-     * 2.2 in wVersion since that is the version we 
-     * requested.
-     */
-
-    if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
-    {
-        WSACleanup();
-        return 0; /* WinSock 2.2 not supported */
-    }
-    return 1;
-}
-#endif
-
-AXIS2_EXTERN axis2_char_t *AXIS2_CALL
-axutil_network_handler_get_svr_ip(
-    const axutil_env_t *env,
-    axis2_socket_t socket)
-{
-    struct sockaddr_in addr;
-    axis2_socket_len_t len = sizeof(addr);
-    char *ret = NULL;
-    memset(&addr, 0, sizeof(addr));
-    if(getsockname(socket, (struct sockaddr *)&addr, &len) < 0)
-    {
-        return NULL;
-    }
-    ret = inet_ntoa(addr.sin_addr);
-    return ret;
-}
-
-AXIS2_EXTERN axis2_char_t *AXIS2_CALL
-axutil_network_handler_get_peer_ip(
-    const axutil_env_t *env,
-    axis2_socket_t socket)
-{
-    struct sockaddr_in addr;
-    axis2_socket_len_t len = sizeof(addr);
-    char *ret = NULL;
-    memset(&addr, 0, sizeof(addr));
-    if(getpeername(socket, (struct sockaddr *)&addr, &len) < 0)
-    {
-        return NULL;
-    }
-    ret = inet_ntoa(addr.sin_addr);
-    return ret;
-}
-
-AXIS2_EXTERN axis2_socket_t AXIS2_CALL
-axutil_network_handler_create_dgram_svr_socket(
-    const axutil_env_t *env,
-    int port)
-{
-    axis2_socket_t sock = AXIS2_INVALID_SOCKET;
-    struct sockaddr_in sock_addr;
-
-    AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
-#if defined(WIN32)
-    if (is_init_socket == 0)
-    {
-        axis2_init_socket();
-        is_init_socket = 1;
-    }
-#endif
-    sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
-
-#ifndef WIN32
-    if(sock < 0)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-#else
-    if (sock == INVALID_SOCKET)
-    {
-        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
-        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
-        return AXIS2_INVALID_SOCKET;
-    }
-#endif
-    /* Exec behaviour */
-    AXIS2_CLOSE_SOCKET_ON_EXIT(sock);
-    memset(&sock_addr, 0, sizeof(sock_addr));
-
-    sock_addr.sin_family = AF_INET;
-    sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
-    sock_addr.sin_port = htons((axis2_unsigned_short_t)port);
-
-    /* Bind the socket to our port number */
-    if(bind(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_BIND_FAILED, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-    return sock;
-}
-
-AXIS2_EXTERN axis2_socket_t AXIS2_CALL
-axutil_network_handler_open_dgram_socket(
-    const axutil_env_t *env)
-{
-    axis2_socket_t sock = AXIS2_INVALID_SOCKET;
-#if defined(WIN32)
-    if (is_init_socket == 0)
-    {
-        axis2_init_socket();
-        is_init_socket = 1;
-    }
-#endif    
-
-#ifndef WIN32
-    if((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
-    /*AF_INET is not defined in sys/socket.h but PF_INET */
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-#else
-    if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET)
-    /* In Win 32 if the socket creation failed it return 0 not a negative value */
-    {
-        char buf[AXUTIL_WIN32_ERROR_BUFSIZE];
-        /* Get the detailed error message */
-        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-#endif 	
-    return sock;
-}
-
-/* 
- * This function blocks until data is available to read from the socket 
- * and read all the data in the socket. If the buffer size specified is 
- * lesser than the actual data a failure will be returned.
- */
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axutil_network_handler_read_dgram(
-    const axutil_env_t *env,
-    axis2_socket_t sock,
-    axis2_char_t *buffer,
-    int *buf_len,
-    axis2_char_t **addr,
-    int *port)
-{
-    struct sockaddr_in sender_address;
-    int received = 0;
-    socklen_t sender_address_size;
-    
-    sender_address_size = sizeof(sender_address);
-    received = recvfrom(sock, buffer, *buf_len, 0, (struct sockaddr *)&sender_address, &sender_address_size);
-#ifdef WIN32
-    if (SOCKET_ERROR == received)
-    {
-        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
-        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
-        return AXIS2_FAILURE;
-    }
-#else
-    if(received < 0)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-#endif
-    if(port && addr)
-    {
-        *port = ntohs(sender_address.sin_port);
-        *addr = inet_ntoa(sender_address.sin_addr);
-    }
-    *buf_len = received;
-    return AXIS2_SUCCESS;
-}
-
-/* 
- * Sends a datagram to the specified location.
- */
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axutil_network_handler_send_dgram(
-    const axutil_env_t *env,
-    axis2_socket_t sock,
-    axis2_char_t *buff,
-    int *buf_len,
-    axis2_char_t *addr,
-    int dest_port,
-    int *source_port)
-{
-    struct sockaddr_in recv_addr, source_addr;
-    int send_bytes = 0;
-    unsigned int recv_addr_size = 0;
-    socklen_t source_addr_size = sizeof(source_addr);
-    recv_addr_size = sizeof(recv_addr);
-
-    memset(&recv_addr, 0, sizeof(recv_addr));
-    memset(&recv_addr, 0, sizeof(source_addr));
-
-    recv_addr.sin_addr.s_addr = inet_addr(addr);
-    if(recv_addr.sin_addr.s_addr == AXIS2_INADDR_NONE) /*netinet/in.h */
-    {
-        /*
-         * server may be a host name
-         */
-        struct hostent *lphost = NULL;
-        lphost = gethostbyname(addr);
-
-        if(lphost)
-        {
-            recv_addr.sin_addr.s_addr = ((struct in_addr *)lphost->h_addr)->s_addr;
-        }
-        else
-        {
-            AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_ADDRESS, AXIS2_FAILURE);
-            return AXIS2_FAILURE;
-        }
-    }
-
-    recv_addr.sin_family = AF_INET;
-    recv_addr.sin_port = htons((axis2_unsigned_short_t)dest_port);
-
-    send_bytes = sendto(sock, buff, *buf_len, 0, (struct sockaddr *)&recv_addr, recv_addr_size);
-
-    getsockname(sock, (struct sockaddr *)&source_addr, &source_addr_size);
-
-#ifdef WIN32
-    if (send_bytes == SOCKET_ERROR)
-    {
-        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
-        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
-        return AXIS2_FAILURE;
-    }
-#else
-    if(send_bytes < 0)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        return AXIS2_FAILURE;
-    }
-#endif
-    if(source_port)
-    {
-        *source_port = ntohs(source_addr.sin_port);
-    }
-    *buf_len = send_bytes;
-    return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axutil_network_handler_bind_socket(
-    const axutil_env_t *env,
-    axis2_socket_t sock,
-    int port)
-{
-    struct sockaddr_in source_addr;
-
-    memset(&source_addr, 0, sizeof(source_addr));
-    source_addr.sin_family = AF_INET;
-    source_addr.sin_addr.s_addr = htonl(INADDR_ANY);
-    source_addr.sin_port = htons((axis2_unsigned_short_t)port);
-#ifdef WIN32
-    if (bind(sock, (struct sockaddr *)&source_addr, sizeof(source_addr)) == SOCKET_ERROR)
-    {
-        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
-        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
-        return AXIS2_FAILURE;
-    }
-#else
-    if(bind(sock, (struct sockaddr *)&source_addr, sizeof(source_addr)) < 0)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-#endif
-    return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_socket_t AXIS2_CALL
-axutil_network_hadler_create_multicast_svr_socket(
-    const axutil_env_t *env,
-    int port,
-    axis2_char_t *mul_addr)
-{
-    axis2_socket_t sock = AXIS2_INVALID_SOCKET;
-    struct sockaddr_in sock_addr;
-    struct ip_mreq mc_req;
-
-    AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
-#if defined(WIN32)
-    if (is_init_socket == 0)
-    {
-        axis2_init_socket();
-        is_init_socket = 1;
-    }
-#endif
-    sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
-
-#ifndef WIN32
-    if(sock < 0)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        return AXIS2_FAILURE;
-    }
-#else
-    if (sock == INVALID_SOCKET)
-    {
-        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
-        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
-        return AXIS2_FAILURE;
-    }
-#endif
-
-    /* Exec behaviour */
-    AXIS2_CLOSE_SOCKET_ON_EXIT(sock);
-    memset(&sock_addr, 0, sizeof(sock_addr));
-
-    sock_addr.sin_family = AF_INET;
-    sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
-    sock_addr.sin_port = htons((axis2_unsigned_short_t)port);
-
-    /* Bind the socket to our port number */
-    if(bind(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_BIND_FAILED, AXIS2_FAILURE);
-        return AXIS2_INVALID_SOCKET;
-    }
-
-    /* Send an IGMP request to join the multicast group */
-    mc_req.imr_multiaddr.s_addr = inet_addr(mul_addr);
-    mc_req.imr_interface.s_addr = htonl(INADDR_ANY);
-#ifdef WIN32	
-    if ((setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &mc_req, sizeof(mc_req))) == SOCKET_ERROR)
-    {
-        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
-        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
-        return AXIS2_FAILURE;
-    }
-#else
-    if((setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mc_req, sizeof(mc_req))) < 0)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
-        return AXIS2_FAILURE;
-    }
-#endif	
-    return sock;
-}
-
+/*
+ * 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.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <axutil_network_handler.h>
+#include <fcntl.h>
+
+
+#if defined(WIN32)
+/* fix for an older version of winsock2.h */
+#if !defined(SO_EXCLUSIVEADDRUSE)
+#define SO_EXCLUSIVEADDRUSE ((int)(~SO_REUSEADDR))
+#endif
+#endif
+
+#if defined(WIN32)
+static int is_init_socket = 0;
+axis2_bool_t axis2_init_socket(
+);
+#endif
+
+AXIS2_EXTERN axis2_socket_t AXIS2_CALL
+axutil_network_handler_open_socket(
+    const axutil_env_t *env,
+    char *server,
+    int port)
+{
+    axis2_socket_t sock = AXIS2_INVALID_SOCKET;
+    struct sockaddr_in sock_addr;
+    struct linger ll;
+    int nodelay = 1;
+
+#if defined(WIN32)
+    if (is_init_socket == 0)
+    {
+        axis2_init_socket();
+        is_init_socket = 1;
+    }
+#endif
+
+    AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
+    AXIS2_PARAM_CHECK(env->error, server, AXIS2_INVALID_SOCKET);
+
+#ifndef WIN32
+    if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+    /*AF_INET is not defined in sys/socket.h but PF_INET */
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+#else
+    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
+    /* In Win 32 if the socket creation failed it return 0 not a negative value */
+    {
+        char buf[AXUTIL_WIN32_ERROR_BUFSIZE];
+        /* Get the detailed error message */
+        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+#endif 
+
+    memset(&sock_addr, 0, sizeof(sock_addr));
+    sock_addr.sin_family = AF_INET;
+    sock_addr.sin_addr.s_addr = inet_addr(server); /*arpa/inet.d */
+
+    if(sock_addr.sin_addr.s_addr == AXIS2_INADDR_NONE) /*netinet/in.h */
+    {
+        /*
+         * server may be a host name
+         */
+        struct hostent *lphost = NULL;
+        lphost = gethostbyname(server);
+
+        if(lphost)
+        {
+            sock_addr.sin_addr.s_addr = ((struct in_addr *)lphost->h_addr)->s_addr;
+        }
+        else
+        {
+            AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_ADDRESS, AXIS2_FAILURE);
+            return AXIS2_INVALID_SOCKET;
+        }
+    }
+
+    sock_addr.sin_port = htons((axis2_unsigned_short_t)port);
+
+    /* Connect to server */
+    if(connect(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0)
+    {
+        AXIS2_CLOSE_SOCKET(sock);
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+    setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&nodelay, sizeof(nodelay));
+    ll.l_onoff = 1;
+    ll.l_linger = 5;
+    setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char *)&ll, sizeof(struct linger));
+    return sock;
+}
+
+AXIS2_EXTERN axis2_socket_t AXIS2_CALL
+axutil_network_handler_create_server_socket(
+    const axutil_env_t *env,
+    int port)
+{
+    axis2_socket_t sock = AXIS2_INVALID_SOCKET;
+    axis2_socket_t i = 0;
+    struct sockaddr_in sock_addr;
+
+    AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
+#if defined(WIN32)
+    if (is_init_socket == 0)
+    {
+        axis2_init_socket();
+        is_init_socket = 1;
+    }
+#endif
+    sock = socket(AF_INET, SOCK_STREAM, 0);
+
+#ifndef WIN32
+    if(sock < 0)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+#else
+    if (sock == INVALID_SOCKET)
+    {
+        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
+        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
+        return AXIS2_INVALID_SOCKET;
+    }
+#endif
+    /* Address re-use */
+    i = 1;
+#if defined(WIN32)
+    setsockopt(sock, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (char *) &i, sizeof(axis2_socket_t)); /*casted 4th param to char* */
+#else
+    setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&i, sizeof(axis2_socket_t)); /*casted 4th param to char* */
+#endif
+
+    /* Exec behaviour */
+    AXIS2_CLOSE_SOCKET_ON_EXIT(sock);
+    memset(&sock_addr, 0, sizeof(sock_addr));
+
+    sock_addr.sin_family = AF_INET;
+    sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+    sock_addr.sin_port = htons((axis2_unsigned_short_t)port);
+
+    /* Bind the socket to our port number */
+    if(bind(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_BIND_FAILED, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+    if(listen(sock, 50) < 0)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_LISTEN_FAILED, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+    return sock;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axutil_network_handler_close_socket(
+    const axutil_env_t *env,
+    axis2_socket_t socket)
+{
+    int i = 0;
+    char buf[32];
+    if(socket < 0)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_SOCKET, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    shutdown(socket, AXIS2_SHUT_WR);
+    axutil_network_handler_set_sock_option(env, socket, SO_RCVTIMEO, 1);
+    i = recv(socket, buf, 32, 0);
+    AXIS2_CLOSE_SOCKET(socket);
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axutil_network_handler_set_sock_option(
+    const axutil_env_t *env,
+    axis2_socket_t socket,
+    int option,
+    int value)
+{
+    if(option == SO_RCVTIMEO || option == SO_SNDTIMEO)
+    {
+#if defined(WIN32)
+        DWORD tv = value; /* windows expects milliseconds in a DWORD */
+#else
+        struct timeval tv;
+        /* we deal with milliseconds */
+        tv.tv_sec = value / 1000;
+        tv.tv_usec = (value % 1000) * 1000;
+#endif
+        setsockopt(socket, SOL_SOCKET, option, (char *)&tv, sizeof(tv));
+        return AXIS2_SUCCESS;
+    }
+    else if(option == SO_REUSEADDR)
+    {
+        if((setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, (char *)&value, sizeof(value))) < 0)
+        {
+            return AXIS2_FAILURE;
+        }
+        return AXIS2_SUCCESS;
+    }
+    return AXIS2_FAILURE;
+}
+
+AXIS2_EXTERN axis2_socket_t AXIS2_CALL
+axutil_network_handler_svr_socket_accept(
+    const axutil_env_t *env,
+    axis2_socket_t svr_socket)
+{
+    struct sockaddr cli_addr;
+    struct linger ll;
+    int nodelay = 1;
+    axis2_socket_len_t cli_len = 0;
+    axis2_socket_t cli_socket = AXIS2_INVALID_SOCKET;
+    AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
+
+    cli_len = sizeof(cli_addr);
+    cli_socket = accept(svr_socket, (struct sockaddr *)&cli_addr, &cli_len);
+#ifndef WIN32
+    if(cli_socket < 0)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+            "[Axis2][network_handler] Socket accept \
+                failed");
+    }
+#else
+    if (cli_socket == INVALID_SOCKET)
+    {
+        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
+        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
+    }
+#endif 
+
+    setsockopt(svr_socket, IPPROTO_TCP, TCP_NODELAY, (const char *)&nodelay, (int)sizeof(nodelay));
+    /* We are sure that the difference lies within the int range */
+    ll.l_onoff = 1;
+    ll.l_linger = 5;
+    setsockopt(cli_socket, SOL_SOCKET, SO_LINGER, (const char *)&ll, (int)sizeof(struct linger));
+    /* We are sure that the difference lies within the int range */
+    return cli_socket;
+}
+
+#if defined (WIN32)
+axis2_bool_t
+axis2_init_socket(
+)
+{
+    WORD wVersionRequested;
+    WSADATA wsaData;
+    int err;
+    wVersionRequested = MAKEWORD(2, 2);
+
+    err = WSAStartup(wVersionRequested, &wsaData);
+
+    if (err != 0)
+    return 0; /* WinSock 2.2 not found */
+
+    /* Confirm that the WinSock DLL supports 2.2. 
+     * Note that if the DLL supports versions greater 
+     * than 2.2 in addition to 2.2, it will still return 
+     * 2.2 in wVersion since that is the version we 
+     * requested.
+     */
+
+    if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
+    {
+        WSACleanup();
+        return 0; /* WinSock 2.2 not supported */
+    }
+    return 1;
+}
+#endif
+
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+axutil_network_handler_get_svr_ip(
+    const axutil_env_t *env,
+    axis2_socket_t socket)
+{
+    struct sockaddr_in addr;
+    axis2_socket_len_t len = sizeof(addr);
+    char *ret = NULL;
+    memset(&addr, 0, sizeof(addr));
+    if(getsockname(socket, (struct sockaddr *)&addr, &len) < 0)
+    {
+        return NULL;
+    }
+    ret = inet_ntoa(addr.sin_addr);
+    return ret;
+}
+
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+axutil_network_handler_get_peer_ip(
+    const axutil_env_t *env,
+    axis2_socket_t socket)
+{
+    struct sockaddr_in addr;
+    axis2_socket_len_t len = sizeof(addr);
+    char *ret = NULL;
+    memset(&addr, 0, sizeof(addr));
+    if(getpeername(socket, (struct sockaddr *)&addr, &len) < 0)
+    {
+        return NULL;
+    }
+    ret = inet_ntoa(addr.sin_addr);
+    return ret;
+}
+
+AXIS2_EXTERN axis2_socket_t AXIS2_CALL
+axutil_network_handler_create_dgram_svr_socket(
+    const axutil_env_t *env,
+    int port)
+{
+    axis2_socket_t sock = AXIS2_INVALID_SOCKET;
+    struct sockaddr_in sock_addr;
+
+    AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
+#if defined(WIN32)
+    if (is_init_socket == 0)
+    {
+        axis2_init_socket();
+        is_init_socket = 1;
+    }
+#endif
+    sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+
+#ifndef WIN32
+    if(sock < 0)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+#else
+    if (sock == INVALID_SOCKET)
+    {
+        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
+        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
+        return AXIS2_INVALID_SOCKET;
+    }
+#endif
+    /* Exec behaviour */
+    AXIS2_CLOSE_SOCKET_ON_EXIT(sock);
+    memset(&sock_addr, 0, sizeof(sock_addr));
+
+    sock_addr.sin_family = AF_INET;
+    sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+    sock_addr.sin_port = htons((axis2_unsigned_short_t)port);
+
+    /* Bind the socket to our port number */
+    if(bind(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_BIND_FAILED, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+    return sock;
+}
+
+AXIS2_EXTERN axis2_socket_t AXIS2_CALL
+axutil_network_handler_open_dgram_socket(
+    const axutil_env_t *env)
+{
+    axis2_socket_t sock = AXIS2_INVALID_SOCKET;
+#if defined(WIN32)
+    if (is_init_socket == 0)
+    {
+        axis2_init_socket();
+        is_init_socket = 1;
+    }
+#endif    
+
+#ifndef WIN32
+    if((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
+    /*AF_INET is not defined in sys/socket.h but PF_INET */
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+#else
+    if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET)
+    /* In Win 32 if the socket creation failed it return 0 not a negative value */
+    {
+        char buf[AXUTIL_WIN32_ERROR_BUFSIZE];
+        /* Get the detailed error message */
+        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+#endif 	
+    return sock;
+}
+
+/* 
+ * This function blocks until data is available to read from the socket 
+ * and read all the data in the socket. If the buffer size specified is 
+ * lesser than the actual data a failure will be returned.
+ */
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axutil_network_handler_read_dgram(
+    const axutil_env_t *env,
+    axis2_socket_t sock,
+    axis2_char_t *buffer,
+    int *buf_len,
+    axis2_char_t **addr,
+    int *port)
+{
+    struct sockaddr_in sender_address;
+    int received = 0;
+    socklen_t sender_address_size;
+    
+    sender_address_size = sizeof(sender_address);
+    received = recvfrom(sock, buffer, *buf_len, 0, (struct sockaddr *)&sender_address, &sender_address_size);
+#ifdef WIN32
+    if (SOCKET_ERROR == received)
+    {
+        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
+        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
+        return AXIS2_FAILURE;
+    }
+#else
+    if(received < 0)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+#endif
+    if(port && addr)
+    {
+        *port = ntohs(sender_address.sin_port);
+        *addr = inet_ntoa(sender_address.sin_addr);
+    }
+    *buf_len = received;
+    return AXIS2_SUCCESS;
+}
+
+/* 
+ * Sends a datagram to the specified location.
+ */
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axutil_network_handler_send_dgram(
+    const axutil_env_t *env,
+    axis2_socket_t sock,
+    axis2_char_t *buff,
+    int *buf_len,
+    axis2_char_t *addr,
+    int dest_port,
+    int *source_port)
+{
+    struct sockaddr_in recv_addr, source_addr;
+    int send_bytes = 0;
+    unsigned int recv_addr_size = 0;
+    socklen_t source_addr_size = sizeof(source_addr);
+    recv_addr_size = sizeof(recv_addr);
+
+    memset(&recv_addr, 0, sizeof(recv_addr));
+    memset(&recv_addr, 0, sizeof(source_addr));
+
+    recv_addr.sin_addr.s_addr = inet_addr(addr);
+    if(recv_addr.sin_addr.s_addr == AXIS2_INADDR_NONE) /*netinet/in.h */
+    {
+        /*
+         * server may be a host name
+         */
+        struct hostent *lphost = NULL;
+        lphost = gethostbyname(addr);
+
+        if(lphost)
+        {
+            recv_addr.sin_addr.s_addr = ((struct in_addr *)lphost->h_addr)->s_addr;
+        }
+        else
+        {
+            AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_ADDRESS, AXIS2_FAILURE);
+            return AXIS2_FAILURE;
+        }
+    }
+
+    recv_addr.sin_family = AF_INET;
+    recv_addr.sin_port = htons((axis2_unsigned_short_t)dest_port);
+
+    send_bytes = sendto(sock, buff, *buf_len, 0, (struct sockaddr *)&recv_addr, recv_addr_size);
+
+    getsockname(sock, (struct sockaddr *)&source_addr, &source_addr_size);
+
+#ifdef WIN32
+    if (send_bytes == SOCKET_ERROR)
+    {
+        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
+        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
+        return AXIS2_FAILURE;
+    }
+#else
+    if(send_bytes < 0)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+#endif
+    if(source_port)
+    {
+        *source_port = ntohs(source_addr.sin_port);
+    }
+    *buf_len = send_bytes;
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axutil_network_handler_bind_socket(
+    const axutil_env_t *env,
+    axis2_socket_t sock,
+    int port)
+{
+    struct sockaddr_in source_addr;
+
+    memset(&source_addr, 0, sizeof(source_addr));
+    source_addr.sin_family = AF_INET;
+    source_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+    source_addr.sin_port = htons((axis2_unsigned_short_t)port);
+#ifdef WIN32
+    if (bind(sock, (struct sockaddr *)&source_addr, sizeof(source_addr)) == SOCKET_ERROR)
+    {
+        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
+        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
+        return AXIS2_FAILURE;
+    }
+#else
+    if(bind(sock, (struct sockaddr *)&source_addr, sizeof(source_addr)) < 0)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+#endif
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_socket_t AXIS2_CALL
+axutil_network_hadler_create_multicast_svr_socket(
+    const axutil_env_t *env,
+    int port,
+    axis2_char_t *mul_addr)
+{
+    axis2_socket_t sock = AXIS2_INVALID_SOCKET;
+    struct sockaddr_in sock_addr;
+    struct ip_mreq mc_req;
+
+    AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
+#if defined(WIN32)
+    if (is_init_socket == 0)
+    {
+        axis2_init_socket();
+        is_init_socket = 1;
+    }
+#endif
+    sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+
+#ifndef WIN32
+    if(sock < 0)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+#else
+    if (sock == INVALID_SOCKET)
+    {
+        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
+        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
+        return AXIS2_FAILURE;
+    }
+#endif
+
+    /* Exec behaviour */
+    AXIS2_CLOSE_SOCKET_ON_EXIT(sock);
+    memset(&sock_addr, 0, sizeof(sock_addr));
+
+    sock_addr.sin_family = AF_INET;
+    sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+    sock_addr.sin_port = htons((axis2_unsigned_short_t)port);
+
+    /* Bind the socket to our port number */
+    if(bind(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_BIND_FAILED, AXIS2_FAILURE);
+        return AXIS2_INVALID_SOCKET;
+    }
+
+    /* Send an IGMP request to join the multicast group */
+    mc_req.imr_multiaddr.s_addr = inet_addr(mul_addr);
+    mc_req.imr_interface.s_addr = htonl(INADDR_ANY);
+#ifdef WIN32	
+    if ((setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &mc_req, sizeof(mc_req))) == SOCKET_ERROR)
+    {
+        axis2_char_t buf[AXUTIL_WIN32_ERROR_BUFSIZE];
+        axutil_win32_get_last_wsa_error(buf, AXUTIL_WIN32_ERROR_BUFSIZE);
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, buf);
+        return AXIS2_FAILURE;
+    }
+#else
+    if((setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mc_req, sizeof(mc_req))) < 0)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOCKET_ERROR, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+#endif	
+    return sock;
+}
+



Mime
View raw message