From 77f64f76bd502ba8350a64fd29623e3af92e5586 Mon Sep 17 00:00:00 2001 From: Alex Polcyn Date: Thu, 1 Mar 2018 19:22:53 +0000 Subject: Put address_sorting's public header under its own directory. Also add test_only to sort function used in test. --- third_party/address_sorting/BUILD | 4 +- third_party/address_sorting/address_sorting.h | 110 --------------------- .../address_sorting/address_sorting_internal.h | 3 +- .../include/address_sorting/address_sorting.h | 110 +++++++++++++++++++++ 4 files changed, 114 insertions(+), 113 deletions(-) delete mode 100644 third_party/address_sorting/address_sorting.h create mode 100644 third_party/address_sorting/include/address_sorting/address_sorting.h (limited to 'third_party') diff --git a/third_party/address_sorting/BUILD b/third_party/address_sorting/BUILD index defa0851aa..7d5fb9d7ed 100644 --- a/third_party/address_sorting/BUILD +++ b/third_party/address_sorting/BUILD @@ -50,11 +50,11 @@ address_sorting_cc_library( "address_sorting_windows.c", ], hdrs = [ - "address_sorting.h", + "include/address_sorting/address_sorting.h", "address_sorting_internal.h", ], copts = ["-std=c99"], includes = [ - ".", + "include", ], ) diff --git a/third_party/address_sorting/address_sorting.h b/third_party/address_sorting/address_sorting.h deleted file mode 100644 index f11cd424b5..0000000000 --- a/third_party/address_sorting/address_sorting.h +++ /dev/null @@ -1,110 +0,0 @@ -/* $NetBSD: getaddrinfo.c,v 1.82 2006/03/25 12:09:40 rpaulo Exp $ */ -/* $KAME: getaddrinfo.c,v 1.29 2000/08/31 17:26:57 itojun Exp $ */ -/* - * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 3. Neither the name of the project 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 PROJECT 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 PROJECT 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. - * - */ - -/* - * This is an adaptation of Android's implementation of RFC 6724 - * (in Android's getaddrinfo.c). It has some cosmetic differences - * from Android's getaddrinfo.c, but Android's getaddrinfo.c was - * used as a guide or example of a way to implement the RFC 6724 spec when - * this was written. - */ - -#ifndef ADDRESS_SORTING_H -#define ADDRESS_SORTING_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct address_sorting_address { - char addr[128]; - size_t len; -} address_sorting_address; - -/* address_sorting_sortable represents one entry in a list of destination - * IP addresses to sort. It contains the destination IP address - * "sorting key", along with placeholder and scratch fields. */ -typedef struct address_sorting_sortable { - // input data; sorting key - address_sorting_address dest_addr; - // input data; optional value to attach to the sorting key - void* user_data; - // internal fields, these must be zero'd when passed to sort function - address_sorting_address source_addr; - bool source_addr_exists; - size_t original_index; -} address_sorting_sortable; - -void address_sorting_rfc_6724_sort(address_sorting_sortable* sortables, - size_t sortables_len); - -void address_sorting_init(); -void address_sorting_shutdown(); - -struct address_sorting_source_addr_factory; - -/* The interfaces below are exposed only for testing */ -typedef struct { - /* Gets the source address that would be used for the passed-in destination - * address, and fills in *source_addr* with it if one exists. - * Returns true if a source address exists for the destination address, - * and false otherwise. */ - bool (*get_source_addr)(struct address_sorting_source_addr_factory* factory, - const address_sorting_address* dest_addr, - address_sorting_address* source_addr); - void (*destroy)(struct address_sorting_source_addr_factory* factory); -} address_sorting_source_addr_factory_vtable; - -typedef struct address_sorting_source_addr_factory { - const address_sorting_source_addr_factory_vtable* vtable; -} address_sorting_source_addr_factory; - -/* Platform-compatible address family types */ -typedef enum { - ADDRESS_SORTING_AF_INET, - ADDRESS_SORTING_AF_INET6, - ADDRESS_SORTING_UNKNOWN_FAMILY, -} address_sorting_family; - -/* Indicates whether the address is AF_INET, AF_INET6, or another address - * family. */ -address_sorting_family address_sorting_abstract_get_family( - const address_sorting_address* address); - -void address_sorting_override_source_addr_factory_for_testing( - address_sorting_source_addr_factory* factory); - -#ifdef __cplusplus -} -#endif - -#endif // ADDRESS_SORTING_H diff --git a/third_party/address_sorting/address_sorting_internal.h b/third_party/address_sorting/address_sorting_internal.h index 3966002b47..be59d44fee 100644 --- a/third_party/address_sorting/address_sorting_internal.h +++ b/third_party/address_sorting/address_sorting_internal.h @@ -61,7 +61,8 @@ #endif #include -#include "address_sorting.h" + +#include address_sorting_source_addr_factory* address_sorting_create_source_addr_factory_for_current_platform(); diff --git a/third_party/address_sorting/include/address_sorting/address_sorting.h b/third_party/address_sorting/include/address_sorting/address_sorting.h new file mode 100644 index 0000000000..f11cd424b5 --- /dev/null +++ b/third_party/address_sorting/include/address_sorting/address_sorting.h @@ -0,0 +1,110 @@ +/* $NetBSD: getaddrinfo.c,v 1.82 2006/03/25 12:09:40 rpaulo Exp $ */ +/* $KAME: getaddrinfo.c,v 1.29 2000/08/31 17:26:57 itojun Exp $ */ +/* + * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the project 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 PROJECT 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 PROJECT 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. + * + */ + +/* + * This is an adaptation of Android's implementation of RFC 6724 + * (in Android's getaddrinfo.c). It has some cosmetic differences + * from Android's getaddrinfo.c, but Android's getaddrinfo.c was + * used as a guide or example of a way to implement the RFC 6724 spec when + * this was written. + */ + +#ifndef ADDRESS_SORTING_H +#define ADDRESS_SORTING_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct address_sorting_address { + char addr[128]; + size_t len; +} address_sorting_address; + +/* address_sorting_sortable represents one entry in a list of destination + * IP addresses to sort. It contains the destination IP address + * "sorting key", along with placeholder and scratch fields. */ +typedef struct address_sorting_sortable { + // input data; sorting key + address_sorting_address dest_addr; + // input data; optional value to attach to the sorting key + void* user_data; + // internal fields, these must be zero'd when passed to sort function + address_sorting_address source_addr; + bool source_addr_exists; + size_t original_index; +} address_sorting_sortable; + +void address_sorting_rfc_6724_sort(address_sorting_sortable* sortables, + size_t sortables_len); + +void address_sorting_init(); +void address_sorting_shutdown(); + +struct address_sorting_source_addr_factory; + +/* The interfaces below are exposed only for testing */ +typedef struct { + /* Gets the source address that would be used for the passed-in destination + * address, and fills in *source_addr* with it if one exists. + * Returns true if a source address exists for the destination address, + * and false otherwise. */ + bool (*get_source_addr)(struct address_sorting_source_addr_factory* factory, + const address_sorting_address* dest_addr, + address_sorting_address* source_addr); + void (*destroy)(struct address_sorting_source_addr_factory* factory); +} address_sorting_source_addr_factory_vtable; + +typedef struct address_sorting_source_addr_factory { + const address_sorting_source_addr_factory_vtable* vtable; +} address_sorting_source_addr_factory; + +/* Platform-compatible address family types */ +typedef enum { + ADDRESS_SORTING_AF_INET, + ADDRESS_SORTING_AF_INET6, + ADDRESS_SORTING_UNKNOWN_FAMILY, +} address_sorting_family; + +/* Indicates whether the address is AF_INET, AF_INET6, or another address + * family. */ +address_sorting_family address_sorting_abstract_get_family( + const address_sorting_address* address); + +void address_sorting_override_source_addr_factory_for_testing( + address_sorting_source_addr_factory* factory); + +#ifdef __cplusplus +} +#endif + +#endif // ADDRESS_SORTING_H -- cgit v1.2.3