mirror of
https://github.com/NLnetLabs/unbound.git
synced 2026-01-21 14:12:55 -05:00
And these source files.
git-svn-id: file:///svn/unbound/trunk@4810 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
2f32ef7646
commit
26eaf2d1ee
2 changed files with 139 additions and 0 deletions
78
util/edns.c
Normal file
78
util/edns.c
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* util/edns.c - handle base EDNS options.
|
||||
*
|
||||
* Copyright (c) 2018, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
* 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 NLNET LABS 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
|
||||
* HOLDER 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* This file contains functions for base EDNS options.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "util/config_file.h"
|
||||
#include "util/netevent.h"
|
||||
#include "util/regional.h"
|
||||
#include "util/data/msgparse.h"
|
||||
#include "util/data/msgreply.h"
|
||||
|
||||
static int edns_keepalive(struct edns_data* edns_out, struct edns_data* edns_in,
|
||||
struct comm_point* c, struct regional* region)
|
||||
{
|
||||
if(c->type == comm_udp)
|
||||
return 1;
|
||||
|
||||
if(c->tcp_keepalive ||
|
||||
edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_KEEPALIVE)) {
|
||||
int keepalive = c->tcp_timeout_msec / 100;
|
||||
uint8_t data[2];
|
||||
data[0] = (keepalive >> 8) & 0xff;
|
||||
data[1] = keepalive & 0xff;
|
||||
if(!edns_opt_list_append(&edns_out->opt_list, LDNS_EDNS_KEEPALIVE,
|
||||
sizeof(data), data, region))
|
||||
return 0;
|
||||
c->tcp_keepalive = 1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int apply_edns_options(struct edns_data* edns_out, struct edns_data* edns_in,
|
||||
struct config_file* cfg, struct comm_point* c, struct regional* region)
|
||||
{
|
||||
if(cfg->do_tcp_keepalive &&
|
||||
!edns_keepalive(edns_out, edns_in, c, region))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
61
util/edns.h
Normal file
61
util/edns.h
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* util/edns.h - handle base EDNS options.
|
||||
*
|
||||
* Copyright (c) 2018, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
* 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 NLNET LABS 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
|
||||
* HOLDER 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* This file contains functions for base EDNS options.
|
||||
*/
|
||||
|
||||
#ifndef UTIL_EDNS_H
|
||||
#define UTIL_EDNS_H
|
||||
|
||||
struct edns_data;
|
||||
struct config_file;
|
||||
struct comm_point;
|
||||
struct regional;
|
||||
|
||||
/**
|
||||
* Apply common EDNS options.
|
||||
*
|
||||
* @param edns_out: initialised edns information with outbound edns.
|
||||
* @param edns_in: initialised edns information with received edns.
|
||||
* @param cfg: configuration.
|
||||
* @param c: comm channel.
|
||||
*/
|
||||
int apply_edns_options(struct edns_data* edns_out, struct edns_data* edns_in,
|
||||
struct config_file* cfg, struct comm_point* c, struct regional* region);
|
||||
|
||||
#endif
|
||||
Loading…
Reference in a new issue