]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/lib/address_conf.h
42fe083d6007a9e3b131f129e37697d34a22f043
[bacula/bacula] / bacula / src / lib / address_conf.h
1 /*
2  *
3  *   Written by Meno Abels, June MMIIII
4  *
5  *   Version $Id$
6  */
7
8 /*
9    Copyright (C) 2004 Kern Sibbald and John Walker
10
11    This program is free software; you can redistribute it and/or
12    modify it under the terms of the GNU General Public License as
13    published by the Free Software Foundation; either version 2 of
14    the License, or (at your option) any later version.
15
16    This program is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19    General Public License for more details.
20
21    You should have received a copy of the GNU General Public
22    License along with this program; if not, write to the Free
23    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
24    MA 02111-1307, USA.
25
26  */
27
28
29 class IPADDR : public SMARTALLOC {
30  public:
31    typedef enum { R_SINGLE, R_SINGLE_PORT, R_SINGLE_ADDR, R_MULTIPLE,
32                   R_DEFAULT, R_EMPTY
33    } i_type;
34    IPADDR(int af);
35    IPADDR(const IPADDR & src);
36  private:
37    IPADDR() {  /* block this construction */ } 
38    i_type type;
39    union {
40       struct sockaddr dontuse;
41       struct sockaddr_in dontuse4;
42 #ifdef HAVE_IPV6
43       struct sockaddr_in6 dontuse6;
44 #endif
45    } saddrbuf;
46    struct sockaddr *saddr;
47    struct sockaddr_in *saddr4;
48 #ifdef HAVE_IPV6
49    struct sockaddr_in6 *saddr6;
50 #endif
51  public:
52    void set_type(i_type o);
53    i_type get_type() const;
54    unsigned short get_port_net_order() const;
55    unsigned short get_port_host_order() const
56    {
57       return ntohs(get_port_net_order());
58    }
59    void set_port_net(unsigned short port);
60    int get_family() const;
61    struct sockaddr *get_sockaddr();
62    int get_sockaddr_len();
63    void copy_addr(IPADDR * src);
64    void set_addr_any();
65    void set_addr4(struct in_addr *ip4);
66 #ifdef HAVE_IPV6
67    void set_addr6(struct in6_addr *ip6);
68 #endif
69    const char *get_address(char *outputbuf, int outlen);
70
71    const char *build_address_str(char *buf, int blen);
72
73    /* private */
74    dlink link;
75 };
76
77 extern void store_addresses(LEX * lc, RES_ITEM * item, int index, int pass);
78 extern void free_addresses(dlist * addrs);
79 extern void store_addresses_address(LEX * lc, RES_ITEM * item, int index, int pass);
80 extern void store_addresses_port(LEX * lc, RES_ITEM * item, int index, int pass);
81 extern void init_default_addresses(dlist ** addr, int port);
82
83 extern const char *get_first_address(dlist * addrs, char *outputbuf, int outlen);
84 extern int get_first_port_net_order(dlist * addrs);
85 extern int get_first_port_host_order(dlist * addrs);
86
87 extern const char *build_addresses_str(dlist *addrs, char *buf, int blen);
88
89 extern int sockaddr_get_port_net_order(const struct sockaddr *sa);
90 extern int sockaddr_get_port(const struct sockaddr *sa);
91 extern char *sockaddr_to_ascii(const struct sockaddr *sa, char *buf, int len);
92 #ifdef HAVE_OLD_SOCKOPT
93 extern int inet_aton(const char *cp, struct in_addr *inp);
94 #endif