| // SPDX-License-Identifier: Apache-2.0 |
| // Copyright Apache Software Foundation 2019 |
| /** @file |
| |
| BufferWriter formatting for IP addresses. |
| */ |
| |
| #pragma once |
| |
| #include <iosfwd> |
| #include <netinet/in.h> |
| |
| #include "swoc/swoc_version.h" |
| #include "swoc/bwf_base.h" |
| #include "swoc/swoc_ip.h" |
| |
| namespace swoc { inline namespace SWOC_VERSION_NS { |
| |
| // All of these expect the address to be in network order. |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, sockaddr const *addr); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, in6_addr const &addr); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, sockaddr const *addr); |
| |
| // Use class information for ordering. |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IP4Addr const &addr); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IP6Addr const &addr); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IPAddr const &addr); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IP4Srv const &addr); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IP6Srv const &addr); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IPSrv const &addr); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IP4Range const &range); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IP6Range const &range); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IPRange const &range); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IPNet const &net); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IP4Net const &net); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IP6Net const &net); |
| |
| BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, IPMask const &mask); |
| |
| inline BufferWriter & |
| bwformat(BufferWriter &w, bwf::Spec const &spec, IPEndpoint const &addr) { |
| return bwformat(w, spec, &addr.sa); |
| } |
| |
| /// Buffer space sufficient for printing any basic IP address type. |
| static const size_t IP_STREAM_SIZE = 80; |
| |
| }} // namespace swoc::SWOC_VERSION_NS |
| |
| namespace std { |
| inline ostream & |
| operator<<(ostream &s, swoc::IP4Addr const &addr) { |
| swoc::LocalBufferWriter<swoc::IP_STREAM_SIZE> w; |
| return s << bwformat(w, swoc::bwf::Spec::DEFAULT, addr); |
| } |
| |
| inline ostream & |
| operator<<(ostream &s, swoc::IP6Addr const &addr) { |
| swoc::LocalBufferWriter<swoc::IP_STREAM_SIZE> w; |
| return s << bwformat(w, swoc::bwf::Spec::DEFAULT, addr); |
| } |
| |
| inline ostream & |
| operator<<(ostream &s, swoc::IPAddr const &addr) { |
| swoc::LocalBufferWriter<swoc::IP_STREAM_SIZE> w; |
| return s << bwformat(w, swoc::bwf::Spec::DEFAULT, addr); |
| } |
| |
| inline ostream & |
| operator<<(ostream &s, swoc::IP4Range const &Range) { |
| swoc::LocalBufferWriter<swoc::IP_STREAM_SIZE> w; |
| return s << bwformat(w, swoc::bwf::Spec::DEFAULT, Range); |
| } |
| |
| inline ostream & |
| operator<<(ostream &s, swoc::IP6Range const &Range) { |
| swoc::LocalBufferWriter<swoc::IP_STREAM_SIZE> w; |
| return s << bwformat(w, swoc::bwf::Spec::DEFAULT, Range); |
| } |
| |
| inline ostream & |
| operator<<(ostream &s, swoc::IPRange const &Range) { |
| swoc::LocalBufferWriter<swoc::IP_STREAM_SIZE> w; |
| return s << bwformat(w, swoc::bwf::Spec::DEFAULT, Range); |
| } |
| } // namespace std |