<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--  This file is generated by Nim. -->
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>libp2p/observedaddrmanager</title>

<!-- Favicon -->
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">

<!-- CSS -->
<link rel="stylesheet" type="text/css" href="../nimdoc.out.css">

<!-- JS -->
<script type="text/javascript" src="../dochack.js"></script>
</head>
<body>
  <div class="document" id="documentId">
    <div class="container">
      <h1 class="title">libp2p/observedaddrmanager</h1>
      <div class="row">
  <div class="three columns">
    <div class="theme-select-wrapper">
      <label for="theme-select">Theme:&nbsp;</label>
      <select id="theme-select" onchange="setTheme(this.value)">
        <option value="auto">🌗 Match OS</option>
        <option value="dark">🌑 Dark</option>
        <option value="light">🌕 Light</option>
      </select>
    </div>
    <div id="global-links">
      <ul class="simple">
        <li><a id="indexLink" href="../theindex.html">Index</a></li>
      </ul>
    </div>
    <div id="searchInputDiv">
      Search: <input type="search" id="searchInput" onkeyup="search()"/>
    </div>
    <div>
      Group by:
      <select onchange="groupBy(this.value)">
        <option value="section">Section</option>
        <option value="type">Type</option>
      </select>
    </div>
    <script type="text/javascript">
function main2() {
	// Create the slider
	var firstSlider = document.getElementsByClassName("theme-switch-wrapper")[0];
	var newSlider = document.createRange().createContextualFragment(`
<div class="theme-switch-wrapper">
    <label class="theme-switch" for="internalcheckbox">
      <input type="checkbox" id="internalcheckbox">
      <div class="slider round"></div>
    </label>
    &nbsp;&nbsp;&nbsp; <em>Internal</em>
</div>
`);

	var sliderInst = firstSlider.after(newSlider);

	// Restore slider state from storage
	var currentMode = localStorage.getItem('privateMode');
	if (currentMode == "private") {
		document.getElementById("internalcheckbox").checked = true;
	} else {
		hidePrivateProcs();
	}

	document.getElementById("internalcheckbox").onclick = togglePrivateProcs;
}

function hidePrivateProcs() {
	var toHide = document.getElementsByClassName("tohide");
	for (var i = 0; i < toHide.length; i++) {
		var pragmas = toHide[i].querySelectorAll("span.Identifier");
		var public = false;
		for (var z = 0; z < pragmas.length; z++) {
			if (pragmas[z].innerText == "public") {
				public = true;
				break;
			}
		}
		if (public == false) {
			toHide[i].style.display = "none";
			toHide[i].classList.add("hidden");
			links = document.querySelectorAll("a[href='#" + encodeURIComponent(toHide[i].id) + "']");
			for (var y = 0; y < links.length; y++) {
				links[y].parentNode.style.display = "none";
				links[y].parentNode.classList.add("hidden");
			}
		}
	}

	// TOC
	var nestedSections = document.getElementsByClassName("nested-toc-section");
	for (var i = 0; i < nestedSections.length; i++) {
		if (nestedSections[i].querySelectorAll("li:not(.hidden)").length == 0) {
			nestedSections[i].style.display = "none";
			nestedSections[i].classList.add("hidden");
		}
	}

	var sections = document.getElementsByClassName("simple-toc-section");
	for (var i = 0; i < sections.length; i++) {
		if (sections[i].querySelectorAll(".nested-toc-section:not(.hidden)").length == 0) {
			sections[i].parentNode.style.display = "none";
			sections[i].parentNode.classList.add("hidden");
		}

	}

	// Sections
	var sections = document.getElementsByClassName("section");
	for (var i = 0; i < sections.length; i++) {
		if (sections[i].querySelectorAll(".item > div").length == 0) continue;
		if (sections[i].querySelectorAll(".item > div:not(.hidden)").length == 0) {
			sections[i].style.display = "none";
			sections[i].classList.add("hidden");
		}

	}
}

function showPrivateProcs() {
	var toHide = Array.from(document.getElementsByClassName("hidden"));
	for (var i = 0; i < toHide.length; i++) {
		toHide[i].style.display = "";
		toHide[i].classList.remove("hidden");
	}
}

function togglePrivateProcs() {
	if (document.getElementById("internalcheckbox").checked) {
		localStorage.setItem('privateMode', 'private');
		showPrivateProcs();
	} else {
		localStorage.setItem('privateMode', 'public');
		hidePrivateProcs();
	}
}
window.addEventListener("DOMContentLoaded", main2);
</script>
<ul class="simple simple-toc" id="toc-list">
<li>
  <a class="reference reference-toplevel" href="#6" id="56">Imports</a>
