blob: 5a30f703239da682605a9cb72b3dbd088033501a [file] [log] [blame]
/* $Id$ */
/*
* Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
* Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __PJNATH_CONFIG_H__
#define __PJNATH_CONFIG_H__
/**
* @file config.h
* @brief Compile time settings
*/
#include <pj/types.h>
/**
* @defgroup PJNATH_CONFIG Compile-time configurations
* @brief Various compile time settings
* @ingroup PJNATH_STUN_BASE
* @{
*/
/* **************************************************************************
* GENERAL
*/
/**
* The log level for PJNATH error display.
*
* default 1
*/
#ifndef PJNATH_ERROR_LEVEL
# define PJNATH_ERROR_LEVEL 1
#endif
/* **************************************************************************
* STUN CONFIGURATION
*/
/**
* Maximum number of attributes in the STUN packet (for the new STUN
* library).
*
* Default: 16
*/
#ifndef PJ_STUN_MAX_ATTR
# define PJ_STUN_MAX_ATTR 16
#endif
/**
* The default initial STUN round-trip time estimation (the RTO value
* in RFC 3489-bis), in miliseconds.
* This value is used to control the STUN request
* retransmit time. The initial value of retransmission interval
* would be set to this value, and will be doubled after each
* retransmission.
*/
#ifndef PJ_STUN_RTO_VALUE
# define PJ_STUN_RTO_VALUE 100
#endif
/**
* The STUN transaction timeout value, in miliseconds.
* After the last retransmission is sent and if no response is received
* after this time, the STUN transaction will be considered to have failed.
*
* The default value is 16x RTO (as per RFC 3489-bis).
*/
#ifndef PJ_STUN_TIMEOUT_VALUE
# define PJ_STUN_TIMEOUT_VALUE (16 * PJ_STUN_RTO_VALUE)
#endif
/**
* Maximum number of STUN transmission count.
*
* Default: 7 (as per RFC 3489-bis)
*/
#ifndef PJ_STUN_MAX_TRANSMIT_COUNT
# define PJ_STUN_MAX_TRANSMIT_COUNT 7
#endif
/**
* Duration to keep response in the cache, in msec.
*
* Default: 10000 (as per RFC 3489-bis)
*/
#ifndef PJ_STUN_RES_CACHE_DURATION
# define PJ_STUN_RES_CACHE_DURATION 10000
#endif
/**
* Maximum size of STUN message.
*/
#ifndef PJ_STUN_MAX_PKT_LEN
# define PJ_STUN_MAX_PKT_LEN 800
#endif
/**
* Default STUN port as defined by RFC 3489.
*/
#define PJ_STUN_PORT 3478
/**
* Padding character for string attributes.
*
* Default: ASCII 0
*/
#ifndef PJ_STUN_STRING_ATTR_PAD_CHR
# define PJ_STUN_STRING_ATTR_PAD_CHR 0
#endif
/**
* Enable pre-RFC3489bis-07 style of STUN MESSAGE-INTEGRITY and FINGERPRINT
* calculation. By default this should be disabled since the calculation is
* not backward compatible with current STUN specification.
*/
#ifndef PJ_STUN_OLD_STYLE_MI_FINGERPRINT
# define PJ_STUN_OLD_STYLE_MI_FINGERPRINT 0
#endif
/* **************************************************************************
* STUN TRANSPORT CONFIGURATION
*/
/**
* The packet buffer size for the STUN transport.
*/
#ifndef PJ_STUN_SOCK_PKT_LEN
# define PJ_STUN_SOCK_PKT_LEN 2000
#endif
/**
* The duration of the STUN keep-alive period, in seconds.
*/
#ifndef PJ_STUN_KEEP_ALIVE_SEC
# define PJ_STUN_KEEP_ALIVE_SEC 15
#endif
/* **************************************************************************
* TURN CONFIGURATION
*/
/**
* Maximum DNS SRV entries to be processed in the DNS SRV response
*/
#ifndef PJ_TURN_MAX_DNS_SRV_CNT
# define PJ_TURN_MAX_DNS_SRV_CNT 4
#endif
/**
* Maximum TURN packet size to be supported.
*/
#ifndef PJ_TURN_MAX_PKT_LEN
# define PJ_TURN_MAX_PKT_LEN 3000
#endif
/**
* The TURN permission lifetime setting. This value should be taken from the
* TURN protocol specification.
*/
#ifndef PJ_TURN_PERM_TIMEOUT
# define PJ_TURN_PERM_TIMEOUT 300
#endif
/**
* The TURN channel binding lifetime. This value should be taken from the
* TURN protocol specification.
*/
#ifndef PJ_TURN_CHANNEL_TIMEOUT
# define PJ_TURN_CHANNEL_TIMEOUT 600
#endif
/**
* Number of seconds to refresh the permission/channel binding before the
* permission/channel binding expires. This value should be greater than
* PJ_TURN_PERM_TIMEOUT setting.
*/
#ifndef PJ_TURN_REFRESH_SEC_BEFORE
# define PJ_TURN_REFRESH_SEC_BEFORE 60
#endif
/**
* The TURN session timer heart beat interval. When this timer occurs, the
* TURN session will scan all the permissions/channel bindings to see which
* need to be refreshed.
*/
#ifndef PJ_TURN_KEEP_ALIVE_SEC
# define PJ_TURN_KEEP_ALIVE_SEC 15
#endif
/* **************************************************************************
* ICE CONFIGURATION
*/
/**
* Maximum number of ICE candidates.
*
* Default: 16
*/
#ifndef PJ_ICE_MAX_CAND
# define PJ_ICE_MAX_CAND 16
#endif
/**
* Maximum number of candidates for each ICE stream transport component.
*
* Default: 8
*/
#ifndef PJ_ICE_ST_MAX_CAND
# define PJ_ICE_ST_MAX_CAND 8
#endif
/**
* The number of bits to represent component IDs. This will affect
* the maximum number of components (PJ_ICE_MAX_COMP) value.
*/
#ifndef PJ_ICE_COMP_BITS
# define PJ_ICE_COMP_BITS 1
#endif
/**
* Maximum number of ICE components.
*/
#define PJ_ICE_MAX_COMP (2<<PJ_ICE_COMP_BITS)
/**
* Use the priority value according to the ice-draft.
*/
#ifndef PJNATH_ICE_PRIO_STD
# define PJNATH_ICE_PRIO_STD 1
#endif
/**
* The number of bits to represent candidate type preference.
*/
#ifndef PJ_ICE_CAND_TYPE_PREF_BITS
# if PJNATH_ICE_PRIO_STD
# define PJ_ICE_CAND_TYPE_PREF_BITS 8
# else
# define PJ_ICE_CAND_TYPE_PREF_BITS 2
# endif
#endif
/**
* The number of bits to represent ICE candidate's local preference. The
* local preference is used to specify preference among candidates with
* the same type, and ICE draft suggests 65535 as the default local
* preference, which means we need 16 bits to represent the value. But
* since we don't have the facility to specify local preference, we'll
* just disable this feature and let the preference sorted by the
* type only.
*
* Default: 0
*/
#ifndef PJ_ICE_LOCAL_PREF_BITS
# define PJ_ICE_LOCAL_PREF_BITS 0
#endif
/**
* Maximum number of ICE checks.
*
* Default: 32
*/
#ifndef PJ_ICE_MAX_CHECKS
# define PJ_ICE_MAX_CHECKS 32
#endif
/**
* Default timer interval (in miliseconds) for starting ICE periodic checks.
*
* Default: 20
*/
#ifndef PJ_ICE_TA_VAL
# define PJ_ICE_TA_VAL 20
#endif
/**
* According to ICE Section 8.2. Updating States, if an In-Progress pair in
* the check list is for the same component as a nominated pair, the agent
* SHOULD cease retransmissions for its check if its pair priority is lower
* than the lowest priority nominated pair for that component.
*
* If a higher priority check is In Progress, this rule would cause that
* check to be performed even when it most likely will fail.
*
* The macro here controls if ICE session should cancel all In Progress
* checks for the same component regardless of its priority.
*
* Default: 1 (yes, cancel all)
*/
#ifndef PJ_ICE_CANCEL_ALL
# define PJ_ICE_CANCEL_ALL 1
#endif
/**
* For a controlled agent, specify how long it wants to wait (in milliseconds)
* for the controlling agent to complete sending connectivity check with
* nominated flag set to true for all components after the controlled agent
* has found that all connectivity checks in its checklist have been completed
* and there is at least one successful (but not nominated) check for every
* component.
*
* When selecting the value, bear in mind that the connectivity check from
* controlling agent may be delayed because of delay in receiving SDP answer
* from the controlled agent.
*
* Application may set this value to -1 to disable this timer.
*
* Default: 10000 (milliseconds)
*/
#ifndef ICE_CONTROLLED_AGENT_WAIT_NOMINATION_TIMEOUT
# define ICE_CONTROLLED_AGENT_WAIT_NOMINATION_TIMEOUT 10000
#endif
/**
* For controlling agent if it uses regular nomination, specify the delay to
* perform nominated check (connectivity check with USE-CANDIDATE attribute)
* after all components have a valid pair.
*
* Default: 4*PJ_STUN_RTO_VALUE (milliseconds)
*/
#ifndef PJ_ICE_NOMINATED_CHECK_DELAY
# define PJ_ICE_NOMINATED_CHECK_DELAY (4*PJ_STUN_RTO_VALUE)
#endif
/**
* Minimum interval value to be used for sending STUN keep-alive on the ICE
* session, in seconds. This minimum interval, plus a random value
* which maximum is PJ_ICE_SESS_KEEP_ALIVE_MAX_RAND, specify the actual interval
* of the STUN keep-alive.
*
* Default: 15 seconds
*
* @see PJ_ICE_SESS_KEEP_ALIVE_MAX_RAND
*/
#ifndef PJ_ICE_SESS_KEEP_ALIVE_MIN
# define PJ_ICE_SESS_KEEP_ALIVE_MIN 20
#endif
/* Warn about deprecated macro */
#ifdef PJ_ICE_ST_KEEP_ALIVE_MIN
# error PJ_ICE_ST_KEEP_ALIVE_MIN is deprecated
#endif
/**
* To prevent STUN keep-alives to be sent simultaneously, application should
* add random interval to minimum interval (PJ_ICE_SESS_KEEP_ALIVE_MIN). This
* setting specifies the maximum random value to be added to the minimum
* interval, in seconds.
*
* Default: 5 seconds
*
* @see PJ_ICE_SESS_KEEP_ALIVE_MIN
*/
#ifndef PJ_ICE_SESS_KEEP_ALIVE_MAX_RAND
# define PJ_ICE_SESS_KEEP_ALIVE_MAX_RAND 5
#endif
/* Warn about deprecated macro */
#ifdef PJ_ICE_ST_KEEP_ALIVE_MAX_RAND
# error PJ_ICE_ST_KEEP_ALIVE_MAX_RAND is deprecated
#endif
/**
* This constant specifies the length of random string generated for ICE
* ufrag and password.
*
* Default: 8 (characters)
*/
#ifndef PJ_ICE_UFRAG_LEN
# define PJ_ICE_UFRAG_LEN 8
#endif
/** ICE session pool initial size. */
#ifndef PJNATH_POOL_LEN_ICE_SESS
# define PJNATH_POOL_LEN_ICE_SESS 512
#endif
/** ICE session pool increment size */
#ifndef PJNATH_POOL_INC_ICE_SESS
# define PJNATH_POOL_INC_ICE_SESS 512
#endif
/** ICE stream transport pool initial size. */
#ifndef PJNATH_POOL_LEN_ICE_STRANS
# define PJNATH_POOL_LEN_ICE_STRANS 1000
#endif
/** ICE stream transport pool increment size */
#ifndef PJNATH_POOL_INC_ICE_STRANS
# define PJNATH_POOL_INC_ICE_STRANS 512
#endif
/** NAT detect pool initial size */
#ifndef PJNATH_POOL_LEN_NATCK
# define PJNATH_POOL_LEN_NATCK 512
#endif
/** NAT detect pool increment size */
#ifndef PJNATH_POOL_INC_NATCK
# define PJNATH_POOL_INC_NATCK 512
#endif
/** STUN session pool initial size */
#ifndef PJNATH_POOL_LEN_STUN_SESS
# define PJNATH_POOL_LEN_STUN_SESS 1000
#endif
/** STUN session pool increment size */
#ifndef PJNATH_POOL_INC_STUN_SESS
# define PJNATH_POOL_INC_STUN_SESS 1000
#endif
/** STUN session transmit data pool initial size */
#ifndef PJNATH_POOL_LEN_STUN_TDATA
# define PJNATH_POOL_LEN_STUN_TDATA 1000
#endif
/** STUN session transmit data pool increment size */
#ifndef PJNATH_POOL_INC_STUN_TDATA
# define PJNATH_POOL_INC_STUN_TDATA 1000
#endif
/** TURN session initial pool size */
#ifndef PJNATH_POOL_LEN_TURN_SESS
# define PJNATH_POOL_LEN_TURN_SESS 1000
#endif
/** TURN session pool increment size */
#ifndef PJNATH_POOL_INC_TURN_SESS
# define PJNATH_POOL_INC_TURN_SESS 1000
#endif
/** TURN socket initial pool size */
#ifndef PJNATH_POOL_LEN_TURN_SOCK
# define PJNATH_POOL_LEN_TURN_SOCK 1000
#endif
/** TURN socket pool increment size */
#ifndef PJNATH_POOL_INC_TURN_SOCK
# define PJNATH_POOL_INC_TURN_SOCK 1000
#endif
/** Default STUN software name */
#ifndef PJNATH_STUN_SOFTWARE_NAME
# define PJNATH_MAKE_SW_NAME(a,b,c,d) "pjnath-" #a "." #b "." #c d
# define PJNATH_MAKE_SW_NAME2(a,b,c,d) PJNATH_MAKE_SW_NAME(a,b,c,d)
# define PJNATH_STUN_SOFTWARE_NAME PJNATH_MAKE_SW_NAME2( \
PJ_VERSION_NUM_MAJOR, \
PJ_VERSION_NUM_MINOR, \
PJ_VERSION_NUM_REV, \
PJ_VERSION_NUM_EXTRA)
#endif
/**
* @}
*/
#endif /* __PJNATH_CONFIG_H__ */