oRTP: include/ortp/port.h Source File

- Main Page
- Data Structures
- Files

# 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