</li>
<li>
  <details open>
    <summary><a class="reference reference-toplevel" href="#7" id="57">Types</a></summary>
    <ul class="simple simple-toc-section">
      <li><a class="reference" href="#ObservedAddrManager" title="ObservedAddrManager = ref object of RootObj">ObservedAddrManager</a></li>

    </ul>
  </details>
</li>
<li>
  <details open>
    <summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
    <ul class="simple simple-toc-section">
      <ul class="simple nested-toc-section">$
  <li><a class="reference" href="#%24%2CObservedAddrManager" title="`$`(self: ObservedAddrManager): string">`$`(self: ObservedAddrManager): string</a></li>

</ul>
<ul class="simple nested-toc-section">addObservation
  <li><a class="reference" href="#addObservation%2CObservedAddrManager%2CMultiAddress" title="addObservation(self: ObservedAddrManager; observedAddr: MultiAddress): bool">addObservation(self: ObservedAddrManager; observedAddr: MultiAddress): bool</a></li>

</ul>
<ul class="simple nested-toc-section">getMostObservedProtosAndPorts
  <li><a class="reference" href="#getMostObservedProtosAndPorts%2CObservedAddrManager" title="getMostObservedProtosAndPorts(self: ObservedAddrManager): seq[MultiAddress]">getMostObservedProtosAndPorts(self: ObservedAddrManager): seq[MultiAddress]</a></li>

</ul>
<ul class="simple nested-toc-section">guessDialableAddr
  <li><a class="reference" href="#guessDialableAddr%2CObservedAddrManager%2CMultiAddress" title="guessDialableAddr(self: ObservedAddrManager; ma: MultiAddress): MultiAddress">guessDialableAddr(self: ObservedAddrManager; ma: MultiAddress): MultiAddress</a></li>

</ul>
<ul class="simple nested-toc-section">new
  <li><a class="reference" href="#new%2Ctypedesc%5BObservedAddrManager%5D%2Cint%2Cint" title="new(T: typedesc[ObservedAddrManager]; maxSize = 10; minCount = 3): T:type">new(T: typedesc[ObservedAddrManager]; maxSize = 10; minCount = 3): T:type</a></li>

</ul>

    </ul>
  </details>
</li>

</ul>

  </div>
  <div class="nine columns" id="content">
    <a href="https://github.com/status-im/nim-libp2p/tree/staggertcplinux/libp2p/observedaddrmanager.nim#L1" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
<a href="https://github.com/status-im/nim-libp2p/edit/devel/libp2p/observedaddrmanager.nim#L1" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;

    <div id="tocRoot"></div>
    
    <p class="module-desc"></p>
    <div class="section" id="6">
  <h1><a class="toc-backref" href="#6">Imports</a></h1>
  <dl class="item">
    <a class="reference external" href="multiaddress.html">multiaddress</a>, <a class="reference external" href="multicodec.html">multicodec</a>
  </dl>
</div>
<div class="section" id="7">
  <h1><a class="toc-backref" href="#7">Types</a></h1>
  <dl class="item">
    <div id="ObservedAddrManager" class="tohide">
<dt><pre><a href="observedaddrmanager.html#ObservedAddrManager"><span class="Identifier">ObservedAddrManager</span></a> <span class="Other">=</span> <span class="Keyword">ref</span> <span class="Keyword">object</span> <span class="Keyword">of</span> <span class="Identifier">RootObj</span>
  </pre></dt>
<dd>


<a href="https://github.com/status-im/nim-libp2p/tree/staggertcplinux/libp2p/observedaddrmanager.nim#L18" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
<a href="https://github.com/status-im/nim-libp2p/edit/devel/libp2p/observedaddrmanager.nim#L18" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;

</dd>
</div>

  </dl>
</div>
<div class="section" id="12">
  <h1><a class="toc-backref" href="#12">Procs</a></h1>
  <dl class="item">
    <div id="$-procs-all">
  <div id="$,ObservedAddrManager" class="tohide">
