Add support for ICE/STUN/TURN in res_rtp_asterisk and chan_sip.
[asterisk/asterisk.git] / res / pjproject / pjlib / include / pj / config.h
1 /* $Id$ */
2 /* 
3  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
4  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
19  */
20 #ifndef __PJ_CONFIG_H__
21 #define __PJ_CONFIG_H__
22
23
24 /**
25  * @file config.h
26  * @brief PJLIB Main configuration settings.
27  */
28
29 /********************************************************************
30  * Include compiler specific configuration.
31  */
32 #if defined(_MSC_VER)
33 #  include <pj/compat/cc_msvc.h>
34 #elif defined(__GNUC__)
35 #  include <pj/compat/cc_gcc.h>
36 #elif defined(__CW32__)
37 #  include <pj/compat/cc_mwcc.h>
38 #elif defined(__MWERKS__)
39 #  include <pj/compat/cc_codew.h>
40 #elif defined(__GCCE__)
41 #  include <pj/compat/cc_gcce.h>
42 #elif defined(__ARMCC__)
43 #  include <pj/compat/cc_armcc.h>
44 #else
45 #  error "Unknown compiler."
46 #endif
47
48 /* PJ_ALIGN_DATA is compiler specific directive to align data address */
49 #ifndef PJ_ALIGN_DATA
50 #  error "PJ_ALIGN_DATA is not defined!"
51 #endif
52
53 /********************************************************************
54  * Include target OS specific configuration.
55  */
56 #if defined(PJ_AUTOCONF)
57     /*
58      * Autoconf
59      */
60 #   include <pj/compat/os_auto.h>
61
62 #elif defined(PJ_SYMBIAN) && PJ_SYMBIAN!=0
63     /*
64      * SymbianOS
65      */
66 #  include <pj/compat/os_symbian.h>
67
68 #elif defined(PJ_WIN32_WINCE) || defined(_WIN32_WCE) || defined(UNDER_CE)
69     /*
70      * Windows CE
71      */
72 #   undef PJ_WIN32_WINCE
73 #   define PJ_WIN32_WINCE   1
74 #   include <pj/compat/os_win32_wince.h>
75
76     /* Also define Win32 */
77 #   define PJ_WIN32 1
78
79 #elif defined(PJ_WIN32) || defined(_WIN32) || defined(__WIN32__) || \
80         defined(_WIN64) || defined(WIN32) || defined(__TOS_WIN__)
81     /*
82      * Win32
83      */
84 #   undef PJ_WIN32
85 #   define PJ_WIN32 1
86 #   include <pj/compat/os_win32.h>
87
88 #elif defined(PJ_LINUX_KERNEL) && PJ_LINUX_KERNEL!=0
89     /*
90      * Linux kernel
91      */
92 #  include <pj/compat/os_linux_kernel.h>
93
94 #elif defined(PJ_LINUX) || defined(linux) || defined(__linux)
95     /*
96      * Linux
97      */
98 #   undef PJ_LINUX
99 #   define PJ_LINUX         1
100 #   include <pj/compat/os_linux.h>
101
102 #elif defined(PJ_PALMOS) && PJ_PALMOS!=0
103     /*
104      * Palm
105      */
106 #  include <pj/compat/os_palmos.h>
107
108 #elif defined(PJ_SUNOS) || defined(sun) || defined(__sun)
109     /*
110      * SunOS
111      */
112 #   undef PJ_SUNOS
113 #   define PJ_SUNOS         1
114 #   include <pj/compat/os_sunos.h>
115
116 #elif defined(PJ_DARWINOS) || defined(__MACOSX__) || \
117       defined (__APPLE__) || defined (__MACH__)
118     /*
119      * MacOS X
120      */
121 #   undef PJ_DARWINOS
122 #   define PJ_DARWINOS      1
123 #   include <pj/compat/os_darwinos.h>
124
125 #elif defined(PJ_RTEMS) && PJ_RTEMS!=0
126     /*
127      * RTEMS
128      */
129 #  include <pj/compat/os_rtems.h>
130 #else
131 #   error "Please specify target os."
132 #endif
133
134
135 /********************************************************************
136  * Target machine specific configuration.
137  */
138 #if defined(PJ_AUTOCONF)
139     /*
140      * Autoconf configured
141      */
142 #include <pj/compat/m_auto.h>
143
144 #elif defined (PJ_M_I386) || defined(_i386_) || defined(i_386_) || \
145         defined(_X86_) || defined(x86) || defined(__i386__) || \
146         defined(__i386) || defined(_M_IX86) || defined(__I86__)
147     /*
148      * Generic i386 processor family, little-endian
149      */
150 #   undef PJ_M_I386
151 #   define PJ_M_I386            1
152 #   define PJ_M_NAME            "i386"
153 #   define PJ_HAS_PENTIUM       1
154 #   define PJ_IS_LITTLE_ENDIAN  1
155 #   define PJ_IS_BIG_ENDIAN     0
156
157
158 #elif defined (PJ_M_X86_64) || defined(__amd64__) || defined(__amd64) || \
159         defined(__x86_64__) || defined(__x86_64)
160     /*
161      * AMD 64bit processor, little endian
162      */
163 #   undef PJ_M_X86_64
164 #   define PJ_M_X86_64          1
165 #   define PJ_M_NAME            "x86_64"
166 #   define PJ_HAS_PENTIUM       1
167 #   define PJ_IS_LITTLE_ENDIAN  1
168 #   define PJ_IS_BIG_ENDIAN     0
169
170 #elif defined(PJ_M_IA64) || defined(__ia64__) || defined(_IA64) || \
171         defined(__IA64__) || defined(   _M_IA64)
172     /*
173      * Intel IA64 processor, default to little endian
174      */
175 #   undef PJ_M_IA64
176 #   define PJ_M_IA64            1
177 #   define PJ_M_NAME            "ia64"
178 #   define PJ_HAS_PENTIUM       1
179 #   define PJ_IS_LITTLE_ENDIAN  1
180 #   define PJ_IS_BIG_ENDIAN     0
181
182 #elif defined (PJ_M_M68K) && PJ_M_M68K != 0
183
184     /*
185      * Motorola m68k processor, big endian
186      */
187 #   undef PJ_M_M68K
188 #   define PJ_M_M68K            1
189 #   define PJ_M_NAME            "m68k"
190 #   define PJ_HAS_PENTIUM       0
191 #   define PJ_IS_LITTLE_ENDIAN  0
192 #   define PJ_IS_BIG_ENDIAN     1
193
194
195 #elif defined (PJ_M_ALPHA) || defined (__alpha__) || defined (__alpha) || \
196         defined (_M_ALPHA)
197     /*
198      * DEC Alpha processor, little endian
199      */
200 #   undef PJ_M_ALPHA
201 #   define PJ_M_ALPHA           1
202 #   define PJ_M_NAME            "alpha"
203 #   define PJ_HAS_PENTIUM       0
204 #   define PJ_IS_LITTLE_ENDIAN  1
205 #   define PJ_IS_BIG_ENDIAN     0
206
207
208 #elif defined(PJ_M_MIPS) || defined(__mips__) || defined(__mips) || \
209         defined(__MIPS__) || defined(MIPS) || defined(_MIPS_)
210     /*
211      * MIPS, bi-endian, so raise error if endianness is not configured
212      */
213 #   undef PJ_M_MIPS
214 #   define PJ_M_MIPS            1
215 #   define PJ_M_NAME            "mips"
216 #   define PJ_HAS_PENTIUM       0
217 #   if !PJ_IS_LITTLE_ENDIAN && !PJ_IS_BIG_ENDIAN
218 #       error Endianness must be declared for this processor
219 #   endif
220
221
222 #elif defined (PJ_M_SPARC) || defined(  __sparc__) || defined(__sparc)
223     /*
224      * Sun Sparc, big endian
225      */
226 #   undef PJ_M_SPARC
227 #   define PJ_M_SPARC           1
228 #   define PJ_M_NAME            "sparc"
229 #   define PJ_HAS_PENTIUM       0
230 #   define PJ_IS_LITTLE_ENDIAN  0
231 #   define PJ_IS_BIG_ENDIAN     1
232
233 #elif defined (PJ_M_ARMV4) || defined(ARM) || defined(_ARM_) ||  \
234         defined(ARMV4) || defined(__arm__)
235     /*
236      * ARM, bi-endian, so raise error if endianness is not configured
237      */
238 #   undef PJ_M_ARMV4
239 #   define PJ_M_ARMV4           1
240 #   define PJ_M_NAME            "armv4"
241 #   define PJ_HAS_PENTIUM       0
242 #   if !PJ_IS_LITTLE_ENDIAN && !PJ_IS_BIG_ENDIAN
243 #       error Endianness must be declared for this processor
244 #   endif
245
246 #elif defined (PJ_M_POWERPC) || defined(__powerpc) || defined(__powerpc__) || \
247         defined(__POWERPC__) || defined(__ppc__) || defined(_M_PPC) || \
248         defined(_ARCH_PPC)
249     /*
250      * PowerPC, bi-endian, so raise error if endianness is not configured
251      */
252 #   undef PJ_M_POWERPC
253 #   define PJ_M_POWERPC         1
254 #   define PJ_M_NAME            "powerpc"
255 #   define PJ_HAS_PENTIUM       0
256 #   if !PJ_IS_LITTLE_ENDIAN && !PJ_IS_BIG_ENDIAN
257 #       error Endianness must be declared for this processor
258 #   endif
259
260 #elif defined (PJ_M_NIOS2) || defined(__nios2) || defined(__nios2__) || \
261       defined(__NIOS2__) || defined(__M_NIOS2) || defined(_ARCH_NIOS2)
262     /*
263      * Nios2, little endian
264      */
265 #   undef PJ_M_NIOS2
266 #   define PJ_M_NIOS2           1
267 #   define PJ_M_NAME            "nios2"
268 #   define PJ_HAS_PENTIUM       0
269 #   define PJ_IS_LITTLE_ENDIAN  1
270 #   define PJ_IS_BIG_ENDIAN     0
271                 
272 #else
273 #   error "Please specify target machine."
274 #endif
275
276 /* Include size_t definition. */
277 #include <pj/compat/size_t.h>
278
279 /* Include site/user specific configuration to control PJLIB features.
280  * YOU MUST CREATE THIS FILE YOURSELF!!
281  */
282 #include <pj/config_site.h>
283
284 /********************************************************************
285  * PJLIB Features.
286  */
287
288 /* Overrides for DOXYGEN */
289 #ifdef DOXYGEN
290 #   undef PJ_FUNCTIONS_ARE_INLINED
291 #   undef PJ_HAS_FLOATING_POINT
292 #   undef PJ_LOG_MAX_LEVEL
293 #   undef PJ_LOG_MAX_SIZE
294 #   undef PJ_LOG_USE_STACK_BUFFER
295 #   undef PJ_TERM_HAS_COLOR
296 #   undef PJ_POOL_DEBUG
297 #   undef PJ_HAS_TCP
298 #   undef PJ_MAX_HOSTNAME
299 #   undef PJ_IOQUEUE_MAX_HANDLES
300 #   undef FD_SETSIZE
301 #   undef PJ_HAS_SEMAPHORE
302 #   undef PJ_HAS_EVENT_OBJ
303 #   undef PJ_ENABLE_EXTRA_CHECK
304 #   undef PJ_EXCEPTION_USE_WIN32_SEH
305 #   undef PJ_HAS_ERROR_STRING
306
307 #   define PJ_HAS_IPV6  1
308 #endif
309
310 /**
311  * @defgroup pj_config Build Configuration
312  * @{
313  *
314  * This section contains macros that can set during PJLIB build process
315  * to controll various aspects of the library.
316  *
317  * <b>Note</b>: the values in this page does NOT necessarily reflect to the
318  * macro values during the build process.
319  */
320
321 /**
322  * If this macro is set to 1, it will enable some debugging checking
323  * in the library.
324  *
325  * Default: equal to (NOT NDEBUG).
326  */
327 #ifndef PJ_DEBUG
328 #  ifndef NDEBUG
329 #    define PJ_DEBUG                1
330 #  else
331 #    define PJ_DEBUG                0
332 #  endif
333 #endif
334
335 /**
336  * Enable this macro to activate logging to mutex/semaphore related events.
337  * This is useful to troubleshoot concurrency problems such as deadlocks.
338  * In addition, you should also add PJ_LOG_HAS_THREAD_ID flag to the
339  * log decoration to assist the troubleshooting.
340  *
341  * Default: 0
342  */
343 #ifndef PJ_DEBUG_MUTEX
344 #   define PJ_DEBUG_MUTEX           0
345 #endif
346
347 /**
348  * Expand functions in *_i.h header files as inline.
349  *
350  * Default: 0.
351  */
352 #ifndef PJ_FUNCTIONS_ARE_INLINED
353 #  define PJ_FUNCTIONS_ARE_INLINED  0
354 #endif
355
356 /**
357  * Use floating point computations in the library.
358  *
359  * Default: 1.
360  */
361 #ifndef PJ_HAS_FLOATING_POINT
362 #  define PJ_HAS_FLOATING_POINT     1
363 #endif
364
365 /**
366  * Declare maximum logging level/verbosity. Lower number indicates higher
367  * importance, with the highest importance has level zero. The least
368  * important level is five in this implementation, but this can be extended
369  * by supplying the appropriate implementation.
370  *
371  * The level conventions:
372  *  - 0: fatal error
373  *  - 1: error
374  *  - 2: warning
375  *  - 3: info
376  *  - 4: debug
377  *  - 5: trace
378  *  - 6: more detailed trace
379  *
380  * Default: 4
381  */
382 #ifndef PJ_LOG_MAX_LEVEL
383 #  define PJ_LOG_MAX_LEVEL   5
384 #endif
385
386 /**
387  * Maximum message size that can be sent to output device for each call
388  * to PJ_LOG(). If the message size is longer than this value, it will be cut.
389  * This may affect the stack usage, depending whether PJ_LOG_USE_STACK_BUFFER
390  * flag is set.
391  *
392  * Default: 4000
393  */
394 #ifndef PJ_LOG_MAX_SIZE
395 #  define PJ_LOG_MAX_SIZE           4000
396 #endif
397
398 /**
399  * Log buffer.
400  * Does the log get the buffer from the stack? (default is yes).
401  * If the value is set to NO, then the buffer will be taken from static
402  * buffer, which in this case will make the log function non-reentrant.
403  *
404  * Default: 1
405  */
406 #ifndef PJ_LOG_USE_STACK_BUFFER
407 #  define PJ_LOG_USE_STACK_BUFFER   1
408 #endif
409
410 /**
411  * Enable log indentation feature.
412  *
413  * Default: 1
414  */
415 #ifndef PJ_LOG_ENABLE_INDENT
416 #   define PJ_LOG_ENABLE_INDENT        1
417 #endif
418
419 /**
420  * Number of PJ_LOG_INDENT_CHAR to put every time pj_log_push_indent()
421  * is called.
422  *
423  * Default: 1
424  */
425 #ifndef PJ_LOG_INDENT_SIZE
426 #   define PJ_LOG_INDENT_SIZE        1
427 #endif
428
429 /**
430  * Log indentation character.
431  *
432  * Default: space
433  */
434 #ifndef PJ_LOG_INDENT_CHAR
435 #   define PJ_LOG_INDENT_CHAR       '.'
436 #endif
437
438 /**
439  * Colorfull terminal (for logging etc).
440  *
441  * Default: 1
442  */
443 #ifndef PJ_TERM_HAS_COLOR
444 #  define PJ_TERM_HAS_COLOR         1
445 #endif
446
447
448 /**
449  * Set this flag to non-zero to enable various checking for pool
450  * operations. When this flag is set, assertion must be enabled
451  * in the application.
452  *
453  * This will slow down pool creation and destruction and will add
454  * few bytes of overhead, so application would normally want to 
455  * disable this feature on release build.
456  *
457  * Default: 0
458  */
459 #ifndef PJ_SAFE_POOL
460 #   define PJ_SAFE_POOL             0
461 #endif
462
463
464 /**
465  * If pool debugging is used, then each memory allocation from the pool
466  * will call malloc(), and pool will release all memory chunks when it
467  * is destroyed. This works better when memory verification programs
468  * such as Rational Purify is used.
469  *
470  * Default: 0
471  */
472 #ifndef PJ_POOL_DEBUG
473 #  define PJ_POOL_DEBUG             0
474 #endif
475
476
477 /**
478  * Specify this as \a stack_size argument in #pj_thread_create() to specify
479  * that thread should use default stack size for the current platform.
480  *
481  * Default: 8192
482  */
483 #ifndef PJ_THREAD_DEFAULT_STACK_SIZE 
484 #  define PJ_THREAD_DEFAULT_STACK_SIZE    8192
485 #endif
486
487
488 /**
489  * Specify if PJ_CHECK_STACK() macro is enabled to check the sanity of 
490  * the stack. The OS implementation may check that no stack overflow 
491  * occurs, and it also may collect statistic about stack usage. Note
492  * that this will increase the footprint of the libraries since it
493  * tracks the filename and line number of each functions.
494  */
495 #ifndef PJ_OS_HAS_CHECK_STACK
496 #       define PJ_OS_HAS_CHECK_STACK            0
497 #endif
498
499 /**
500  * Do we have alternate pool implementation?
501  *
502  * Default: 0
503  */
504 #ifndef PJ_HAS_POOL_ALT_API
505 #   define PJ_HAS_POOL_ALT_API      PJ_POOL_DEBUG
506 #endif
507
508
509 /**
510  * Support TCP in the library.
511  * Disabling TCP will reduce the footprint slightly (about 6KB).
512  *
513  * Default: 1
514  */
515 #ifndef PJ_HAS_TCP
516 #  define PJ_HAS_TCP                1
517 #endif
518
519 /**
520  * Support IPv6 in the library. If this support is disabled, some IPv6 
521  * related functions will return PJ_EIPV6NOTSUP.
522  *
523  * Default: 0 (disabled, for now)
524  */
525 #ifndef PJ_HAS_IPV6
526 #  define PJ_HAS_IPV6               0
527 #endif
528
529  /**
530  * Maximum hostname length.
531  * Libraries sometimes needs to make copy of an address to stack buffer;
532  * the value here affects the stack usage.
533  *
534  * Default: 128
535  */
536 #ifndef PJ_MAX_HOSTNAME
537 #  define PJ_MAX_HOSTNAME           (128)
538 #endif
539
540 /**
541  * Maximum consecutive identical error for accept() operation before
542  * activesock stops calling the next ioqueue accept.
543  *
544  * Default: 50
545  */
546 #ifndef PJ_ACTIVESOCK_MAX_CONSECUTIVE_ACCEPT_ERROR
547 #   define PJ_ACTIVESOCK_MAX_CONSECUTIVE_ACCEPT_ERROR 50
548 #endif
549
550 /**
551  * Constants for declaring the maximum handles that can be supported by
552  * a single IOQ framework. This constant might not be relevant to the 
553  * underlying I/O queue impelementation, but still, developers should be 
554  * aware of this constant, to make sure that the program will not break when
555  * the underlying implementation changes.
556  */
557 #ifndef PJ_IOQUEUE_MAX_HANDLES
558 #   define PJ_IOQUEUE_MAX_HANDLES       (64)
559 #endif
560
561
562 /**
563  * If PJ_IOQUEUE_HAS_SAFE_UNREG macro is defined, then ioqueue will do more
564  * things to ensure thread safety of handle unregistration operation by
565  * employing reference counter to each handle.
566  *
567  * In addition, the ioqueue will preallocate memory for the handles, 
568  * according to the maximum number of handles that is specified during 
569  * ioqueue creation.
570  *
571  * All applications would normally want this enabled, but you may disable
572  * this if:
573  *  - there is no dynamic unregistration to all ioqueues.
574  *  - there is no threading, or there is no preemptive multitasking.
575  *
576  * Default: 1
577  */
578 #ifndef PJ_IOQUEUE_HAS_SAFE_UNREG
579 #   define PJ_IOQUEUE_HAS_SAFE_UNREG    1
580 #endif
581
582
583 /**
584  * Default concurrency setting for sockets/handles registered to ioqueue.
585  * This controls whether the ioqueue is allowed to call the key's callback
586  * concurrently/in parallel. The default is yes, which means that if there
587  * are more than one pending operations complete simultaneously, more
588  * than one threads may call the key's callback at the same time. This
589  * generally would promote good scalability for application, at the 
590  * expense of more complexity to manage the concurrent accesses.
591  *
592  * Please see the ioqueue documentation for more info.
593  */
594 #ifndef PJ_IOQUEUE_DEFAULT_ALLOW_CONCURRENCY
595 #   define PJ_IOQUEUE_DEFAULT_ALLOW_CONCURRENCY   1
596 #endif
597
598
599 /* Sanity check:
600  *  if ioqueue concurrency is disallowed, PJ_IOQUEUE_HAS_SAFE_UNREG
601  *  must be enabled.
602  */
603 #if (PJ_IOQUEUE_DEFAULT_ALLOW_CONCURRENCY==0) && (PJ_IOQUEUE_HAS_SAFE_UNREG==0)
604 #   error PJ_IOQUEUE_HAS_SAFE_UNREG must be enabled if ioqueue concurrency \
605           is disabled
606 #endif
607
608
609 /**
610  * When safe unregistration (PJ_IOQUEUE_HAS_SAFE_UNREG) is configured in
611  * ioqueue, the PJ_IOQUEUE_KEY_FREE_DELAY macro specifies how long the
612  * ioqueue key is kept in closing state before it can be reused.
613  *
614  * The value is in miliseconds.
615  *
616  * Default: 500 msec.
617  */
618 #ifndef PJ_IOQUEUE_KEY_FREE_DELAY
619 #   define PJ_IOQUEUE_KEY_FREE_DELAY    500
620 #endif
621
622
623 /**
624  * Determine if FD_SETSIZE is changeable/set-able. If so, then we will
625  * set it to PJ_IOQUEUE_MAX_HANDLES. Currently we detect this by checking
626  * for Winsock.
627  */
628 #ifndef PJ_FD_SETSIZE_SETABLE
629 #   if (defined(PJ_HAS_WINSOCK_H) && PJ_HAS_WINSOCK_H!=0) || \
630        (defined(PJ_HAS_WINSOCK2_H) && PJ_HAS_WINSOCK2_H!=0)
631 #       define PJ_FD_SETSIZE_SETABLE    1
632 #   else
633 #       define PJ_FD_SETSIZE_SETABLE    0
634 #   endif
635 #endif
636
637 /**
638  * Overrides FD_SETSIZE so it is consistent throughout the library.
639  * We only do this if we detected that FD_SETSIZE is changeable. If
640  * FD_SETSIZE is not set-able, then PJ_IOQUEUE_MAX_HANDLES must be
641  * set to value lower than FD_SETSIZE.
642  */
643 #if PJ_FD_SETSIZE_SETABLE
644     /* Only override FD_SETSIZE if the value has not been set */
645 #   ifndef FD_SETSIZE
646 #       define FD_SETSIZE               PJ_IOQUEUE_MAX_HANDLES
647 #   endif
648 #else
649     /* When FD_SETSIZE is not changeable, check if PJ_IOQUEUE_MAX_HANDLES
650      * is lower than FD_SETSIZE value.
651      */
652 #   ifdef FD_SETSIZE
653 #       if PJ_IOQUEUE_MAX_HANDLES > FD_SETSIZE
654 #           error "PJ_IOQUEUE_MAX_HANDLES is greater than FD_SETSIZE"
655 #       endif
656 #   endif
657 #endif
658
659
660 /**
661  * Specify whether #pj_enum_ip_interface() function should exclude
662  * loopback interfaces.
663  *
664  * Default: 1
665  */
666 #ifndef PJ_IP_HELPER_IGNORE_LOOPBACK_IF
667 #   define PJ_IP_HELPER_IGNORE_LOOPBACK_IF      1
668 #endif
669
670
671 /**
672  * Has semaphore functionality?
673  *
674  * Default: 1
675  */
676 #ifndef PJ_HAS_SEMAPHORE
677 #  define PJ_HAS_SEMAPHORE          1
678 #endif
679
680
681 /**
682  * Event object (for synchronization, e.g. in Win32)
683  *
684  * Default: 1
685  */
686 #ifndef PJ_HAS_EVENT_OBJ
687 #  define PJ_HAS_EVENT_OBJ          1
688 #endif
689
690
691 /**
692  * Maximum file name length.
693  */
694 #ifndef PJ_MAXPATH
695 #   define PJ_MAXPATH               260
696 #endif
697
698
699 /**
700  * Enable library's extra check.
701  * If this macro is enabled, #PJ_ASSERT_RETURN macro will expand to
702  * run-time checking. If this macro is disabled, #PJ_ASSERT_RETURN
703  * will simply evaluate to #pj_assert().
704  *
705  * You can disable this macro to reduce size, at the risk of crashes
706  * if invalid value (e.g. NULL) is passed to the library.
707  *
708  * Default: 1
709  */
710 #ifndef PJ_ENABLE_EXTRA_CHECK
711 #   define PJ_ENABLE_EXTRA_CHECK    1
712 #endif
713
714
715 /**
716  * Enable name registration for exceptions with #pj_exception_id_alloc().
717  * If this feature is enabled, then the library will keep track of
718  * names associated with each exception ID requested by application via
719  * #pj_exception_id_alloc().
720  *
721  * Disabling this macro will reduce the code and .bss size by a tad bit.
722  * See also #PJ_MAX_EXCEPTION_ID.
723  *
724  * Default: 1
725  */
726 #ifndef PJ_HAS_EXCEPTION_NAMES
727 #   define PJ_HAS_EXCEPTION_NAMES   1
728 #endif
729
730 /**
731  * Maximum number of unique exception IDs that can be requested
732  * with #pj_exception_id_alloc(). For each entry, a small record will
733  * be allocated in the .bss segment.
734  *
735  * Default: 16
736  */
737 #ifndef PJ_MAX_EXCEPTION_ID
738 #   define PJ_MAX_EXCEPTION_ID      16
739 #endif
740
741 /**
742  * Should we use Windows Structured Exception Handling (SEH) for the
743  * PJLIB exceptions.
744  *
745  * Default: 0
746  */
747 #ifndef PJ_EXCEPTION_USE_WIN32_SEH
748 #  define PJ_EXCEPTION_USE_WIN32_SEH 0
749 #endif
750
751 /**
752  * Should we attempt to use Pentium's rdtsc for high resolution
753  * timestamp.
754  *
755  * Default: 0
756  */
757 #ifndef PJ_TIMESTAMP_USE_RDTSC
758 #   define PJ_TIMESTAMP_USE_RDTSC   0
759 #endif
760
761 /**
762  * Is native platform error positive number?
763  * Default: 1 (yes)
764  */
765 #ifndef PJ_NATIVE_ERR_POSITIVE
766 #   define PJ_NATIVE_ERR_POSITIVE   1
767 #endif
768  
769 /**
770  * Include error message string in the library (pj_strerror()).
771  * This is very much desirable!
772  *
773  * Default: 1
774  */
775 #ifndef PJ_HAS_ERROR_STRING
776 #   define PJ_HAS_ERROR_STRING      1
777 #endif
778
779
780 /**
781  * Include pj_stricmp_alnum() and pj_strnicmp_alnum(), i.e. custom
782  * functions to compare alnum strings. On some systems, they're faster
783  * then stricmp/strcasecmp, but they can be slower on other systems.
784  * When disabled, pjlib will fallback to stricmp/strnicmp.
785  * 
786  * Default: 0
787  */
788 #ifndef PJ_HAS_STRICMP_ALNUM
789 #   define PJ_HAS_STRICMP_ALNUM     0
790 #endif
791
792
793 /*
794  * Types of QoS backend implementation.
795  */
796
797 /** 
798  * Dummy QoS backend implementation, will always return error on all
799  * the APIs.
800  */
801 #define PJ_QOS_DUMMY        1
802
803 /** QoS backend based on setsockopt(IP_TOS) */
804 #define PJ_QOS_BSD          2
805
806 /** QoS backend for Windows Mobile 6 */
807 #define PJ_QOS_WM           3
808
809 /** QoS backend for Symbian */
810 #define PJ_QOS_SYMBIAN      4
811
812 /**
813  * Force the use of some QoS backend API for some platforms.
814  */
815 #ifndef PJ_QOS_IMPLEMENTATION
816 #   if defined(PJ_WIN32_WINCE) && PJ_WIN32_WINCE && _WIN32_WCE >= 0x502
817         /* Windows Mobile 6 or later */
818 #       define PJ_QOS_IMPLEMENTATION    PJ_QOS_WM
819 #   endif
820 #endif
821
822
823 /**
824  * Enable secure socket. For most platforms, this is implemented using
825  * OpenSSL, so this will require OpenSSL to be installed. For Symbian
826  * platform, this is implemented natively using CSecureSocket.
827  *
828  * Default: 0 (for now)
829  */
830 #ifndef PJ_HAS_SSL_SOCK
831 #  define PJ_HAS_SSL_SOCK           0
832 #endif
833
834
835 /**
836  * Disable WSAECONNRESET error for UDP sockets on Win32 platforms. See
837  * https://trac.pjsip.org/repos/ticket/1197.
838  *
839  * Default: 1
840  */
841 #ifndef PJ_SOCK_DISABLE_WSAECONNRESET
842 #   define PJ_SOCK_DISABLE_WSAECONNRESET    1
843 #endif
844
845
846 /** @} */
847
848 /********************************************************************
849  * General macros.
850  */
851
852 /**
853  * @defgroup pj_dll_target Building Dynamic Link Libraries (DLL/DSO)
854  * @ingroup pj_config
855  * @{
856  *
857  * The libraries support generation of dynamic link libraries for
858  * Symbian ABIv2 target (.dso/Dynamic Shared Object files, in Symbian
859  * terms). Similar procedures may be applied for Win32 DLL with some 
860  * modification.
861  *
862  * Depending on the platforms, these steps may be necessary in order to
863  * produce the dynamic libraries:
864  *  - Create the (Visual Studio) projects to produce DLL output. PJLIB
865  *    does not provide ready to use project files to produce DLL, so
866  *    you need to create these projects yourself. For Symbian, the MMP
867  *    files have been setup to produce DSO files for targets that 
868  *    require them.
869  *  - In the (Visual Studio) projects, some macros need to be declared
870  *    so that appropriate modifiers are added to symbol declarations
871  *    and definitions. Please see the macro section below for information
872  *    regarding these macros. For Symbian, these have been taken care by the
873  *    MMP files.
874  *  - Some build systems require .DEF file to be specified when creating
875  *    the DLL. For Symbian, .DEF files are included in pjlib distribution,
876  *    in <tt>pjlib/build.symbian</tt> directory. These DEF files are 
877  *    created by running <tt>./makedef.sh all</tt> from this directory,
878  *    inside Mingw.
879  *
880  * Macros related for building DLL/DSO files:
881  *  - For platforms that supports dynamic link libraries generation,
882  *    it must declare <tt>PJ_EXPORT_SPECIFIER</tt> macro which value contains
883  *    the prefix to be added to symbol definition, to export this 
884  *    symbol in the DLL/DSO. For example, on Win32/Visual Studio, the
885  *    value of this macro is \a __declspec(dllexport), and for ARM 
886  *    ABIv2/Symbian, the value is \a EXPORT_C. 
887  *  - For platforms that supports linking with dynamic link libraries,
888  *    it must declare <tt>PJ_IMPORT_SPECIFIER</tt> macro which value contains
889  *    the prefix to be added to symbol declaration, to import this 
890  *    symbol from a DLL/DSO. For example, on Win32/Visual Studio, the
891  *    value of this macro is \a __declspec(dllimport), and for ARM 
892  *    ABIv2/Symbian, the value is \a IMPORT_C. 
893  *  - Both <tt>PJ_EXPORT_SPECIFIER</tt> and <tt>PJ_IMPORT_SPECIFIER</tt> 
894  *    macros above can be declared in your \a config_site.h if they are not
895  *    declared by pjlib.
896  *  - When PJLIB is built as DLL/DSO, both <tt>PJ_DLL</tt> and 
897  *    <tt>PJ_EXPORTING</tt> macros must be declared, so that 
898  *     <tt>PJ_EXPORT_SPECIFIER</tt> modifier will be added into function
899  *    definition.
900  *  - When application wants to link dynamically with PJLIB, then it
901  *    must declare <tt>PJ_DLL</tt> macro when using/including PJLIB header,
902  *    so that <tt>PJ_IMPORT_SPECIFIER</tt> modifier is properly added into 
903  *    symbol declarations.
904  *
905  * When <b>PJ_DLL</b> macro is not declared, static linking is assumed.
906  *
907  * For example, here are some settings to produce DLLs with Visual Studio
908  * on Windows/Win32:
909  *  - Create Visual Studio projects to produce DLL. Add the appropriate 
910  *    project dependencies to avoid link errors.
911  *  - In the projects, declare <tt>PJ_DLL</tt> and <tt>PJ_EXPORTING</tt> 
912  *    macros.
913  *  - Declare these macros in your <tt>config_site.h</tt>:
914  \verbatim
915         #define PJ_EXPORT_SPECIFIER  __declspec(dllexport)
916         #define PJ_IMPORT_SPECIFIER  __declspec(dllimport)
917  \endverbatim
918  *  - And in the application (that links with the DLL) project, add 
919  *    <tt>PJ_DLL</tt> in the macro declarations.
920  */
921
922 /** @} */
923
924 /**
925  * @defgroup pj_config Build Configuration
926  * @{
927  */
928
929 /**
930  * @def PJ_INLINE(type)
931  * @param type The return type of the function.
932  * Expand the function as inline.
933  */
934 #define PJ_INLINE(type)   PJ_INLINE_SPECIFIER type
935
936 /**
937  * This macro declares platform/compiler specific specifier prefix
938  * to be added to symbol declaration to export the symbol when PJLIB
939  * is built as dynamic library.
940  *
941  * This macro should have been added by platform specific headers,
942  * if the platform supports building dynamic library target. 
943  */
944 #ifndef PJ_EXPORT_DECL_SPECIFIER
945 #   define PJ_EXPORT_DECL_SPECIFIER
946 #endif
947
948
949 /**
950  * This macro declares platform/compiler specific specifier prefix
951  * to be added to symbol definition to export the symbol when PJLIB
952  * is built as dynamic library.
953  *
954  * This macro should have been added by platform specific headers,
955  * if the platform supports building dynamic library target. 
956  */
957 #ifndef PJ_EXPORT_DEF_SPECIFIER
958 #   define PJ_EXPORT_DEF_SPECIFIER
959 #endif
960
961
962 /**
963  * This macro declares platform/compiler specific specifier prefix
964  * to be added to symbol declaration to import the symbol.
965  *
966  * This macro should have been added by platform specific headers,
967  * if the platform supports building dynamic library target.
968  */
969 #ifndef PJ_IMPORT_DECL_SPECIFIER
970 #   define PJ_IMPORT_DECL_SPECIFIER
971 #endif
972
973
974 /**
975  * This macro has been deprecated. It will evaluate to nothing.
976  */
977 #ifndef PJ_EXPORT_SYMBOL
978 #   define PJ_EXPORT_SYMBOL(x)
979 #endif
980
981
982 /**
983  * @def PJ_DECL(type)
984  * @param type The return type of the function.
985  * Declare a function.
986  */
987 #if defined(PJ_DLL)
988 #   if defined(PJ_EXPORTING)
989 #       define PJ_DECL(type)        PJ_EXPORT_DECL_SPECIFIER type
990 #   else
991 #       define PJ_DECL(type)        PJ_IMPORT_DECL_SPECIFIER type
992 #   endif
993 #elif !defined(PJ_DECL)
994 #   if defined(__cplusplus)
995 #       define PJ_DECL(type)        type
996 #   else
997 #       define PJ_DECL(type)        extern type
998 #   endif
999 #endif
1000
1001
1002 /**
1003  * @def PJ_DEF(type)
1004  * @param type The return type of the function.
1005  * Define a function.
1006  */
1007 #if defined(PJ_DLL) && defined(PJ_EXPORTING)
1008 #   define PJ_DEF(type)             PJ_EXPORT_DEF_SPECIFIER type
1009 #elif !defined(PJ_DEF)
1010 #   define PJ_DEF(type)             type
1011 #endif
1012
1013
1014 /**
1015  * @def PJ_DECL_NO_RETURN(type)
1016  * @param type The return type of the function.
1017  * Declare a function that will not return.
1018  */
1019 /**
1020  * @def PJ_IDECL_NO_RETURN(type)
1021  * @param type The return type of the function.
1022  * Declare an inline function that will not return.
1023  */
1024 /**
1025  * @def PJ_BEGIN_DECL
1026  * Mark beginning of declaration section in a header file.
1027  */
1028 /**
1029  * @def PJ_END_DECL
1030  * Mark end of declaration section in a header file.
1031  */
1032 #ifdef __cplusplus
1033 #  define PJ_DECL_NO_RETURN(type)   PJ_DECL(type) PJ_NORETURN
1034 #  define PJ_IDECL_NO_RETURN(type)  PJ_INLINE(type) PJ_NORETURN
1035 #  define PJ_BEGIN_DECL             extern "C" {
1036 #  define PJ_END_DECL               }
1037 #else
1038 #  define PJ_DECL_NO_RETURN(type)   PJ_NORETURN PJ_DECL(type)
1039 #  define PJ_IDECL_NO_RETURN(type)  PJ_NORETURN PJ_INLINE(type)
1040 #  define PJ_BEGIN_DECL
1041 #  define PJ_END_DECL
1042 #endif
1043
1044
1045
1046 /**
1047  * @def PJ_DECL_DATA(type)
1048  * @param type The data type.
1049  * Declare a global data.
1050  */ 
1051 #if defined(PJ_DLL)
1052 #   if defined(PJ_EXPORTING)
1053 #       define PJ_DECL_DATA(type)   PJ_EXPORT_DECL_SPECIFIER extern type
1054 #   else
1055 #       define PJ_DECL_DATA(type)   PJ_IMPORT_DECL_SPECIFIER extern type
1056 #   endif
1057 #elif !defined(PJ_DECL_DATA)
1058 #   define PJ_DECL_DATA(type)       extern type
1059 #endif
1060
1061
1062 /**
1063  * @def PJ_DEF_DATA(type)
1064  * @param type The data type.
1065  * Define a global data.
1066  */ 
1067 #if defined(PJ_DLL) && defined(PJ_EXPORTING)
1068 #   define PJ_DEF_DATA(type)        PJ_EXPORT_DEF_SPECIFIER type
1069 #elif !defined(PJ_DEF_DATA)
1070 #   define PJ_DEF_DATA(type)        type
1071 #endif
1072
1073
1074 /**
1075  * @def PJ_IDECL(type)
1076  * @param type  The function's return type.
1077  * Declare a function that may be expanded as inline.
1078  */
1079 /**
1080  * @def PJ_IDEF(type)
1081  * @param type  The function's return type.
1082  * Define a function that may be expanded as inline.
1083  */
1084
1085 #if PJ_FUNCTIONS_ARE_INLINED
1086 #  define PJ_IDECL(type)  PJ_INLINE(type)
1087 #  define PJ_IDEF(type)   PJ_INLINE(type)
1088 #else
1089 #  define PJ_IDECL(type)  PJ_DECL(type)
1090 #  define PJ_IDEF(type)   PJ_DEF(type)
1091 #endif
1092
1093
1094 /**
1095  * @def PJ_UNUSED_ARG(arg)
1096  * @param arg   The argument name.
1097  * PJ_UNUSED_ARG prevents warning about unused argument in a function.
1098  */
1099 #define PJ_UNUSED_ARG(arg)  (void)arg
1100
1101 /**
1102  * @def PJ_TODO(id)
1103  * @param id    Any identifier that will be printed as TODO message.
1104  * PJ_TODO macro will display TODO message as warning during compilation.
1105  * Example: PJ_TODO(CLEAN_UP_ERROR);
1106  */
1107 #ifndef PJ_TODO
1108 #  define PJ_TODO(id)       TODO___##id:
1109 #endif
1110
1111 /**
1112  * Function attributes to inform that the function may throw exception.
1113  *
1114  * @param x     The exception list, enclosed in parenthesis.
1115  */
1116 #define __pj_throw__(x)
1117
1118 /** @} */
1119
1120 /********************************************************************
1121  * Sanity Checks
1122  */
1123 #ifndef PJ_HAS_HIGH_RES_TIMER
1124 #  error "PJ_HAS_HIGH_RES_TIMER is not defined!"
1125 #endif
1126
1127 #if !defined(PJ_HAS_PENTIUM)
1128 #  error "PJ_HAS_PENTIUM is not defined!"
1129 #endif
1130
1131 #if !defined(PJ_IS_LITTLE_ENDIAN)
1132 #  error "PJ_IS_LITTLE_ENDIAN is not defined!"
1133 #endif
1134
1135 #if !defined(PJ_IS_BIG_ENDIAN)
1136 #  error "PJ_IS_BIG_ENDIAN is not defined!"
1137 #endif
1138
1139 #if !defined(PJ_EMULATE_RWMUTEX)
1140 #  error "PJ_EMULATE_RWMUTEX should be defined in compat/os_xx.h"
1141 #endif
1142
1143 #if !defined(PJ_THREAD_SET_STACK_SIZE)
1144 #  error "PJ_THREAD_SET_STACK_SIZE should be defined in compat/os_xx.h"
1145 #endif
1146
1147 #if !defined(PJ_THREAD_ALLOCATE_STACK)
1148 #  error "PJ_THREAD_ALLOCATE_STACK should be defined in compat/os_xx.h"
1149 #endif
1150
1151 PJ_BEGIN_DECL
1152
1153 /** PJLIB version major number. */
1154 #define PJ_VERSION_NUM_MAJOR    2
1155
1156 /** PJLIB version minor number. */
1157 #define PJ_VERSION_NUM_MINOR    0
1158
1159 /** PJLIB version revision number. */
1160 #define PJ_VERSION_NUM_REV      0
1161
1162 /**
1163  * Extra suffix for the version (e.g. "-trunk"), or empty for
1164  * web release version.
1165  */
1166 #define PJ_VERSION_NUM_EXTRA    ""
1167
1168 /**
1169  * PJLIB version number consists of three bytes with the following format:
1170  * 0xMMIIRR00, where MM: major number, II: minor number, RR: revision
1171  * number, 00: always zero for now.
1172  */
1173 #define PJ_VERSION_NUM  ((PJ_VERSION_NUM_MAJOR << 24) | \
1174                          (PJ_VERSION_NUM_MINOR << 16) | \
1175                          (PJ_VERSION_NUM_REV << 8))
1176
1177 /**
1178  * PJLIB version string constant. @see pj_get_version()
1179  */
1180 PJ_DECL_DATA(const char*) PJ_VERSION;
1181
1182 /**
1183  * Get PJLIB version string.
1184  *
1185  * @return #PJ_VERSION constant.
1186  */
1187 PJ_DECL(const char*) pj_get_version(void);
1188
1189 /**
1190  * Dump configuration to log with verbosity equal to info(3).
1191  */
1192 PJ_DECL(void) pj_dump_config(void);
1193
1194 PJ_END_DECL
1195
1196
1197 #endif  /* __PJ_CONFIG_H__ */
1198