2 * OpenVPN -- An application to securely tunnel IP networks
3 * over a single UDP port, with support for SSL/TLS-based
4 * session authentication and key exchange,
5 * packet encryption, packet authentication, and
8 * Copyright (C) 2002-2005 OpenVPN Solutions LLC <info@openvpn.net>
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.
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.
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
35 max_int (int x
, int y
)
44 min_int (int x
, int y
)
53 constrain_int (int x
, int min
, int max
)
66 * Functions used for circular buffer index arithmetic.
70 * Return x - y on a circle of circumference mod by shortest path.
76 modulo_subtract(int x
, int y
, int mod
)
79 const int d2
= (x
> y
? -mod
: mod
) + d1
;
80 ASSERT (0 <= x
&& x
< mod
&& 0 <= y
&& y
< mod
);
81 return abs(d1
) > abs(d2
) ? d2
: d1
;
85 * Return x + y on a circle of circumference mod.
91 modulo_add(int x
, int y
, int mod
)
94 ASSERT (0 <= x
&& x
< mod
&& -mod
<= y
&& y
<= mod
);
103 index_verify (int index
, int size
, const char *file
, int line
)
105 if (index
< 0 || index
>= size
)
106 msg (M_FATAL
, "Assertion Failed: Array index=%d out of bounds for array size=%d in %s:%d",