/* * Copyright (C) 1996-2023 The Squid Software Foundation and contributors * * Squid software is distributed under GPLv2+ license and includes * contributions from numerous individuals and organizations. * Please see the COPYING and CONTRIBUTORS files for details. */ // Author: Jens-S. V?ckler // // File: convert.hh // Thu Oct 30 1997 // // (c) 1997 Lehrgebiet Rechnernetze und Verteilte Systeme // Universit?t Hannover, Germany // // Permission to use, copy, modify, distribute, and sell this software // and its documentation for any purpose is hereby granted without fee, // provided that (i) the above copyright notices and this permission // notice appear in all copies of the software and related documentation, // and (ii) the names of the Lehrgebiet Rechnernetze und Verteilte // Systeme and the University of Hannover may not be used in any // advertising or publicity relating to the software without the // specific, prior written permission of Lehrgebiet Rechnernetze und // Verteilte Systeme and the University of Hannover. // // THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, // EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY // WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. // // IN NO EVENT SHALL THE LEHRGEBIET RECHNERNETZE UND VERTEILTE SYSTEME OR // THE UNIVERSITY OF HANNOVER BE LIABLE FOR ANY SPECIAL, INCIDENTAL, // INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT // ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, // ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS // SOFTWARE. // // Revision 1.2 1999/01/19 11:00:50 voeckler // added bool type workaround. // // Revision 1.1 1998/08/13 21:38:04 voeckler // Initial revision // // #ifndef _CONVERT_HH #define _CONVERT_HH #if !defined(__cplusplus) #ifndef HAVE_BOOL #define HAVE_BOOL 1 typedef char bool; #define false 0 #define true 1 #endif #endif /* __cplusplus */ #include #include typedef char HostAddress[16]; // strlen("xxx.xxx.xxx.xxx\0") <= 16 typedef char SockAddress[24]; // strlen("xxx.xxx.xxx.xxx:xxxxx\0" ) < 24 const char* my_inet_ntoa( const struct in_addr& a, HostAddress buffer ); // purpose: thread-safely convert IPv4 address -> ASCII representation // paramtr: a (IN): networked representation of IPv4 address // buffer (OUT): storage area to store representation into. // returns: pointer to buffer // goodies: INADDR_ANY will be converted to "*" const char* my_sock_ntoa( const struct sockaddr_in& a, SockAddress buffer ); // purpose: thread-safely convert IPv4 socket pair into ASCII rep. // paramtr: a (IN): socket_in address // buffer (OUT): storage area to store representation into. // returns: pointer to buffer const char* my_sock_fd2a( int fd, SockAddress buffer, bool peer = true ); // purpose: thread-safely convert IPv4 socket FD associated address // to ASCII representation // paramtr: fd (IN): open socket FD // buffer (OUT): storage area // peer (IN): true, use peer (remote) socket pair // false, use own (local) socket pair // returns: NULL in case of error, or pointer to buffer otherwise // Refer to errno in case of error (usually unconnected fd...) int convertHostname( const char* host, struct in_addr& dst ); // purpose: convert a numeric or symbolic hostname // paramtr: host (IN): host description to convert // dst (OUT): the internet address in network byteorder. // returns: -1 in case of error, see h_errno; 0 otherwise. int convertPortname( const char* port, unsigned short& dst ); // purpose: convert a numeric or symbolic port number // paramtr: port (IN): port description to convert // dst (OUT): port number in network byteorder. // returns: -1 in case of error, see errno; 0 otherwise. #endif // _CONVERT_HH