1 /*---------------------------------------------------------------
2  * Copyright (c) 1999,2000,2001,2002,2003
3  * The Board of Trustees of the University of Illinois
4  * All Rights Reserved.
5  *---------------------------------------------------------------
6  * Permission is hereby granted, free of charge, to any person
7  * obtaining a copy of this software (Iperf) and associated
8  * documentation files (the "Software"), to deal in the Software
9  * without restriction, including without limitation the
10  * rights to use, copy, modify, merge, publish, distribute,
11  * sublicense, and/or sell copies of the Software, and to permit
12  * persons to whom the Software is furnished to do
13  * so, subject to the following conditions:
14  *
15  *
16  * Redistributions of source code must retain the above
17  * copyright notice, this list of conditions and
18  * the following disclaimers.
19  *
20  *
21  * Redistributions in binary form must reproduce the above
22  * copyright notice, this list of conditions and the following
23  * disclaimers in the documentation and/or other materials
24  * provided with the distribution.
25  *
26  *
27  * Neither the names of the University of Illinois, NCSA,
28  * nor the names of its contributors may be used to endorse
29  * or promote products derived from this Software without
30  * specific prior written permission.
31  *
32  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
33  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
34  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
35  * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTIBUTORS OR COPYRIGHT
36  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
37  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
38  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE
39  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
40  * ________________________________________________________________
41  * National Laboratory for Applied Network Research
42  * National Center for Supercomputing Applications
43  * University of Illinois at Urbana-Champaign
44  * http://www.ncsa.uiuc.edu
45  * ________________________________________________________________
46  *
47  * Listener.hpp
48  * by Mark Gates <mgates@nlanr.net>
49  * -------------------------------------------------------------------
50  * Listener sets up a socket listening on the server host. For each
51  * connected socket that accept() returns, this creates a Server
52  * socket and spawns a thread for it.
53  * ------------------------------------------------------------------- */
54 
55 #ifndef LISTENER_H
56 #define LISTENER_H
57 
58 #include "Thread.h"
59 #include "Settings.hpp"
60 #include "Timestamp.hpp"
61 
62 class Listener;
63 
64 class Listener {
65 public:
66     // stores server port and TCP/UDP mode
67     Listener(thread_Settings *inSettings);
68     // destroy the server object
69     ~Listener();
70     // accepts connections and starts Servers
71     void Run(void);
72 
73 private:
74     int mClients;
75     struct ether_header *eth_hdr;
76     struct iphdr *ip_hdr;
77     struct udphdr *udp_hdr;
78     thread_Settings *mSettings;
79     thread_Settings *server;
80     Timestamp mEndTime;
81     bool apply_client_settings_udp(thread_Settings *server);
82     bool apply_client_settings_tcp(thread_Settings *server);
83     bool apply_client_settings(thread_Settings *server);
84     int client_test_ack(thread_Settings *server);
85     void my_multicast_join(void);
86     void my_listen(void);
87     int my_accept(thread_Settings *server);
88     int udp_accept(thread_Settings *server);
89     int tuntap_accept(thread_Settings *server);
90     bool L2_setup(thread_Settings *server, int sockfd);
91     bool tap_setup(thread_Settings *server, int sockfd);
92     void UDPSingleServer(thread_Settings *server);
93     bool test_permit_key(uint32_t flags, thread_Settings *server, int keyoffset);
94 #if WIN32
95     SOCKET ListenSocket;
96 #else
97     int ListenSocket;
98 #endif
99 }; // end class Listener
100 
101 #endif // LISTENER_H
102