Fastly Compute C++ SDK
Loading...
Searching...
No Matches
fastly::geo::Geo Class Reference

The geographic data associated with a particular IP address. More...

#include <geo.h>

Public Member Functions

std::string as_name ()
uint32_t as_number ()
uint16_t area_code ()
std::string city ()
 City or town name.
ConnSpeed conn_speed ()
 Connection speed.
ConnType conn_type ()
 Connection type.
Continent continent ()
 Continent.
std::string country_code ()
std::string country_code3 ()
std::string country_name ()
double latitude ()
double longitude ()
int64_t metro_code ()
std::string postal_code ()
ProxyDescription proxy_description ()
 Client proxy description.
ProxyType proxy_type ()
 Client proxy type.
std::optional< std::string > region ()
std::optional< UtcOffsetutc_offset ()

Friends

fastly::expected< std::optional< Geo > > geo_lookup (std::string_view ip)

Detailed Description

The geographic data associated with a particular IP address.

Member Function Documentation

◆ area_code()

uint16_t fastly::geo::Geo::area_code ( )

The telephone area code associated with an IP address.

These are only available for IP addresses in the United States, its territories, and Canada.

◆ as_name()

std::string fastly::geo::Geo::as_name ( )

The name of the organization associated with as_number.

For example, fastly is the value given for IP addresses under AS-54113.

◆ as_number()

uint32_t fastly::geo::Geo::as_number ( )

Autonomous system (AS) number.

◆ city()

std::string fastly::geo::Geo::city ( )

City or town name.

◆ conn_speed()

ConnSpeed fastly::geo::Geo::conn_speed ( )

Connection speed.

◆ conn_type()

ConnType fastly::geo::Geo::conn_type ( )

Connection type.

◆ continent()

Continent fastly::geo::Geo::continent ( )

Continent.

◆ country_code()

std::string fastly::geo::Geo::country_code ( )

A two-character ISO 3166-1 country code for the country associated with an IP address.

The US country code is returned for IP addresses associated with overseas United States military bases.

These values include subdivisions that are assigned their own country codes in ISO 3166-1. For example, subdivisions NO-21 and NO-22 are presented with the country code SJ for Svalbard and the Jan Mayen Islands.

◆ country_code3()

std::string fastly::geo::Geo::country_code3 ( )

A three-character ISO 3166-1 alpha-3 country code for the country associated with the IP address.

The USA country code is returned for IP addresses associated with overseas United States military bases.

◆ country_name()

std::string fastly::geo::Geo::country_name ( )

Country name.

This field is the ISO 3166-1 English short name for a country.

◆ latitude()

double fastly::geo::Geo::latitude ( )

Latitude, in units of degrees from the equator.

Values range from -90.0 to +90.0 inclusive, and are based on the WGS 84 coordinate reference system.

◆ longitude()

double fastly::geo::Geo::longitude ( )

Longitude, in units of degrees from the IERS Reference Meridian.

Values range from -180.0 to +180.0 inclusive, and are based on the WGS 84 coordinate reference system.

◆ metro_code()

int64_t fastly::geo::Geo::metro_code ( )

Metro code, representing designated market areas (DMAs) in the United States.

◆ postal_code()

std::string fastly::geo::Geo::postal_code ( )

The postal code associated with the IP address.

These are available for some IP addresses in Australia, Canada, France, Germany, Italy, Spain, Switzerland, the United Kingdom, and the United States.

For Canadian postal codes, this is the first 3 characters. For the United Kingdom, this is the first 2-4 characters (outward code). For countries with alphanumeric postal codes, this field is a lowercase transliteration.

◆ proxy_description()

ProxyDescription fastly::geo::Geo::proxy_description ( )

Client proxy description.

◆ proxy_type()

ProxyType fastly::geo::Geo::proxy_type ( )

Client proxy type.

◆ region()

std::optional< std::string > fastly::geo::Geo::region ( )

ISO 3166-2 country subdivision code.

For countries with multiple levels of subdivision (for example, nations within the United Kingdom), this variable gives the more specific subdivision.

This field can be std::nullopt for countries that do not have ISO country subdivision codes. For example, std::nullopt is given for IP addresses assigned to the Åland Islands (country code AX, illustrated below).

Examples

Region values are the subdivision part only. For typical use, a subdivision is normally formatted with its associated country code. The following example illustrates constructing an ISO 3166-2 two-part country and subdivision code from the respective fields:

auto
auto geo{fastly::geo::geo_lookup(client_ip).value()};
if (auto region = geo.region()) {
return std::format("{}-{}", geo.country_code(), region.value());
} else {
return geo.country_code();
}
static Request from_client()
std::optional< std::string > region()
std::optional< std::string > get_client_ip_addr()
Definition geo.h:10
fastly::expected< std::optional< Geo > > geo_lookup(std::string_view ip)
code Region Name Country ISO 3166-2 subdivision
AX Ödkarby Åland Islands (none)
DE-BE Berlin Germany Land (State)
GB-BNH Brighton and Hove United Kingdom Unitary authority
JP-13 東京都 (Tōkyō-to) Japan Prefecture
RU-MOW Москва́ (Moscow) Russian Federation Federal city
SE-AB Stockholms län Sweden Län (County)
US-CA California United States State

◆ utc_offset()

std::optional< UtcOffset > fastly::geo::Geo::utc_offset ( )

Time zone offset from coordinated universal time (UTC) for city.

Returns std::nullopt if the geolocation database does not have a time zone offset for this IP address.

◆ geo_lookup

fastly::expected< std::optional< Geo > > geo_lookup ( std::string_view ip)
friend

Look up the geographic data associated with a particular IP address.

Returns std::nullopt if no geographic data is available, such as when the IP address is reserved for private use.

Examples

To get geographic information for the downstream client:

auto geo{fastly::geo::geo_lookup(client_ip).value()};
if (geo.conn_type() == fastly::geo::ConnType::Satellite) {
std::cout << "receiving a request from outer space 🛸";
}

The documentation for this class was generated from the following file: