- Spelling checked
[sip-router] / socket_info.h
1 /* $Id$
2  *
3  * find & manage listen addresses 
4  *
5  * Copyright (C) 2001-2003 FhG Fokus
6  *
7  * This file is part of ser, a free SIP server.
8  *
9  * ser is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version
13  *
14  * For a license to use the ser software under conditions
15  * other than those described here, or to purchase support for this
16  * software, please contact iptel.org by e-mail at the following addresses:
17  *    info@iptel.org
18  *
19  * ser is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  * GNU General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License 
25  * along with this program; if not, write to" the Free Software 
26  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
27  */
28 /*
29  * This file contains code that initializes and handles ser listen addresses
30  * lists (struct socket_info). It is used mainly on startup.
31  * 
32  * History:
33  * --------
34  *  2003-10-22  created by andrei
35  */
36
37
38 #ifndef socket_info_h
39 #define socket_info_h
40
41 #include "ip_addr.h" 
42 #include "dprint.h"
43 /* struct socket_info is defined in ip_addr.h */
44
45 struct socket_info* udp_listen;
46 #ifdef USE_TCP
47 struct socket_info* tcp_listen;
48 #endif
49 #ifdef USE_TLS
50 struct socket_info* tls_listen;
51 #endif
52
53
54 int add_listen_iface(char* name, unsigned short port, unsigned short proto,
55                                                         enum si_flags flags);
56 int fix_all_socket_lists();
57 void print_all_socket_lists();
58 void print_aliases();
59
60
61 /* helper function:
62  * returns next protocol, if the last one is reached return 0
63  * useful for cycling on the supported protocols */
64 static inline int next_proto(unsigned short proto)
65 {
66         switch(proto){
67                 case PROTO_NONE:
68                         return PROTO_UDP;
69                 case PROTO_UDP:
70 #ifdef  USE_TCP
71                         return PROTO_TCP;
72 #else
73                         return 0;
74 #endif
75 #ifdef USE_TCP
76                 case PROTO_TCP:
77 #ifdef USE_TLS
78                         return PROTO_TLS;
79 #else
80                         return 0;
81 #endif
82 #endif
83 #ifdef USE_TLS
84                 case PROTO_TLS:
85                         return 0;
86 #endif
87                 default:
88                         LOG(L_ERR, "ERROR: next_proto: unknown proto %d\n", proto);
89         }
90         return 0;
91 }
92
93
94
95 /* gets first non-null socket_info structure
96  * (useful if for. e.g we are not listening on any udp sockets )
97  */
98 inline static struct socket_info* get_first_socket()
99 {
100         if (udp_listen) return udp_listen;
101 #ifdef USE_TCP
102         else if (tcp_listen) return tcp_listen;
103 #ifdef USE_TLS
104         else if (tls_listen) return tls_listen;
105 #endif
106 #endif
107         return 0;
108 }
109
110
111
112 #endif