You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rtpengine/include/main.h

226 lines
4.8 KiB

#ifndef _MAIN_H_
#define _MAIN_H_
#include <glib.h>
#include "helpers.h"
#include "socket.h"
#include "auxlib.h"
enum xmlrpc_format {
XF_SEMS = 0,
XF_CALLID,
XF_KAMAILIO,
};
enum log_format {
LF_DEFAULT = 0,
LF_PARSABLE,
__LF_LAST
};
enum endpoint_learning {
EL_DELAYED = 0,
EL_IMMEDIATE = 1,
EL_OFF = 2,
EL_HEURISTIC = 3,
__EL_LAST
};
#ifndef MAX_RECV_ITERS
#define MAX_RECV_ITERS 50
#endif
struct rtpengine_config {
/* everything below protected by config_lock */
rwlock_t config_lock;
struct rtpengine_common_config common;
int kernel_table;
int max_sessions;
int timeout;
int silent_timeout;
int final_timeout;
int offer_timeout;
int delete_delay;
GQueue redis_subscribed_keyspaces;
int redis_expires_secs;
char *b2b_url;
int default_tos;
int control_tos;
enum {
PMTU_DISC_DEFAULT = 0,
PMTU_DISC_WANT,
PMTU_DISC_DONT,
} control_pmtu;
enum xmlrpc_format fmt;
enum log_format log_format;
endpoint_t graphite_ep;
int graphite_interval;
int graphite_timeout;
int redis_num_threads;
GQueue interfaces;
GQueue tcp_listen_ep;
GQueue udp_listen_ep;
GQueue ng_listen_ep;
GQueue ng_tcp_listen_ep;
GQueue cli_listen_ep;
endpoint_t redis_ep;
endpoint_t redis_write_ep;
endpoint_t homer_ep;
int homer_protocol;
int homer_id;
gboolean no_fallback;
gboolean reject_invalid_sdp;
gboolean save_interface_ports;
int port_min;
int port_max;
int redis_db;
int redis_write_db;
gboolean no_redis_required;
int redis_allowed_errors;
int redis_disable_time;
int redis_cmd_timeout;
int redis_connect_timeout;
int redis_delete_async;
int redis_delete_async_interval;
char *redis_auth;
char *redis_write_auth;
gboolean active_switchover;
int num_threads;
int media_num_threads;
char *spooldir;
char *rec_method;
char *rec_format;
gboolean rec_egress;
char *iptables_chain;
char *nftables_chain;
char *nftables_base_chain;
gboolean nftables_append;
int nftables_family;
int load_limit;
int cpu_limit;
uint64_t bw_limit;
char *scheduling;
int priority;
char *idle_scheduling;
int idle_priority;
gboolean log_keys;
char *mysql_host;
int mysql_port;
char *mysql_user;
char *mysql_pass;
char *mysql_query;
endpoint_t dtmf_udp_ep;
gboolean dtmf_via_ng;
gboolean dtmf_no_suppress;
int dtmf_digit_delay;
gboolean dtmf_no_log_injects;
enum endpoint_learning endpoint_learning;
int jb_length;
gboolean jb_clock_drift;
enum {
DCC_EC_PRIME256v1 = 0,
DCC_RSA,
} dtls_cert_cipher;
int dtls_rsa_key_size;
int dtls_mtu;
char *dtls_ciphers;
enum {
DSIG_SHA256 = 0,
DSIG_SHA1,
} dtls_signature;
char **http_ifs;
char **https_ifs;
char *https_cert;
char *https_key;
int http_threads;
int dtx_delay;
int max_dtx;
int dtx_buffer;
int dtx_lag;
int dtx_shift;
str dtx_cn_params;
int amr_cn_dtx;
double silence_detect_double;
uint32_t silence_detect_int;
str cn_payload;
gboolean player_cache;
int audio_buffer_length;
int audio_buffer_delay;
enum {
UAP_ON_DEMAND = 0,
UAP_PLAY_MEDIA,
UAP_TRANSCODING,
UAP_ALWAYS,
} use_audio_player;
char *software_id;
gboolean poller_per_thread;
char *mqtt_host;
int mqtt_port;
char *mqtt_tls_alpn;
char *mqtt_id;
int mqtt_keepalive;
char *mqtt_user;
char *mqtt_pass;
char *mqtt_cafile;
char *mqtt_capath;
char *mqtt_certfile;
char *mqtt_keyfile;
int mqtt_publish_qos;
char *mqtt_publish_topic;
int mqtt_publish_interval;
enum {
MPS_NONE = -1,
MPS_GLOBAL = 0,
MPS_CALL,
MPS_MEDIA,
MPS_SUMMARY,
} mqtt_publish_scope;
enum {
MOS_CQ = 0,
MOS_LQ,
} mos;
gboolean measure_rtp;
int rtcp_interval;
int cpu_affinity;
char *janus_secret;
int max_recv_iters;
str vsc_start_rec;
str vsc_stop_rec;
str vsc_start_stop_rec;
str vsc_pause_rec;
str vsc_pause_resume_rec;
str vsc_start_pause_resume_rec;
};
struct poller;
/**
* Main global poller instance.
* This object is responsible for maintaining and holding the entry-point references.
*
* TODO: convert to struct instead of pointer?
*/
extern struct poller **rtpe_pollers; // at least one poller, in an array
extern struct poller *rtpe_control_poller; // poller for control sockets (maybe rtpe_pollers[0])
extern unsigned int num_media_pollers; // for media sockets, >= 1
extern unsigned int rtpe_poller_rr_iter; // round-robin assignment of pollers to each thread
INLINE struct poller *rtpe_get_poller(void) {
// XXX optimise this for num_media_pollers == 1 ?
return rtpe_pollers[g_atomic_int_add(&rtpe_poller_rr_iter, 1) % num_media_pollers];
}
extern struct rtpengine_config rtpe_config;
extern struct rtpengine_config initial_rtpe_config;
extern GQueue rtpe_control_ng;
extern GQueue rtpe_control_ng_tcp;
#endif