1/*
2 *  OpenVPN -- An application to securely tunnel IP networks
3 *             over a single TCP/UDP port, with support for SSL/TLS-based
4 *             session authentication and key exchange,
5 *             packet encryption, packet authentication, and
6 *             packet compression.
7 *
8 *  Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
9 *
10 *  This program is free software; you can redistribute it and/or modify
11 *  it under the terms of the GNU General Public License version 2
12 *  as published by the Free Software Foundation.
13 *
14 *  This program is distributed in the hope that it will be useful,
15 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 *  GNU General Public License for more details.
18 *
19 *  You should have received a copy of the GNU General Public License
20 *  along with this program (see the file COPYING included with this
21 *  distribution); if not, write to the Free Software Foundation, Inc.,
22 *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23 */
24
25/*
26 * TCP specific code for --mode server
27 */
28
29#ifndef MTCP_H
30#define MTCP_H
31
32#if P2MP_SERVER
33
34#include "event.h"
35
36/*
37 * Extra state info needed for TCP mode
38 */
39struct multi_tcp
40{
41  struct event_set *es;
42  struct event_set_return *esr;
43  int n_esr;
44  int maxevents;
45  unsigned int tun_rwflags;
46#ifdef ENABLE_MANAGEMENT
47  unsigned int management_persist_flags;
48#endif
49};
50
51struct multi_instance;
52struct context;
53
54struct multi_tcp *multi_tcp_init (int maxevents, int *maxclients);
55void multi_tcp_free (struct multi_tcp *mtcp);
56void multi_tcp_dereference_instance (struct multi_tcp *mtcp, struct multi_instance *mi);
57
58bool multi_tcp_instance_specific_init (struct multi_context *m, struct multi_instance *mi);
59void multi_tcp_instance_specific_free (struct multi_instance *mi);
60
61void multi_tcp_link_out_deferred (struct multi_context *m, struct multi_instance *mi);
62
63
64/**************************************************************************/
65/**
66 * Main event loop for OpenVPN in TCP server mode.
67 * @ingroup eventloop
68 *
69 * @param top - Top-level context structure.
70 */
71void tunnel_server_tcp (struct context *top);
72
73
74void multi_tcp_delete_event (struct multi_tcp *mtcp, event_t event);
75
76#endif
77#endif
78