oRTP 0.23.0
port.h
1/*
2 The oRTP library is an RTP (Realtime Transport Protocol - rfc3550) stack.
3 Copyright (C) 2001 Simon MORLAT simon.morlat@linphone.org
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18*/
19/* this file is responsible of the portability of the stack */
20
21#ifndef ORTP_PORT_H
22#define ORTP_PORT_H
23
24
25#if !defined(WIN32) && !defined(_WIN32_WCE)
26/********************************/
27/* definitions for UNIX flavour */
28/********************************/
29
30#include <errno.h>
31#include <sys/types.h>
32#include <pthread.h>
33#include <unistd.h>
34#include <fcntl.h>
35#include <stdlib.h>
36#include <stdio.h>
37#include <stdarg.h>
38#include <string.h>
39
40#ifdef __linux
41#include <stdint.h>
42#endif
43
44
45#include <sys/types.h>
46#include <sys/socket.h>
47#include <netinet/in.h>
48#if defined(_XOPEN_SOURCE_EXTENDED) || !defined(__hpux)
49#include <arpa/inet.h>
50#endif
51
52
53
54#include <sys/time.h>
55
56#ifdef ORTP_INET6
57#include <netdb.h>
58#endif
59
60typedef int ortp_socket_t;
61typedef pthread_t ortp_thread_t;
62typedef pthread_mutex_t ortp_mutex_t;
63typedef pthread_cond_t ortp_cond_t;
64
65#ifdef __INTEL_COMPILER
66#pragma warning(disable : 111) // statement is unreachable
67#pragma warning(disable : 181) // argument is incompatible with corresponding format string conversion
68#pragma warning(disable : 188) // enumerated type mixed with another type
69#pragma warning(disable : 593) // variable "xxx" was set but never used
70#pragma warning(disable : 810) // conversion from "int" to "unsigned short" may lose significant bits
71#pragma warning(disable : 869) // parameter "xxx" was never referenced
72#pragma warning(disable : 981) // operands are evaluated in unspecified order
73#pragma warning(disable : 1418) // external function definition with no prior declaration
74#pragma warning(disable : 1419) // external declaration in primary source file
75#pragma warning(disable : 1469) // "cc" clobber ignored
76#endif
77
78#define ORTP_PUBLIC
79
80#ifdef __cplusplus
81extern "C"
82{
83#endif
84
85int __ortp_thread_join(ortp_thread_t thread, void **ptr);
86int __ortp_thread_create(pthread_t *thread, pthread_attr_t *attr, void * (*routine)(void*), void *arg);
87
88#ifdef __cplusplus
89}
90#endif
91
92#define ortp_thread_create __ortp_thread_create
93#define ortp_thread_join __ortp_thread_join
94#define ortp_thread_exit pthread_exit
95#define ortp_mutex_init pthread_mutex_init
96#define ortp_mutex_lock pthread_mutex_lock
97#define ortp_mutex_unlock pthread_mutex_unlock
98#define ortp_mutex_destroy pthread_mutex_destroy
99#define ortp_cond_init pthread_cond_init
100#define ortp_cond_signal pthread_cond_signal
101#define ortp_cond_broadcast pthread_cond_broadcast
102#define ortp_cond_wait pthread_cond_wait
103#define ortp_cond_destroy pthread_cond_destroy
104
105#define SOCKET_OPTION_VALUE void *
106#define SOCKET_BUFFER void *
107
108#define getSocketError() strerror(errno)
109#define getSocketErrorCode() (errno)
110#define ortp_gettimeofday(tv,tz) gettimeofday(tv,tz)
111#define ortp_log10f(x) log10f(x)
112
113
114#else
115/*********************************/
116/* definitions for WIN32 flavour */
117/*********************************/
118
119#include <stdio.h>
120#include <stdlib.h>
121#include <stdarg.h>
122#include <winsock2.h>
123#include <ws2tcpip.h>
124
125#ifdef _MSC_VER
126#ifdef ORTP_EXPORTS
127#define ORTP_PUBLIC __declspec(dllexport)
128#else
129#define ORTP_PUBLIC __declspec(dllimport)
130#endif
131#pragma push_macro("_WINSOCKAPI_")
132#ifndef _WINSOCKAPI_
133#define _WINSOCKAPI_
134#endif
135
136#define strtok_r strtok_s
137
138typedef unsigned __int64 uint64_t;
139typedef __int64 int64_t;
140typedef unsigned short uint16_t;
141typedef unsigned int uint32_t;
142typedef int int32_t;
143typedef unsigned char uint8_t;
144typedef __int16 int16_t;
145#else
146#include <stdint.h> /*provided by mingw32*/
147#include <io.h>
148#define ORTP_PUBLIC
149ORTP_PUBLIC char* strtok_r(char *str, const char *delim, char **nextp);
150#endif
151
152#define vsnprintf _vsnprintf
153#define srandom srand
154#define random rand
155
156typedef SOCKET ortp_socket_t;
157#ifdef WINAPI_FAMILY_PHONE_APP
158typedef CONDITION_VARIABLE ortp_cond_t;
159typedef SRWLOCK ortp_mutex_t;
160#else
161typedef HANDLE ortp_cond_t;
162typedef HANDLE ortp_mutex_t;
163#endif
164typedef HANDLE ortp_thread_t;
165
166#define ortp_thread_create WIN_thread_create
167#define ortp_thread_join WIN_thread_join
168#define ortp_thread_exit(arg)
169#define ortp_mutex_init WIN_mutex_init
170#define ortp_mutex_lock WIN_mutex_lock
171#define ortp_mutex_unlock WIN_mutex_unlock
172#define ortp_mutex_destroy WIN_mutex_destroy
173#define ortp_cond_init WIN_cond_init
174#define ortp_cond_signal WIN_cond_signal
175#define ortp_cond_broadcast WIN_cond_broadcast
176#define ortp_cond_wait WIN_cond_wait
177#define ortp_cond_destroy WIN_cond_destroy
178
179
180#ifdef __cplusplus
181extern "C"
182{
183#endif
184
185ORTP_PUBLIC int WIN_mutex_init(ortp_mutex_t *m, void *attr_unused);
186ORTP_PUBLIC int WIN_mutex_lock(ortp_mutex_t *mutex);
187ORTP_PUBLIC int WIN_mutex_unlock(ortp_mutex_t *mutex);
188ORTP_PUBLIC int WIN_mutex_destroy(ortp_mutex_t *mutex);
189ORTP_PUBLIC int WIN_thread_create(ortp_thread_t *t, void *attr_unused, void *(*func)(void*), void *arg);
190ORTP_PUBLIC int WIN_thread_join(ortp_thread_t thread, void **unused);
191ORTP_PUBLIC int WIN_cond_init(ortp_cond_t *cond, void *attr_unused);
192ORTP_PUBLIC int WIN_cond_wait(ortp_cond_t * cond, ortp_mutex_t * mutex);
193ORTP_PUBLIC int WIN_cond_signal(ortp_cond_t * cond);
194ORTP_PUBLIC int WIN_cond_broadcast(ortp_cond_t * cond);
195ORTP_PUBLIC int WIN_cond_destroy(ortp_cond_t * cond);
196
197#ifdef __cplusplus
198}
199#endif
200
201#define SOCKET_OPTION_VALUE char *
202#define inline __inline
203
204#if defined(_WIN32_WCE)
205
206#define ortp_log10f(x) (float)log10 ((double)x)
207
208#ifdef assert
209 #undef assert
210#endif /*assert*/
211#define assert(exp) ((void)0)
212
213#ifdef errno
214 #undef errno
215#endif /*errno*/
216#define errno GetLastError()
217#ifdef strerror
218 #undef strerror
219#endif /*strerror*/
220const char * ortp_strerror(DWORD value);
221#define strerror ortp_strerror
222
223
224#else /*_WIN32_WCE*/
225
226#define ortp_log10f(x) log10f(x)
227
228#endif
229
230ORTP_PUBLIC const char *getWinSocketError(int error);
231#define getSocketErrorCode() WSAGetLastError()
232#define getSocketError() getWinSocketError(WSAGetLastError())
233
234#define snprintf _snprintf
235#define strcasecmp _stricmp
236#define strncasecmp _strnicmp
237
238
239#ifdef __cplusplus
240extern "C"{
241#endif
242ORTP_PUBLIC int ortp_gettimeofday (struct timeval *tv, void* tz);
243#ifdef _WORKAROUND_MINGW32_BUGS
244char * WSAAPI gai_strerror(int errnum);
245#endif
246#ifdef __cplusplus
247}
248#endif
249
250#endif
251
252typedef unsigned char bool_t;
253#undef TRUE
254#undef FALSE
255#define TRUE 1
256#define FALSE 0
257
258typedef struct ortpTimeSpec{
259 int64_t tv_sec;
260 int64_t tv_nsec;
262
263#ifdef __cplusplus
264extern "C"{
265#endif
266
267ORTP_PUBLIC void* ortp_malloc(size_t sz);
268ORTP_PUBLIC void ortp_free(void *ptr);
269ORTP_PUBLIC void* ortp_realloc(void *ptr, size_t sz);
270ORTP_PUBLIC void* ortp_malloc0(size_t sz);
271ORTP_PUBLIC char * ortp_strdup(const char *tmp);
272
273/*override the allocator with this method, to be called BEFORE ortp_init()*/
274typedef struct _OrtpMemoryFunctions{
275 void *(*malloc_fun)(size_t sz);
276 void *(*realloc_fun)(void *ptr, size_t sz);
277 void (*free_fun)(void *ptr);
279
280void ortp_set_memory_functions(OrtpMemoryFunctions *functions);
281
282#define ortp_new(type,count) (type*)ortp_malloc(sizeof(type)*(count))
283#define ortp_new0(type,count) (type*)ortp_malloc0(sizeof(type)*(count))
284
285ORTP_PUBLIC int close_socket(ortp_socket_t sock);
286ORTP_PUBLIC int set_non_blocking_socket(ortp_socket_t sock);
287
288ORTP_PUBLIC char *ortp_strndup(const char *str,int n);
289ORTP_PUBLIC char *ortp_strdup_printf(const char *fmt,...);
290ORTP_PUBLIC char *ortp_strdup_vprintf(const char *fmt, va_list ap);
291
292ORTP_PUBLIC int ortp_file_exist(const char *pathname);
293
294ORTP_PUBLIC void ortp_get_cur_time(ortpTimeSpec *ret);
295
296/* portable named pipes and shared memory*/
297#if !defined(_WIN32_WCE)
298#ifdef WIN32
299typedef HANDLE ortp_pipe_t;
300#define ORTP_PIPE_INVALID INVALID_HANDLE_VALUE
301#else
302typedef int ortp_pipe_t;
303#define ORTP_PIPE_INVALID (-1)
304#endif
305
306ORTP_PUBLIC ortp_pipe_t ortp_server_pipe_create(const char *name);
307/*
308 * warning: on win32 ortp_server_pipe_accept_client() might return INVALID_HANDLE_VALUE without
309 * any specific error, this happens when ortp_server_pipe_close() is called on another pipe.
310 * This pipe api is not thread-safe.
311*/
312ORTP_PUBLIC ortp_pipe_t ortp_server_pipe_accept_client(ortp_pipe_t server);
313ORTP_PUBLIC int ortp_server_pipe_close(ortp_pipe_t spipe);
314ORTP_PUBLIC int ortp_server_pipe_close_client(ortp_pipe_t client);
315
316ORTP_PUBLIC ortp_pipe_t ortp_client_pipe_connect(const char *name);
317ORTP_PUBLIC int ortp_client_pipe_close(ortp_pipe_t sock);
318
319ORTP_PUBLIC int ortp_pipe_read(ortp_pipe_t p, uint8_t *buf, int len);
320ORTP_PUBLIC int ortp_pipe_write(ortp_pipe_t p, const uint8_t *buf, int len);
321
322ORTP_PUBLIC void *ortp_shm_open(unsigned int keyid, int size, int create);
323ORTP_PUBLIC void ortp_shm_close(void *memory);
324
325#endif
326
327#ifdef __cplusplus
328}
329
330#endif
331
332
333#if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(ORTP_STATIC)
334#ifdef ORTP_EXPORTS
335 #define ORTP_VAR_PUBLIC extern __declspec(dllexport)
336#else
337 #define ORTP_VAR_PUBLIC __declspec(dllimport)
338#endif
339#else
340 #define ORTP_VAR_PUBLIC extern
341#endif
342
343
344/*define __ios when we are compiling for ios.
345 The TARGET_OS_IPHONE macro is stupid, it is defined to 0 when compiling on mac os x.
346*/
347#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE==1
348#define __ios 1
349#endif
350
351#endif
352
353
Definition: port.h:274
Definition: port.h:258