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-2022 OpenVPN 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 along
20  *  with this program; if not, write to the Free Software Foundation, Inc.,
21  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22  */
23 
24 #ifndef PUSH_H
25 #define PUSH_H
26 
27 #if P2MP
28 
29 #include "forward.h"
30 
31 #define PUSH_MSG_ERROR            0
32 #define PUSH_MSG_REQUEST          1
33 #define PUSH_MSG_REPLY            2
34 #define PUSH_MSG_REQUEST_DEFERRED 3
35 #define PUSH_MSG_AUTH_FAILURE     4
36 #define PUSH_MSG_CONTINUATION     5
37 #define PUSH_MSG_ALREADY_REPLIED  6
38 
39 int process_incoming_push_request(struct context *c);
40 
41 int process_incoming_push_msg(struct context *c,
42                               const struct buffer *buffer,
43                               bool honor_received_options,
44                               unsigned int permission_mask,
45                               unsigned int *option_types_found);
46 
47 bool send_push_request(struct context *c);
48 
49 void receive_auth_failed(struct context *c, const struct buffer *buffer);
50 
51 void server_pushed_signal(struct context *c, const struct buffer *buffer, const bool restart, const int adv);
52 
53 void server_pushed_info(struct context *c, const struct buffer *buffer,
54                         const int adv);
55 
56 void receive_cr_response(struct context *c, const struct buffer *buffer);
57 
58 void incoming_push_message(struct context *c, const struct buffer *buffer);
59 
60 void clone_push_list(struct options *o);
61 
62 void push_option(struct options *o, const char *opt, int msglevel);
63 
64 void push_options(struct options *o, char **p, int msglevel,
65                   struct gc_arena *gc);
66 
67 void push_reset(struct options *o);
68 
69 void push_remove_option(struct options *o, const char *p);
70 
71 void remove_iroutes_from_push_route_list(struct options *o);
72 
73 void send_auth_failed(struct context *c, const char *client_reason);
74 
75 /**
76  * Sends the auth pending control messages to a client. See
77  * doc/management-notes.txt under client-pending-auth for
78  * more details on message format
79  */
80 bool send_auth_pending_messages(struct context *c, const char *extra);
81 
82 void send_restart(struct context *c, const char *kill_msg);
83 
84 /**
85  * Sends a push reply message only containin the auth-token to update
86  * the auth-token on the client
87  *
88  * @param multi  - The tls_multi structure belonging to the instance to push to
89  */
90 void send_push_reply_auth_token(struct tls_multi *multi);
91 
92 #endif /* if P2MP */
93 #endif /* ifndef PUSH_H */
94