/*
* Copyright (c) 2005, Bruno Randolf <bruno.randolf@4g-systems.biz>
* Copyright (c) 2004, Andreas Tønnesen(andreto-at-olsr.org)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * Neither the name of the UniK olsr daemon nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* $Id: nameservice.h,v 1.14 2007/10/05 20:24:47 bernd67 Exp $ */
/*
* Dynamic linked library for UniK OLSRd
*/
#ifndef _NAMESERVICE_PLUGIN
#define _NAMESERVICE_PLUGIN
#include <sys/time.h>
#include <regex.h>
#include "olsr_types.h"
#include "interfaces.h"
#include "olsr_protocol.h"
#include "olsrd_plugin.h"
#include "nameservice_msg.h"
#define PLUGIN_NAME "OLSRD nameservice plugin"
#define PLUGIN_VERSION "0.3"
#define PLUGIN_AUTHOR "Bruno Randolf, Jens Nachtigall, Sven-Ola"
// useful to set for the freifunkfirmware to remove all
// calls to olsr_printf by the empty statement ";"
//#define olsr_printf(...) ;
#define MESSAGE_TYPE 130
#define PARSER_TYPE MESSAGE_TYPE
#define EMISSION_INTERVAL 120 /* two minutes */
#define NAME_VALID_TIME 1800 /* half one hour */
#define NAMESERVER_COUNT 3
#define NAME_PROTOCOL_VERSION 1
#define MAX_NAME 127
#define MAX_FILE 255
#define MAX_SUFFIX 63
/**
* a linked list of name_entry
* if type is NAME_HOST, name is a hostname and ip its IP addr
* if type is NAME_FORWARDER, then ip is a dns-server (and name is irrelevant)
* if type is NAME_SERVICE, then name is a service-line (and the ip is irrelevant)
* if type is NAME_LATLON, then name has 2 floats with lat and lon (and the ip is irrelevant)
*/
struct name_entry
{
union olsr_ip_addr ip;
olsr_u16_t type;
olsr_u16_t len;
char *name;
struct name_entry *next; /* linked list */
};
/* *
* linked list of db_entries for each originator with
* originator being its main_addr
*
* names points to the name_entry with its hostname, dns-server or
* service-line entry
*
* all the db_entries are hashed in nameservice.c to avoid a too long list
* for many nodes in a net
*
* */
struct db_entry
{
union olsr_ip_addr originator; /* IP address of the node this entry describes */
struct timeval timer; /* Validity time */
struct name_entry *names; /* list of names this originator declares */
struct db_entry *next; /* linked list */
};
/* Timeout function to register with the sceduler */
void
olsr_timeout(void);
/* Parser function to register with the sceduler */
void
olsr_parser(union olsr_message *, struct interface *, union olsr_ip_addr *);
/* Event function to register with the sceduler */
void
olsr_event(void *);
int
encap_namemsg(struct namemsg *);
struct name_entry*
add_name_to_list(struct name_entry *my_list, const char *value, int type, const union olsr_ip_addr *ip);
struct name_entry*
remove_nonvalid_names_from_list(struct name_entry *my_list, int type);
void
free_all_list_entries(struct db_entry **this_db_list) ;
void
timeout_old_names(struct db_entry **this_list, olsr_bool *this_table_changed);
void
decap_namemsg(struct name *from_packet, struct name_entry **to, olsr_bool *this_table_changed );
void
insert_new_name_in_list(union olsr_ip_addr *originator, struct db_entry **this_list, struct name *from_packet, olsr_bool *this_table_changed, double vtime);
olsr_bool
allowed_hostname_or_ip_in_service(char *service_line, regmatch_t *hostname_or_ip);
void
update_name_entry(union olsr_ip_addr *, struct namemsg *, int, double);
void
write_hosts_file(void);
void
write_services_file(void);
void
write_resolv_file(void);
int
register_olsr_param(char *key, char *value);
void
free_name_entry_list(struct name_entry **list);
olsr_bool
allowed_ip(union olsr_ip_addr *addr);
olsr_bool
allowed_service(char *service_line);
olsr_bool
is_name_wellformed(char *service_line);
olsr_bool
is_service_wellformed(char *service_line);
olsr_bool
is_service_wellformed(char *service_line);
olsr_bool
is_latlon_wellformed(char *latlon_line);
olsr_bool
get_isdefhna_latlon(void);
void
lookup_defhna_latlon(union olsr_ip_addr *ip);
char*
lookup_name_latlon(union olsr_ip_addr *ip);
void
write_latlon_file(void);
char*
create_packet(struct name *to, struct name_entry *from);
void
name_constructor(void);
void
name_destructor(void);
int
name_init(void);
#endif
syntax highlighted by Code2HTML, v. 0.9.1