monotone

monotone Mtn Source Tree

Root/netxx/address.h

1/*
2 * Copyright (C) 2001-2004 Peter J Jones (pjones@pmade.org)
3 * All Rights Reserved
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 * 3. Neither the name of the Author nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
23 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
29 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 */
32
33/** @file
34 * This file contains the definition of the Netxx::Address class.
35**/
36
37#ifndef _netxx_address_h_
38#define _netxx_address_h_
39
40// Netxx includes
41#include <netxx/types.h>
42#include <netxx/peer.h>
43
44// standard includes
45#include <string>
46#include <vector>
47
48namespace Netxx {
49
50/**
51 * The Netxx::Address class is used by Netxx as a container for network
52 * addresses. An address can be used by a server to specify which local
53 * address and port to bind to. An address can also be used by a client to
54 * know which remote host to connect to and on which port.
55 *
56 * In Netxx, the address also specifies other connection related
57 * information, such as the connection protocol.
58**/
59class Address {
60public:
61 /// address container type
62 typedef std::vector<Peer> container_type;
63
64 /// address const_iterator type
65 typedef container_type::const_iterator const_iterator;
66
67 //####################################################################
68 /**
69 * Netxx::Address class constructor. This constructor is designed to be
70 * used by clients wanting the address information about a server. The
71 * url parameter can be a host name with or without a protocol, port
72 * number or path. Here are some examples: pmade.org pmade.org:80
73 * http://pmade.org http://pmade.org:80/index.html.
74 *
75 * Here is the order in which the port number is determined. (1) from
76 * the port part of the hostname as in pmade.org:80, (2) from the given
77 * protocol part such as http:// and (3) from the given default port.
78 *
79 * @param uri A string as described above
80 * @param default_port The default port number for this address
81 * @param use_ipv6 Allow the use of IPv6 if compiled in.
82 * @author Peter Jones
83 **/
84 //####################################################################
85 explicit Address (const char *uri, port_type default_port=0, bool use_ipv6=false);
86
87 //####################################################################
88 /**
89 * Netxx::Address class constructor. This constructor is designed to be
90 * used by servers when they need to specify the local addresses and
91 * ports to which it will bind.
92 *
93 * After the constructor is called, you will want to add addresses to
94 * the address list using one of the appropriate member functions such
95 * as add_address.
96 *
97 * @param use_ipv6 Allow the use of IPv6 if compiled in.
98 * @author Peter Jones
99 **/
100 //####################################################################
101 explicit Address (bool use_ipv6=false);
102
103 //####################################################################
104 /**
105 * Netxx::Address class destructor.
106 *
107 * @author Peter Jones
108 **/
109 //####################################################################
110 ~Address (void);
111
112 //####################################################################
113 /**
114 * If the URI that was given in the constructor had a protocol specifier
115 * such as http:// this member function will return that string.
116 * Otherwise this function will return 0.
117 *
118 * @return The protcol string like "http" or 0.
119 * @author Peter Jones
120 **/
121 //####################################################################
122 const char* get_protocol (void) const;
123
124 //####################################################################
125 /**
126 * Get the hostname that was given in the constructor. This may be a raw
127 * address if that was given to the constructor.
128 *
129 * @return The hostname.
130 * @author Peter Jones
131 **/
132 //####################################################################
133 const char* get_name (void) const;
134
135 //####################################################################
136 /**
137 * Get the URI path information of that was present in the constructor.
138 * For example, if the given URI was pmade.org/index.html, this member
139 * function will return "/index.html". If no path information was given
140 * in the URI, this function will return 0.
141 *
142 * @return The path string or 0.
143 * @author Peter Jones
144 **/
145 //####################################################################
146 const char* get_path (void) const;
147
148 //####################################################################
149 /**
150 * This function will return the actual port number that was chosen by
151 * the constructor.
152 *
153 * @return The final port number for this address.
154 * @author Peter Jones
155 **/
156 //####################################################################
157 port_type get_port (void) const;
158
159 //####################################################################
160 /**
161 * Get an iterator to the first address pair.
162 *
163 * @return The address begin iterator.
164 * @author Peter Jones
165 **/
166 //####################################################################
167 const_iterator begin (void) const;
168
169 //####################################################################
170 /**
171 * Get an iterator that points one past the last address pair.
172 *
173 * @return The address end iterator.
174 * @author Peter Jones
175 **/
176 //####################################################################
177 const_iterator end (void) const;
178
179 //####################################################################
180 /**
181 * Find out how many addresses are stored in this address class.
182 *
183 * @return The number of addresses that this class is holding.
184 * @author Peter Jones
185 **/
186 //####################################################################
187 size_type size (void) const;
188
189 //####################################################################
190 /**
191 * Add another address to the list. The URI parameter follows that of
192 * the first constructor.
193 *
194 * @param uri The URI of the address.
195 * @param default_port The default port to use.
196 * @author Peter Jones
197 **/
198 //####################################################################
199 void add_address(const char *uri, port_type default_port=0);
200
201 //####################################################################
202 /**
203 * Add all local addresses to the address list. This is meant to be used
204 * by servers who wish to bind to all local addresses.
205 *
206 * @param port The port to use for all local addresses.
207 * @author Peter Jones
208 **/
209 //####################################################################
210 void add_all_addresses (port_type port);
211
212private:
213 std::stringprotocol_;
214 std::stringname_;
215 std::stringpath_;
216 port_typeport_;
217 container_typeaddrs_;
218 boolipv6_;
219
220}; // end Netxx::Address class
221} // end Netxx namespace
222#endif

Archive Download this file

Branches

Tags

Quick Links:     www.monotone.ca    -     Downloads    -     Documentation    -     Wiki    -     Code Forge    -     Build Status