<dt><pre><span class="Keyword">proc</span> <a href="#%24%2CObservedAddrManager"><span class="Identifier">`$`</span></a><span class="Other">(</span><span class="Identifier">self</span><span class="Other">:</span> <a href="observedaddrmanager.html#ObservedAddrManager"><span class="Identifier">ObservedAddrManager</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span>
    <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>

Returns a string representation of the ObservedAddrManager.
<a href="https://github.com/status-im/nim-libp2p/tree/staggertcplinux/libp2p/observedaddrmanager.nim#L74" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
<a href="https://github.com/status-im/nim-libp2p/edit/devel/libp2p/observedaddrmanager.nim#L74" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;

</dd>
</div>

</div>
<div id="addObservation-procs-all">
  <div id="addObservation,ObservedAddrManager,MultiAddress" class="tohide">
<dt><pre><span class="Keyword">proc</span> <a href="#addObservation%2CObservedAddrManager%2CMultiAddress"><span class="Identifier">addObservation</span></a><span class="Other">(</span><span class="Identifier">self</span><span class="Other">:</span> <a href="observedaddrmanager.html#ObservedAddrManager"><span class="Identifier">ObservedAddrManager</span></a><span class="Other">;</span> <span class="Identifier">observedAddr</span><span class="Other">:</span> <a href="multiaddress.html#MultiAddress"><span class="Identifier">MultiAddress</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">bool</span> {.
    <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>

Adds a new observed MultiAddress. If the number of observations exceeds maxSize, the oldest one is removed.
<a href="https://github.com/status-im/nim-libp2p/tree/staggertcplinux/libp2p/observedaddrmanager.nim#L23" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
<a href="https://github.com/status-im/nim-libp2p/edit/devel/libp2p/observedaddrmanager.nim#L23" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;

</dd>
</div>

</div>
<div id="getMostObservedProtosAndPorts-procs-all">
  <div id="getMostObservedProtosAndPorts,ObservedAddrManager" class="tohide">
<dt><pre><span class="Keyword">proc</span> <a href="#getMostObservedProtosAndPorts%2CObservedAddrManager"><span class="Identifier">getMostObservedProtosAndPorts</span></a><span class="Other">(</span><span class="Identifier">self</span><span class="Other">:</span> <a href="observedaddrmanager.html#ObservedAddrManager"><span class="Identifier">ObservedAddrManager</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><a href="multiaddress.html#MultiAddress"><span class="Identifier">MultiAddress</span></a><span class="Other">]</span> {.
    <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>

Returns the most observed IP4/Port and IP6/Port address or an empty seq if the number of observations are less than minCount.
<a href="https://github.com/status-im/nim-libp2p/tree/staggertcplinux/libp2p/observedaddrmanager.nim#L51" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
<a href="https://github.com/status-im/nim-libp2p/edit/devel/libp2p/observedaddrmanager.nim#L51" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;

</dd>
</div>

</div>
<div id="guessDialableAddr-procs-all">
  <div id="guessDialableAddr,ObservedAddrManager,MultiAddress" class="tohide">
<dt><pre><span class="Keyword">proc</span> <a href="#guessDialableAddr%2CObservedAddrManager%2CMultiAddress"><span class="Identifier">guessDialableAddr</span></a><span class="Other">(</span><span class="Identifier">self</span><span class="Other">:</span> <a href="observedaddrmanager.html#ObservedAddrManager"><span class="Identifier">ObservedAddrManager</span></a><span class="Other">;</span> <span class="Identifier">ma</span><span class="Other">:</span> <a href="multiaddress.html#MultiAddress"><span class="Identifier">MultiAddress</span></a><span class="Other">)</span><span class="Other">:</span> <a href="multiaddress.html#MultiAddress"><span class="Identifier">MultiAddress</span></a> {.
    <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>

Replaces the first proto value of each listen address by the corresponding (matching the proto code) most observed value. If the most observed value is not available, the original MultiAddress is returned.
<a href="https://github.com/status-im/nim-libp2p/tree/staggertcplinux/libp2p/observedaddrmanager.nim#L61" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
<a href="https://github.com/status-im/nim-libp2p/edit/devel/libp2p/observedaddrmanager.nim#L61" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;

</dd>
</div>

</div>
<div id="new-procs-all">
  <div id="new,typedesc[ObservedAddrManager],int,int" class="tohide">
<dt><pre><span class="Keyword">proc</span> <a href="#new%2Ctypedesc%5BObservedAddrManager%5D%2Cint%2Cint"><span class="Identifier">new</span></a><span class="Other">(</span><span class="Identifier">T</span><span class="Other">:</span> <span class="Identifier">typedesc</span><span class="Other">[</span><a href="observedaddrmanager.html#ObservedAddrManager"><span class="Identifier">ObservedAddrManager</span></a><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">maxSize</span> <span class="Other">=</span> <span class="DecNumber">10</span><span class="Other">;</span> <span class="Identifier">minCount</span> <span class="Other">=</span> <span class="DecNumber">3</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T:type</span> {.
    <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>

Creates a new ObservedAddrManager.
<a href="https://github.com/status-im/nim-libp2p/tree/staggertcplinux/libp2p/observedaddrmanager.nim#L78" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
<a href="https://github.com/status-im/nim-libp2p/edit/devel/libp2p/observedaddrmanager.nim#L78" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;

</dd>
</div>

</div>

  </dl>
</div>

  </div>
</div>

      <div class="twelve-columns footer">
        <span class="nim-sprite"></span>
        <br>
        <small style="color: var(--hint);">Made with Nim. Generated: 2023-09-18 14:31:11 UTC</small>
      </div>
    </div>
  </div>
  
  <!-- Google fonts -->
  <link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
  <link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
</body>
</html>