diff options
Diffstat (limited to 'libparc/parc/algol/parc_Network.h')
-rw-r--r-- | libparc/parc/algol/parc_Network.h | 299 |
1 files changed, 0 insertions, 299 deletions
diff --git a/libparc/parc/algol/parc_Network.h b/libparc/parc/algol/parc_Network.h deleted file mode 100644 index bf7cfcbd..00000000 --- a/libparc/parc/algol/parc_Network.h +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright (c) 2017 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file parc_Network.h - * @ingroup networking - * @brief Basic Networking Support - * - */ -#ifndef libparc_parc_Networking_h -#define libparc_parc_Networking_h - -#include <arpa/inet.h> -#include <netinet/in.h> - -#include <parc/algol/parc_BufferComposer.h> -#include <parc/algol/parc_Buffer.h> - -#ifndef INPORT_ANY -#define INPORT_ANY 0 -#endif - -#ifdef __ANDROID__ -typedef uint16_t in_port_t; -#endif - -/** - * Parses any string in to an address, if possible - * - * The string may be an IPv6, IPv6 or hostname. If the string does not match an IPv4 or IPv6 nominal format, - * it will try to resolve the string as a hostname. If that fails, the function will return NULL. - * - * IMPORTANT: the returned pointer is allocated with <code>parcMemory_Allocate()</code> and you must use <code>parcMemory_Deallocate()</code>. - * - * @param [in] address An IPv4, IPv6, or hostname - * @param [in] port the port address - * - * @return NULL Could not parse the address or resolve as a hostname - * @return non-NULL a valid sockaddr. You shoule examine `sockaddr->sa_family` to determine IPv4 or IPv6. - * - * Example: - * @code - * { - * struct sockaddr *addr; - * addr = parcNetwork_SockAddress("1.2.3.4", 555); - * parcAssertTrue(addr && addr->sa_family == AF_INET, "Addr not IPv4 for a dotted quad."); - * struct sockaddr_in *addr_in = (struct sockaddr_in *) addr; - * // ... - * parcMemory_Deallocate((void **)&addr); - * - * addr = parcNetwork_SockAddress("fe80::aa20:66ff:fe00:314a", 555); - * parcAssertTrue(addr && addr->sa_family == AF_INET6, "Addr not IPv6."); - * struct sockaddr_in6 *addr_in6 = (struct sockaddr_in6 *) addr; - * // ... - * parcMemory_Deallocate((void **)&addr); - * - * addr = parcNetwork_SockAddress("alpha.parc.com", 555); - * parcAssertTrue(addr && addr->sa_family == AF_INET, "Addr not IPv4 hostname with only ipv4 address."); - * // ... - * parcMemory_Deallocate((void **)&addr); - * - * addr = parcNetwork_SockAddress("Over the rainbow, way up high", 555); - * parcAssertNull(addr, "Addr no null for bogus name."); - * - * } - * @endcode - */ -struct sockaddr *parcNetwork_SockAddress(const char *address, in_port_t port); - -/** - * Compose an allocated sockaddr_in structure. - * - * - * @param [in] address An IPv4, IPv6, or hostname - * @param [in] port the port address - * @return A pointer to an allocated struct sockaddr_in which must be freed by <code>parcMemory_Deallocate()</code>, or NULL on error. - * - * Example: - * @code - * <#example#> - * @endcode - */ -struct sockaddr_in *parcNetwork_SockInet4Address(const char *address, in_port_t port); - -/** - * Compose an allocated sockaddr_in6 structure. - * - * - * @param [in] address An IPv4, IPv6, or hostname - * @param [in] port the port address - * @param flowInfo - * @param scopeId - * @return A pointer to an allocated sockaddr_in6 structure that must be freed via parcMemory_Deallocate(), or NULL on error. - * - * Example: - * @code - * <#example#> - * @endcode - */ -struct sockaddr_in6 *parcNetwork_SockInet6Address(const char *address, in_port_t port, uint32_t flowInfo, uint32_t scopeId); - -/** - * Allocate a struct sockaddr_in - * - * @return A pointer to an allocated struct sockaddr_in which must be freed by {@link parcMemory_Deallocate()}, or NULL on error. - * - * Example: - * @code - * <#example#> - * @endcode - */ -struct sockaddr_in *parcNetwork_SockInet4AddressAny(void); - -/** - * Append the string representation of the `struct sockaddr_in` to a {@link PARCBufferComposer}. - * - * The position of the `PARCBufferComposer` is incremented by the number characters necessary to represent the `struct sockaddr_in` - * - * @param [in] address An IPv4, IPv6, or hostname - * @param [in,out] composer The instance of `PARCBufferComposer` to be modified. - * @return return - * - * Example: - * @code - * <#example#> - * @endcode - */ -PARCBufferComposer *parcNetwork_SockInet4Address_BuildString(const struct sockaddr_in *address, PARCBufferComposer *composer); - -/** - * Append the string representation of the `struct sockaddr_in6` to a `PARCBufferComposer`. - * - * The position of the `PARCBufferComposer` is incremented by the number characters necessary to represent the `struct sockaddr_in6` - * - * - * @param [in] address A pointer to the spckaddr_in6 to append. - * @param [in,out] composer a POinter to the `PARCBufferComposer` to modify. - * @return A pointer to the @p composer. - * - * Example: - * @code - * <#example#> - * @endcode - */ -PARCBufferComposer *parcNetwork_SockInet6Address_BuildString(const struct sockaddr_in6 *address, PARCBufferComposer *composer); - -/** - * The standard (IEEE 802) format for printing MAC-48 addresses in human-friendly form is six groups of two hexadecimal digits, - * separated by hyphens (-) or colons (:), in transmission order (e.g. `01-23-45-67-89-ab` or `01:23:45:67:89:ab`). - * This form is also commonly used for EUI-64. - * Another convention used by networking equipment uses three groups of four hexadecimal digits separated by dots (.) - * (e.g. `0123.4567.89ab` ), again in transmission order. - * - * @param [in] address A pointer to the adress of the string. - * @param [in] length The size of the buffer - * @param [in] composer A pointer to the buffer. - * @return A pointer to the `PARCBufferComposer` containing the built string. - * - * Example: - * @code - * <#example#> - * @endcode - */ -PARCBufferComposer *parcNetwork_LinkAddress_BuildString(const unsigned char *address, size_t length, PARCBufferComposer *composer); - -/** - * Parse a link address, expressed as a nul-terminated C string of the form - * `link://` followed by hexadecimal numbers representing single byte values, - * each value separated by either a ':' or '-' character. - * - * The standard (IEEE 802) format for printing MAC-48 addresses in human-friendly form is six groups of two hexadecimal digits, - * separated by hyphens (-) or colons (:), in transmission order (e.g. `01-23-45-67-89-ab` or `01:23:45:67:89:ab`). - * This form is also commonly used for EUI-64. - * - * Another convention used by networking equipment uses three groups of four hexadecimal digits separated by dots (.) - * (e.g. `0123.4567.89ab` ), again in transmission order. - * - * @param address A null-terminated C string of the form `link://` followed single byte values separated by ':' or '-'. - * @return A PARCBuffer instance containing the parsed bytes of the link address. - * - * Example: - * @code - * { - * - * PARCBuffer *address = parcNetwork_ParseLinkAddress("link://32-00-14-06-30-60"); - * - * } - * @endcode - * - * @see parcNetwork_ParseMAC48Address - */ -PARCBuffer *parcNetwork_ParseLinkAddress(const char *address); - -/** - * Parse a MAC-48 address, expressed as a nul-terminated C string of the standard (IEEE 802) - * format for printing MAC-48 addresses in human-friendly form is six groups of two hexadecimal digits, - * separated by hyphens (-) or colons (:), in transmission order (e.g. `01-23-45-67-89-ab` or `01:23:45:67:89:ab`). - * This form is also commonly used for EUI-64. - * - * Another convention used by networking equipment uses three groups of four hexadecimal digits separated by dots (.) - * (e.g. `0123.4567.89ab` ), again in transmission order. - * - * @param [in] address A null-terminated C string of the form `link://` followed single byte values separated by ':' or '-'. - * @param [out] result A pointer to a `PARCBuffer` for the result. - * @return `true` If the address was successfully parsed. - * @return `false` if the address was not successfully parsed. The output PARCBuffer is unmodified. - * - * Example: - * @code - * { - * - * PARCBuffer *address = parcNetwork_ParseMAC48Address("32-00-14-06-30-60"); - * - * } - * @endcode - */ -bool parcNetwork_ParseMAC48Address(const char *address, PARCBuffer *result); - -/** - * Return the address parsed from @p addressURI. - * - * @param [in] addressURI - * @return A pointer to the `sockaddr_in`. - * - * Example: - * @code - * <#example#> - * @endcode - */ -struct sockaddr_in *parcNetwork_ParseInet4Address(const char *addressURI); - -/** - * Determines if a socket is local - * - * A socket is local if: (a) PF_LOCAL/AF_UNIX, or (b) PF_INET and on the 127.0.0.0/8 network, - * or (c) PF_INET6 and equal to the ::1 address. Anything else is considered non-local. - * - * @param [in] sock A socket structure - * - * @return `true` The socket represents a local/loopback address - * @return `false` The socket is not a local/loopback address - * - * Example: - * @code - * { - * struct sockaddr *s = parcNetwork_SockAddress("127.1.1.1", 5900); - * parcAssertTrue(parcNetwork_IsSocketLocal(s), "This will not assert"); - * parcMemory_Deallocate((void **)&s); - * } - * @endcode - */ -bool parcNetwork_IsSocketLocal(struct sockaddr *sock); - -/** - * Return true if two `sockaddr_in` instances are equal. - * - * The equality function that this evaluates must implement the following equivalence relations on non-null instances: - * - * * It is reflexive: for any non-null reference value x, parcNetwork_Inet4Equals(x, x) must return true. - * - * * It is symmetric: for any non-null reference values x and y, parcNetwork_Inet4Equals(x, y) must return true if and only if - * parcNetwork_Inet4Equals(y x) returns true. - * - * * It is transitive: for any non-null reference values x, y, and z, if - * parcNetwork_Inet4Equals(x, y) returns true and - * parcNetwork_Inet4Equals(y, z) returns true, - * then parcNetwork_Inet4Equals(x, z) must return true. - * - * * It is consistent: for any non-null reference values x and y, multiple invocations of parcNetwork_Inet4Equals(x, y) - * consistently return true or consistently return false. - * - * * For any non-null reference value x, equals(x, NULL)) must return false. - * - * @param [in] x A pointer to a struct sockaddr_in instance. - * @param [in] y A pointer to a struct sockaddr_in instance.s - * @return true the given sockaddr_in instances are equal. - * @return false the given sockaddr_in instances are not equal. - * - * Example: - * @code - * { - * <#example#> - * } - * @endcode - */ -bool parcNetwork_Inet4Equals(const struct sockaddr_in *x, const struct sockaddr_in *y); -#endif // libparc_parc_Networking_h |