monotone

monotone Mtn Source Tree

Root/netxx/probeinfo.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 defintion of the Netxx::ProbeInfo class.
35**/
36
37#ifndef _netxx_probeinfo_h_
38#define _netxx_probeinfo_h_
39
40// Netxx includes
41#include <netxx/types.h>
42
43// standard includes
44#include <vector>
45
46namespace Netxx {
47
48/**
49 * The Netxx::ProbeInfo class is used to provide information to the
50 * Netxx::Probe class on how to probe another Netxx object. This
51 * implementation of the class does not do much. The entire implementation
52 * is inline to make most of it disapper at compile time.
53 *
54 * For Netxx objects that need custom probing, they will create their own
55 * ProbeInfo class and drive from this one.
56**/
57class ProbeInfo {
58public:
59 /**
60 * The ProbeInfo::PendingType is used to signal what state a socket is
61 * in after a pending check.
62 */
63 enum PendingType {
64pending_none= 0x000000, ///< The socket is not ready
65pending_read= 0x000001, ///< The socket is ready for reading
66pending_write= 0x000002, ///< The socket is ready for writing
67pending_oobd= 0x000004 ///< The socket is ready for reading OOB data.
68 };
69
70 /// a type for combinding different PendingType's
71 typedef unsigned int pending_type;
72
73 //####################################################################
74 /**
75 * Netxx::ProbeInfo Default constructor.
76 *
77 * @author Peter Jones
78 **/
79 //####################################################################
80 ProbeInfo (void)
81 { }
82
83 //####################################################################
84 /**
85 * Construct a new ProbeInfo using a vector of sockets.
86 *
87 * @param sockets The list of sockets to use for probing.
88 * @author Peter Jones
89 **/
90 //####################################################################
91 explicit ProbeInfo (const std::vector<socket_type> &sockets)
92: sockets_(sockets) { }
93
94 //####################################################################
95 /**
96 * Construct a new ProbeInfo using only one socket.
97 *
98 * @param socketfd The socket to probe for.
99 * @author Peter Jones
100 **/
101 //####################################################################
102 explicit ProbeInfo (socket_type socketfd)
103 { add_socket(socketfd); }
104
105 //####################################################################
106 /**
107 * Copy constructor.
108 *
109 * @param other The ProbeInfo to copy from.
110 * @author Peter Jones
111 **/
112 //####################################################################
113 ProbeInfo (const ProbeInfo &other)
114: sockets_(other.sockets_) { }
115
116 //####################################################################
117 /**
118 * Assignment operator.
119 *
120 * @param other The ProbeInfo to copy from.
121 * @return *this.
122 * @author Peter Jones
123 **/
124 //####################################################################
125 ProbeInfo& operator= (const ProbeInfo &other)
126 { ProbeInfo tmp(other); swap(tmp); return *this; }
127
128 //####################################################################
129 /**
130 * Swap this ProbeInfo for another.
131 *
132 * @param other The ProbeInfo to swap with.
133 * @author Peter Jones
134 **/
135 //####################################################################
136 void swap (ProbeInfo &other)
137 { sockets_.swap(other.sockets_); }
138
139 //####################################################################
140 /**
141 * Class destructor.
142 *
143 * @author Peter Jones
144 **/
145 //####################################################################
146 virtual ~ProbeInfo (void)
147 { }
148
149 //####################################################################
150 /**
151 * Add a socket file descriptor to the list of sockets to probe.
152 *
153 * @param socketfd The socket file descriptor to add.
154 * @author Peter Jones
155 **/
156 //####################################################################
157 void add_socket (socket_type socketfd)
158 { sockets_.push_back(socketfd); }
159
160 //####################################################################
161 /**
162 * Get the list of sockets that need to be probed.
163 *
164 * @return A vector that contains all the sockets to be probed.
165 * @author Peter Jones
166 **/
167 //####################################################################
168 const std::vector<socket_type>& get_sockets (void) const
169 { return sockets_; }
170
171 //####################################################################
172 /**
173 * Reset the list of sockets to probe. Note: this will not reset the
174 * sockets to probe in the actual Netxx::Probe class. You should call
175 * Netxx::Probe::clear() as well.
176 *
177 * @author Peter Jones
178 **/
179 //####################################################################
180 void clear (void)
181 { sockets_.clear(); }
182
183 //####################################################################
184 /**
185 * Override this function if you need special pending checks for your
186 * socket file descriptors.
187 *
188 * @return True if Probe should call check_pending().
189 * @return False if Probe should not call check_pending().
190 * @author Peter Jones
191 **/
192 //####################################################################
193 virtual bool needs_pending_check (void) const
194 { return false; }
195
196 //####################################################################
197 /**
198 * Override this function to return the correct pending state for the
199 * given socket file descriptor. This call should be very fast and
200 * should NEVER EVER block!
201 *
202 * @param socket_type The socket to check pending status on.
203 * @param pending_type What type of pending state are we looking for.
204 * @return The pending state for the socket.
205 * @author Peter Jones
206 **/
207 //####################################################################
208 virtual pending_type check_pending (socket_type, pending_type) const
209 { return pending_none; }
210
211private:
212 std::vector<socket_type> sockets_;
213
214}; // end ProbeInfo class
215} // end Netxx namespace
216#endif

Archive Download this file

Branches

Tags

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