fdc18bcec8f653e9fbaa9f822285e7b09b4ab33e
[rahunas] / src / rh-task.c
1 /**
2  * RahuNAS task implementation
3  * Author: Neutron Soutmun <neo.neutron@gmail.com>
4  * Date:   2008-09-07
5  */
6
7 #include <syslog.h>
8 #include "rh-task.h"
9 #include "rh-task-memset.h"
10 #include "rh-task-ipset.h"
11 #include "rh-task-dbset.h"
12 #include "rh-task-bandwidth.h"
13
14 void task_register(struct main_server *ms, struct task *task)
15 {
16   GList *chk  = NULL;
17   GList *node = NULL;
18   struct task *ltask = NULL;
19
20   if (task == NULL)
21      return;
22
23   DP("Registering Task: %s", task->taskname);
24
25   chk = g_list_find(ms->task_list, task);
26
27   /* Already register */
28   if (chk != NULL) {
29     DP("Already registered");
30     return;
31   }
32
33   if (ms->task_list == NULL) {
34     ms->task_list = g_list_append(ms->task_list, task);
35     return;
36   }
37
38   for (node = g_list_first(ms->task_list); node != NULL; node = g_list_next(node)) {
39     ltask = (struct task *)node->data;
40     if (task->taskprio >= ltask->taskprio)
41       break;  
42   }
43   
44   ms->task_list = g_list_insert_before(ms->task_list, node, task);
45 }
46
47 void rh_task_init (struct main_server *ms, struct vserver *vs)
48 {
49   GList *runner = g_list_first(ms->task_list);
50   struct task *ltask = NULL;
51
52   DP("Initialize...");
53
54   while (runner != NULL) {
55     ltask = (struct task *)runner->data;
56     (*ltask->init)(vs);
57     runner = g_list_next(runner);
58   }
59 }
60
61 void rh_task_register(struct main_server *ms)
62 {
63   static int task_registered = 0;
64
65   if (task_registered == 0) {
66     /* Register all tasks */
67     rh_task_memset_reg(ms);
68     rh_task_ipset_reg(ms);
69
70     if (ms->main_config->bandwidth_shape)
71       rh_task_bandwidth_reg(ms);
72
73     rh_task_dbset_reg(ms);
74     task_registered = 1;
75   }
76 }
77
78 void rh_task_unregister(struct main_server *ms) {
79   g_list_free(ms->task_list);
80 }
81
82 void rh_task_cleanup(struct main_server *ms, struct vserver *vs)
83 {
84   GList *runner = g_list_last(ms->task_list);
85   struct task *ltask = NULL;
86
87   DP("Task Cleanup");
88
89   while (runner != NULL) {
90     ltask = (struct task *)runner->data;
91     (*ltask->cleanup)(vs);
92     runner = g_list_previous(runner);
93   }  
94 }
95
96 int  rh_task_startservice(struct main_server *ms, struct vserver *vs)
97 {
98   GList *runner = g_list_first(ms->task_list);
99   struct task *ltask = NULL;
100
101   DP("Start service");
102
103   while (runner != NULL) {
104     ltask = (struct task *)runner->data;
105     (*ltask->startservice)(vs);
106     runner = g_list_next(runner);
107   }  
108
109   logmsg(RH_LOG_NORMAL, "Service started");
110   return 0;
111 }
112
113 int  rh_task_stopservice(struct main_server *ms, struct vserver *vs)
114 {  
115   GList *runner = g_list_last(ms->task_list);
116   struct task *ltask = NULL;
117
118   DP("Stop service");
119
120   while (runner != NULL) {
121     ltask = (struct task *)runner->data;
122     (*ltask->stopservice)(vs);
123     runner = g_list_previous(runner);
124   }  
125
126   logmsg(RH_LOG_NORMAL, "Service stopped");
127 }
128
129 int  rh_task_startsess(struct vserver *vs, struct task_req *req)
130 {
131   struct main_server *ms = &rh_main_server_instance;
132   GList *runner = g_list_first(ms->task_list);
133   struct task *ltask = NULL;
134
135   DP("Start session called");
136
137   while (runner != NULL) {
138     ltask = (struct task *)runner->data;
139     (*ltask->startsess)(vs, req);
140     runner = g_list_next(runner);
141   }  
142
143   return 0;
144 }
145
146 int  rh_task_stopsess(struct vserver *vs, struct task_req *req)
147 {
148   struct main_server *ms = &rh_main_server_instance;
149   GList *runner = g_list_last(ms->task_list);
150   struct task *ltask = NULL;
151
152   DP("Stop session called");
153  
154   while (runner != NULL) {
155     ltask = (struct task *)runner->data;
156     (*ltask->stopsess)(vs, req);
157     runner = g_list_previous(runner);
158   }  
159
160   return 0;
161 }
162
163 int  rh_task_commitstartsess(struct vserver *vs, struct task_req *req)
164 {
165 }
166
167 int  rh_task_commitstopsess(struct vserver *vs, struct task_req *req)
168 {
169 }
170
171 int  rh_task_rollbackstartsess(struct vserver *vs, struct task_req *req)
172 {
173 }
174
175 int  rh_task_rollbackstopsess(struct vserver *vs, struct task_req *req)
176 {
177 }