libosip
5.3.0
include
osip2
osip2/internal.h
1
/*
2
The oSIP library implements the Session Initiation Protocol (SIP -rfc3261-)
3
Copyright (C) 2001-2020 Aymeric MOIZARD amoizard@antisip.com
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
20
#ifndef _INTERNAL_H_
21
#define _INTERNAL_H_
22
23
#if defined(HAVE_CONFIG_H)
24
#include <osip-config.h>
25
#endif
26
27
#if defined(__PALMOS__) && (__PALMOS__ >= 0x06000000)
28
#define HAVE_CTYPE_H 1
29
#define HAVE_STRING_H 1
30
#define HAVE_SYS_TYPES_H 1
31
#define HAVE_TIME_H 1
32
#define HAVE_STDARG_H 1
33
34
#elif defined(__VXWORKS_OS__) || defined(__rtems__)
35
#define HAVE_STRING_H 1
36
#define HAVE_TIME_H 1
37
#define HAVE_SYS_TIME_H 1
38
#define HAVE_SYS_TYPES_H 1
39
#define HAVE_STDARG_H 1
40
41
#elif defined _WIN32_WCE
42
43
#define HAVE_CTYPE_H 1
44
#define HAVE_STRING_H 1
45
#define HAVE_TIME_H 1
46
#define HAVE_STDARG_H 1
47
48
#define snprintf _snprintf
49
50
#elif defined(WIN32)
51
52
#define HAVE_CTYPE_H 1
53
#define HAVE_STRING_H 1
54
#define HAVE_SYS_TYPES_H 1
55
#define HAVE_TIME_H 1
56
#define HAVE_STDARG_H 1
57
58
#if (_MSC_VER < 1900)
59
#define snprintf _snprintf
60
#endif
61
62
/* use win32 crypto routines for random number generation */
63
/* only use for vs .net (compiler v. 1300) or greater */
64
#if _MSC_VER >= 1300
65
#define WIN32_USE_CRYPTO 1
66
#endif
67
68
#endif
69
70
#if defined(HAVE_STRING_H)
71
#include <string.h>
72
#elif defined(HAVE_STRINGS_H)
73
#include <strings.h>
74
#else
75
#include <string.h>
76
#endif
77
78
#include <stdio.h>
79
#include <stdlib.h>
80
81
#if defined(HAVE_SYS_TYPES_H)
82
#include <sys/types.h>
83
#endif
84
85
#ifdef HAVE_TIME_H
86
#include <time.h>
87
#endif
88
89
#if defined(HAVE_SYS_TIME_H)
90
#include <sys/time.h>
91
#endif
92
93
#if defined(__arc__)
94
#include "includes_api.h"
95
#include "os_cfg_pub.h"
96
#include <posix_time_pub.h>
97
#endif
98
99
#ifdef __PSOS__
100
#define VA_START(a, f) va_start(a, f)
101
#include "pna.h"
102
#include "stdlib.h"
103
#include "time.h"
104
#define timercmp(tvp, uvp, cmp) ((tvp)->tv_sec cmp(uvp)->tv_sec || (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp(uvp)->tv_usec)
105
#define snprintf osip_snprintf
106
#ifndef INT_MAX
107
#define INT_MAX 0x7FFFFFFF
108
#endif
109
#endif
110
111
#ifdef __BORLANDC__
112
#define _timeb timeb
113
#define _ftime ftime
114
#endif
115
116
#ifndef DOXYGEN
117
118
#if !(defined(__rtems__) || defined(__PALMOS__) || defined(HAVE_STRUCT_TIMEVAL))
119
/* Struct timeval */
120
struct
timeval {
121
long
tv_sec;
/* seconds */
122
long
tv_usec;
/* and microseconds */
123
};
124
#endif
125
126
#ifndef OSIP_MONOTHREAD
127
128
/* Thread abstraction layer definition */
129
#if defined(__rtems__)
130
#include <rtems.h>
131
#else
132
133
/* Is there any thread implementation available? */
134
/* HAVE_PTHREAD_H is not used any more! I keep it for a while... */
135
#if !defined(__VXWORKS_OS__) && !defined(__PSOS__) && !defined(WIN32) && !defined(_WIN32_WCE) && !defined(HAVE_PTHREAD_WIN32) && !defined(HAVE_PTHREAD) && !defined(HAVE_PTHREAD_H) && !defined(HAVE_PTH_PTHREAD_H)
136
#error No thread implementation found!
137
#endif
138
139
/* Pthreads support: */
140
/* - Unix: native Pthreads. */
141
/* - Win32: Pthreads for Win32 (http://sources.redhat.com/pthreads-win32). */
142
#if defined(HAVE_PTHREAD) || defined(HAVE_PTHREAD_H) || defined(HAVE_PTH_PTHREAD_H) || defined(HAVE_PTHREAD_WIN32)
143
#if defined(__arc__)
144
#include <ucos_ii_api.h>
145
#endif
146
147
#include <pthread.h>
148
typedef
pthread_t osip_thread_t;
149
#endif
150
151
#if (_MSC_VER >= 1700) && !defined(_USING_V110_SDK71_)
152
#include <winapifamily.h>
153
#endif
154
155
/* Windows without Pthreads for Win32 */
156
#if (_MSC_VER >= 1700) && !defined(_USING_V110_SDK71_)
157
#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)
158
#define HAVE_CPP11_THREAD
159
#elif defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_PC_APP)
160
#define HAVE_CPP11_THREAD
161
#endif
162
#endif
163
164
#if defined(HAVE_CPP11_THREAD)
165
166
typedef
struct
{
167
void
*h;
168
} osip_thread_t;
169
170
#elif (defined(WIN32) || defined(_WIN32_WCE)) && !defined(HAVE_PTHREAD_WIN32)
171
172
/* Prevent the inclusion of winsock.h */
173
#define _WINSOCKAPI_
174
#include <windows.h>
175
#undef _WINSOCKAPI_
176
177
typedef
struct
{
178
HANDLE h;
179
unsigned
id;
180
} osip_thread_t;
181
#endif
182
183
#ifdef __VXWORKS_OS__
184
#include <taskLib.h>
185
typedef
struct
{
186
int
id;
187
} osip_thread_t;
188
#endif
189
190
#ifdef __PSOS__
191
#include <psos.h>
192
typedef
struct
{
193
unsigned
long
tid;
194
} osip_thread_t;
195
#endif
196
197
/* Semaphore and Mutex abstraction layer definition */
198
199
/* Is there any semaphore implementation available? */
200
#if !defined(HAVE_SEMAPHORE_H) && !defined(HAVE_SYS_SEM_H) && !defined(WIN32) && !defined(_WIN32_WCE) && !defined(HAVE_PTHREAD_WIN32) && !defined(__PSOS__) && !defined(__VXWORKS_OS__) && !defined(__arc__)
201
#error No semaphore implementation found
202
#endif
203
204
/* Pthreads */
205
#if defined(HAVE_PTHREAD) || defined(HAVE_PTHREAD_H) || defined(HAVE_PTH_PTHREAD_H) || defined(HAVE_PTHREAD_WIN32)
206
typedef
pthread_mutex_t osip_mutex_t;
207
#endif
208
209
#ifdef __sun__
210
#include <semaphore.h>
211
#undef getdate
212
#include <synch.h>
213
#endif
214
215
#if defined(__arc__)
216
217
typedef
struct
{
218
int
_sem_counter;
219
struct
osip_mutex
*_sem_mutex;
220
} sem_t;
221
222
typedef
sem_t osip_sem_t;
223
224
#elif (defined(HAVE_SEMAPHORE_H) && !defined(__APPLE_CC__)) || defined(HAVE_PTHREAD_WIN32)
225
#include <semaphore.h>
226
#ifdef __sun__
227
#undef getdate
228
#include <synch.h>
229
#endif
234
typedef
sem_t osip_sem_t;
235
236
#elif defined(__APPLE_CC__)
237
#include <mach/task.h>
238
#include <mach/semaphore.h>
239
#include <mach/mach_init.h>
240
typedef
struct
{
241
semaphore_t semid;
242
} osip_sem_t;
243
#elif defined(HAVE_SYS_SEM_H)
244
#include <sys/types.h>
245
#include <sys/ipc.h>
246
#include <sys/sem.h>
247
typedef
struct
{
248
int
semid;
249
} osip_sem_t;
250
#endif
251
252
/* Windows without Pthreads for Win32 */
253
#if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(HAVE_PTHREAD_WIN32)
254
/* Prevent the inclusion of winsock.h */
255
#define _WINSOCKAPI_
256
#include <windows.h>
257
#undef _WINSOCKAPI_
258
259
#if (_WIN32_WINNT >= 0x0403) && (!defined(_WIN32_WCE))
260
261
#define OSIP_CRITICALSECTION_SPIN 4000
262
typedef
struct
{
263
CRITICAL_SECTION h;
264
} osip_mutex_t;
265
#else
266
267
typedef
struct
{
268
HANDLE h;
269
} osip_mutex_t;
270
#endif
271
272
typedef
struct
{
273
HANDLE h;
274
} osip_sem_t;
275
#endif
276
277
#ifdef __VXWORKS_OS__
278
#include <semaphore.h>
279
#include <semLib.h>
280
typedef
struct
semaphore osip_mutex_t;
281
typedef
sem_t osip_sem_t;
282
#endif
283
284
#ifdef __PSOS__
285
#include <Types.h>
286
#include <os.h>
287
typedef
struct
{
288
UInt32 id;
289
} osip_mutex_t;
290
typedef
struct
{
291
UInt32 id;
292
} osip_sem_t;
293
#endif
294
295
/* Condition variable abstraction layer definition */
296
301
#if defined(HAVE_PTHREAD) || defined(HAVE_PTH_PTHREAD_H) || defined(HAVE_PTHREAD_WIN32)
302
typedef
struct
osip_cond {
303
pthread_cond_t cv;
304
} osip_cond_t;
305
#endif
306
307
#if (defined(WIN32) || defined(_WIN32_WCE)) && !defined(HAVE_PTHREAD_WIN32)
308
typedef
struct
osip_cond {
309
struct
osip_mutex
*mut;
310
struct
osip_sem
*sem;
311
} osip_cond_t;
312
#endif
313
314
#if defined(__PSOS__) || defined(__VXWORKS_OS__)
315
typedef
struct
osip_cond {
316
struct
osip_sem
*sem;
317
} osip_cond_t;
318
#endif
319
320
#endif
321
322
#if defined(__rtems__)
323
typedef
struct
{
324
rtems_id tid;
325
} osip_thread_t;
326
327
typedef
struct
{
328
rtems_id id;
329
} osip_sem_t;
330
331
typedef
struct
{
332
rtems_id id;
333
} osip_mutex_t;
334
#endif
335
336
#endif
/* #ifndef OSIP_MONOTHREAD */
337
338
#endif
/* #ifndef DOXYGEN */
339
340
#endif
/* #ifndef _INTERNAL_H_ */
osip_mutex
osip_sem
Generated on Sun Feb 27 2022 11:19:30 for libosip by
1.9.1