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 int __ortp_thread_create(pthread_t *thread, pthread_attr_t *attr, void * (*routine)(void*), void *arg);
00080 #define ortp_thread_create      __ortp_thread_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 
00152 #ifdef __cplusplus
00153 extern "C"
00154 {
00155 #endif
00156         
00157 int WIN_mutex_init(ortp_mutex_t *m, void *attr_unused);
00158 int WIN_mutex_lock(ortp_mutex_t *mutex);
00159 int WIN_mutex_unlock(ortp_mutex_t *mutex);
00160 int WIN_mutex_destroy(ortp_mutex_t *mutex);
00161 int WIN_thread_create(ortp_thread_t *t, void *attr_unused, void *(*func)(void*), void *arg); 
00162 int WIN_thread_join(ortp_thread_t thread, void **unused);
00163 int WIN_cond_init(ortp_cond_t *cond, void *attr_unused);
00164 int WIN_cond_wait(ortp_cond_t * cond, ortp_mutex_t * mutex);
00165 int WIN_cond_signal(ortp_cond_t * cond);
00166 int WIN_cond_broadcast(ortp_cond_t * cond);
00167 int WIN_cond_destroy(ortp_cond_t * cond);
00168 
00169 #ifdef __cplusplus
00170 }
00171 #endif
00172 
00173 #define SOCKET_OPTION_VALUE     char *
00174 #define inline                  __inline
00175 
00176 const char *getWinSocketError(int error);
00177 #define getSocketErrorCode() WSAGetLastError()
00178 #define getSocketError() getWinSocketError(WSAGetLastError())
00179 
00180 #define snprintf _snprintf
00181 #define strcasecmp _stricmp
00182 
00183 #if 0
00184 struct timeval {
00185         long    tv_sec;         /* seconds */
00186         long    tv_usec;        /* and microseconds */
00187 };
00188 #endif
00189 
00190 int gettimeofday (struct timeval *tv, void* tz);
00191 #ifdef _WORKAROUND_MINGW32_BUGS
00192 char * WSAAPI gai_strerror(int errnum);
00193 #endif
00194 
00195 
00196 #endif
00197 
00198 typedef unsigned char bool_t;
00199 #undef TRUE
00200 #undef FALSE
00201 #define TRUE 1
00202 #define FALSE 0
00203 
00204 #ifdef __cplusplus
00205 extern "C"{
00206 #endif
00207 
00208 void* ortp_malloc(size_t sz);
00209 void ortp_free(void *ptr);
00210 void* ortp_realloc(void *ptr, size_t sz);
00211 void* ortp_malloc0(size_t sz);
00212 char * ortp_strdup(const char *tmp);
00213 
00214 /*override the allocator with this method, to be called BEFORE ortp_init()*/
00215 typedef struct _OrtpMemoryFunctions{
00216         void *(*malloc_fun)(size_t sz);
00217         void *(*realloc_fun)(void *ptr, size_t sz);
00218         void (*free_fun)(void *ptr);
00219 }OrtpMemoryFunctions;
00220 
00221 void ortp_set_memory_functions(OrtpMemoryFunctions *functions);
00222 
00223 #define ortp_new(type,count)    ortp_malloc(sizeof(type)*(count))
00224 #define ortp_new0(type,count)   ortp_malloc0(sizeof(type)*(count))
00225 
00226 int close_socket(ortp_socket_t sock);
00227 int set_non_blocking_socket(ortp_socket_t sock);
00228 
00229 char *ortp_strndup(const char *str,int n);
00230 char *ortp_strdup_printf(const char *fmt,...);
00231 
00232 #ifdef __cplusplus
00233 }
00234 #endif
00235 
00236 
00237 #if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(ORTP_STATIC)
00238 #ifdef ORTP_EXPORTS
00239    #define VAR_DECLSPEC    __declspec(dllexport)
00240 #else
00241    #define VAR_DECLSPEC    __declspec(dllimport)
00242 #endif
00243 #else
00244    #define VAR_DECLSPEC    extern
00245 #endif
00246 
00247 
00248 #endif
00249 
00250 

Generated on Tue Feb 5 21:35:36 2008 for oRTP by  doxygen 1.5.4