## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----setup--------------------------------------------------------------------
library(raddr)

## -----------------------------------------------------------------------------
registry <- addr_codes_registry()
nrow(registry)
table(registry$layer)

## -----------------------------------------------------------------------------
registry[registry$layer == "parse", "code"]
registry[registry$layer == "classify", "code"]

## -----------------------------------------------------------------------------
table(registry$layer, registry$strength, useNA = "ifany")

## -----------------------------------------------------------------------------
codes_by_dialect <- function(literal) {
  p <- addr_parse(literal)
  found <- vapply(
    c("strict", "whatwg", "pton", "aton", "getaddrinfo", "curl"),
    function(d) paste(unlist(addr_codes(p, d)), collapse = ", "),
    character(1)
  )
  data.frame(codes = found)
}

## -----------------------------------------------------------------------------
codes_by_dialect("1.2.a.4")

## -----------------------------------------------------------------------------
codes_by_dialect("01.2.3.4")
addr_reading(addr_parse("0177.0.0.1"), "whatwg")
addr_reading(addr_parse("0177.0.0.1"), "pton")

## -----------------------------------------------------------------------------
codes_by_dialect(".1.2.3")

## -----------------------------------------------------------------------------
codes_by_dialect("0x")

## -----------------------------------------------------------------------------
codes_by_dialect("256.1.1.1")
addr_aton(c("127.16777215", "127.16777216", "4294967296"))

## -----------------------------------------------------------------------------
codes_by_dialect("1.2.3")
addr_whatwg("1.2.3")

## -----------------------------------------------------------------------------
codes_by_dialect("1.2.3.4.")
addr_whatwg("1.2.3.4.")

## -----------------------------------------------------------------------------
codes_by_dialect("fe80::1%lo0")
addr_zone(addr_pton("fe80::1%lo0"))

## -----------------------------------------------------------------------------
codes_by_dialect("fe80::1%lo0%en0")

## -----------------------------------------------------------------------------
codes_by_dialect("g::1")
addr_outcome(addr_parse("g::1"), "aton")

## -----------------------------------------------------------------------------
codes_by_dialect(":1")

## -----------------------------------------------------------------------------
codes_by_dialect("::1::2")

## -----------------------------------------------------------------------------
codes_by_dialect("1:2:3:4:5:6:7")

## -----------------------------------------------------------------------------
codes_by_dialect("::ffff:1.2.3.999")
addr_pton("::ffff:1.2.3.04")
addr_strict("::ffff:1.2.3.04")

## -----------------------------------------------------------------------------
codes_by_dialect("1.2.3.4 junk")
addr_curl("1.2.3.4 junk")

## -----------------------------------------------------------------------------
classify <- registry[registry$layer == "classify", ]
classify[c("code", "strength", "rfc")]

## -----------------------------------------------------------------------------
classify_view <- function(literals) {
  d <- as.data.frame(addr_classify(addr_pton(literals)))
  data.frame(
    input = literals,
    category = as.character(d$category),
    block = d$block,
    codes = vapply(d$codes, paste, character(1), collapse = ", ")
  )
}

## -----------------------------------------------------------------------------
classify_view("64:ff9b::a9fe:a9fe")

## -----------------------------------------------------------------------------
classify_view("2002:a00:1::")

## -----------------------------------------------------------------------------
classify_view("2001:0:4136:e378:8000:63bf:f5ff:fffe")
addr_embeddings(addr_pton("2001:0:4136:e378:8000:63bf:f5ff:fffe"))

## -----------------------------------------------------------------------------
classify_view(c("febf::1", "fe80::1"))

## -----------------------------------------------------------------------------
classify_view(c("169.254.255.5", "169.254.1.5"))

## -----------------------------------------------------------------------------
classify_view("::2")

## -----------------------------------------------------------------------------
classify_view("64:ff9b:1::c000:201")

## -----------------------------------------------------------------------------
classify_view(c("fc00::1", "fd00::1"))

## -----------------------------------------------------------------------------
codes_by_dialect("0177.0.0.1")

## -----------------------------------------------------------------------------
unique(registry$since)

