include/ortp/port.h

00001 /*
00002   The oRTP library is an RTP (Realtime Transport Protocol - rfc3550) stack.
00003   Copyright (C) 2001  Simon MORLAT simon.morlat@linphone.org
00004 
00005   This library is free software; you can redistribute it and/or
00006   modify it under the terms of the GNU Lesser General Public
00007   License as published by the Free Software Foundation; either
00008   version 2.1 of the License, or (at your option) any later version.
00009 
00010   This library is distributed in the hope that it will be useful,
00011   but WITHOUT ANY WARRANTY; without even the implied warranty of
00012   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013   Lesser General Public License for more details.
00014 
00015   You should have received a copy of the GNU Lesser General Public
00016   License along with this library; if not, write to the Free Software
00017   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018 */
00019 /* this file is responsible of the portability of the stack */
00020 
00021 #ifndef ORTP_PORT_H
00022 #define ORTP_PORT_H
00023 
00024 
00025 #if !defined(WIN32) && !defined(_WIN32_WCE)
00026 /********************************/
00027 /* definitions for UNIX flavour */
00028 /********************************/
00029 
00030 #include <errno.h>
00031 #include <sys/types.h>
00032 #include <pthread.h>
00033 #include <unistd.h>
00034 #include <fcntl.h>
00035 #include <stdlib.h>
00036 #include <stdio.h>
00037 #include <stdarg.h>
00038 #include <string.h>
00039 
00040 #ifdef __linux
00041 #include <stdint.h>
00042 #endif
00043 
00044 
00045 #include <sys/types.h>
00046 #include <sys/socket.h>
00047 #include <netinet/in.h>
00048 #if defined(_XOPEN_SOURCE_EXTENDED) || !defined(__hpux)
00049 #include <arpa/inet.h>
00050 #endif
00051 
00052 
00053 
00054 #include <sys/time.h>
00055 
00056 #ifdef ORTP_INET6
00057 #include <netdb.h>
00058 #endif
00059 
00060 typedef int ortp_socket_t;
00061 typedef pthread_t ortp_thread_t;
00062 typedef pthread_mutex_t ortp_mutex_t;
00063 typedef pthread_cond_t ortp_cond_t;
00064 
00065 #ifdef __INTEL_COMPILER
00066 #pragma warning(disable : 111)          // statement is unreachable
00067 #pragma warning(disable : 181)          // argument is incompatible with corresponding format string conversion
00068 #pragma warning(disable : 188)          // enumerated type mixed with another type
00069 #pragma warning(disable : 593)          // variable "xxx" was set but never used
00070 #pragma warning(disable : 810)          // conversion from "int" to "unsigned short" may lose significant bits
00071 #pragma warning(disable : 869)          // parameter "xxx" was never referenced
00072 #pragma warning(disable : 981)          // operands are evaluated in unspecified order
00073 #pragma warning(disable : 1418)         // external function definition with no prior declaration
00074 #pragma warning(disable : 1419)         // external declaration in primary source file
00075 #pragma warning(disable : 1469)         // "cc" clobber ignored
00076 #endif
00077 
00078 int __ortp_thread_join(ortp_thread_t thread, void **ptr);
00079 
00080 #define ortp_thread_create      pthread_create
00081 #define ortp_thread_join        __ortp_thread_join
00082 #define ortp_thread_exit        pthread_exit
00083 #define ortp_mutex_init         pthread_mutex_init
00084 #define ortp_mutex_lock         pthread_mutex_lock
00085 #define ortp_mutex_unlock       pthread_mutex_unlock
00086 #define ortp_mutex_destroy      pthread_mutex_destroy
00087 #define ortp_cond_init          pthread_cond_init
00088 #define ortp_cond_signal        pthread_cond_signal
00089 #define ortp_cond_broadcast     pthread_cond_broadcast
00090 #define ortp_cond_wait          pthread_cond_wait
00091 #define ortp_cond_destroy       pthread_cond_destroy
00092 
00093 #define SOCKET_OPTION_VALUE     void *
00094 #define SOCKET_BUFFER           void *
00095 
00096 #define getSocketError() strerror(errno)
00097 #define getSocketErrorCode() (errno)
00098 
00099 #else
00100 /*********************************/
00101 /* definitions for WIN32 flavour */
00102 /*********************************/
00103 
00104 #include <stdio.h>
00105 #include <stdlib.h>
00106 #include <stdarg.h>
00107 #include <winsock2.h>
00108 #include <ws2tcpip.h>
00109 
00110 
00111 #ifdef _MSC_VER
00112 #pragma push_macro("_WINSOCKAPI_")
00113 #ifndef _WINSOCKAPI_
00114 #define _WINSOCKAPI_
00115 #endif
00116 
00117 typedef  unsigned __int64 uint64_t;
00118 typedef  __int64 int64_t;
00119 typedef  unsigned short uint16_t;
00120 typedef  unsigned int uint32_t;
00121 typedef  int int32_t;
00122 typedef  unsigned char uint8_t;
00123 typedef __int16 int16_t;
00124 #else
00125 #include <stdint.h> /*provided by mingw32*/
00126 #endif
00127 
00128 #define vsnprintf       _vsnprintf
00129 #define srandom         srand
00130 #define random          rand
00131 
00132 
00133 typedef SOCKET ortp_socket_t;
00134 typedef HANDLE ortp_cond_t;
00135 typedef HANDLE ortp_mutex_t;
00136 typedef HANDLE ortp_thread_t;
00137 
00138 #define ortp_thread_create      WIN_thread_create
00139 #define ortp_thread_join        WIN_thread_join
00140 #define ortp_thread_exit(arg)           
00141 #define ortp_mutex_init         WIN_mutex_init
00142 #define ortp_mutex_lock         WIN_mutex_lock
00143 #define ortp_mutex_unlock       WIN_mutex_unlock
00144 #define ortp_mutex_destroy      WIN_mutex_destroy
00145 #define ortp_cond_init          WIN_cond_init
00146 #define ortp_cond_signal        WIN_cond_signal
00147 #define ortp_cond_broadcast     WIN_cond_broadcast
00148 #define ortp_cond_wait          WIN_cond_wait
00149 #define ortp_cond_destroy       WIN_cond_destroy
00150 
00151 int WIN_mutex_init(ortp_mutex_t *m, void *attr_unused);
00152 int WIN_mutex_lock(ortp_mutex_t *mutex);
00153 int WIN_mutex_unlock(ortp_mutex_t *mutex);
00154 int WIN_mutex_destroy(ortp_mutex_t *mutex);
00155 int WIN_thread_create(ortp_thread_t *t, void *attr_unused, void *(*func)(void*), void *arg); 
00156 int WIN_thread_join(ortp_thread_t thread, void **unused);
00157 int WIN_cond_init(ortp_cond_t *cond, void *attr_unused);
00158 int WIN_cond_wait(ortp_cond_t * cond, ortp_mutex_t * mutex);
00159 int WIN_cond_signal(ortp_cond_t * cond);
00160 int WIN_cond_broadcast(ortp_cond_t * cond);
00161 int WIN_cond_destroy(ortp_cond_t * cond);
00162 
00163 
00164 #define SOCKET_OPTION_VALUE     char *
00165 #define inline                  __inline
00166 
00167 const char *getWinSocketError(int error);
00168 #define getSocketErrorCode() WSAGetLastError()
00169 #define getSocketError() getWinSocketError(WSAGetLastError())
00170 
00171 #define snprintf _snprintf
00172 #define strcasecmp _stricmp
00173 
00174 #if 0
00175 struct timeval {
00176         long    tv_sec;         /* seconds */
00177         long    tv_usec;        /* and microseconds */
00178 };
00179 #endif
00180 
00181 int gettimeofday (struct timeval *tv, void* tz);
00182 #ifdef _WORKAROUND_MINGW32_BUGS
00183 char * WSAAPI gai_strerror(int errnum);
00184 #endif
00185 
00186 
00187 #endif
00188 
00189 typedef unsigned char bool_t;
00190 #undef TRUE
00191 #undef FALSE
00192 #define TRUE 1
00193 #define FALSE 0
00194 
00195 #ifdef __cplusplus
00196 extern "C"{
00197 #endif
00198 
00199 void* ortp_malloc(size_t sz);
00200 void ortp_free(void *ptr);
00201 void* ortp_realloc(void *ptr, size_t sz);
00202 void* ortp_malloc0(size_t sz);
00203 char * ortp_strdup(const char *tmp);
00204 
00205 #define ortp_new(type,count)    ortp_malloc(sizeof(type)*(count))
00206 #define ortp_new0(type,count)   ortp_malloc0(sizeof(type)*(count))
00207 
00208 int close_socket(ortp_socket_t sock);
00209 int set_non_blocking_socket(ortp_socket_t sock);
00210 
00211 char *ortp_strndup(const char *str,int n);
00212 char *ortp_strdup_printf(const char *fmt,...);
00213 
00214 #ifdef __cplusplus
00215 }
00216 #endif
00217 
00218 
00219 #if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(ORTP_STATIC)
00220 #ifdef ORTP_EXPORTS
00221    #define VAR_DECLSPEC    __declspec(dllexport)
00222 #else
00223    #define VAR_DECLSPEC    __declspec(dllimport)
00224 #endif
00225 #else
00226    #define VAR_DECLSPEC    extern
00227 #endif
00228 
00229 
00230 #endif
00231 
00232 

Generated on Thu Apr 5 18:59:20 2007 for oRTP by  doxygen 1.5.1