djbdnscurve6 53
djbdnscurve6
Loading...
Searching...
No Matches
dns_sortip.c
Go to the documentation of this file.
1#include "byte.h"
2#include "ip.h"
3#include "dns.h"
4
5/* XXX: sort servers by configurable notion of closeness? */
6/* XXX: pay attention to competence of each server? */
7/* XXX: pay attention to qualification (DNSSec, DNSCurve) of each server? */
8/* YYY: we use a randomly sorted list of NS; not depending on answer */
9
10void dns_sortip4(char *s,unsigned int n)
11{
12 unsigned int i;
13 char tmp[4];
14
15 n >>= 2; /* 4 byte per IPv4 address */
16 while (n > 1) {
17 i = dns_random(n);
18 --n;
19 byte_copy(tmp,4,s + (i << 2));
20 byte_copy(s + (i << 2),4,s + (n << 2));
21 byte_copy(s + (n << 2),4,tmp);
22 }
23}
24
25void dns_sortip6(char *s,unsigned int n)
26{
27 unsigned int i;
28 char tmp[16];
29
30 n >>= 4; /* 16 byte per IPv4 address */
31 while (n > 1) {
32 i = dns_random(n);
33 --n;
34 byte_copy(tmp,16,s + (i << 4));
35 byte_copy(s + (i << 4),16,s + (n << 4));
36 byte_copy(s + (n << 4),16,tmp);
37 }
38}
39
40int dns_uniqip4(const char *in,unsigned int n,char *out)
41{
42 unsigned int i, j, k, dup;
43 byte_zero(out,n);
44
45 for (i = k = 0; i < n; i += 4) { // all results
46 dup = 0;
47 for (j = 0; j <= k; j += 4) // saved results
48 if (byte_equal(out + j,4,in + i)) dup = 1;
49 if (!dup) { byte_copy(out + k,4,in + i); k += 4; }
50 }
51
52 return k;
53}
54
55int dns_uniqip6(const char *in,unsigned int n,char *out)
56{
57 unsigned int i, j, k, dup;
58 byte_zero(out,n);
59
60 for (i = k = 0; i < n; i += 16) { // all results
61 dup = 0;
62 for (j = 0; j <= k; j += 16) // saved results
63 if (byte_equal(out + j,16,in + i)) dup = 1;
64 if (!dup) { byte_copy(out + k,16,in + i); k += 16; }
65 }
66
67 return k;
68}
unsigned int dns_random(unsigned int n)
Definition: dns_random.c:55
int dns_uniqip6(const char *in, unsigned int n, char *out)
Definition: dns_sortip.c:55
void dns_sortip4(char *s, unsigned int n)
Definition: dns_sortip.c:10
int dns_uniqip4(const char *in, unsigned int n, char *out)
Definition: dns_sortip.c:40
void dns_sortip6(char *s, unsigned int n)
Definition: dns_sortip.c:25
struct line tmp
Definition: dnsfilter.c:38
void out(const char *s, unsigned int len)
Definition: generic-conf.c:54