etc: simple typo fixes in kamailio.cfg
[sip-router] / socket_info.h
1 /*
2  * find & manage listen addresses 
3  *
4  * Copyright (C) 2001-2003 FhG Fokus
5  *
6  * This file is part of Kamailio, a free SIP server.
7  *
8  * Kamailio is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version
12  *
13  * Kamailio is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License 
19  * along with this program; if not, write to" the Free Software 
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
21  */
22
23 /*! \file
24  * \brief Kamailio core :: listen address
25  * This file contains code that initializes and handles Kamailio listen addresses
26  * lists (struct socket_info). It is used mainly on startup.
27  * 
28  */
29
30
31 #ifndef socket_info_h
32 #define socket_info_h
33
34 #include "ip_addr.h" 
35 #include "dprint.h"
36 #include "globals.h"
37
38 /* This macro evaluates to the maximum length of string buffer needed to print
39  * the text description of any socket, not counting the terminating zero added
40  * by socket2str */
41 #define MAX_SOCKET_STR (sizeof("unknown") - 1 + IP_ADDR_MAX_STR_SIZE + \
42         INT2STR_MAX_LEN + 2 + 2)
43
44 int socket2str(char* s, int* len, struct socket_info* si);
45 int socketinfo2str(char* s, int* len, struct socket_info* si, int mode);
46
47
48 /* struct socket_info is defined in ip_addr.h */
49
50 extern struct socket_info* udp_listen;
51 #ifdef USE_TCP
52 extern struct socket_info* tcp_listen;
53 #endif
54 #ifdef USE_TLS
55 extern struct socket_info* tls_listen;
56 #endif
57 #ifdef USE_SCTP
58 extern struct socket_info* sctp_listen;
59 #endif
60
61 extern enum sip_protos nxt_proto[PROTO_LAST+1];
62
63
64
65 /* flags for finding out the address types */
66 #define SOCKET_T_IPV4  1
67 #define SOCKET_T_IPV6  2
68 #define SOCKET_T_UDP   4
69 #define SOCKET_T_TCP   8
70 #define SOCKET_T_TLS  16
71 #define SOCKET_T_SCTP 32
72
73 extern int socket_types;
74
75 void init_proto_order(void);
76
77 int add_listen_iface(char* name, struct name_lst* nlst,
78                                                 unsigned short port, unsigned short proto,
79                                                 enum si_flags flags);
80 int add_listen_advertise_iface(char* name, struct name_lst* nlst,
81                                                 unsigned short port, unsigned short proto,
82                                                 char *useaddr, unsigned short useport,
83                                                 enum si_flags flags);
84 int fix_all_socket_lists(void);
85 void print_all_socket_lists(void);
86 void print_aliases(void);
87
88 struct socket_info* grep_sock_info(str* host, unsigned short port,
89                                                                                 unsigned short proto);
90 struct socket_info* grep_sock_info_by_port(unsigned short port,
91                                                                                         unsigned short proto);
92 struct socket_info* find_si(struct ip_addr* ip, unsigned short port,
93                                                                                                 unsigned short proto);
94
95 struct socket_info** get_sock_info_list(unsigned short proto);
96
97 int parse_phostport(char* s, char** host, int* hlen,
98                                                                  int* port, int* proto);
99
100 int parse_proto(unsigned char* s, long len, int* proto);
101
102 char* get_valid_proto_name(unsigned short proto);
103
104 /* helper function:
105  * returns next protocol, if the last one is reached return 0
106  * useful for cycling on the supported protocols
107  * order: udp, tcp, tls, sctp */
108 static inline int next_proto(unsigned short proto)
109 {
110         if (proto>PROTO_LAST)
111                 LM_ERR("unknown proto %d\n", proto);
112         else
113                 return nxt_proto[proto];
114         return 0;
115 }
116
117
118
119 /* gets first non-null socket_info structure
120  * (useful if for. e.g we are not listening on any udp sockets )
121  */
122 inline static struct socket_info* get_first_socket(void)
123 {
124         if (udp_listen) return udp_listen;
125 #ifdef USE_TCP
126         else if (tcp_listen) return tcp_listen;
127 #endif
128 #ifdef USE_SCTP
129         else if (sctp_listen) return sctp_listen;
130 #endif
131 #ifdef USE_TCP
132 #ifdef USE_TLS
133         else if (tls_listen) return tls_listen;
134 #endif
135 #endif
136         return 0;
137 }
138
139 /* structure to break down 'proto:host:port' */
140 typedef struct _sr_phostp {
141         int proto;
142         str host;
143         int port;
144 } sr_phostp_t;
145
146 struct socket_info* lookup_local_socket(str *phostp);
147
148 #endif