]>
Commit | Line | Data |
---|---|---|
1 | /** | |
2 | * @file generator.h | |
3 | * | |
4 | * @brief Interface of generator_t. | |
5 | * | |
6 | */ | |
7 | ||
8 | /* | |
9 | * Copyright (C) 2005 Jan Hutter, Martin Willi | |
10 | * Hochschule fuer Technik Rapperswil | |
11 | * | |
12 | * This program is free software; you can redistribute it and/or modify it | |
13 | * under the terms of the GNU General Public License as published by the | |
14 | * Free Software Foundation; either version 2 of the License, or (at your | |
15 | * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. | |
16 | * | |
17 | * This program is distributed in the hope that it will be useful, but | |
18 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
19 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
20 | * for more details. | |
21 | */ | |
22 | ||
23 | #ifndef GENERATOR_H_ | |
24 | #define GENERATOR_H_ | |
25 | ||
26 | #include <types.h> | |
27 | #include <encoding/payloads/encodings.h> | |
28 | #include <encoding/payloads/payload.h> | |
29 | ||
30 | /** | |
31 | * Generating is done in a data buffer. | |
32 | * This is thehe start size of this buffer in bytes. | |
33 | * | |
34 | * @ingroup enconding | |
35 | */ | |
36 | #define GENERATOR_DATA_BUFFER_SIZE 500 | |
37 | ||
38 | /** | |
39 | * Number of bytes to increase the buffer, if it is to small. | |
40 | * | |
41 | * @ingroup enconding | |
42 | */ | |
43 | #define GENERATOR_DATA_BUFFER_INCREASE_VALUE 500 | |
44 | ||
45 | ||
46 | typedef struct generator_t generator_t; | |
47 | ||
48 | /** | |
49 | * @brief A generator_t class used to generate IKEv2 payloads. | |
50 | * | |
51 | * After creation, multiple payloads can be generated with the generate_payload | |
52 | * method. The generated bytes are appended. After all payloads are added, | |
53 | * the write_to_chunk method writes out all generated data since | |
54 | * the creation of the generator. After that, the generator must be destroyed. | |
55 | * The generater uses a set of encoding rules, which it can get from | |
56 | * the supplied payload. With this rules, the generater can generate | |
57 | * the payload and all substructures automatically. | |
58 | * | |
59 | * @b Constructor: | |
60 | * - generator_create() | |
61 | * | |
62 | * @ingroup encoding | |
63 | */ | |
64 | struct generator_t { | |
65 | ||
66 | /** | |
67 | * @brief Generates a specific payload from given payload object. | |
68 | * | |
69 | * Remember: Header and substructures are also handled as payloads. | |
70 | * | |
71 | * @param this generator_t object | |
72 | * @param[in] payload interface payload_t implementing object | |
73 | */ | |
74 | void (*generate_payload) (generator_t *this,payload_t *payload); | |
75 | ||
76 | /** | |
77 | * @brief Writes all generated data of the generator to a chunk. | |
78 | * | |
79 | * @param this generator_t object | |
80 | * @param[out] data chunk to write the data to | |
81 | */ | |
82 | void (*write_to_chunk) (generator_t *this,chunk_t *data); | |
83 | ||
84 | /** | |
85 | * @brief Destroys a generator_t object. | |
86 | * | |
87 | * @param this generator_t object | |
88 | */ | |
89 | void (*destroy) (generator_t *this); | |
90 | }; | |
91 | ||
92 | /** | |
93 | * @brief Constructor to create a generator. | |
94 | * | |
95 | * @return generator_t object. | |
96 | * | |
97 | * @ingroup encoding | |
98 | */ | |
99 | generator_t *generator_create(); | |
100 | ||
101 | #endif /*GENERATOR_H_*/ |