OpenDNSSEC-signer 1.2.1

/build/buildd-opendnssec_1.2.1.dfsg-1-ia64-j6OroR/opendnssec-1.2.1.dfsg/signer/src/scheduler/task.h

Go to the documentation of this file.
00001 /*
00002  * $Id: task.h 4294 2011-01-13 19:58:29Z jakob $
00003  *
00004  * Copyright (c) 2009 NLNet Labs. All rights reserved.
00005  *
00006  * Redistribution and use in source and binary forms, with or without
00007  * modification, are permitted provided that the following conditions
00008  * are met:
00009  * 1. Redistributions of source code must retain the above copyright
00010  *    notice, this list of conditions and the following disclaimer.
00011  * 2. Redistributions in binary form must reproduce the above copyright
00012  *    notice, this list of conditions and the following disclaimer in the
00013  *    documentation and/or other materials provided with the distribution.
00014  *
00015  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
00016  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00017  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00018  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
00019  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00020  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
00021  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00022  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
00023  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
00024  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
00025  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026  *
00027  */
00028 
00034 #ifndef SCHEDULER_TASK_H
00035 #define SCHEDULER_TASK_H
00036 
00037 #include "config.h"
00038 #include "scheduler/locks.h"
00039 
00040 #include <stdio.h>
00041 #include <time.h>
00042 
00043 #ifdef HAVE_SYS_TYPES_H
00044 # include <sys/types.h>
00045 #endif
00046 #ifdef HAVE_UNISTD_H
00047 # include <unistd.h>
00048 #endif
00049 
00050 #include <ldns/ldns.h>
00051 
00052 struct zone_struct;
00053 
00054 enum task_id_enum {
00055     TASK_NONE = 0,
00056     TASK_READ,
00057     TASK_ADDKEYS,
00058     TASK_UPDATE,
00059     TASK_NSECIFY,
00060     TASK_SIGN,
00061     TASK_AUDIT,
00062     TASK_WRITE
00063 };
00064 typedef enum task_id_enum task_id;
00065 
00069 typedef struct task_struct task_type;
00070 struct task_struct {
00071     task_id what;
00072     time_t when;
00073     time_t backoff;
00074     const char* who;
00075     ldns_rdf* dname;
00076     struct zone_struct* zone;
00077     int flush;
00078 };
00079 
00083 typedef struct tasklist_struct tasklist_type;
00084 struct tasklist_struct {
00085     ldns_rbtree_t* tasks;
00086     int loading;
00087     lock_basic_type tasklist_lock;
00088 };
00089 
00099 task_type* task_create(int what, time_t when, const char* who,
00100     struct zone_struct* zone);
00101 
00109 task_type* task_recover_from_backup(const char* filename,
00110     struct zone_struct* zone);
00111 
00117 void task_backup(task_type* task);
00118 
00124 void task_cleanup(task_type* task);
00125 
00133 int task_compare(const void* a, const void* b);
00134 
00142 char* task2str(task_type* task, char* buftask);
00143 
00150 void task_print(FILE* out, task_type* task);
00151 
00158 tasklist_type* tasklist_create(void);
00159 
00165 void tasklist_cleanup(tasklist_type* list);
00166 
00173 void tasklist_flush(tasklist_type* list, task_id what);
00174 
00183 task_type* tasklist_schedule_task(tasklist_type* list, task_type* task, int log);
00184 
00192 task_type*
00193 tasklist_delete_task(tasklist_type* list, task_type* task);
00194 
00201 task_type* tasklist_pop_task(tasklist_type* list);
00202 
00209 task_type* tasklist_first_task(tasklist_type* list);
00210 
00217 void tasklist_print(FILE* out, tasklist_type* list);
00218 
00219 #endif /* SCHEDULER_TASK_H */