aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/definitions.h
blob: 102358438c8a8177c69a6d39a80b2e2d6717dd82 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/**
 * @file definitions.h
 * 
 * @brief General purpose definitions and macros.
 * 
 */

/*
 * Copyright (C) 2005-2006 Martin Willi
 * Copyright (C) 2005 Jan Hutter
 * Hochschule fuer Technik Rapperswil
 * Copyright (C) 1998, 1999  D. Hugh Redelmeier. (Endian stuff)
 * 
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2 of the License, or (at your
 * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

#ifndef DEFINITIONS_H_
#define DEFINITIONS_H_

#include <stddef.h>

#define BITS_PER_BYTE	8
#define RSA_MIN_OCTETS	(1024 / BITS_PER_BYTE)
#define RSA_MIN_OCTETS_UGH	"RSA modulus too small for security: less than 1024 bits"
#define RSA_MAX_OCTETS	(8192 / BITS_PER_BYTE)
#define RSA_MAX_OCTETS_UGH	"RSA modulus too large: more than 8192 bits"

/**
  * Default length for various auxiliary text buffers
  */
#define BUF_LEN		512

/**
 * Macro compares two strings for equality
 */
#define streq(x,y) (strcmp(x, y) == 0)

/**
 * Macro compares two binary blobs for equality
 */
#define memeq(x,y,len) (memcmp(x, y, len) == 0)

/**
 * Macro gives back larger of two values.
 */
#define max(x,y) ((x) > (y) ? (x):(y))

/**
 * Macro gives back smaller of two values.
 */
#define min(x,y) ((x) < (y) ? (x):(y))

/**
 * Call destructor of a object if object != NULL
 */
#define DESTROY_IF(obj) if (obj) obj->destroy(obj)

/**
 * Debug macro to follow control flow
 */
#define POS printf("%s, line %d\n", __FILE__, __LINE__)

/**
 * Macro to allocate a sized type.
 */
#define malloc_thing(thing) ((thing*)malloc(sizeof(thing)))

/**
 * Assign a function as a class method
 */
#define ASSIGN(method, function) (method = (typeof(method))function)


/**
 * Mapping entry which defines the end of a mapping_t array.
 */
#define MAPPING_END (-1)

typedef struct mapping_t mapping_t;

/**
 * @brief Mapping entry, where enum-to-string mappings are stored.
 */
struct mapping_t
{
	/**
	 * Enumeration value.
	 */
	int value;
	
	/**
	 * Mapped string.
	 */
	char *string;
};

/**
 * @brief Find a mapping_string in the mapping[].
 * 
 * @param mappings		mappings array
 * @param value			enum-value to get the string from
 * 
 */
char *mapping_find(mapping_t *mappings, int value);

/**
 * @brief Describes an enumeration
 * enum_name() returns the name of an enum value, or NULL if invalid.
 */
typedef const struct enum_names enum_names;

struct enum_names {
	unsigned long en_first;  	/* first value in range */
	unsigned long en_last;   	/* last value in range (inclusive) */
	const char *const *en_names;
	enum_names *en_next_range;	/* descriptor of next range */
};

/**
 * @brief Returns the name of an enum value, or NULL if invalid
 */
const char *enum_name(enum_names *ed, unsigned long val);

#endif /*DEFINITIONS_H_*/