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
133
134
135
136
137
138
139
|
/**
* @file job.h
*
* @brief Interface job_t.
*
*/
/*
* Copyright (C) 2005 Jan Hutter, Martin Willi
* Hochschule fuer Technik Rapperswil
*
* 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 JOB_H_
#define JOB_H_
#include <types.h>
#include <definitions.h>
typedef enum job_type_t job_type_t;
/**
* @brief Definition of the various job types.
*
* @ingroup jobs
*/
enum job_type_t {
/**
* Process an incoming IKEv2-Message.
*
* Job is implemented in class incoming_packet_job_t
*/
INCOMING_PACKET,
/**
* Retransmit an IKEv2-Message.
*
* Job is implemented in class retransmit_request_job_t
*/
RETRANSMIT_REQUEST,
/**
* Establish an ike sa as initiator.
*
* Job is implemented in class initiate_ike_sa_job_t
*/
INITIATE_IKE_SA,
/**
* Delete an ike sa which is still not established.
*
* Job is implemented in class delete_half_open_ike_sa_job_t
*/
DELETE_HALF_OPEN_IKE_SA,
/**
* Delete an ike sa which is established.
*
* Job is implemented in class delete_established_ike_sa_job_t
*/
DELETE_ESTABLISHED_IKE_SA,
/**
* Delete a child sa.
*
* Job is implemented in class delete_child_sa_job_t
*/
DELETE_CHILD_SA,
/**
* Rekey a child sa.
*
* Job is implemented in class rekey_child_sa_job_t
*/
REKEY_CHILD_SA,
};
/**
* string mappings for job_type_t
*
* @ingroup jobs
*/
extern mapping_t job_type_m[];
typedef struct job_t job_t;
/**
* @brief Job-Interface as it is stored in the job queue.
*
* A job consists of a job-type and one or more assigned values.
*
* @b Constructors:
* - None, use specific implementation of the interface.
*
* @ingroup jobs
*/
struct job_t {
/**
* @brief get type of job.
*
* @param this calling object
* @return type of this job
*/
job_type_t (*get_type) (job_t *this);
/**
* @brief Execute a job.
*
* Call the internall job routine to process the
* job. If this method returns DESTROY_ME, the job
* must be destroyed by the caller.
*
* @param this calling object
* @return status of job execution
*/
status_t (*execute) (job_t *this);
/**
* @brief Destroys a job_t object
*
* @param job_t calling object
*/
void (*destroy) (job_t *job);
};
#endif /* JOB_H_ */
|