cr_rule.h

Go to the documentation of this file.
00001 /*
00002  * $Id$
00003  *
00004  * Copyright (C) 2007-2008 1&1 Internet AG
00005  *
00006  * This file is part of SIP-router, a free SIP server.
00007  *
00008  * SIP-router is free software; you can redistribute it and/or modify
00009  * it under the terms of the GNU General Public License as published by
00010  * the Free Software Foundation; either version 2 of the License, or
00011  * (at your option) any later version
00012  *
00013  * SIP-router is distributed in the hope that it will be useful,
00014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  * GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License 
00019  * along with this program; if not, write to the Free Software 
00020  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00021  */
00022 
00030 #ifndef CR_RULE_H
00031 #define CR_RULE_H
00032 
00033 #include "../../str.h"
00034 #include "../../flags.h"
00035 
00036 
00038 struct route_rule_p_list;
00039 
00044 struct route_rule {
00045         int dice_to; 
00046         double prob; 
00047         double orig_prob; 
00048         str host; 
00049         int strip; 
00050         str local_prefix; 
00051         str local_suffix; 
00052         str comment; 
00053         str prefix; 
00054         int status; 
00055         struct route_rule_p_list * backed_up; 
00056         struct route_rule_p_list * backup; 
00057         int hash_index; 
00058         struct route_rule * next; 
00059 };
00060 
00064 struct route_rule_p_list {
00065         struct route_rule * rr;
00066         int hash_index;
00067         struct route_rule_p_list * next;
00068 };
00069 
00073 struct route_flags {
00074         flag_t flags;  
00075         flag_t mask;  
00076         struct route_rule * rule_list; 
00077         struct route_rule ** rules; 
00078         int rule_num; 
00079         int dice_max; 
00080         int max_targets; 
00081         struct route_flags * next; 
00082 };
00083 
00088 struct failure_route_rule {
00089         str host; 
00090         str comment; 
00091         str prefix; 
00092         str reply_code;  
00093         int next_domain;  
00094         flag_t flags;  
00095         flag_t mask;  
00096         struct failure_route_rule * next; 
00097 };
00098 
00099 
00124 int add_route_rule(struct route_flags *rf, const str * prefix,
00125                 int max_targets, double prob, const str * rewrite_hostpart, int strip,
00126                 const str * rewrite_local_prefix, const str * rewrite_local_suffix,
00127                 int status, int hash_index, int backup, int * backed_up,
00128                 const str * comment);
00129 
00130 
00136 void destroy_route_rule(struct route_rule * rr);
00137 
00138 
00149 struct route_flags * add_route_flags(struct route_flags **rf_head, const flag_t flags, const flag_t mask);
00150 
00151 
00157 void destroy_route_flags(struct route_flags *rf);
00158 
00159 
00177 struct failure_route_rule *add_failure_route_rule(struct failure_route_rule **frr_head,
00178                 const str * prefix, const str * host, const str * reply_code,
00179                 flag_t flags, flag_t mask, const int next_domain, const str * comment);
00180 
00181 
00187 void destroy_failure_route_rule(struct failure_route_rule * frr);
00188 
00189 struct route_rule * find_rule_by_hash(struct route_flags * rf, int hash);
00190 
00191 struct route_rule * find_rule_by_host(struct route_flags * rf, str * host);
00192 
00193 int add_backup_rule(struct route_rule * rule, struct route_rule * backup);
00194 
00195 int remove_backed_up(struct route_rule * rule);
00196 
00197 struct route_rule * find_auto_backup(struct route_flags * rf, struct route_rule * rule);
00198 
00199 #endif