⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 siproxd.h

📁 这是一个C程序
💻 H
字号:
/*    Copyright (C) 2002-2008  Thomas Ries <tries@gmx.net>    This file is part of Siproxd.        Siproxd 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.        Siproxd 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 Siproxd; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *//* $Id: siproxd.h,v 1.79 2008/01/19 16:07:14 hb9xar Exp $ */#ifdef DMALLOC #include <dmalloc.h>#endif#include <limits.h>/* * table to hold the client registrations */struct urlmap_s {   int  active;   int  expires;   osip_uri_t *true_url;	// true URL of UA  (inbound URL)   osip_uri_t *masq_url;	// masqueraded URL (outbound URL)   osip_uri_t *reg_url;		// registered URL  (masq URL as wished by UA)};/* * the difference between masq_url and reg_url is,  * the reg URL *always* holds the url registered by the UA. * the masq_url may contain a different URL due to an additional * masquerading feature (mask_host, masked_host config options) *//* * Array of strings - used within configuration store */#define CFG_STRARR_SIZE		128	/* max 128 entries in array */typedef struct {   int  used;   char *string[CFG_STRARR_SIZE];} stringa_t;/* * configuration option table */struct siproxd_config {   unsigned int debuglevel;   int debugport;   char *inbound_if;   char *outbound_if;   char *outbound_host;   int sip_listen_port;   int daemonize;   int silence_log;   int rtp_port_low;   int rtp_port_high;   int rtp_timeout;   int rtp_dscp;   int rtp_proxy_enable;   int rtp_input_dejitter;   int rtp_output_dejitter;   char *user;   char *chrootjail;   char *hosts_allow_reg;   char *hosts_allow_sip;   char *hosts_deny_sip;   char *proxy_auth_realm;   char *proxy_auth_passwd;   char *proxy_auth_pwfile;   stringa_t mask_host;   stringa_t masked_host;   char *outbound_proxy_host;   int  outbound_proxy_port;   stringa_t outbound_proxy_domain_name;   stringa_t outbound_proxy_domain_host;   stringa_t outbound_proxy_domain_port;   char *registrationfile;   int  log_calls;   char *pid_file;   int  default_expires;   int  autosave_registrations;   int  pi_shortdial;   char *pi_shortdial_akey;   stringa_t pi_shortdial_entry;   char *ua_string;   int   use_rport;   int   obscure_loops;};/* * SIP ticket */typedef struct {   osip_message_t *sipmsg;	/* SIP */   struct sockaddr_in from;	/* received from */#define PROTO_UNKN -1#define PROTO_UDP  1#define PROTO_TCP  2   int protocol;		/* received by protocol */#define REQTYP_INCOMING		1#define REQTYP_OUTGOING		2#define RESTYP_INCOMING		3#define RESTYP_OUTGOING		4   int direction;		/* direction as determined by proxy */} sip_ticket_t;/* * Client_ID - used to identify the two sides of a Call when one * call is routed twice (in->out and back out->in) through siproxd * e.g. local UA1 is calling local UA2 via an external Registrar */#define CLIENT_ID_SIZE	128typedef struct {   char    contact[CLIENT_ID_SIZE];   struct  in_addr from_ip;   /*... maybe more to come ...*/} client_id_t;/* * Function prototypes *//*				function returns STS_* status values     vvv *//* sock.c */int sipsock_listen(void);						/*X*/int sipsock_wait(void);int sipsock_read(void *buf, size_t bufsize,                 struct sockaddr_in *from, int *protocol);int sipsock_send(struct in_addr addr, int port,	int protocol,			/*X*/                 char *buffer, size_t size);int sockbind(struct in_addr ipaddr, int localport, int errflg);/* register.c */void register_init(void);void register_save(void);int  register_client(sip_ticket_t *ticket, int force_lcl_masq);		/*X*/void register_agemap(void);int  register_response(sip_ticket_t *ticket, int flag);			/*X*/int  register_set_expire(sip_ticket_t *ticket);				/*X*//* proxy.c */int proxy_request (sip_ticket_t *ticket);				/*X*/int proxy_response (sip_ticket_t *ticket);				/*X*/int proxy_rewrite_invitation_body(sip_ticket_t *ticket, int direction); /*X*/int proxy_rewrite_request_uri(osip_message_t *mymsg, int idx);		/*X*/int proxy_rewrite_useragent(sip_ticket_t *ticket);			/*X*//* route_preprocessing.c */int route_preprocess(sip_ticket_t *ticket);				/*X*/int route_add_recordroute(sip_ticket_t *ticket);			/*X*/int route_purge_recordroute(sip_ticket_t *ticket);			/*X*/int route_postprocess(sip_ticket_t *ticket);				/*X*/int route_determine_nexthop(sip_ticket_t *ticket,                            struct in_addr *dest, int *port);		/*X*//* utils.c */int  get_ip_by_host(char *hostname, struct in_addr *addr);		/*X*/void secure_enviroment (void);int  get_ip_by_ifname(char *ifname, struct in_addr *retaddr);		/*X*/int  get_interface_ip(int interface, struct in_addr *retaddr);		/*X*/int  get_interface_real_ip(int interface, struct in_addr *retaddr);	/*X*/char *utils_inet_ntoa(struct in_addr in);int  utils_inet_aton(const char *cp, struct in_addr *inp);int  createpidfile(char *pidfilename);					/*X*/int  compare_client_id(client_id_t cid1, client_id_t cid2);		/*X*//* sip_utils.c */osip_message_t * msg_make_template_reply (sip_ticket_t *ticket, int code);int  check_vialoop (sip_ticket_t *ticket);				/*X*/int  is_via_local (osip_via_t *via);					/*X*/int  compare_url(osip_uri_t *url1, osip_uri_t *url2);			/*X*/int  compare_callid(osip_call_id_t *cid1, osip_call_id_t *cid2);	/*X*/int  is_sipuri_local (sip_ticket_t *ticket);				/*X*/int  sip_gen_response(sip_ticket_t *ticket, int code);			/*X*/int  sip_add_myvia (sip_ticket_t *ticket, int interface);		/*X*/int  sip_del_myvia (sip_ticket_t *ticket);				/*X*/int  sip_rewrite_contact (sip_ticket_t *ticket, int direction);		/*X*/int  sip_calculate_branch_id (sip_ticket_t *ticket, char *id);		/*X*/int  sip_find_outbound_proxy(sip_ticket_t *ticket, struct in_addr *addr,                             int *port);				/*X*/int  sip_find_direction(sip_ticket_t *ticket, int *urlidx);		/*X*/int  sip_fixup_asterisk(char *buff, int *buflen);			/*X*/int  sip_obscure_callid(sip_ticket_t *ticket);				/*X*//* readconf.c */int read_config(char *name, int search);				/*X*/int make_default_config(void);						/*X*//* rtpproxy.c */int  rtpproxy_init( void );						/*X*/int  rtp_start_fwd (osip_call_id_t *callid, client_id_t client_id,	/*X*/                    int direction, int media_stream_no,                    struct in_addr outbound_ipaddr, int *outboundport,                    struct in_addr lcl_client_ipaddr, int lcl_clientport,                    int isrtp);int  rtp_stop_fwd (osip_call_id_t *callid, int direction);		/*X*//* accessctl.c */int  accesslist_check(struct sockaddr_in from);/* security.c */int  security_check_raw(char *sip_buffer, size_t size);			/*X*/int  security_check_sip(sip_ticket_t *ticket);				/*X*//* auth.c */int  authenticate_proxy(osip_message_t *sipmsg);			/*X*/int  auth_include_authrq(osip_message_t *sipmsg);			/*X*/void CvtHex(char *hash, char *hashstring);/* fwapi.c */int fwapi_start_rtp(int rtp_direction,                    struct in_addr local_ipaddr, int local_port,                    struct in_addr remote_ipaddr, int remote_port);int fwapi_stop_rtp(int rtp_direction,                   struct in_addr local_ipaddr, int local_port,                   struct in_addr remote_ipaddr, int remote_port);/* sip_layer.c */int sip_message_parse(osip_message_t * sip,    const char *buf, size_t len);int sip_message_to_str(osip_message_t * sip,   char **dest,     size_t *len);int sip_body_to_str(const osip_body_t * body,  char **dest,     size_t *len);int sip_message_set_body(osip_message_t * sip, const char *buf, size_t len);/* * some constant definitions */#define SIP_PORT	5060	/* default port to listen */#define DEFAULT_MAXFWD	70	/* default Max-Forward count */#define DEFAULT_EXPIRES	3600	/* default Expires timeout */#define URLMAP_SIZE	128	/* number of URL mapping table entries	*/				/* this limits the number of clients!	*/#define SOURCECACHE_SIZE 256	/* number of return addresses		*/#define DEJITTERLIMIT	1500000	/* max value for dejitter configuration */#define DEFAULT_DEJITTER 100000	/* default value for dejitter configuration */#define RTPPROXY_SIZE	256	/* number of rtp proxy entries		*/				/* this limits the number of calls!	*/#define BUFFER_SIZE	8196	/* input buffer for read from socket	*/#define RTP_BUFFER_SIZE	1520	/* max size of an RTP frame		*/				/* (assume approx one Ethernet MTU)	*/#define URL_STRING_SIZE	128	/* max size of an URL/URI string	*/#define STATUSCODE_SIZE	5	/* size of string representation of status */#define DNS_CACHE_SIZE	256	/* number of entries in internal DNS cache */#define DNS_ATTEMPTS	3	/* number of attempts to resolve a name				   before it is marked as bad */#define DNS_GOOD_AGE	60	/* maximum age of a good cache entry (sec) */#define DNS_BAD_AGE	600	/* maximum age of a bad cache entry (sec) */#define IFADR_CACHE_SIZE 32	/* number of entries in internal IFADR cache */#define IFADR_MAX_AGE	5	/* max. age of the IF address cache (sec) */#define IFNAME_SIZE	16	/* max string length of a interface name */#define HOSTNAME_SIZE	128	/* max string length of a hostname	*/#define USERNAME_SIZE	128	/* max string length of a username (auth) */#define PASSWORD_SIZE	128	/* max string length of a password (auth) */#define VIA_BRANCH_SIZE	128	/* max string length for via branch param */				/* scratch buffer for gethostbyname_r() */#if defined(PR_NETDB_BUF_SIZE)   #define GETHOSTBYNAME_BUFLEN PR_NETDB_BUF_SIZE #else   #define GETHOSTBYNAME_BUFLEN 1024#endif/* constants for security testing */#define SEC_MINLEN	16	/* minimum received length */#define SEC_MAXLINELEN	1024	/* maximum acceptable length of one line				   in the SIP telegram (security check)				   Careful: Proxy-Authorization lines may				   get quite long *//* symbols for access control */#define ACCESSCTL_SIP	1	/* for access control - SIP allowed	*/#define ACCESSCTL_REG	2	/* --"--              - registr. allowed *//* symbolic return stati */#define STS_SUCCESS	0	/* SUCCESS				*/#define STS_TRUE	0	/* TRUE					*/#define STS_FAILURE	1	/* FAILURE				*/#define STS_FALSE	1	/* FALSE				*/#define STS_NEED_AUTH	1001	/* need authentication			*/#define STS_SIP_SENT	2001	/* SIP packet is already sent		*//* symbolic direction of data */#define DIR_INCOMING	1#define DIR_OUTGOING	2/* Interfaces */#define IF_OUTBOUND 0#define IF_INBOUND  1/* various */#ifndef satoi#define satoi atoi  /* used in libosips MSG_TEST_CODE macro ... */#endif/* * Macro that limits the frequency of this particular code * block to no faster than every 'a' seconds. Used for logging */#define LIMIT_LOG_RATE(a) \        static time_t last=0; \        time_t now; \        int dolog=0; \        time(&now); \        if ((last+(a)) <= now) {last=now; dolog=1;} \        if (dolog)/* * if the following symbol 'GPL' is defined, building siproxd will * include all features. If not defined, some features that will * conflict with a non-GPL distribution license will be disabled. * * If you wish to distribute siproxd under another license than GPL * (commercial License for example), contact the author to elaborate * the details. */#define GPL

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -